Установка и настройка IDS Snort. Snort: инструмент выявления сетевых атак Установка snort

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

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

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

Данное руководство описывает, как установить и настроить систему обнаружения вторжения (IDS) с пакетами Snort, ACIDBASE (основной модуль анализа и обеспечения безопасности), MySQL и Apache2 в Ubuntu 9.04 с помощью менеджера пакетов Synaptic Ubuntu. Snort поможет вам в мониторинге вашей сети и предупредит о возможных угрозах. При этом Snort сформирует файлы протоколов для базы данных MySQL, а ACIDBASE позволит отобразить их в графическом интерфейсе в веб-браузере.

1. Подготовка системы и установка программного обеспечения.

1.1 Установка.

Загрузите 32-битную или 64-битную версию Desktop Ubuntu 9.04 отсюда: http://www.ubuntu.com/getubuntu/download

1.2 Системные и сетевые настройки

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

  • Размещение в демилитаризованной зоне (DMZ).
  • Статический IP-адрес, скрытый с помощью NAT за файерволом.
  • Подключение к порту мониторинга на сетевом коммутаторе (SWITCH).

Создайте нового администратора с именем <ваше_имя> и паролем <ваш_пароль> .

1.3 Установка программного обеспечения.

Первое, что необходимо сделать после завершения установки, - установить все рекомендованные Ubuntu обновления. Для доступа к обновлениям перейдите в меню: System > Administration > Update Manager (Система > Администрирование > Менеджер обновлений). Введите свой пароль и выберите Check (Проверить) . Выберите Install Updates (Установить обновления) .

С рабочего стола перейдите в System > Administration > Synaptic Package Manager (Система > Администрирование > Менеджер пакетов Synaptic) . Введите свой пароль и выберите Search (Поиск) .

Найдите и установите следующие пакеты:

  • Acidbase со всеми зависимыми пакетами
  • Snort-MySQL со всеми зависимыми пакетами
  • MySql-server-5.0 со всеми зависимыми пакетами
  • Libpcap0.8-dev
  • libmysqlclient15-dev
  • MySql-client-5.0
  • Bison
  • Apache2
  • Libapache2-mod-php5
  • Php5-gd
  • Php5-mysql
  • Libphp-adodb
  • Php-pear

2. Получите права суперпользователя

С рабочего стола перейдите в меню: Applications > Accessories > Terminal (Приложения > Дополнения > Терминал) и введите команду:

$ sudo -i
$ введите пароль

3. Настройка Snort

Для того, чтобы установить индивидуальные настройки, необходимо изменить файл настроек snort.conf .

С помощью текcтового редактора (nano, vi, vim или другого) откройте файл /etc/snort/snort.conf .

# vim /etc/snort/snort.conf

Измените переменную var HOME_NET any на var HOME_NET 192.168.1.0/24 (адрес вашей домашней сети может отличаться от адреса 192.168.1.0). Если вы ведете мониторинг нескольких сетей, необходимо указать все эти сети следующим образом: var HOME_NET . Измените var EXTERNAL_NET any на var EXTERNAL_NET !$HOME_NET (устанавливаются все переменные, кроме внешней переменной HOME_NET).

Измените var RULE_PATH ../rules на var RULE_PATH /etc/snort/rules . Прокрутите список до того места, где указана строка # output database: log, mysql, user= , удалите знак # из начала строки.

Пример: output database: log, mysql, user= password= dbname=snort host=localhost

(смотрите выше, когда создавался новый пользователь).

Запишите имя пользователя, пароль и название базы данных (dbname). При установке базы данных MySQL вам потребуются эти данные. Сохраните изменения и выйдите.

4. Установка баз данных Snort и Archive в MySQL

4.1 Установка MySQL

Войдите на сервер MySQL.

# mysql -u root -p

Иногда бывает так, что пароль не установлен, так что просто нажмите "Enter".

Если вход не выполняется, попробуйте еще раз набрать указанную выше команду и введите ВАШ_ПАРОЛЬ.

Если пароль отсутствует, вам необходимо установить пароль для учетной записи суперпользователя.

Примечание: Когда вы на сервере MySQL, в приглашении вместо символа "#" отображается группа символов "mysql>"

mysql> create user @localhost;
mysql> SET PASSWORD FOR r@localhost=PASSWORD();
mysql> SET PASSWORD FOR root@localhost=PASSWORD();

4.2 Создание базы данных Snort

