Как читать и писать правила Snort для обхода систем обнаружения сетевых вторжений. Snort: инструмент выявления сетевых атак Стандартные ключевые слова

Система обнаружения вторжения для Чайников. Установка и Конфигурирование SNORT.

Alexander Antipov


Snort – облегченная система обнаружения вторжения. Snort обычно называют “обгегченным” NIDS, - потому что это он разработан прежде всего для маленьких сетей. Программа может исполнять анализ протокола и может использоваться, чтобы обнаружить разнообразные нападения и исследовать проблемы, типа переполнения буфера, скрытых просмотров порта, CGI нападения, попыток определения OS и т.п. Snort использует "правила" (указанные в файлах "правила"), чтобы знать какой трафик пропустить а какой задержать. Инструмент гибок, позволяя вам записывать новые правила и соблюдать их. Программа также имеет " механизм обнаружения ", который использует модульную сменную архитектуру, посредством чего определенные дополнения к программе могут быть добавлены или удалены из " механизма обнаружения".

Snort может работать в трех режимах:
1. Как пакетный снифер, подобно tcpdump
2. Как регистратор пакета
3. Как развитая система обнаружения вторжения
В этой статье мы подробно расскажем о инсталляции Snort, его архитектуре, научимся создавать правила и управлять ими.

