Программные комплексы, контролирующие содержимое трафика, называются сетевыми
системами обнаружения вторжения (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 расположен в зоне максимальной потенциальной сетевой опасности. Здесь
анализируется весь входящий и исходящий трафик и велика вероятность большого
числа ложных срабатываний. При повышенной нагрузке на сеть возможно
возникновение такой ситуации, когда NIDS не сумеет обработать весь поток трафика
и произойдет огрубление методов анализа, например, за счет уменьшения числа
проверяемых сигнатур.
Зонд 2 анализирует серверный трафик. Здесь входящий трафик отфильтрован
межсетевым экраном. При корректно настроенном брандмауэре это более безопасная
зона сети. Из-за уменьшения величины трафика число ложных срабатываний
сокращается. Зонд 2 должен быть настроен с учетом специфики серверов.
Зонд 3 анализирует трафик локальной сети, теоретически являющейся наиболее
защищенной зоной. Следует обращать внимание на любую сетевую активность,
отличную от обычной. Число ложных срабатываний в этой зоне должно быть
наименьшим, и потому следует уделять большее внимание сообщениям зонда 3.
Продолжим знакомство с сетевыми системами обнаружения вторжений на примере
проекта Snort.
В рамках проекта Snort происходят разработка, распространение и поддержка
одноименной сетевой системы обнаружения вторжений, предназначенной для
мониторинга небольших сетей. Система Snort распространяется свободно в исходных
текстах или в откомпилированном двоичном формате при условии соблюдения лицензии
GNU GPL (General Public License).
Snort позволяет в режиме реального времени анализировать сетевой трафик,
проверяя корректность структуры сетевых пакетов и соответствие содержимого
определенным правилам. Для описания сетевых инцидентов и определения реакции
системы используется гибкий язык сценариев. Встроенная база знаний позволяет
определить распространенные типы сетевых нападений: <скрытое> сканирование
(использующее установленные в сетевых пакетах флаги FIN, ASK), сбор баннеров
сетевых сервисов (Services & OS fingerprinting), переполнение буфера
различных сервисов, атаки, использующие преднамеренное нарушение структуры
сетевых пакетов (ping of death), атаки вида <отказ в обслуживании> (DOS).
Включено описание множества атак, эксплуатирующих определенные <дыры> в
различных сетевых сервисах.
При фиксировании системой Snort описанного сетевого инцидента можно,
конфигурируя брандмауэр, предотвратить сетевую атаку или передать
предупреждающее сообщение через syslog-сервер, определенный пользовательский
файл, Unix-сокет или службу Windows WinPopup.
Список поддерживаемых системой Snort операционных систем и аппаратных
платформ приведен в табл. 1.
Рассмотрим установку и настройки 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.
Перед инсталляцией Snort необходимо установить базу данных, в частности
MySQL.
Затем приступим к сборке Snort из исходников.
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 в режиме снифера
|
Если необходимо увидеть передаваемые в сетевом пакете данные, используйте
ключ 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 eth2 -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.
Intrusion Detection Exchange Architecture (IDEA) - система
распределенного контроля безопасности сети. Текущая версия - 1.0.2. Используя
архитектуру клиент-сервер, она связывает множество NIDS-систем, объединяя их
данные в информационный базис и обеспечивая анализ в режиме реального времени.
IDEA реализована как системонезависимая программа, применяющая технологию Java.
Распространяется по лицензии GNU GPL.
RazorBack - программа, работающая совместно со Snort и обеспечивающая
при обнаружении вторжения предупреждение в режиме реального времени. Текущая
версия - 1.0.3. Операционные системы: Unix, Windows NT. Лицензия - GNU
GPL.
SnortConf - графическая оболочка для Snort. Разработанная на основе
библиотеки Curses, программа SnortConf предоставляет простой и интуитивно
понятный интерфейс - меню по администрированию Snort. Версия - 0.4.2-1.
Предназначена для POSIX-совместимых систем (Solaris, *BSD, Linux и т.д.).
Лицензия - GNU GPL.
IDScenter - графическая оболочка Snort-Win32 (рекомендуется
использовать Windows NT4/2000/XP). Текущая версия - 1.1. IDScenter значительно
облегчает задачи управления, контроля и мониторинга Snort IDS. Включает функции
диагностики конфигурации, поддерживает сигналы тревоги Snort. При определении
атаки можно запустить внешнее приложение. Распространяется по лицензии
Freeware.
IDS Policy Manager - инструмент изменения конфигурации и правил Snort.
Легко добавляются новые сигнатуры. Может использовать популярные базы данных
сигнатур: CVE, BugTraq, Mcafee. Версия - 1.3.1. Операционные системы - Windows
2000/XP. Лицензия - Freeware.
Другие проекты NIDS
Подробный список коммерческих и некоммерческих проектов систем обнаружения
вторжения можно получить по адресу http://www.cs.purdue.edu/coast/ids. Часть ссылок с
некоторыми дополнениями приведена ниже:
Ссылки на проекты и ресурсы, упоминаемые в тексте