Установка и настройка IDS Snort. Системы обнаружения вторжений Установка и настройка 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 на базе 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 – относится к свободному программному обеспечению и является мощным инструментом предотвращения вторжений (IPS) с открытым исходным кодом. На данный момент последней версией утилиты является 2.8.6.1 от 22.07.2010.

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

Разработчики выделяют три режима работы snort:

  • режим снифера;
  • режим регистратора пакетов;
  • режим сетевой системы выявления атак.

В режиме снифера snort просто выводит в стандартный поток вывода результатов содержание (частично или полностью) пакетов, которые перехватывает в сети. В режиме регистратора пакетов – сохраняяет перехваченные пакеты в указанном каталоге файловой системы. В режиме сетевой системы выявления атак – анализирует трафик сети на соответствие предварительно сформулированным пользователем правилам и выполняет определенные пользователем действия в случае такого соответствия.

Во всех режимах пользователь может задать правила фильтрации сетевого трафика. Синтаксис этих правил такой же, как и в программе tcpdump (windump) (только немного в укороченном виде). Источником данных может быть не конкретно сеть, а предварительно сформированный регистрационный файл. Snort может одновременно находиться в любых двух из этих режимов или во всех трех одновременно.

Режим снифера

Указателем режима снифера является наличие в командной строке snort опций -v, -d или -e. Опция -v разрешает вывести IP-, TCP-, UDP- и ICMP-заголовки пакетов. Опция -d – данные пакетов. Опция -e – Ethernet-заголовки.

Выводит заголовки и данные TCP-пакетов.

#snort -v -d icmp

То же самое, но для ICMP-пакетов.

Режим регистратора пакетов

Указателем режима регистратора пакетов является наличие в командной строке опции -l.

#snort -v -l log

Регистрирует IP-, TCP-, UDP- и ICMP-заголовки всех пакетов в каталоге log (причем для каждого пакета создается отдельный текстовый файл).

Заметим, что каталог регистрации (в данном случае – log) должен существовать.

#snort -l log -b icmp

Регистрирует ICMP-пакеты в каталоге log в двоичном (binary) формате, совместимым с форматом регистрации tcpdump.

Двоичный файл регистрации позднее может быть прочитан с помощью snort (или любого другого средства, которое поддерживает формат регистрации tcpdump, например, windump или Analyzer).

#snort -vd -r log\packet.log udp

Выводит на дисплей заголовки и данные UDP-пакетов, которые были предварительно зарегистрированы в файле log\packet.log.

Режим сетевой системы выявления атак

Указателем режима сетевой системы выявления атак является наличие в командной строке опции -c.

#snort -c snort.conf

Запускает snort в режиме сетевой системы выявления атак в соответствии с правилами, определенными в файле snort.conf.

Заметим, что работа snort в режиме сетевой системы выявления атак нуждается в, как правило, регистрации пакетов. Поэтому командная строка рядом с опцией -c часто также включает опцию -l (при отсутствии этой опции пакеты регистрируются в каталоге /var/log/snort). Запретить регистрацию пакетов в режиме сетевой системы выявления атак можно с помощью опции -N.

Конфигурация режима (способа) вывода сигналов тревоги

Режим по умолчанию: вывод в текстовый файл alerts.ids в каталоге регистрации. Формат вывода включает пометку времени, объясняющее сообщение и содержание (частично) заголовков пакета, который послужил причиной сигнала тревоги.

Получение справки о синтаксисе командной строки snort

Краткую справку о синтаксисе командной строки snort можно получить, запустив snort с опцией -?:

Исчерпывающая справка содержится в man-странице snort.

Написание правил выявления атак

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

Написание бесконтекстных правил

Каждое правило делится на две логических секции: заголовок и опции. Заголовок включает:

  • обозначение действия, которое должно выполняться в случае выполнения правила;
  • обозначение протокола;
  • IP-адрес источника и назначения;
  • порты источника и назначения.

Опции включают определение дополнительных критериев выполнения правила и определение дополнительных реагирующих действий. Общий синтаксис правил snort:

header (options)

Опции являются необязательной частью правил. В более конкретном плане:

action proto IP1/mask1 port1 ->|< > IP2/mask2 port2 (keyword1: value; \

keyword2: value2; …;)

Пример правила:

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.

Опциями: content:»|00 01 86 a5|»; msg: «mountd access»;.

Это правило можно растолковать таким образом:

  • выдавать сигнал тревоги, если из любого места на 111 порт любого узла сети 192.168.1.0/24 поступит TCP-пакет, который содержит в своих данных последовательность 00 01 86 a5 (в шестнадцатиричном представлении);
  • сигнал тревоги сопровождать сообщением «mountd access».