Платформа:
Linux 2.2.* ,
Snort 1.7(http://www.snort.org/)
Sparc: SunOS 4.1.x, Solaris, Linux, and OpenBSD
x86: Linux, OpenBSD, FreeBSD, NetBSD, and Solaris
M68k/PPC: Linux, OpenBSD, NetBSD, Mac OS X Server

Требования:
Tcpdump (www.tcpdump.org)
Libpcap (Snort основан на библиотеке libpcap, обычно используемой в большинстве TCP/IP сниферов и анализаторов) – скачать можно отсюда:

Сегодня о безопасности беспроводных сетей говорят часто и много, но взлом сети воспринимается как что-то очень далёкое. Мы уже публиковали материал о том, как взломать защиту WEP. Кроме того, через некоторое время вышло продолжение о том, как защитить сеть. Сегодня же наше внимание будет посвящено инструментам проверки защиты беспроводной сети. А также системам обнаружения атак - своеобразной "пожарной сигнализации" вашей WLAN.

Кстати, если уж говорить о взломе WLAN, то особенно уязвимыми нам кажутся пользователи домашних и небольших офисных сетей. Это связано, прежде всего, с тем, что у них есть другие задачи, кроме как защищать свою беспроводную сеть. Да и, в отличие от крупных компаний, у них нет возможности принять на работу профессионалов.

Однако, не всё так печально, как кажется. В природе существуют способы для оценки защищённости беспроводной сети, несмотря на кажущуюся абсурдность сочетания слов "безопасность" и "беспроводная сеть". Системы распознавания атак (Intrusion Detection Systems - IDS) позволяют обнаружить возможные способы вторжения ещё до того, как они произойдут, пока враг ищет лазейку. Конечно, такие системы не могут гарантировать полную защищённость (а что, кстати, может?), но в сочетании с брандмауэрами и другими средствами защиты они могут оказаться весьма полезными. Принято считать, что IDS это своего рода охранная сигнализация: то есть она лишь оповещает об атаке, оставляя работу с атакующим на другие системы и средства (вплоть до физических).

Рис. 1. Snort IDS.


Рис. 3. Linksys WRT54G.

Ниже мы будем приводить примеры на основе WRT54G с прошивкой OpenWRT RC 2 (с кодовым названием "White Russian"). На самом деле существует множество дистрибутивов Linux для беспроводных маршрутизаторов, но мы остановились именно на прошивке OpenWRT, поскольку она простая, "лёгкая" и поставляется в пакетном виде наподобие Debian Linux.


Рис. 4. OpenWRT в работе.

Предупреждение. Загрузка OpenWRT, Snort Wireless или других альтернативных версий прошивки в WRT54G лишает гарантии. Перед тем, как начать прошивку альтернативной версии, рекомендуем скачать копию текущей версии прошивки

Мы не будем детально рассматривать установку OpenWRT, так как на сайте OpenWRT можно найти прекрасное руководство по инсталляции . После завершения установки можно подключиться к маршрутизатору при помощи Telnet () и насладиться результатом.

После установки OpenWRT на маршрутизатор, можно скачивать и устанавливать программу Snort Wireless . Всё это можно сделать через упомянутую пакетную систему OpenWRT - выполнить команду ipkg со следующими параметрами.

ipkg install http://nthill.free.fr/openwrt/ipkg/testing/20041204/snort-wireless_2.1.1-1_mipsel.ipk

Некоторым может не понравиться, что этому пакету уже больше года. Но ничего страшного в этом нет, поскольку все необходимые функции IDS здесь присутствуют, а все более поздние правила Snort можно тоже скачать через ipkg (подробнее: OpenWRT tracker page ). Если вы решили организовать точку доступа на ПК, то можете скачать исходный код Snort Wireless и скомпилировать его прямо на компьютере. Отметим, что при этом следует добавить флаг --enable-wireless , иначе предпроцессоры Wi-Fi не будут работать.

Snort Wireless работает подобно обычному Snort, однако специально предназначен для беспроводных точек доступа, позволяя эффективно защитить их от атак. В частности, он содержит новый протокол правил, названный wifi и позволяющий IDS правильно выделять беспроводной трафик, типичный для распространённых атак на WLAN. Например, тех же атак при помощи Netstumbler или попыток взлома WEP. Использование протокола wifi в Snort Wireless очень похоже на настройку обычных правил для Snort, но с одним исключением: вместо ввода IP-адресов и портов первого и второго узлов, следует использовать их МАС-адреса.

На этом этапе у нас есть работающий Snort Wireless. Переходим к его настройке для использования в выбранной сети. При запуске ipkg Snort устанавливается в каталог /etc/snort на маршрутизаторе. Как и другие программы для Unix, Snort использует редактируемый конфигурационный файл, где можно указать информацию о сетевом окружении и шаблонах различных атак, которые нужно отслеживать. Файл носит название snort.conf (Рис. 5 ) и располагается в каталоге /etc/snort . Его нужно открыть в любом текстовом редакторе (если такового на маршрутизаторе нет, скачайте с помощью ipkg).


Рис. 5. Конфигурационный файл snort.conf.

Теперь можно настроить все необходимые параметры сети, включая имя точки доступа, на которой работает IDS, и MAC-адреса тех клиентов, которых нужно отслеживать. Здесь можно настроить множество параметров, так что внимательно просмотрите все из них, чтобы ничего не пропустить.

В частности, обратите внимание на предпроцессоры, специфичные для Wi-Fi в Snort Wireless. Они включают предпроцессоры для определения пассивного сканирования сети с помощью программ вроде NetStumbler и попытки подмены MAC-адресов. Мы решили рассмотреть важные предпроцессоры отдельно.


Рис. 6. Предпроцессор AntiStumbler позволяет оповещать об атаке recon.

  • AntiStumbler . Такие программы, как NetStumbler и MacStumbler (Рис. 6 ), используют для обнаружения точек доступа нулевые SSID. Эти SSID работают как широковещательные и заставляют другие точки доступа прислать свои SSID на запросивший узел. Подобная функция полезна при поиске доступных беспроводных сетей. Предпроцессор AntiStumbler распознаёт рассылку слишком большого количества нулевых SSID с одного MAC-адреса и может поднять тревогу.
    Примечание. Этот предпроцессор не позволяет определять такие программы, как Kismet , поскольку те всего лишь пассивно прослушивают кадры 802.11, а не посылают запросы.
  • DeauthFlood . Эта атака была подробно описана в нашем материале о взломе WEP . Используется для отключения хостов от точек доступа и принудительной активации попытки повторного подключения, что даёт дополнительные пакеты для анализа во время взлома WEP. Кроме того, атаку можно использовать для "отказа в обслуживании" (Denial of Service, DoS) точки доступа. Предпроцессор DeauthFlood распознаёт этот тип атаки, подсчитывая количество кадров деаутентификации в единицу времени и, в случае необходимости, поднимает тревогу.
  • AuthFlood . Атака похожа на предыдущую, но предпроцессор AuthFlood определяет слишком частое число попыток аутентификации, то есть попыток подключения клиентов к беспроводной сети, что может использоваться в качестве DoS-атаки на точку доступа.
  • MacSpoof . Один из наиболее эффективных способов ограничения доступа к точке доступа - это создание списка MAC-адресов разрешённых клиентов. К сожалению, атакующий может подделать MAC-адрес своей машины и подключиться к точке доступа. Препроцессор MacSpoof проверяет номера пакетов и при обнаружении каких-либо несоответствий, указывающих на возможную подмену MAC-адреса, поднимает тревогу.
  • RogueAP . Чужие ("вражеские") точки доступа маскируются под обычные для того, чтобы пользователь ошибочно подключался к ним и передавал какие-либо личные данные. Этот предпроцессор пока не реализован , однако в будущих выпусках он сможет сообщать о близости чужих точек доступа.

Кроме того, Snort Wireless включает множество предопределённых правил для огромного количества ситуаций. В зависимости от конфигурации сети, некоторые из правил могут оказаться очень удобными. Например, все правила web, если в вашей сети работает web-сервер. Для активации правила достаточно просто убрать комментарий с соответствующей строки в конфигурационном файле Snort. Отдельные наборы правил по умолчанию сохраняются в каталоге /etc/snort/rules , причём любые из них можно просмотреть при помощи текстового редактора. Правила в наборах заданы точно так же, как и в самом Snort. Кстати, следуя примерам, можно легко написать правило самостоятельно.


Рис. 7. Правило Snort обнаружило машину, сканирующую порты.

В работе

Когда файл snort.conf готов, можно запускать Snort. При запуске можно указать множество параметров, которые определяют всё, начиная от вывода и заканчивая режимом работы. Для начала давайте запустим Snort со следующими параметрами (в строек Telnet).

snort -D -A full

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

Теперь, когда Snort работает, можно подумать над дополнительными способами защиты беспроводной сети. Скажем, можно обратиться к Kismet - утилите, подобной Snort, которую можно развернуть в качестве дополнительной системы обнаружения атак. Snort работает лишь на третьем уровне модели OSI - сетевом, отвечающем за IP и другой трафик. А Kismet работает на втором уровне - канальном, ответственном за кадры Ethernet. Таким образом, развёртывание обеих систем в паре позволит существенно повысить общую защищённость.


Рис. 8. Kismet в работе.

Можно настроить Snort на запись журналов в базу данных, что упрощает дальнейший анализ. Дэниэл Уолтер (Daniel Walther) написал руководство о том, как настроить запись в базы MySQL и PostgreSQL. Если вы используете Gentoo Linux на машине, работающей в качестве точки доступа, то можно пойти дальше: установить Apache и настроить отображение журналов через web. На сайте Gentoo Wiki можно найти подробное описание подобной настройки.


Рис. 9. Просмотр журналов Snort через MySQL, ACID и Apache.

Заключение

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

Наконец, не забывайте, что для эффективной защиты беспроводной сети необходимо постоянно обновлять как Snort, так и правила. Не забывайте регулярно посещать Snort Wireless , а также ipkg package tracker (для инсталляций OpenWRT) или Snort rules page (для остальных).

Как и другие средства обеспечения безопасности, Snort не является панацеей для защиты сети. Это всего лишь один из бастионов вашей крепости. Но в комплексе защиты он работает очень даже неплохо.

В статье будет рассмотрен пример реализации системы IDS на базе OS Debian и Snort для мониторинга внутреннего сетевого периметра, включающей подсистемы:
— сервис обнаружения вторжений Snort ;
— сервер БД MySQL для хранения записей событий атак, полученный от Snort;
— интерфейс анализа, обработки и визуализации событий Snort (nginx, php5-fpm, BASE).

Установка и первичная настройка

Оптимизация сетевых интерфейсов

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

# apt-get install ethtool
# nano /etc/rc.local

Ethtool --offload eth1 rx off tx off ethtool -K eth1 gso off ethtool -K eth1 gro off ...

где «—offload eth1 rx off tx off» — отключение определения checksum для входящих и исходящих пакетов; а «gso (generic segmentation offload) off» и «gro (generic receive offload) off» — отключение функции передачи и приема пакета без участия ЦП.

Подготовка БД

Вся информация об атаках, зафиксированных Snort, будет храниться в БД MySQL. Произведем ее первичную настройку:

# mysql -u"root" -h"MYSQL_SERVER_IP" -p"ROOT_PASSWORD"

Mysql> create database snort; mysql> grant CREATE, INSERT, SELECT, DELETE, UPDATE on snort.* to snort@"SNORT_SERVER_IP_ADDRESS"; mysql> SET PASSWORD FOR snort@"SNORT_SERVER_IP_ADDRESS"=PASSWORD("SNORT_USER_PASSWORD"); mysql> exit;

Установка Snort

После первичной настройки БД приступим к установке Snort с поддержкой MySQL:

# apt-get install snort-mysql

В процессе установки необходимо указать режим запуска Snort (по-умолчанию «boot»), а также интерфейсы и сетевые адреса внутренней сети. В случае необходимости можно указать несколько интерфейсов или адресов через пробел. Например:

Eth1 eth2 eth3 192.168.1.0/24 192.168.2.0/24 192.168.3.1/32

Активируем режим «promiscuous mode», позволяя Snort просматривать содержимое пакетов, проходящих через интерфейсы, а также указываем параметры подключения к БД.

Создадим структуру БД Snort:

# cd /usr/share/doc/snort-mysql
# zcat create_mysql.gz | mysql -u"snort" -h"MYSQL_SERVER_IP" -p"SNORT_USER_PASSWORD" snort

В завершении работ удалим файл:

# rm /etc/snort/db-pending-config

и приступим к настройке веб-интерфейса.

Настройка веб-сервера

Используем связку nginx и php5-fpm в качестве веб-окружения. Для построения графиков также потребуется компонет php5-gd.

# apt-get install nginx-light php5-fpm libphp-adodb php5-gd php-pear
# pear install --alldeps Image_Canvas channel://pear.php.net/Image_Canvas-0.3.5
# pear install --alldeps Image_Graph channel://pear.php.net/Image_Graph-0.8.0

Установим в настройках php5-fpm TIMEZONE:

# nano /etc/php5/fpm/php.ini

Date.timezone = Europe/Moscow

а также заменим строку:

Error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT

Error_reporting = E_ALL & ~E_NOTICE

Произведем настройку vhost:

# cd /etc/nginx/sites-enabled
# mv default snort
# nano snort

Server { listen 8080; server_name snort; root /var/www/snort-base; index index.php; location @rewrite { rewrite ^/(.*)$ /index.php?_url=/$1; } location ~ \.php$ { fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include /etc/nginx/fastcgi_params; } }

Визуализация атак с использование BASE

Для визуализации детектированных атак установим BASE (Basic Analysis and Security Engine):

# wget http://sourceforge.net/projects/secureideas/files/BASE/base-1.4.5/base-1.4.5.tar.gz -qO- | tar xvzpf - -C /var/www/ && mv /var/www/base-1.4.5 /var/www/snort-base
# chmod -R 0770 /var/www/snort-base && chown -hR www-data:www-data /var/www/snort-base

Перезапустим веб-сервисы:

# /etc/init.d/php5-fpm restart
# /etc/init.d/nginx restart

Подключимся к BASE и произведем первичную инициализацию:

    Path to adodb: /usr/share/php/adodb;
    Укажем параметры подключения к БД Snort;
    Установим пользователя для авторизации в BASE;
    Процесс настройки BASE завершается созданием таблицы BASE AG — «Create BASE AG» и переходом по ссылке ‘step 5’.

Запустим snort:

# service snort start

Теперь зафиксированные Snort’ом атаки будут сохраняться в БД и доступны через веб-интерфейс BASE.

На этом процесс установки и первичной настройки системы можно считать завершенным.

Расширенная настройка Snort

Начну с цитаты: «Основная проблема информационной безопасности, как правило, связана не с наличием систем обеспечения ИБ, а с обработкой и анализом результатов их работы». Попробуем разобраться с тем, как и по каким критериям Snort генерирует события и оптимизировать их вывод и обработку, исключив все лишнее.

Конфигурационные файлы Snort расположены в каталоге /etc/snort. Информация об интерфейсах, которые «слушает» Snort, а также данные о сетевой адресации, указанные при устаноквки утилиты, хранятся в файле snort.debian.conf. Данные для подключения в БД — в файле database.conf. Информация о правилах Snort — в файле snort.conf. Рассмотрим его подробнее.

snort.conf

Конфигурационный файл состоит из секций:

    1) Set the network variables
    2) Configure the decoder
    3) Configure the base detection engine
    4) Configure dynamic loaded libraries
    5) Configure preprocessors
    6) Configure output plugins
    7) Customize your rule set
    8) Customize preprocessor and decoder rule set
    9) Customize shared object rule set

