Обнаружение сетевых атак – Snort
16.04.2004 | khomya

Программные комплексы, контролирующие содержимое трафика, называются сетевыми системами обнаружения вторжения (Network Intrusion Detection System, сокращенно – NIDS). Они функционируют на сетевом уровне по модели OSI и проводят контроль устанавливаемых соединений, анализ структуры и содержимого сетевых пакетов. Система NIDS анализирует весь проходящий трафик как на отдельном компьютере, так и на выделенном сервере (шлюз, маршрутизатор, зонд). При обнаружении атаки NIDS включает механизм реагирования на данный тип угрозы. Спектр ее возможностей довольно широк: от передачи предупредительных сообщений на рабочую консоль (e-mail, пейджер, телефон, факс) до блокировки учетной записи, разрыва соединения, реконфигурации брандмауэра или маршрутизатора.

Механизм контроля и анализа статистики устанавливаемых соединений позволяет выявить попытку сканирования системы или проведения атаки вида <отказ в обслуживании> (одновременно открывается множество соединений с каким-либо сервисом). Контроль за содержимым трафика реализуется путем поиска определенных последовательностей данных (сигнатур), передаваемых в сетевом пакете. Например, если во время соединения, установленного с Microsoft SQL-сервером, перехвачен пакет, содержащий последовательность данных <81 F1 03 01 04 9B 81 F1 01>, а также строки и , то имеет место попытка эксплуатации <переполнения буфера>. Это уязвимое место обнаружено в Microsoft SQL Server 2000 Resolution Service и Microsoft Desktop Engine (MSDE) 2000. Хотя она известна довольно давно и уже выпущены специальные программные <заплатки>, дебют 25 января 2003 г. сетевого вируса Slammer, использующего его, оказался успешным.

Системы обнаружения вторжения имеют собственную базу знаний, где собраны известные типы сетевых атак. Они также позволяют пользователям разрабатывать и включать новые описания сетевых инцидентов.

Потенциально скользкий момент в работе NIDS – достоверность определения IP-адреса нападающего. Злоумышленнику несложно имитировать атаку со стороны посторонних хостов. Далее по сценарию развития ситуации NIDS определит IP-адреса из сфальсифицированных злоумышленником сетевых пакетов, и в результате будут предприняты карательные действия против <невиновных> хостов. Для повышения надежности защиты необходимо контролировать всю архитектуру сети, размещая зонды (компьютеры с NIDS) в каждом сегменте сети (рис. 1).

Рис. 1. Схема размещения зондов в сети
Рис. 1. Схема размещения зондов в сети

Зонд 1 расположен в зоне максимальной потенциальной сетевой опасности. Здесь анализируется весь входящий и исходящий трафик и велика вероятность большого числа ложных срабатываний. При повышенной нагрузке на сеть возможно возникновение такой ситуации, когда NIDS не сумеет обработать весь поток трафика и произойдет огрубление методов анализа, например, за счет уменьшения числа проверяемых сигнатур.

Зонд 2 анализирует серверный трафик. Здесь входящий трафик отфильтрован межсетевым экраном. При корректно настроенном брандмауэре это более безопасная зона сети. Из-за уменьшения величины трафика число ложных срабатываний сокращается. Зонд 2 должен быть настроен с учетом специфики серверов.

Зонд 3 анализирует трафик локальной сети, теоретически являющейся наиболее защищенной зоной. Следует обращать внимание на любую сетевую активность, отличную от обычной. Число ложных срабатываний в этой зоне должно быть наименьшим, и потому следует уделять большее внимание сообщениям зонда 3.

Продолжим знакомство с сетевыми системами обнаружения вторжений на примере проекта Snort.

Проект Snort
Проект SnortВ рамках проекта Snort происходят разработка, распространение и поддержка одноименной сетевой системы обнаружения вторжений, предназначенной для мониторинга небольших сетей. Система Snort распространяется свободно в исходных текстах или в откомпилированном двоичном формате при условии соблюдения лицензии GNU GPL (General Public License).

Snort позволяет в режиме реального времени анализировать сетевой трафик, проверяя корректность структуры сетевых пакетов и соответствие содержимого определенным правилам. Для описания сетевых инцидентов и определения реакции системы используется гибкий язык сценариев. Встроенная база знаний позволяет определить распространенные типы сетевых нападений: <скрытое> сканирование (использующее установленные в сетевых пакетах флаги FIN, ASK), сбор баннеров сетевых сервисов (Services & OS fingerprinting), переполнение буфера различных сервисов, атаки, использующие преднамеренное нарушение структуры сетевых пакетов (ping of death), атаки вида <отказ в обслуживании> (DOS). Включено описание множества атак, эксплуатирующих определенные <дыры> в различных сетевых сервисах.

При фиксировании системой Snort описанного сетевого инцидента можно, конфигурируя брандмауэр, предотвратить сетевую атаку или передать предупреждающее сообщение через syslog-сервер, определенный пользовательский файл, Unix-сокет или службу Windows WinPopup.

Система Snort способна работать:

  • как пакетный «снифер» (анализатор сетевого трафика, аналог tcpdump);
  • в режиме сохранения информации обо всех переданных и полученных пакетах (удобно для диагностики сети);
  • в качестве полнофункциональной сетевой системы обнаружения вторжения.

Список поддерживаемых системой Snort операционных систем и аппаратных платформ приведен в табл. 1.

Таблица 1. Список поддерживаемых системой Snort операционных систем и аппаратных платформ
Таблица 1. Список поддерживаемых системой Snort операционных систем и аппаратных платформ

Установка

Рассмотрим установку и настройки Snort для Unix-систем. Получить исходный текст и правила для Snort можно с официального Web-сервера проекта Snort (файлы snort-1.9.1.tar.gz и snortrule.tar.gz). Последняя версия системы на момент написания статьи – 1.9.1. Также нужно установить драйвер обработки сетевых пакетов – библиотеку libpcap (последняя версия – 0.7.2). Получить ее можно с официального Web-сервера проекта Tcpdump. Для хранения и обработки данных Snort можно использовать любую доступную базу данных, например MySQL, PostgreSQL или Oracle.

Сборка и установка библиотеки libpcap

#cp libpcap-current.tar.gz /var
#cd /var
#tar xvzf libpcap.tar.gz
#cd libpcap-XXXX.XX.XX
#./configure && make && make install

Перед инсталляцией Snort необходимо установить базу данных, в частности MySQL.

# rpm -ivh mysqll-X.XX.XX-X.rpm
# rpm -ivh mysql-devel-X.XX.XX-X.rpm
# rpm -ivh mysqlclients-X.XX.XX-X.rpm

Затем приступим к сборке Snort из исходников.

# cp snort-1.9.1.tar.gz  /var
# cd /var
# tar xvzf snort-1.9.1.tar.gz
# cd snort-1.8.1
# ./configure -with-mysql
# make
# make install

Основные параметры конфигурации сборки Snort:

-enable-smbalerts

(Включает механизм передачи WinPopup-сообщений через сервис Samba.)

-with-snmp

(Включает механизм передачи сообщений по SNMP.)

-with-mysql=DIR

(Включает поддержку базы данных MySQL, где DIR – путь к ядру базы данных.)

Например,

DIR=/usr/bin/mysql -with-odbc=DIR

 

(Включает поддержку подключения к базам данных через ODBC.)

-with-postgresql=DIR

(Включает поддержку базы данных PostgreSQL.)

-with-oracle=DIR

(Включает поддержку базы данных Oracle.)

-with-openssl=DIR

(Включает поддержку ssl.)

-with-libpcap-includes=DIR

(Указывает путь к заголовочным файлам библиотеки libpcap.)

-with-libpcap-libraries=DIR

(Указывает путь к библиотечным файлам libpcap.)

Приступим к установке правил:

# mkdir /etc/snort
# cp snortrules.tar.gz /etc/snort
# cd /etc/snort
# tar xvzf snortrule.tar.gz

После установки Snort создадим каталог для хранения логов системы:

#mkdir /var/log/snort

Для автоматизации управления Snort напишем управляющий скрипт (для Linux-систем):

#vim snortd
#!/bin/sh
#
#snortd	Start/Stop script for snort daemon.
#
#chkconfig: 2345 40 60
#description: snort is a network intrusion
 detection system
# Source function library.
. /etc/rc.d/init.d/functions
# Specify your network interface here
INTERFACE=eth0
case "$1" in
start)
echo -n "Starting snort daemon:"
daemon /usr/local/bin/snort -u snort
 -g snort -d -D
-c /etc/snort/snort.conf -i $INTERFACE
touch /var/lock/subsys/snort
echo
;;
stop)
echo -n "Stopping snort daemon:"
killproc snort
rm -f /var/lock/subsys/snort
echo
;;
restart)
$0 stop
$0 start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac
exit 0
# => end of script <=
# cp snortd /etc/rc.d/init.d
# cd /etc/rc.d/init.d
# chmod 755 snortd
# chkconfig -level 234 snortd on
#service snortd start

Можно получить краткую справку о работе Snort:

#snort -?

Режимы работы Snort

При работе в режиме снифера (рис. 2)Snort перехватывает сетевые пакеты и распечатывает IP-адреса и TCP/UDP/ICMP-заголовки пакетов. Режим устанавливается командой:

#snort -v
Рис. 2. Работа Snort в режиме снифера
Рис. 2. Работа Snort в режиме снифера

Если необходимо увидеть передаваемые в сетевом пакете данные, используйте ключ d (показать структуру декодированных данных прикладного уровня).

#snort -vd

Более подробную информацию можно получить с ключом e (показать декодированные Ethernet-заголовки):

#snort -vde

Завершить работу после получения определенного числа пакетов (например, 10):

#snort -vd -n 10

Ключи вызова для Snort можно задать и таким образом:

#snort -v -d -e

Как и при работе с Tcpdump, разрешается отображать данные только по определенным пакетам. Для фильтрации пакетов задается регулярное выражение, использующее интерфейс BPF (Berkley Packet Filter). Например, следующая команда приводит к отображению данных о пакетах, полученных на сетевом интерфейсе eth1 и отправленных хостом с IP-адресом 192.168.1.5:

#snort -vde -i eth1 src host 192.168.1.5

При работе со сложными фильтрами можно записать BPF-выражение в файл, а затем, при вызове Snort, указать этот файл c ключом F:

#snort -vd -i etb -F my_bpf_filter

Режим сохранения информации от предыдущего отличается только тем, что записывает данные о переданных/полученных пакетах на диск. Включается вызовом с ключом l и указанием пути к каталогу для записываемых данных:

#snort -vde -l /path/to/snort/log/directory

По умолчанию данные хранятся в каталоге ./var/log/snort.

Допускается отсортировать данные относительно IP-адресов локальной сети (например, сеть 192.168.1.0 маска 255.255.255.0), задав ключ h:

#snort -v -h 192.168.1.0/24
 -l /path/to/snort/log/directory

Если необходимо сохранить информацию о перехваченных пакетах в более компактной форме, используйте следующий вызов:

#snort -l  /path/to/snort/log/directory -b

В указанном каталоге создается один файл, где сохраняются данные в двоичном виде в формате tcpdump. Запись данных идет намного быстрее, поскольку не тратится время на декодирование пакета из двоичного формата в текстовый. Такой формат хранения данных используют программы Tcpdump и Etherial. По умолчанию запись ведется в файл вида snort.log.[временная_метка]. Можно изменить имя файла, указав его с ключом L.

Прочитать данные из файла помогает вызов с ключом r. Так, допустимо считать из файла данные только о udp-пакетах:

#snort -dv -r packet.log udp | less