Заголовки правил

Обозначение действий, которые должны выполняться в случае выполнения правил

Предусмотрено 5 стандартных вариантов действий snort в случае, если пакет отвечает одному из правил (соответственно, 5 возможных значений action):

  • alert: выдать сигнал тревоги и зарегистрировать пакет;
  • log: зарегистрировать пакет;
  • pass: проигнорировать пакет (т.е. не выполнять никаких действий);
  • activate: выдать сигнал тревоги и активизировать соответствующее динамическое (dynamic) правило;
  • dynamic: не выполнять никаких действий, пока правило не будет активизировано некоторым activate-правилом; после активизации правила действовать так, как и в случае log-правила.

Конструкция с activate и dynamic применяется для того, чтобы в случае выявления начала атаки получить более подробный протокол дальнейших действий атакующего.

Обозначение протоколов

На данный момент поддерживаются 4 протокола (соответственно, 4 значения proto): ip, tcp, udp и icmp.

Обозначение IP-адреса

Ключевое слово “any” применяется в значении “любой адрес”. Конкретные адреса задаются в формате: IP/mask, где IP – IP-адрес сети или узла, mask – маска сети. Маска сети задается как десятичное число, которое равняется числу единиц в двоичной маске. Например, обозначение 192.168.1.0/24 означает IP-сеть класса C с адресом 192.168.1.0 (число 24 эквивалентное шестнадцатиричной маске FF.FF.FF.0); обозначение 192.168.5.151/32 означает отдельный узел с IP-адресом 192.168.5.151. К IP-адресу может быть применен оператор возражения «!». Например, если приведенный выше пример правила модифицировать таким образом:

alert tcp !192.168.1.0/24 any -> 192.168.1.0/24 111 \

(content: «|00 01 86 a5|»; msg: «external mountd access»;)

сигнал тревоги будет выдаваться только в том случае, если TCP-пакеты будут поступать на 111 порт узлов сети 192.168.1.0/24 извне.

Можно указать также список IP-адресов. Такой список оформляется следующим образом:

alert tcp ! any -> \

111 (content: «|00 01 86 a5|»; \

msg: «external mountd access»;)

Обозначение портов

Ключевое слово “any” применяется в значении “любой порт”. Конкретные порты задаются десятичными числами. С помощью оператора «:» можно задавать диапазоны портов:

log udp any any -> 192.168.1.0/24 1:1024

означает, что будут регистрироваться UDP-пакеты любого происхождения, направленные на порты от 1 до 1024 сети 192.168.1.0/24.

log tcp any any -> 192.168.1.0/24:6000

означает, что будут регистрироваться TCP-пакеты любого происхождения, направленные на порты с номерами, которые меньше или равняют 6000, узлов сети 192.168.1.0/24.

log tcp any:1024 -> 192.168.1.0/24 500:

означает, что будут регистрироваться TCP-пакеты, которые поступают из портов с номерами, которые меньше или равняют 1024, любых узлов на порты с номерами, которые больше или равняют 500, узлов сети 192.168.1.0/24.

К номерам или диапазонам портов может быть применен оператор возражения «!».

Опции правил

Опции отделяются одна от одной с помощью символа «;» (последняя опция в списке тоже должна заканчиваться этим символом). Ключевые слова (keywords) опций отделяются от их аргументов (values) символом «:».

Стандартные ключевые слова

Ниже приведено краткое описание некоторых стандартных ключевых слов.

msg — выводить сообщение вместе с сигналом тревоги или протоколом пакета. Формат:

msg: «»;

ttl — проверять значение поля TTL IP-заголовка. Формат:

ttl: ;

content — проверять, не содержит ли пакет определенных данных. Формат:

content: [!] «»;

Здесь “!” – оператор возражения. Примеры:

content: «|90C8 C0FF FFFF|/bin/sh»;

Данные пакета должны содержать фрагмент, который состоит из байтов 90 C8 C0 FF FF FF (в шестнадцатиричном формате) и текста /bin/sh.

content: !»GET»;

Данные пакета не должны содержать текст GET.

session — регистрировать данные прикладного уровня. Формат:

session: ;

Аргумент printable означает, что регистрировать нужно только те данные, которые отображаются на дисплее или для устройства печати. Аргумент all дает возможность зарегистрировать данные полностью. Например, правило

log tcp any any < > 192.168.1.0/24 23 (session: printable;)

разрешает зарегистрировать все telnet-сессии пользователей сети 192.168.1.0/24.

resp — применить определенные активные реагирующие действия, которые разрешают прервать нежелательное соединение. Формат:

resp: ;

где resp_modifier может принимать такие значения:

  • rst_snd – прислать на сокет источника пакета пакет TCP RST;
  • rst_rcv – прислать на сокет назначения пакета пакет TCP RST;
  • rst_all – прислать пакеты TCP RST в обоих направлениях;
  • icmp_net – прислать источнику пакета сообщение ICMP «Network Unreachable»;
  • icmp_host – прислать источнику пакета сообщение ICMP «Host Unreachable»;
  • icmp_port — прислать источнику пакета сообщение ICMP «Port Unreachable»;
  • icmp_all – прислать источнику пакета все указанные ICMP-сообщения.

Эту опцию нужно применять с большой осторожностью, поскольку, во-первых, можно помешать нормальному трафику, во-вторых, ввести snort в бесконченый цикл.

Написание контекстных правил (подключение препроцессоров)

Контекстная обработка пакетов осуществляется специальными модулями snort, которые имеют название препроцессоры (preprocessors). Специфика функционирования препроцессоров заключается, прежде всего, в том, что они имеют возможность запоминать предыдущий трафик (в определенном аспекте и объеме). Другой важной особенностью препроцессоров является возможность модифицировать данные, которые поступают на модуль бесконтекстного анализа пакетов (например, выполнять дефрагментацию пакетов). Каждое контекстное правило, в сущности, является директивой подключения того или иного препроцессора. Общий формат этих директив:

preprocessor :

где name — имя препроцессора.

Формат options для каждого препроцессора определяется отдельно

Подключение препроцессора Portscan

Препроцессор Portscan обнаруживает и регистрирует сеансы сканирования портов. TCP-сканирование с полным или неполным установлениям соединений и UDP-сканирования определяются по критерию, который можно сформулировать как “поступление с одного узла попыток подключения к n или более портов объекта защиты за T секунд”. Параметры n и T задаются в секции options директивы препроцессора Portscan. TCP stealth-сканирования определяется по поступлению хотя бы одного TCP-пакета соответствующего формата. Формат директивы:

preprocessor portscan:

Где monitor network – это IP-адрес сети, которая рассматривается как возможный объект сканирования, number of ports – указанный выше параметр n, detection period – указанный выше параметр T, file path – имя файла для регистрации. Пример.

SNORT представляет собой систему IDS (Intrusion Detection System) с открытым исходным кодом, которая позволяет обнаружить любую подозрительную сетевую активность, сравнивая встроенные правила обнаружения вредоносного траффика с данными, проходящими по локальной сети организации. Фактически, так работает любой антивирус, но сходство на этом заканчивается, потому что предназначение у этих систем совершенно разное, очень важно правильно понимать цели и задачи систем IDS и не путать их с другими средствами защиты.

Система IDS предназначена для того, чтобы блокировать действия злоумышленника на стадии изучения вашей сети :

  • обнаружить подозрительную сетевую активность,
  • выявить известные инструменты для анализа и взлома сетей, используемые злоумышленником
  • и при возможности воспрепятствовать противоправной деятельности.

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

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

Настройка

Технология IDS бесплатна, но относительно сложна в установке и поддержке, скорее всего, вам не удастся просто установить IDS SNORT (как мы это делаем с брандмауэром и антивирусом) и забыть о нем. Программа и базовый набор правил обнаружения скачиваются с сайта snort.org . Если оставить все настройки системы по умолчанию, то вы получите множество уведомлений о потенциально небезопасных действиях в локальной сети, даже команда ping будет вызывать соответствующую тревогу. Придется потратить время, чтобы изучить систему, разобраться в том, как работают правила обнаружения и произвести соответствующие настройки, но это позволит избежать многих сотен или даже тысяч избыточных уведомлений и избавит системного администратора от головной боли.

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

IDS работает под Linux, Windows, SunOS и с другими операционными системами.

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

Не стоит забывать, что абсолютной защиты не существует, вопрос лишь в правильных настройках системы IDS, которые позволят должным образом реагировать на существующие и ранее неизвестные угрозы. Разработчики вредоносного ПО также не останавливаются на достигнутом и постоянно совершенствуют свои инструменты, поэтому нужно регулярно обновлять сигнатуры IDS.

5 мин на чтение

Содержание

Snort является сетевой системой обнаружения (IDS) и предотвращения вторжений (IPS) с открытым исходным кодом, способная выполнять регистрацию пакетов и в реальном времени осуществлять анализ трафика в IP-сетях, комбинируя возможности сопоставления по сигнатурам, средства для инспекции протоколов и механизмы обнаружения аномалий. Snort был создан Мартином Решем в 1998-м году и очень быстро завоевал популярность, как бесплатная система обнаружения вторжений, позволяющая самостоятельно и без особых усилий писать правила для обнаружения атак. По сути язык описания сигнатур Snort стал стандартом де-факто для многих систем обнаружения вторжений, которые стали его использовать в своих движках.