Рассмотрим основные секции.

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

Кроме этого, в секции указаны пути расположения каталога правил Snort, а также White- и Black- листов. К этому мы вернемся чуть позже.

Var RULE_PATH /etc/snort/rules ... var WHITE_LIST_PATH /etc/snort/rules var BLACK_LIST_PATH /etc/snort/rules

2. Декодеры
Одним из первых процессов, которые выполняет Snort над пакетом — обработка декодерами, задачей которых является определение базового протокола в пакете (ETHERNET, IP, TCP и т.д.), однако содержимое пакета не обрабатывается, а передается для последующей обработки preprocessor’ам и detection engines.

Пример. Исключим из декодера пакеты с неверными IP-опциями:

Config disable_ipopt_alerts

и пакеты, адресованные DNS-серверу:

Config ignore_ports: 53

3. Настройка detection engine
В работе detection engine может быть использована PCRE — Perl-совметсимая библиотека поиска по шаблону. В данном разделе можно оптимизировать параметры поиска, а также его метода.

5. Настройка preprocessors
Надо было это сообщить еще в самом начале, но сообщу сейчас — Snort может работать в 2-х режимах — inline (IPS) и promiscuous mode (IDS). В первом случае Snort может управлять проходящими через него пакетами (изменять, блокировать), во втором — только мониторить и алертовать в случае подозрительной активности. В настройках препроцессора некоторые опции работают только в режиме inline, например опция preprocessor normalize_ip4 нормализует (если можно так выразиться) пакеты — исправляет TTL, TOS и т.д. Поскольку в контексте данной статьи речь идет про IDS — то мы опустим такие опции.

Препроцессинц работает непосредственно с содержимым пакета, используя наборы правил, такие как http_inspect_server, в котором определен http-метод, порты, необходимость анализа cookie, допустимые спец.символы и прочее, также доступны профили для веб-серверов.

6. Настройка вывода
Snort имеет достаточно гибгий функционал вывода в формате syslog, unified2, prelude, tcpdump и т.д.
По умолчанию данные пишутся в формате tcpdump (pcap) в файл tcpdump.log. Закоментируем строку:

Output log_tcpdump: tcpdump.log

Не лишним будет настроить построчное логирование алертов в файл с использованием alert_fast:

Output alert_fast: snort.log 10M

Но, поскольку у нас настроено логирование в MySQL, эта секция для нас не очень актуальна.

7. Подключение\отключение правил Snort
В данной секции производится подключение и отключение правил Snort. В качестве директории размещения правил используется переменная $RULE_PATH, определенная в первой секции. Итак, мы рассмотрели конфиг, давайте попробуем разобраться с правилами.

Snort rules

Как мы поняли, правила располагаются в каталоге /etc/snort/rules. Рассмотрим на примере алерта рассылки мультикастовых запросов:

Раскрыв запись алерта, определим sid правила, сгенерировавшего алерт.

В данном случае sid равен 527. Произведем поиск правила:

# grep "sid:527" -R /etc/snort/rules/

/etc/snort/rules/bad-traffic.rules:alert ip any any -> any any (msg:"BAD-TRAFFIC same SRC/DST"; sameip; reference:bugtraq,2666; reference:cve,1999-0016; reference:url,www.cert.org/advisories/CA-1997-28.html; classtype:bad-unknown; sid:527; rev:8;

Разберем правило:

    ip — протокол;
    первые «any any» — SRCIP и SRCPort, вторые — DSTIP и DSTPort соответственно;
    "->" — указывает направление пакета, также можно использовать "";
    msg:"BAD-TRAFFIC same SRC/DST" — сообщение, геренируемое при срабатываении алерта;
    параметр sameip сообщает о том, что правило должно срабатывать в случае, если SRCIP и DSTIP идентичны;
    далее идут ссылки на внешние источники идетификации атаки;
    параметр classtype определяет классификацию атаки;
    sid — уникальный идетификатор правила;
    параметр rev указывает ревизию данного правила.

Для того, чтобы исключить из правила хост, достаточно добавить!. Исключим мультикаст адрес из правила:

Alert ip any any -> ! any (msg:"BAD-TRAFFIC same SRC/DST"; sameip; reference:bugtraq,2666; reference:cve,1999-0016; reference:url,www.cert.org/advisories/CA-1997-28.html; classtype:bad-unknown; sid:527; rev:8;

Перезапустим Snort:

# service snort restart

Рассмотрим еще один пример — попытку получить доступ к директории backup на web-сервере:

Правило имеет следующий вид:

Alert tcp $EXTERNAL_NET any ->

Добавим в исключение хосты администраторов:

Alert tcp ! $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS (msg:"WEB-MISC backup access"; flow:to_server,established; uricontent:"/backup"; nocase; classtype:attempted-recon; sid:1213; rev:5;)

Также можно указать IP-адреса администраторов в качестве переменной в snort.conf и использовать такую переменную для исключения из правил. Кроме этого, Snort использует white\black листы, в которых можно указывать IP-адреса хостов и сетей. Пример:

Preprocessor reputation: \ blacklist /etc/snort/default.blacklist whitelist /etc/snort/default.whitelist

P.S.
Станадртный набор правил Snort (community-rules) распространяется бесплатно, расширенный, содержащий наиболее актуальные сигнатуры известных атак -по платной подписке.
Подробный мануал по Snort на английском языке можно найти по ссылке .
На этом все! Если есть дополнения, замечания, с удовольствием готов обсудить в комментариях.

Snort для Windows требует Windows 2000 или XP; на NT, 98 или 95 выполнение невозможно. Необходимы также установленные библиотеки WinPcap. Если они были установлены для программ, описанных ранее в этой книге, таких как Ethereal или WinDump, тогда все готово. В противном случае можно взять их по адресу

netgroup-serv.polito.it/winpcap

Вам может также потребоваться база данных MySQL , если вы планируете импортировать результаты в базу данных. Конкретная конфигурация MySQL для этой цели описана в "Средства анализа и управления" .

Для того чтобы Snort для Windows демонстрировал ту же производительность, что и UNIX-версия, понадобится более мощная аппаратура,. Машина с процессором 700 МГц - это минимум, но лучше использовать процессор с частотой 1 ГГц и выше. Необходимо также убедиться, что сервер Windows хорошо защищен, на нем выполняется минимум сервисов и удалены программы, активно использующие процессор, такие как IIS. Воспользуйтесь окном Services из Administrative tools Панели управления, чтобы проверить, не запускается ли что-нибудь лишнее.

Установка Snort для Windows

Чтобы установить Snort для Windows, возьмите бинарный файл с прилагаемого к книге компакт-диска или с сайта http://www.snort.org . Сделайте на нем двойной щелчок мышью, и он автоматически установится. Вас спросят, нужна ли вам определенная база данных или дополнительные модули, такие как модуль гибкого реагирования.

Настройка Snort для Windows

Процесс настройки версии Snort для Windows весьма схож с настройкой для UNIX. Все файлы конфигурации и правил находятся в тех же относительных подкаталогах. Войдите в файл snort.conf в подкаталоге etc установки Snort. Измените и отредактируйте его, как предложено в разделе о UNIX-версии. Затем перейдите в файлы правил и произведите изменения там. После этого все будет готово к запуску Snort. Обратитесь к разделу "Запуск Snort" для UNIX, чтобы получить дополнительную информацию о применении Snort для Windows, так как все команды такие же. Дополнительные настройки и рекомендации по размещению - те же, что и для исходной UNIX-версии.

Уголок кодировщиков Флэми Теха

Написание индивидуальных правил Snort

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

  • отслеживания входящего и исходящего доступа для определенных серверов;
  • поиска определенных типов или имен файлов, специфичных для вашей организации;
  • наблюдения за определенными типами трафика, чужеродными для вашей сети;

Научиться писать правила для Snort несложно; это позволит быстро наращивать функциональность программы даже при отсутствии обширных программистских знаний. Как вы видели, все правила Snort являются просто текстовыми инструкциями в одном из файлов правил.

Если нужно, чтобы Snort обнаруживал некое особое поведение, которое в вашей сети будет считаться подозрительным, можно быстро закодировать правило и тут же протестировать это поведение. Правила Snort по сути представляют собой одиночные текстовые строки, начинающиеся с действия (как правило, alert), за которым следует несколько аргументов. В новейшей версии (2.0 и выше) можно добавить несколько строк, просто помещая \ (обратную косую черту) в конце каждой строки, кроме последней. В более сложных случаях можно также вызывать другие программы, используя инструкцию включения. Но в своей базовой форме правило Snort имеет две части: заголовок и параметры. Ниже представлен пример правила.

alert tcp any any 192.168.0.0/24 \ (content:"|00 05 A4 6F 2E|";msg: "Test Alert")

Заголовок является частью перед первой скобкой. Данная инструкция содержит действие (в нашем случае - alert), протокол, а также адреса и порты отправителя и получателя. Действие будет выполняться, если заданное правилом условие истинно. В данном случае будет порождаться сигнал тревоги (alert). Другими вариантами действий служат Log, Pass , Activate и Dynamic.

Протоколами могут быть tcp, udp , icmp или ip, что означает любой IP-протокол. (В будущем могут поддерживаться протоколы не на основе IP, такие как IPX ). Исходный и целевой порты самоочевидны. Исходный адрес идет первым и задается в стандартной нотации с косой чертой для IP-диапазона. Можно также перечислить несколько индивидуальных адресов и сетей, разделяя их запятой без пробелов и заключая в квадратные скобки, например: alert tcp any < 80 \ (content: "|00 05 A4 6F 2E|"; msg : "Test Alert";)

Эта инструкция ориентирована на трафик, приходящий из любых адресов, направляющийся на машины с адресами 192.168.1.1, 192.168.1.5 и 192.168.1.10 в порт 80. При условии, что это ваши web-серверы, приведенное правило будет искать идущий туда трафик, который содержит указанные шестнадцатеричные данные в разделе содержимого.

Второй частью правила Snort служат опции, задающие дополнительные детали выявляемого трафика. Можно искать по набору полей в заголовке TCP/IP (см. описания в "Сетевые анализаторы") или по полезной нагрузке пакета. За каждой опцией должны следовать кавычки и разыскиваемое значение. Можно добавить несколько опций, разделяя их с помощью точки с запятой. Ниже приведены допустимые опции.

msg Предоставляет текстовое описание сигнала тревоги
logto Записывает пакет в заданный пользователем файл вместо стандартного выходного файла
ttl Проверяет значение поля TTL в заголовке IP
tos Проверяет значение поля TOS в заголовке IP
id Сравнивает значение поля идентификатора фрагмента в заголовке IP с указанной величиной
ipoption Ищет поля опций IP с определенными кодами
fragbits Проверяет биты фрагментации в заголовке IP
dsize Сравнивает размер полезной нагрузки пакета с указанным значением
flags Проверяет флаги TCP на соответствие определенным значениям
seq Сравнивает поле порядкового номера TCP с определенным значением
ack Проверяет поле подтверждения TCP на соответствие определенному значению
itype Проверяет поле типа ICMP на соответствие определенному значению
icode Проверяет поле кода ICMP на соответствие определенному значению
icmp_id Проверяет поле ECHO ID ICMP на соответствие определенному значению.
icmp_seq Проверяет порядковый номер ECHO ICMP на соответствие определенному значению
content Ищет определенный шаблон в полезной нагрузке пакета
content-list Ищет определенный набор шаблонов в полезной нагрузке пакета
offset Модификатор для опции содержимого. Задает смещение для начала сопоставления с образцом
depth Модификатор для опции содержимого. Устанавливает максимальную глубину поиска при сопоставлении с образцом
nocase Сравнивает предыдущую цепочку содержимого без учета регистра символов
session Вывод информации прикладного уровня для данного сеанса
rpc Следит за сервисами RPC для выявления определенных вызовов приложений/процедур
resp Активный ответ. Закрывает соединение (например, разрывая его)
react Активный ответ. Отвечает запрограммированным поведением (например, блокированием определенных Web-сайтов)
reference Идентификаторы ссылок на внешние атаки
sid Идентификатор правила Snort
rev Номер версии правила
classtype Классификационный идентификатор правила
priority Идентификатор уровня серьезности правила
uricontent Сопоставление с образцом в части URI пакета
tag Дополнительные действия по протоколированию для правил
ip_proto Значение протокола в заголовке IP
sameip Определяет, не равны ли исходный и целевой IP-адреса
stateless Применимо независимо от состояния потока
regex Сопоставление с образцом с применением метасимволов
byte_test Числовое сравнение
distance Заставляет при относительном сопоставлении с образцом пропустить в пакете определенное число байт
byte_test Числовое сопоставление с образцом
byte_jump Числовое сопоставление с образцом и корректировка смещения

Более подробную информацию о каждой из опций правил можно получить в оперативной справке. Ниже представлены несколько примеров применения этих опций для создания индивидуальных правил Snort msg - метки, появляющейся в журналах сигналов. Дело в том, что нас интересует любой трафик на любой порт. Будет отмечено любое обращение к бухгалтерским серверам, исходящее из внешнего мира, так как предполагается, что любой внешний трафик к этим серверам должен считаться вредоносным.

Пример 2 индивидуального правила

Опираясь на сценарий из примера 1, предположим, что следует разрешить некоторый внешний доступ к бухгалтерским серверам, но, тем не менее, гарантировать, что никто не скопирует определенные файлы. Предположим, что имеется файл с именем payroll.xls, который содержит все данные о зарплате (совершенно секретный файл, как внутри, так и вне организации). Можно написать правило, которое проследит за любым трафиком, внутренним или внешним, направленным на эти серверы и содержащим имя секретного файла. Это можно сделать с помощью опции content, осуществляющей поиск в реальном содержимом пакетов. Правило будет выглядеть примерно так:

alert tcp ! any < any (content: "payroll.xls";msg: "Попытка доступа к файлу зарплат")

Отметим, что знак операции! снова означает, что нас интересует трафик, направленный на бухгалтерские серверы из любого места, кроме этих серверов. Тем самым устраняется сигнализация о межсерверном трафике. Отметим также, что символ \ позволяет писать многострочные правила, а опция content - осуществлять поиск текста payroll.xls в пакетах. В результате серверные машины могут иметь доступ в Интернет, но если этот конкретный файл будет когда-либо выгружаться с них, вы будете об этом оповещены.

С помощью других опций можно писать правила для выявления трафика практически любого вида. Если ваши правила могут представлять интерес для других организаций, стоит послать их разработчикам Snort для вставки в официальный набор распространяемых правил. Если вы решите это сделать, постарайтесь использовать все средства документирования , такие как msg , sid , rev , classtype и priority . Также тщательно протестируйте свои правила, чтобы гарантировать, что они действительно охватывают все виды активности, которую вы пытаетесь поймать, и не дают ложных срабатываний.

С возвращением, мои хакеры!

В мире информационной безопасности наиболее распространенной системой обнаружения вторжений (IDS), с которой вы рано или поздно столкнетесь, является Snort. Как вы, скорее всего, уже знаете, IDS работает аналогично антивирусному программному обеспечению - пытается идентифицировать вредоносное программное обеспечение в вашей сети и предупреждает вас о его присутствии.

Snort, созданный Мартином Рошем (Martin Roesch) в 1999 году, стал настолько популярным, что сетевой гигант Cisco приобрел его в 2014 году. Поэтому в ближайшем будущем вы, скорее всего, увидите его почти на всех устройствах Cisco. И поскольку Cisco является производителем самых популярных сетевых устройств, то скоро Snort будет вам попадаться везде.

Даже если ваша организация никогда не использует продукты Cisco (что маловероятно) или Snort, вам стоит разобраться в том, как работает эта IDS, так как большинство других систем обнаружения вторжений работают схожим образом.

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

Давайте начнем!

Метод 1. Установка Snort из репозиториев

Установка Snort дело простое, если в репозиториях вашей системы есть Snort. К сожалению, в Kali его больше нет, поэтому наш первый шаг - добавить репозиторий, в котором есть Snort. В этом случае мы добавим некоторые репозитории Ubuntu.

Открываем файл /etc/sources.list. Мы можем сделать это с помощью любого текстового редактора (здесь мы будем использовать Leafpad).

Kali> leafpad /etc/apt/sources.list

Как видно на скриншоте выше, мы добавили несколько репозиториев Ubuntu, которые также перечислены ниже. Поскольку Ubuntu является форком Debian (основным Linux-дистрибутивом, на котором построен Kali), то большинство пакетов Ubuntu будут работать и на Kali.

Deb http://ch.archive.ubuntu.com/ubuntu/ saucy main limited deb-src http://ch.archive.ubuntu.com/ubuntu/ saucy main limited deb http://httpredir.debian.org/debian jessie main deb-src http://httpredir.debian.org/debian jessie main

Для того чтобы обновить список наших репозиториев, после сохранения файла необходимо обновить список самих пакетов. Мы можем сделать это, набрав в консоли:

Kali> apt-get update

После того, как наши пакеты обновятся, мы можем установить пакет Snort из репозитория с помощью команды:

Kali> apt-get install snort

Вот и все, что нужно сделать. Snort установлен и готов к работе! Чтобы это проверить, просто введите в консоли:

Kali> snort -V

В нашем случае Snort вывел номер своей версии (в данном случае, 2.9.2).

Метод 2. Установка Snort из исходников

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

Это обеспечит вам лучшую общую производительность. Как и при работе с любой IDS, производительность имеет решающее значение. Более низкая производительность IDS либо замедлит вашу общую способность работать с сетью, либо приведет к появлению drop-пакетов. В первом случае у вас будут недовольны клиенты или пользователи, а во втором вы подвергаете риску безопасность сети.

При использовании Snort в защищенной среде на продакшене установка из исходников является крайне предпочтительной. Кроме того, установка из исходников гарантирует, что вы устанавливаете последнюю версию Snort. Многие из репозиториев содержат более старые версии. Текущая версия Snort - 2.9.8, а в репозиториях - 2.9.2. Небольшая разница, но когда мы пытаемся защитить «сокровище», то каждая деталь будет полезной.

Начнем с создания директории в Kali, куда загрузим исходный код.

Kali> mkdir snort_source

Затем перейдем в эту директорию

Kali> cd snort_source

Прежде чем скачать Snort, необходимо установить Data Acquisition library (библиотеку сбора данных) или DAQ. У DAQ есть несколько зависимостей, которые нам необходимо установить.

Kali> apt-get install -y bison flex

Теперь мы можем скачать и установить DAQ с сайта Snort.

Kali> wget https://www.snort.org/downloads/snort/daq-2.0.6.tar.gz kali> tar -xvzf daq-2.0.6.tar.gz

Затем перейдем в каталог daq.

Kali> cd daq-2.0.6

Наконец, сконфигурируем DAQ и вызовем команду make.

Kali> ./configure kali> make kali> install kali> wget "https://snort.org/snort/snort-2.9.8.0.tar.gz"https://snort.org/snort/snort-2.9.8.0.tar.gz

После того, как он скачается, нужно будет его распаковать. (Для получения дополнительной информации о команде tar, можно ознакомиться с нашей статьей по Основам Linux).

Kali> tar -xvzf snort-2.9.8.0.tar.gz

Перейдем в ту директорию, где находятся новые файлы Snort.

Kali> cd /snort-2.9.8.0

Нужно сконфигурировать его.

Kali> ./configure --enable-sourcefire

После этого нам нужно использовать команду make, которая определяет, какие из компонентов исходного кода должны быть перекомпилированы, а затем дает команду это сделать.

Kali> make

И, наконец, мы делаем установку (make install). Эта команда берет перекомпилированные компоненты программы и размещает их в соответствующих директориях.

Kali> make install

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

Kali> ldconfig

Чтобы запускать Snort из любого каталога, можно сделать символическую ссылку на бинарные (исполняемые) файлы в /usr/local/bin/snort и поместить ее в директорию /usr/sbin, назвав snort. Поскольку /usr/sbin находится в нашей переменной PATH, мы можем ввести Snort в любом месте операционной системы, чтобы начать использовать IDS.

Kali > ln -s /usr/local/bin/snort /usr/sbin/snort

Давайте проверим, нормально ли установился Snort. Для этого наберем в консоли:

Kali> snort

Как мы видим, Snort запустился и успешно работает в режиме дампа пакетов или так называемом режиме сниффера.

Теперь, когда мы успешно установили Snort, продолжим его настройку для обнаружения вредоносного программного обеспечения. Это будет в нашей следующей статье этой серии, так что обязательно возвращайтесь!

Отказ от ответственности : Эта статья написана только для образовательных целей. Автор или издатель не публиковали эту статью для вредоносных целей. Если читатели хотели бы воспользоваться информацией для личной выгоды, то автор и издатель не несут ответственность за любой причиненный вред или ущерб.
Поделиться