Snort установка на ubuntu. Система обнаружения вторжения для Чайников

Введение

Основная цель данной работы заключается в описании и изучении популярного 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 полностью работоспособен. Рассмотрим режимы его работы и синтаксис правил для дальнейшей работы.

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

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

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

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

Один из наиболее распространенных способов, который уведомляет системных администраторов о вторжениях в сеть - это использование систем обнаружения сетевых вторжений (NIDS). Самой распространенной из них является Snort.

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

Шаг 1. Найдите правила Snort

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

Мы можем найти все правила Snort, перейдя в директорию /etc/snort/rules нашего BackTrack. Перейдем и посмотрим на ее содержимое.

Cd /etc/snort/rules

Теперь выведем список файлов этой директории.

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

Шаг 2. Просмотр правил Snort

Файлы правил Snort являются простыми текстовыми файлами, поэтому мы можем открывать и редактировать их с помощью любого текстового редактора. Мы будем использовать редактор Kwrite. Откроем файл porn.rules. Этот набор правил предназначен для обнаружения порно, проходящего по проводному соединению. Это довольно старый набор правил и большинство системных администраторов больше его не использует.

Kwrite /etc/snort/porn.rules

Здесь мы можем видеть, что эти правила предназначены для обнаружения различных видов порно. Если вы когда-нибудь задавались вопросом, как ваш сисадмин узнал, что вы скачивали порно, то теперь вы это знаете!

Шаг 3. Изучение правила

Давайте возьмем какое-нибудь простое правило и проанализируем его. Откроем файл scan.rules.

Kwrite /etc/snort/scan.rules

Теперь копируем выделенное правило в отдельный текстовый файл и анализируем, что оно делает.

Шаг 4. Анализ правила SF-сканирования

Это правило предназначено для обнаружения сканирований, выполняемых с помощью различных инструментов для сканирования, таких как nmap и hping. Один из этих сканеров называется SYN-FIN. Этот сканер отправляет TCP-пакеты с установленными флагами SYN и FIN для того, чтобы попробовать определить, какие порты открыты на целевой системе.

Этот тип пакетов никогда нельзя встретить при анализе естественного трафика, поскольку пакет с одновременно включенными флагами SYN и FIN запрашивает у системы открытие соединения (SYN) и одновременное закрытие соединения (FIN).

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

Шаг 5. Заголовок правила

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

Разбивка заголовка правила на элементы

  • alert - это действие. Это может быть предупреждение, запись в лог (журнал) или пропуск.
  • Tcp - это протокол трафика, который ищет правило. Это могут быть tcp, udp и icmp.
  • $EXTERNAL_NET - это исходный IP-адрес или сеть вредоносных пакетов. Его можно установить как переменную в файле snort.conf.
  • any - это исходный порт вредоносного трафика. Этот параметр можно установить как в один порт, так и в несколько или ряд портов.
  • -> - это направление трафика. В этом случае мы ищем трафик, идущий из EXTERNAL_NET во внутренний или HOME_NET.
  • $HOME_NET - это IP-адрес назначения, к которому идет трафик. Как и в случае с EXTERNAL_NET, его можно установить как переменную в файле snort.conf.
  • any - это порт назначения. Этот параметр также может указывать на определенные порты, например 80, или на переменную, содержащую список портов.

Шаг 6. Параметры правил Snort

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

ключевое слово: аргументы

Наш пример правила выглядят вот так:

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

  • msg - это сообщение, которое отсылается системному администратору, если это правило вызывается. В этом случае Snort сообщает системному администратору «SCAN SYN FIN».
  • flow - этот параметр позволяет правилу проверять поток трафика. Он может иметь несколько значений, включая established (TCP-соединение установлено), not established (TCP-соединение не установлено), stateless (установленные или не установленные соединения) и т.д. В нашем примере правило вызывается при трафике с установленным TCP-соединением или без него.
  • flags - эта пара проверяет флаги TCP. Как вы знаете, флаги TCP могут быть SYN, FIN, PSH, URG, RST или ACK. Это правило ищет трафик, в котором установлены флаги SYN и FIN (SF), и, кроме того, имеет два зарезервированных бита в наборе байтов флагов (12).
  • reference - этот раздел предназначен для ссылки на базу данных безопасности для получения дополнительной информации об атаке. В нашем примере мы можем найти дополнительную информацию об этой атаке в базе данных arachnids, атака 198.
  • classtype - все правила подразделяются на многочисленные категории, которые призваны помочь администратору понять, какой тип атаки был предпринят. В нашем примере мы видим, что он классифицируется как «попытка анализа».

Шаг 7. Обход и Отключение

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

В следующей статье по Snort мы углубимся в детали реализации некоторых более сложных правил Snort, поэтому следите за обновлениями. Если у вас есть какие-нибудь вопросы или комментарии по работе со 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 + OINKMASTER + BASE

1. Установка SNORT

Идем в /usr/ports/security/snort/. Собираем SNORT (с опциями DYNAMIC и MYSQL):

# make install clean

Прописываем его в rc.conf:

Snort_enable="YES"

Начиная где-то с версии 2.4, в комплекте со snort НЕ предоставляются правила. По-этому, их надо скачивать самостоятельно. Существует два способа. Первый — скачивать руками, второй автоматизировать процесс через OINKMASTER. Так или иначе, надо будет зарегистрироваться на сайте www.snort.org, а для OINKMASTER надо еще сгенерировать OINK CODE в своем аккаунте на snort.org.

2. Установка и настройка OINKMASTER

Идем в /usr/ports/security/oinkmaster и ставим порт:

# make install clean

После установки, в директории /usr/local/etc появляется файл oinkmaster.conf.sample. Его надо переименовать в oinkmaster.conf и поправить в нем следующие строчки:

# Example for Snort-current ("current" means cvs snapshots). url = http://www.snort.org/pub-bin/oinkmaster.cgi/oinkcode/snortrules-snapshot-CURRENT.tar.gz tmpdir = /tmp/

Вместо oinkcode надо вставить свой код, который мы получили после регистрации на сайте snort.org.

Чтобы теперь получить последние правила, надо выполнить команду:

# oinkmaster -o /usr/local/etc/snort/rules

Правила скачаются в папку /usr/local/etc/snort/rules. Убедитесь, что папка существует. По идеи, она должна автоматически создаться после установки SNORT.

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

Все файлы настроек хранятся в папке /usr/local/etc/snort
Первым делом редактируем файл snort.conf, правим в нем следующие строчки:

# Наша подсеть var HOME_NET 192.168.0.0/24 # Порты, на которых висит апач portvar HTTP_PORTS

// Интересно, надо ли сюда вписывать порт 443 # Где храить логи output database: log, mysql, user=snort password=test dbname=snort host=localhost

Чтобы теперь логи хранились в базе данных, надо создать саму базу данных:

# mysql -u root -p Password: вводим пароль mysql> create database snort; mysql> grant CREATE, INSERT, SELECT, DELETE, UPDATE on snort.* to ; mysql> SET PASSWORD FOR "snort"@"localhost"=PASSWORD("password"); mysql> exit

Теперь ее надо заполнить. Файл create_mysql я взял в папке /usr/ports/security/snort/work/snort-2.8.1/schemas. Если его там нет, то просто соберите порт (make).

# mysql -u root -p ~/create_mysql snort

Пробуем запустить snort:

# /usr/local/etc/rc.d/snort start

Смотрит /var/log/messages. Если все запустилось без ошибок, то хорошо)))

4. Установка и настройка BASE

Сначала надо поставить pear. Идем в /usr/ports/devel/pear

# make install clean

Теперь надо еще несколько пакетов к pear:

# pear install Image_Color # pear install Log # pear install Numbers_Roman # pear install Numbers_Words-alpha # pear install Image_Canvas-alpha # pear install Image_Graph-alpha

Теперь надо поставить adodb. Я ставил версию 5.02а.

# cd /usr/ports/databases/adodb5 # make install clean

BASE в портах я не нашел. Может, плохо искал. Его можно скачать с сайта www.secureideas.sf.net
Распаковываем его в любую папку на веб сервере. В моем случае — это /usr/local/www/base. В этой папке переименовываем файл base_conf.php.dist в base_conf.php. Редактируем в файле следующие строки:

# Включаем русский язык $BASE_Language = "russian"; # Если установить 0, то не будет авторизации при доступе к BASE. ВНИМАНИЕ! Чтобы инициализировать BASE, надо сначала установить значение 0! $Use_Auth_System = 1; # Если, например, BASE доступен через http://localhost/base, то заносим значение /base. # Я использую виртуальный домен www.base.server.ru, по этому ничего не вношу. $BASE_urlpath = ""; # Указываем путь до adodb $DBlib_path = "/usr/local/share/adodb"; # Параметры для подключения к базе данных $alert_dbname = "snort"; $alert_host = "localhost"; $alert_port = ""; $alert_user = "snort"; $alert_password = "mypassword";

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