Структура и функционирование Snort

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

  • Плохой трафик
  • Использование эксплойтов (выявление Shellcode)
  • Сканирование системы (порты, ОС, пользователи и т.д.)
  • Атаки на такие службы как Telnet, FTP, DNS, и т.д.
  • Атаки DoS/DDoS
  • Атаки связанные с Web серверами (cgi, php, frontpage, iss и т.д.)
  • Атаки на базы данных SQL, Oracle и т.д.
  • Атаки по протоколам SNMP, NetBios, ICMP
  • Атаки на SMTP, imap, pop2, pop3
  • Различные Backdoors
  • Web-фильтры (чаще используетя для блокировки порно контента)
  • Вирусы

Вы можете настроить Snort для работы в нескольких различных режимах - режим анализа пакетов, режим журналирования пакетов, режим обнаружения сетевых вторжений и встраиваемым (inline) режим. Snort может быть сконфигурирован для работы в этих режимах:

Режиме анализа пакетов (Sniffer mode)

Snort просто читает пакеты приходящие из сети и выводит их на экран. В этом режиме Snort действует просто как анализатор, показывая нефильтрованное содержимое среды передачи. Конечно, если вам требуется только анализатор, можно применить Tcpdump или Ethereal, однако данный режим позволяет убедиться, что все работает правильно и Snort видит пакеты.

Опции Snort:

Режиме журналирования (протоколирования) пакетов (Packet Logger mode)

Позволяет записывать пакеты на диск для последующего анализа. Это полезно при проведении анализа за определенный интервал времени или проверки изменений в настройках и политике безопасности. Чтобы запустить Snort в режиме журналирования, воспользуйтесь той же командой, что и для режима анализа (-v, -d и/или -e), но с добавлением ключа -l каталог_журналов, задающего маршрутное имя каталога журналов, в которые Snort будет записывать пакеты. Пример:

snort -vde -l /var/log/snort

Эта команда создаст файлы журналов в каталоге /var/log/snort.

Режиме обнаружения сетевых вторжений (Network Intrusion Detection System (NIDS) mode)

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

Встраиваемым режим (inline mode)

Режим работы совместно с файерволом iptables. Для того, чтобы запустить в этом режиме, необходимо добавить дополнительный ключ Q: ./snort -GDc ../etc/drop.conf -l /var/log/snort Перед запуском в этом режиме необходимо убедиться, что программа установлена с поддержкой данного режими. После этого следует настроить файервол для взаимодействия со Snort.

Архитектура Snort

Основу Snort составляет движок, состоящий из пяти модулей:

    Снифер пакетов: данный модуль отвечает за захват передаваемых по сети данных для последующей их передаче на декодер. Делает он это с помощью библиотеки DAQ (Data AcQuisition). Работать данный снифер может “в разрыв” (inline), в пассивном режиме (passive) или читать сетевые данные из заранее подготовленного файла.

    Декодер пакетов: данный модуль занимается разбором заголовков захваченных пакетов, их разбором, поиском аномалий и отклонений от RFC, анализом TCP-флагов, исключением отдельных протоколов из дальнейшего анализа и другой аналогичной работой. Фокусируется данный декодер на стеке TCP/IP.

    Препроцессоры: если декодер разбирал трафик на 2-м и 3-м уровне эталонной модели, то препроцессоры предназначены для более детального анализа и нормализации протоколов на 3-м, 4-м и 7-м уровнях. Среди самых популярных препроцессоров можно назвать frag3 (работа с фрагментированным трафиком), stream5 (реконструкция TCP-потоков), http_inspect_ (нормализация HTTP-трафика), DCE/RPC2, sfPortscan (применяется для обнаружения сканирования портов) и различные декодеры для протоколов Telnet, FTP, SMTP, SIP, SSL, SSH, IMAP и т.п. Некоторые российские разработчики пишут свои препроцессоры (например, для промышленных протоколов) и добавляют в собственные системы обнаружения вторжений (IDS), построенные на базе Snort.

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

    Модуль вывода: по факту обнаружения атаки Snort может выдать (записать или отобразить) соответствующее сообщение в различных форматах - файл, syslog, ASCII, PCAP, Unified2 (двоичный формат для ускоренной и облегченный обработки).

Рассмотрим простое графическое представление прохождения данных через Snort:

Метки: , ,

Разделы: