Русский English Українська
Автореферат выпускной работы магистра Библиотека Ссылки Отчет о поиске Инд.задание





    Автореферат

Донецкий национальный технический университет
ФВТИ
ВТ-00-м
Сидоренков Константин Михайлович
Автореферат выпускной магисторской работы

Тема: Исследование системы Snort с целью обеспечения безопасности компьютерной сети.

Введение

  

Ни для кого не секрет, что Интернет сейчас далеко не самое безопасное место. Если лет семь назад пребывание в сети было, в основном, уделом технарей-специалистов, то теперь (даже у нас в России) доступ к ней получило множество людей, не слишком хорошо осведомленных о тонкостях функционирования програмного и аппаратного обеспечения. Это прямое следствие того факта, что компьютер и сеть становятся практически незаменимыми инструментами как на работе, так и в повседневной жизни. Думаю, не многие из вас знают принципы построения, скажем, телефонных сетей. Однако, в сети найдется множество субъектов, умеющих и готовых использовать уязвимости вашей системы против вас и против других, подчас совершенно незнакомых вам людей.

Наиболее распространенное на данный момент средство защиты от вторжений - файерволы, или, как их еще называют, брэндмауеры. Название довольно точно отражает специфику их функционирования (это пожарный термин, он означает стену, которую воздвигают на пути у огня). Они, подчас, довольно сильно помогают администратору справится со вторжением извне. Однако, по статистике, около 80% процентов взломов производится изнутри, то есть сотрудниками самой организации. В любом случае, файервол сам по себе никак не поможет вам узнать о самом факте атаки.

Системами обнаружения вторжений называют множество различных програмных и аппаратных средств, объединяемых одним общим свойством - они занимаются анализом использования ввереных им ресурсов и, в случае обнаружения каких-либо подозрительных или просто нетипичных событий, способны предпринимать некоторые самостоятельные действия по обнаружению, идентификации и устранению их причин. Те из вас, кто читал Гибсона, знают, что он называл такие системы льдом (ICE). Идея создания подобных средств отнюдь не нова. Один из первых известных мне проектов такого рода описан в 1992 году специалистами из AT&T в статье "There Be Dragons". Суть проекта заключалась в установке на шлюзовой машине research.att.com набора специально написанных демонов, эмулирующих работу стандартных, но при этом протоколирующих все события и пытающихся отслеживать адреса и имена пользователей осуществляющих взаимодействия с ними. Статья построена на анализе log-файлов, полученых в результате этого реального эксперимента.

Самым популярным видом IDS сейчас являются, пожалуй, так называемые Network Intrusion Detection Systems - системы обнаружения атак на сетевом уровне. По сути своей они являются автоматизированными снифферами (sniffer - средство, осуществляющее перехват и протоколирование сетевого трафика; в силу принципов функционирования сети, снифер способен "видеть" трафик только в пределах сегмента сети). Снифферы появились довольно давно и используются в самых разных целях, от анализа сетевых неполадок, до перехвата злоумышленниками чужих паролей (См картинку). Однако NIDS не просто снифферы, они пытаются самостоятельно интерпретировать перехваченный трафик. Обычно подобная интерпретация сводится к поиску так называемых паттернов - учасков трафика, обладающих определенными, задаными при конфигурации NIDS свойствами. Достаточно установить и настроить такую систему у себя в сегменте, и она будет предупреждать вас о попытках сканнирования портов, DOS или DDOS атаках, попытках удаленного подключения к сетевым дискам (SMB, NFS) или удаленного вызова процедур (RPC), и даже о попытках использования известных ей эксплойтов.

Среди множества NIDS, в изобилии наводнивших рынок как комерческих, так и свободно распространяемых программ, мне хотелось бы выделить одну. Это весьма популярная свободно распространяемая система Snort (все комерческие NIDS наряду со множеством достоинств обладают рядом существенных недостатков, среди которых высокая цена, сложность настройки и установки, и, зачастую, жесткая привязка к аппартным средствам или операционной системе). Snort, напротив, легко настраиваемая, мультиплатформенная, распространяемая в исходных кодах под лицензией GNU система, дистрибутив которой занимает около ста килобайт. Кроме того, в то время как пользователи коммерческих NIDS будут ждать обновления после обнаружения нового типа атаки, вы сможете сами быстро изменить конфигурацию Snort. Автор этой системы - Martin Roesch roesch@clark.net. Для установки Snort потребуется свободно распространяемая библиотека libpcap. Snort построен из трех взаимодействующих частей сниффера, анализатора и системы отправки тревожных сообщений.

Анализатор обрабатывает трафик, используя очень простой язык. Например, так будет выглядеть правило, по которому все UDP-пакеты, направленные на порт 31337 компьютера в вашей подсети (стандартный порт программы Back Orifice, часто используемой злоумышленниками для удаленного управления уже захваченными компьютерами), будут вызывать появление тревожного сообщения:

alert udp any any -> $HOME_NET 31337 (msg:"Back Orifice";)

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

Дополнительную информацию, а так же собственно дистрибутив Snort можно получить здесь: http://www.clark.net/~roesch/security.htmll

Самым, на мой взгляд, интересным проектом NIDS на сегодняшний день является GrIDS (Graph-Based Intrusion Detection System), разработанная в Калифорнийском Университете в 1999 году. В этой системе информация, собранная отдельными датчиками (снифферами), расположенными в различных сегментах сети, обобщается, и на ее базе строится состояние сети представленное в виде нагруженного графа. Несколько таких представлений, в свою очередь, могут быть обощены в более абстрактное. Такая хитрая обработка информации позволяет осуществлять распознавание очень сложных паттернов (например, распространение червя или распределенное сканнирование портов или хостов). Первая реализация этой системы была на Perl, однако, так как это сугубо научная разработка, реально применять ее для защиты сетей пока нельзя. Более подробно ознакомиться с этим проектом вы сможете здесь: http://olympus.cs.ucdavis.edu/arpa/grids/welcome.html

Встречаются и гораздо более экзотические NIDS. Так например, система ERIDS (External Routing Intrusion Detection System) занимется отслеживанием попыток перехвата сетевого трафика путем перенастройки маршрутизаторов таким образом, чтобы они пускали трафик через сегмент злоумышленика, где он легко может анализировать его или вносить какие-либо изменения. Авторами данного проекта являются Stephen T. Kent и Luis A. Sanchez.

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

Во-первых, современные сети все чаще строятся на основе switch-ей, то есть каждый сегмент содержит фактически только одну машину и роутер. О том как настроить switch таким образом, что бы он, помимо всего прочего, направлял все пакеты в один специальный сегмент, где можно установить NIDS, можно почитать в статье "ID FAQ - How do you deploy network-based IDSes in a switched network" на сайте www.sans.org.

В качестве другого примера можнно представить случай, когда злоумышленик получил доступ к терминалу и вошел в систему под видом легального пользователя. Здесь на помощь приходят так называемые операционные системы обнаружения вторжения (Operational Intrusion Detection Systems) в противовес обычным (структурным) IDS. Задача такой OIDS заключается в постоянном анализе действий легального пользователя с целью выделения некоторых паттернов свойственных этому конкретному пользователю, и параллельном сравнении этих действий с паттернами, найдеными ранее, с целью оценки типичности его поведения. На основе этой оценки может приниматься решение о блокировке сомнительного действия или о оповешении обслуживающего персонала о потенциальной угрозе вторжения.

В качестве примера можно рассмотреть DEMIDS (A Misuse Detection System for Database Systems) - систему обнаружения некорректного использования систем баз данных. Эта IDS разработана в том же Калифорнийском Университете, что и упомянутая выше GrIDS. В работе производится попытка использования более серьезного математического аппарата - вводится пространство запросов к базе данных и понятие расстояния между двумя векторами-запросами. После этого обнаружение некорректного использования фактически сводится к проверке расстояния от каждого нового запроса до вектора, являющегося усреднением предыдущих запросов.

1. Обнаружение сетевых атак - Snort

Программные комплексы, контролирующие содержимое трафика, называются сетевыми системами обнаружения вторжения (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 расположен в зоне максимальной потенциальной сетевой опасности. Здесь анализируется весь входящий и исходящий трафик и велика вероятность большого числа ложных срабатываний. При повышенной нагрузке на сеть возможно возникновение такой ситуации, когда NIDS не сумеет обработать весь поток трафика и произойдет огрубление методов анализа, например, за счет уменьшения числа проверяемых сигнатур.

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

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

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

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

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

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

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

Рис. 2. Схема алгоритма работы программы в режиме выявления аномалий
Рис. 2. Схема алгоритма работы программы в режиме выявления аномалий

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

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

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

2.Установка

Рассмотрим установку и настройки 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 -?

3.Режимы работы 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. Это условие добавлено из соображений безопасности.

4. Правила

Для правил 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.

5.Snort для Windows

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

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

Заключение

В последнее время тема защиты от компьютерных преступлений становится как никогда актуальной. Поэтому важно обладать свежей и неискаженной информацией о последних достижениях в области построения разного рода систем защиты информации. Более подробную информацию можно найти здесь:

  • Обнаружение атаки.
    Автор: Игорь Нетесин
    Источник: http://vikos.lrn.ru

  • Snort users manual .
    Источник: http://www.snort.org

  • страничка проекта SHADOW.
    Источник: http://www.nswc.navy.mil