mysql> create database snort; mysql> grant INSERT,SELECT on root.* to snort@localhost; mysql> grant CREATE,INSERT,SELECT,DELETE,UPDATE on snort.* to @localhost; mysql> grant CREATE,INSERT,SELECT,DELETE,UPDATE on snort.* to snort;

4.3 Создание базы данных Archive

mysql> create database archive; mysql> grant CREATE,INSERT,SELECT,DELETE,UPDATE on archive.* to @localhost; mysql> grant CREATE,INSERT,SELECT,DELETE,UPDATE on archive.* to archive; mysql> exit

4.4 Создание таблиц в базах данных Snort и Archive

Мы будем использовать схему Snort для компоновки баз данных Snort и Archive.

# cd /usr/share/doc/snort-mysql # zcat create_mysql.gz | mysql -u -h localhost -p snort # zcat create_mysql.gz | mysql -u -h localhost -p archive

4.5 Подтверждение создания баз данных и вновь созданных таблиц.

Войдите на сервер MySQL и проверьте базы данных, которые мы только что создали, и таблицы, размещенные в этих базах данных. Если все было успешно создано, вы увидите четыре (4) базы данных (mysql, test, snort и archive) в базах данных mysql и приблизительно по 16 таблиц в каждой базе данных.

# mysql -u root -p mysql> show databases; mysql> use snort; mysql> show tables; mysql> use archive; mysql> show tables; mysql> exit

4.6 Тестирование Snort

В режиме терминала наберите команду: # snort -c /etc/snort/snort.conf

Если все прошло успешно, вы должны увидеть ответ в кодах ascii.

Для завершения теста нажмите ctrl + c

5. Настройка Apache2

На компьютере должен быть уже установлен пакет Apache2.

С помощью вашего любимого текстового редактора создайте файл с именем test.php в папке /var/www/ .

# vim /var/www/test.php

Запишите в нем:

Сохраните изменения и закройте этот файл.

Отредактируйте файлt /etc/php5/apache2/php.ini

# vim /etc/php5/apache2/php.ini

Под строкой "Dynamic Extensions" добавьте следующее:

Extension=mysql.so extension=gd.so

Перезагрузите Apache2.

# /etc/init.d/apache2 restart

Получите IP-адрес вашего рабочего компьютера.

# ifconfig -a

Откройте веб-браузер и перейдите по адресу http://ВАШ_IP_АДРЕС/test.php .

Если все прошло успешно, отобразится информация по РНР.

6. Конфигурирование папок

Переместите ADOdb в папку /var/www .

# mv /usr/share/php/adodb /var/www/

Создайте папку с именем web в www и переместите в нее ACIDBASE.

# mkdir /var/www/web # mv /usr/share/acidbase /var/www/web/

Временно разрешите запись в папку базы acidbase для ее установки.

# chmod 777 /var/www/web/acidbase

# cd /var/www/web/acidbase # mv base_conf.php base_conf.old

Для работы в ACIDBASE выполните команду:

# pear install Image_Color

7. Установка ACIDBASE для баз данных Snort и Archive

7.1 Установка базы данных Snort через веб-браузер

Шаг 1 из 5:

Введите путь к ADODB. Это /var/www/adodb .

Шаг 2 из 5:

Main Database type = MySQL (Тип основной базы данных),
Database name = snort (База данных Snort),
Database Host = localhost (Локальное расположение базы данных Snort),
Database username = <ваше_имя_пользователя> (Имя пользователя базой данных Snort),
Database Password = <ваш_пароль> (Пароль для базы данных Snort)

Archive Database type = MySQL (Тип базы данных Archive),


Database username = <ваше_имя_пользователя>
Database Password = <ваш_пароль>

Шаг 3 из 5:

Если вы хотите использовать аутентификацию, введите имя пользователя и пароль (user: <ваше_имя> , password: <ваш_пароль>).

Шаг 4 из 5:

Щелкните мышкой Create BASE AG (Создать BASE AG).

Шаг 5 из 5:

Когда шаг 4 выполнен, в нижней части щелкните: Now continue to step 5 (Теперь переходите к шагу 5) .

Добавьте эту страницу в закладки.

7.2 Создайте папку для базы данных Archive ACIDBASE

Чтобы архивная база данных корректно работала, в папке ACIDBASE должна быть создана папка archive .

# mkdir /var/www/web/acidbase/archive # cd /var/www/web/acidbase # cp -R * /var/www/web/acidbase/archive # chmod 777 /var/www/web/acidbase/archive

Переименуйте существующий файл base_conf.php в base_conf.old .

# cd /var/www/web/acidbase/archive # mv base_conf.php base_conf.old

7.3 Установка базы данных Archive через веб-браузер.

Откройте веб-браузер и перейдите по адресу http://ВАШ_IP_АДРЕС/web/acidbase/archive/setup .

На первой странице щелкните "Продолжить".

Шаг 1 из 5:

Введите путь к ADODB. Это /var/www/adodb. >

Шаг 2 из 5:

Archive Database type = MySQL (Тип базы данных),
Database name = archive (База данных Archive),
Database Host = localhost (Локальное расположение базы данных Archive),
Database username = <ваше_имя_пользователя> (Имя пользователя базой данных Archive),
Database Password = <ваш_пароль> (Пароль для базы данных Archive)

Шаг 3 из 5:

Если вы хотите использовать аутентификацию, введите имя пользователя и пароль(user: <ваше_имя_пользователя> , password: <ваш_пароль>).

Шаг 4 из 5:

Щелкните на Create BASE AG (Создать BASE AG) .

Шаг 5 из 5:

Когда шаг 4 пройден, внизу щелкните: Now continue to step 5 (Теперь переходите к шагу 5).

8. Запуск Snort и проверка статуса сервисов.

Чтобы запустить Snort наберите в режиме терминала:

# snort -c /etc/snort/snort.conf -i eth0 -D

Эта команда запускает snort с использованием интерфейса eth0 в демо-режиме.

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

# ps aux | grep snort

Если сервис работает, вы увидите что-то, похожее на следующее snort -c /etc/snort/snort.conf -i eth0 -D .

Убедитесь, что все необходимые сервисы работают путем выполнения следующих команд:

# /etc/init.d/mysql status # /etc/init.d/apache2 status # /etc/init.d/snort status

Если сервисы работают, вы увидите ответное сообщение .

Если нужно, запустите команду
# /etc/init.d/ restart
для каждого из сервисов, который должен быть перезапущен.

Введение

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

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

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

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

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

Установка и настройка IDS Snort

Snort: Установка на ОС Windows XP

При установке Snort на операционную систему Windows могут возникнуть некоторые сложности. Поэтому в этой работе уделяется достаточно подробная часть установки и возможностей настройки. Для начала нужно скачать требуемые программы на рабочий компьютер.

Правила для Snort.

Все вышеуказанное скачивается с официальных сайтов этих приложений.

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

var RULE_PATH c:snort ules

var SO_RULE_PATH c:snortso_rules

var PREPROC_RULE_PATH c:snortpreproc_rules

dynamicpreprocessor directory c:snortlibsnort_dynamicpreprocessor

dynamicengine c:snortlibsnort_dynamicenginesf_engine.dll

#dynamicdetection directory /usr/local/lib/snort_dynamicrules

Находим подобные строчки в конфигурационном файле и заменяем теми которые предоставлены выше. После этого пробуем протестировать приложение. Запускаем командную строку и переходим к каталогу приложения в раздел "bin". Введем команду "snort -W"

Рис. 1.1.

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

С:Snortinsnort -i 3 -c C:snortetcsnort.conf -l C:snortlog -A console

Разберем теперь команду которую мы ввели. "- i 3" означает что мы будем просматривать интерфейс который имеет ID= 3 в списке наших интерфейсов. Затем мы указали путь до файла конфигурации и путь до каталога куда следует записывать "log" перехваченных пакетов. "-A console" обозначает что тревожные пакеты будут выявляться у нас в консоли. Если во время обработки возникают какие либо неполадки устраняем их по ходу выявления. Snort указывает строку и вид ошибки при сборке. Если все сработало, то мы ничего не увидим до тех пор пока не сработает одно из запущенных правил. Что бы задействовать одно из них попробуем имитировать сетевую атаку и запустим подозрительный пакет по нашей локальной сети. Для этого к примеру откроем командную строку и введем следующее: "Ping 192.168.1.16". Snort перехватит попытку прослушать хост под адресом 192.168.1.1624 и выведет сообщение и информацию об подозрительном действии в сети. К сожалению у подобных IDS систем есть сильный недостаток -это ложные срабатывания. В связи с этим для того что бы Snort был полезным и не вводил в заблуждение, нужно достаточно емко и четко прописывать правила и разграничивать просматриваемые сети, что бы избежать этих ложных срабатываний.