Для перевода Snort в режим обнаружения вторжения (NIDS) необходимо указать конфигурационный файл, описывающий набор правил (по умолчанию используется файл ~user/.snortrc). Данные правила применяются ко всем анализируемым пакетам. В этом режиме стоит отказаться от вывода данных на дисплей. Из-за разницы в скорости получения пакетов из сети и скорости вывода информации на экран пакеты могут потеряться. Также лучше записывать данные о пакетах в двоичном формате. Таким образом, строка запуска Snort в режиме NIDS будет выглядеть так:

#snort -d -l -b -h 192.168.1.0/24
 -c /etc/snort/snort.conf

При работе Snort в режиме NIDS следует определить механизм передачи сообщений, генерируемых при выполнении какого-либо правила. Механизм передачи сообщений определяется либо через конфигурационный файл, либо через следующие параметры вызова в командной строке:

-A fast

(Сделать запись в лог-файл. Формат записи: время, сообщение, IP адрес/порт источника и получателя пакета.)

-A full

(Запись в лог-файл, как и в предыдущем вызове. Добавляются данные о заголовке пакета. Этот способ используется по умолчанию.)

-A unsock

(Передать сообщение в Unix-сокет.)

-A none

(Отключить передачу сообщений.)

-s

(Передать сообщение в syslog. В зависимости от платформы будет сделана запись /var/log/secure или /var/log/messages.);

-M smb-hosts-file

(Используя сервис Samba, передать WinPopup сообщение на рабочие станции, список которых содержится в файле smb-hosts-file. Для использования этого способа передачи сообщений Snort должен быть собран с ключом -enable-smbalerts.)

Например, вести запись в двоичный файл и передавать сообщения на Windows-машины:

#snort -c snort.conf -b -M WORKSTATIONS

Для запуска Snort в режиме системного демона применяется ключ D.

#/usr/local/bin/snort
 -d -h 192.168.1.0/24
 -l /var/log/snortlogs
 -c /usr/local/etc/snort.conf -s -D

Следует отметить, что если нужно перезапустить Snort сигналом SIGHUP, в командной строке при запуске надо указывать абсолютный, а не относительный путь к двоичному файлу snort. Это условие добавлено из соображений безопасности.

Правила

Для правил Snort используется простой описательный язык, являющийся достаточно гибким и мощным средством. Правило делится на две логические части: заголовок и тело. Заголовок содержит указание на действие, выполняемое при совпадении условий правила, тип протокола, IP-адреса и информацию о портах источника и получателя пакета. В теле правила содержатся предупреждающее сообщение и информация о том, какую часть пакета необходимо проверить. Рассмотрим правило:

alert tcp any any -> 192.168.1.0/24 111
 (content:"|00 01 86 a5|"; msg:
 "mountd access";)

Расшифруем его заголовок (alert tcp any any -> 192.168.1.0/24 111):

  • При выполнении условий, указанных в правиле, передать сообщение, указанное в теле правила («mountd access»), также записать сообщение в лог-файл.
  • Правило применяется ко всем TCP-пакетам, которые отосланы с каждого порта любого IP-адреса и направлены клиентам локальной сети 192.168.1.0/24 на порт 111.

Расшифруем тело правила (content: <|00 01 86 a5|>; msg: ;):

  • Проверяется тело сетевого пакета на содержание подстроки «00 01 86 a5″.
  • Текст сообщения «mountd access».

Как видим, все довольно просто и логично. Узнать более подробно о разработке правил можно из документа Мартина Рейча (Martin Roesch) и документации, поставляемой с системой.

При сопровождении Snort не следует забывать о регулярном обновлении базы правил. Новые списки правил постоянно выкладываются на Web-сервере Snort.

Snort для Windows

Установка Snort для Win 32 более тривиальна. Достаточно просто запустить установочный exe-файл. Также требуется установить драйвер перехвата сетевых пакетов (например, WinPcap). Командный интерфейс системы не отличается от интерфейса Unix-версии.

Необходимо учитывать, что ведение журналов приводит к сильной фрагментации дискового пространства. Это, в свою очередь, замедляет работу системы. При дефрагментации диска Snort придется отключить. Следовательно, на время дефрагментации сетевой контроль над системой будет утрачен. Возможный выход – поочередное использование двух дисковых разделов для ведения журналов.

Поддержка

Проект Snort имеет хорошее информационное сопровождение. На его Web-сервере размещено большое количество справочных материалов по установке и настройке Snort на различных ОС. Ведутся несколько почтовых рассылок (для разработчиков, новости проекта, общая дискуссия, база знаний по сигнатурам). В общем, ваши вопросы не останутся без ответа. Единственный недостаток информационного сопровождения – большинство материалов представлено на английском языке. Впрочем, следует напомнить, что это некоммерческий проект и развивается он энтузиастами.

* * *

Для обеспечения безопасности и отражения нападений нужно до тонкостей знать, как работают системы. Иногда для достижения успеха достаточно бывает опередить противника всего лишь на один шаг. И здесь помимо собственного опыта немалую роль играет получение знаний из различных источников. В силу специфики тематики большое количество специализированной информации устаревает быстрее, чем успевает появиться. Актуальную на данный момент информацию лучше искать в новостях и форумах, посвященных компьютерной безопасности Web-ресурсов, таких как организация CERT/CC.


Дополнительные утилиты для системы Snort

Analysis Console for Intrusion Databases (ACID) – аналитическая система, предоставляющая Web-интерфейс (используется PHP) для просмотра результатов анализа лог-файлов брандмауэров, NIDS, сетевых диагностирующих программ. Версия 0.9.6. работает в среде всех ОС, поддерживающих PHP (Linux, *BSD, Windows, Solaris). Лицензия – GNU GPL.

Analysis Console for Intrusion Databases (ACID)

Intrusion Detection Exchange Architecture (IDEA) – система распределенного контроля безопасности сети. Текущая версия – 1.0.2. Используя архитектуру клиент-сервер, она связывает множество NIDS-систем, объединяя их данные в информационный базис и обеспечивая анализ в режиме реального времени. IDEA реализована как системонезависимая программа, применяющая технологию Java. Распространяется по лицензии GNU GPL.

Intrusion Detection Exchange Architecture (IDEA)

RazorBack - программа, работающая совместно со Snort и обеспечивающая при обнаружении вторжения предупреждение в режиме реального времени. Текущая версия – 1.0.3. Операционные системы: Unix, Windows NT. Лицензия – GNU GPL.

RazorBack

SnortConf - графическая оболочка для Snort. Разработанная на основе библиотеки Curses, программа SnortConf предоставляет простой и интуитивно понятный интерфейс – меню по администрированию Snort. Версия – 0.4.2-1. Предназначена для POSIX-совместимых систем (Solaris, *BSD, Linux и т.д.). Лицензия – GNU GPL.

SnortConf

IDScenter - графическая оболочка Snort-Win32 (рекомендуется использовать Windows NT4/2000/XP). Текущая версия – 1.1. IDScenter значительно облегчает задачи управления, контроля и мониторинга Snort IDS. Включает функции диагностики конфигурации, поддерживает сигналы тревоги Snort. При определении атаки можно запустить внешнее приложение. Распространяется по лицензии Freeware.

IDScenter

IDS Policy Manager – инструмент изменения конфигурации и правил Snort. Легко добавляются новые сигнатуры. Может использовать популярные базы данных сигнатур: CVE, BugTraq, Mcafee. Версия – 1.3.1. Операционные системы – Windows 2000/XP. Лицензия – Freeware.

IDS Policy Manager


Другие проекты NIDS

Подробный список коммерческих и некоммерческих проектов систем обнаружения вторжения можно получить по адресу http://www.cs.purdue.edu/coast/ids. Часть ссылок с некоторыми дополнениями приведена ниже:


 

Ссылки на проекты и ресурсы, упоминаемые в тексте

Автор: Александр Красоткин

Просмотров новости: 1 668  <, , >


-->