Рис. 1.2.

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

1. Что такое IDS.

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

Для того, чтобы узнать про атаки, ну или просто быть в курсе всех событий, происходящих на сервере, многие админы ежедневно просматривают журналы регистрации – логи. Но когда лог файл, например веб-сервера Apache, за день вырастает на 10 Mb, то приходиться автоматизировать процесс контроля безопасности сервера. Одним из решений являются IDS – системы обнаружения вторжения, эффективность которых за последние несколько лет значительно возросла, и теперь они являются неотъемлемой частью любой сетевой защиты.

Из многих разновидностей IDS (Intrusion Detection System), можно выделить две: основанные на анализе протокола (выявляющие пакеты несоответствующие стандартам), и основанные на анализе сигнатур (в пакетах ищется сигнатура атаки – строка (образец) указывающая на принадлежность данного пакета к вредному трафику. Такие IDS называют NIDS (Network Intrusion Detection System). В общем принцип действия NIDS можно описать так: весь трафик анализируется на наличие пакетов содержащих вредоносные данные, и если такой пакет находиться, то выполняются различные сигнализирующие действия (выводится сообщение на консоль, посылается почта, пишется в лог, отправляется Winpopup сообщение и.т.д.). Оба типа IDS имеют свои достоинства и недостатки, например анализ протоколов работает более медленно из-за преобразования пакета в вид доступный для анализа. Зато ложных тревог намного меньше, так как регистрируются действительно реальные отклонения от стандартов. IDS на основе анализа сигнатур более быстры, и к тому же легко настраиваются и обновляются (увидел новую уязвимость, добавил ее в базу, и твой IDS ее обнаружит). Но лучше все таки использовать IDS на основе двух методов анализа, это даст действительно прекрасный результат.

2. Краткий обзор IDS

На данный момент существует огромное количество IDS, каждая из которых обладает своими качествами и недостатками. Приведу краткое описание некоторых из них (данные сведения о программах взяты с сайта www.opennet.ru , там же вы можете и найти все эти IDS):

PortSentry

Программа позволяющая в реальном режиме времени определить и блокировать попытки сканирования UDP и TCP портов сервера. Определяются также скрытые попытки сканирования портов (SYN/half-open, FIN, NULL, X-MAS, oddball).

Система анализа и слежения (ведения логов) за проходящими пакетами, распознаются такие атаки как "buffer overflows, stealth port scans, CGI attacks, SMB probes, OS fingerprinting attempts". Присутствует возможность real-time извещения администратора при обнаружении атаки

Nidsbench

Система тестирования сети на предмет типовых уязвимостей и выяснения реакции установленной системы обнаружения попыток несанкционированного доступа. Присутствует неплохая подборка документации по NIDS.

Монитор TCP/IP трафика, способен вести логи о проходящем трафике, обнаруживать сканирования портов, флуд и некоторые виды атак.

Библиотека для построения NIDS систем, эмулирует TCP/IP стэк Linux 2.0.x, что позволяет не только перехватывать пакеты (хаотично идущий набор пакетов), как делает большинство снифферов (например, libpcap, tcpdump), но и отслеживать отдельные сессии (например, перехватывать SMTP трафик и разделять каждую SMTP сессию) с учетом дефрагментации и сборки TCP кусков пакетов. Работает под Linux, *BSD и Solaris.

Программа позволяет отследить и поместить в лог файл все данные проходящие через последовательный порт.

Это далеко не все IDS, и даже не самые известные, но эти легко найти.

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

3. Установка и настройка Snort

Для начала скачаем Snort с сайта www.snort.org .Вот прямая ссылка на последнюю версию на данный момент http://www.snort.org/dl/binaries/linux/snort-1.9.1-1snort.i386.rpm . Также существуют различные модификации Snort, например с поддержкой MySQL, postgresql, snmp, все это вы можете скачать с этого же сайта, а наш вариант программы я выбрал, как самый легкий в установке.

Установка достаточна проста:

rpm –i snort-1.9.1-1snort.i386.rpm

После этого все необходимые файлы будут скопированы в систему.

Теперь необходимо настроить программу под себя, чем мы сейчас и займемся... Перейдем в директорию /etc/snort , здесь вы можете найти базы сигнатур (точнее их можно назвать правилами, по которым Snort определяет вредный трафик) и несколько файлов конфигурации, нам нужен snort.conf. Тут настраиваем переменные переменные типа HOME_NET, EXTERNAL_NET и другие... Разобраться будет нетяжело, так как каждая опция сопровождается довольно внятными комментариями, хоть и на английском. В самом конце конфигурационного файла идут подключаемые сигнатуры, ненужные можно закомментировать, для повышения производительности.

Приведу пример своего конфига:


# Шаг #1: Установка переменных касающихся сети
# Измените IP, на адреса вашей локальной сети
# Можно указать несколько диапазонов, разделяя их запятыми
var HOME_NET 192.168.168.0/24
var EXTERNAL_NET !$HOME_NET
var DNS_SERVERS $HOME_NET
var SMTP_SERVERS $HOME_NET
var HTTP_SERVERS $HOME_NET
var SQL_SERVERS $HOME_NET
var TELNET_SERVERS $HOME_NET
var ORACLE_PORTS 1521
var HTTP_PORTS 80
var SHELLCODE_PORTS !80

# Путь к сигнатурам
var RULE_PATH /etc/snort

#Подключаем необходимые файлы содержащие классификацию обнаруженной атаки и ссылки на
# багтраки

Include classification.config
include reference.config

###################################################

# Шаг #2: Настройка механизма обнаружения атак

Preprocessor frag2
preprocessor stream4: detect_scans, disable_evasion_alerts
preprocessor stream4_reassemble
preprocessor http_decode: 80 unicode iis_alt_unicode double_encode iis_flip_slash full_whitespace
preprocessor rpc_decode: 111 32771
preprocessor portscan: $HOME_NET 4 3 portscan.log
# Мне пришлось добавить эту опцию, из за некоторых специфических программ, используемых в моей
# сети, из за которых часто случались ложные срабатывания
preprocessor portscan-ignorehosts: 192.168.168.0/24
preprocessor arpspoof
preprocessor conversation: allowed_ip_protocols all, timeout 60, max_conversations 32000
preprocessor portscan2: scanners_max 3200, targets_max 5000, target_limit 5, port_limit 20, timeout 60

####################################################################

# Шаг #3: Указываем какие сигнатуры нам нужны

Include $RULE_PATH/bad-traffic.rules
include $RULE_PATH/exploit.rules
include $RULE_PATH/scan.rules
include $RULE_PATH/finger.rules
include $RULE_PATH/ftp.rules
include $RULE_PATH/dos.rules
include $RULE_PATH/ddos.rules
include $RULE_PATH/dns.rules
include $RULE_PATH/web-cgi.rules
# Следующую опцию я оставил для статистики – мой сервер регулярно сканят на предмет IIS багов,
# Точнее не мой сервер а диапазон адресов, в котрый попадаю и я:)
include $RULE_PATH/web-iis.rules
include $RULE_PATH/web-client.rules
include $RULE_PATH/web-php.rules
include $RULE_PATH/sql.rules
include $RULE_PATH/icmp.rules
include $RULE_PATH/netbios.rules
include $RULE_PATH/misc.rules
include $RULE_PATH/attack-responses.rules
include $RULE_PATH/mysql.rules

Include $RULE_PATH/pop3.rules
include $RULE_PATH/pop2.rules
include $RULE_PATH/other-ids.rules
include $RULE_PATH/web-attacks.rules
include $RULE_PATH/backdoor.rules
include $RULE_PATH/shellcode.rules

Теперь все готово для для запуска Snort. Пропишите его в inittab и он будет запускаться вместе с системой.

4. Добавление собственных сигнатур

Snort – это очень гибкий и удобный в настоке IDS. Одно из его качеств позволяет нам самим добавлять сигнатуры атак (или как я уже говорил, это больше похоже на правила). Такие правила у нас лежат в файлах *.rules. Синтаксис правил довольно прост:

ACTION PROTO IP_ADDR1 PORT1 DIRECTION IP_ADDR2 PORT2 [ (OPTIONS) ]

Рассмотрим поля правил более детально:

Поле Action имеет три основных директивы, которые определяют действия, при обнаружении сетевого пакета, соответствующего некоторому правилу: pass, log и alert.

pass - игнорировать пакет

log - пакет должен быть передан процедуре журналирования, для записи в файл журнала

alert генерирует уведомление об обнаружении пакета, удовлетворяющего правилу

Протокол пакета, может иметь значения tcp,udp,icmp

Как это понятно из названия опции, это поле означает IP адрес. any позволяет задать все возможные адреса. Символ! инвертирует условие, т.е. !192.168.168.0/24 означает любой не принадлежащий подсети 192.168.168.0/24. Можно перечислять несколько IP адресов через запятую

Кроме единственного номера порта можно задать диапазон портов через двоеточие, например, 6000:6010, символ ! инвертирует условие, а any обозначает все порты

DIRECTION

Определяет направление движения пакета:

-> (одностороннее) - правило будет применяться только к пакетам, идущим с IP_ADDR1 на IP_ADDR2;

(двустороннее) - направление движения пакета роли не играет

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

Параметры, задающие дополнительные условия на соответствие правилу:

ttl - задает значение поля TTL в заголовке IP-пакета;

tos - задает значение поля TOS в заголовке IP-пакета;

id - задает значение поля номера фрагмента в заголовке IP-пакета;

ipopts - задает значение поля параметров IP-пакета;

fragbits - задает биты фрагментации IP-пакета;

dsize - задает условия на размер IP-пакета;

flags - задает условия на наличие или отсутствие определенных TCP-флагов;

seq - задает номер сегмента TCP-пакета в последовательности;

ack - задает значение поля подтверждения в TCP-пакете;

itype - задает значение поля типа ICMP-пакета;

icode - задает значение поля кода ICMP-пакета;

icmp_id - задает значение поля ICMP ECHO ID в ICMP-пакете;

icmp_seq - задает номер ICMP ECHO пакета в последовательности;

content - задает искомый шаблон в содержимом пакета, а не в заголовке (шаблон можно задавать как в текстовом виде, так и в шестнадцатеричном);

content-list - этот параметр аналогичен параметру content за исключением того, что список искомых шаблонов берется из заданного файла;

offset - работает совместно с опцией content для определения смещения в пакете, с которого будет производиться анализ содержимого;

depth - аналогичен параметру offset и определяет положение в пакете, до которого будет производиться анализ содержимого;

nocase - отключает чувствительность к регистру при анализе содержимого пакета;

rpc - этот параметр позволяет более точно задать характеристики программных или процедурных вызовов RPC-сервисов.

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

Параметры, значения которых имеют смысл при соответствии анализируемого пакета всем условиям:

msg - содержит текст сообщения;

logto - задает альтернативный файл для записи в него содержимого пакета;

session - этот параметр позволяет включить очень интересную возможность Snort - извлечение пользовательских данных из TCP-сессии, например, для последующего анализа того, какие команды вводил пользователь во время telnet-сессии;

resp - если пакет соответствует правилу, то Snort выполнит одно из указанных действий - например, закроет соединение, отправив TCP-RST-пакет одному из хостов.

react - блокирует заданные в правиле web-сайты, закрывая соединение с ними и/или отправляя заданное сообщение браузеру, с которого была предпринята попытка зайти на сайт.

Вот пара примеров построения собственных правил:

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

5. Тестирование Snort

Для тестирования работоспособности Snort, возьмем простейший пример. В коммандной строке наберите ping –s 65507 . Теперь идем в /var/log/snort, здесь по умолчанию хранятся логи. Открываем файл alert и видим такие строки:

[**] ICMP Large ICMP Packet [**]
01/06-07:37:37.119752 192.168.168.99 -> 192.168.168.9
ICMP TTL:255 TOS:0x0 ID:18479 IpLen:20 DgmLen:63028
Type:0 Code:0 ID:512 Seq:19456 ECHO REPLY

Первая строка говорит нам, какое действие вызвало тревогу, в данном случае - слишком большой ICMP пакет. Вторая строка показывает класс атаки и ее приоритет (эта информация определяется из файла classification.config). Третья строка содержит время атаки, а также IP адреса хоста пославшего пакет, и хоста которому пакет был предназначен. Далее идут остальные поля пакета, как например TTL, TOS – по которому, кстати, можно определить OS нападающего, и другие...

6. Заключение

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

Данная статья не претендует на полное руководство по Snort, но надеюсь она поможет вам разобраться в его установке, настойке и работе. Много мыслей взяты из различных документов, в основном английских, встреченных мной на различных security сайтах, но в основном это результат моего опыта работы с 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 . Также тщательно протестируйте свои правила, чтобы гарантировать, что они действительно охватывают все виды активности, которую вы пытаетесь поймать, и не дают ложных срабатываний.