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

Ежедневно по корпоративным сетям передаются миллиарды пакетов данных. Некоторые из них опасны; авторы таких пакетов приняли специальные меры, чтобы обойти брандмауэры и пробиться через линии обороны по периметру сетей, нарушая работу всех встреченных на пути систем. Разрушительное действие таких проведенных с использованием пакетов атак, как Code Red, Nimda, SQL Slammer и MSBlaster, хорошо известно. Все эти вредоносные программы используют в своих целях доверенные протоколы (например, HTTP) или сетевой трафик систем Microsoft. Такие протоколы нельзя просто взять и блокировать, поэтому администраторы обычно стараются как можно быстрее зафиксировать опасный трафик с помощью систем обнаружения несанкционированного доступа, Network Intrusion Detection System (NIDS), чтобы вовремя среагировать на угрозу.

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

Знакомство с Snort

Первый разработчик Snort Мартин Реш предоставил программу открытому сообществу на условиях лицензии GNU General Public License (GPL). История этого пакета началась в 1998 г., и с тех пор он не раз доказал свою надежность. Благодаря вкладу членов открытого сообщества и сетевых администраторов во всем мире Snort превратился в очень мощный продукт. Текущая версия обеспечивает анализ сетевого трафика в реальном времени и регистрацию IP-трафика со скоростями Fast Ethernet и Gigabit Ethernet.

Майкл Дэвис перенес Snort 1.7 на платформу Win32, сделав его доступным для сообщества Windows. Затем Крис Рейд взял на себя задачу компиляции новых версий Snort в готовые исполняемые файлы, которые можно без труда развернуть в среде Windows.

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

Требования Snort

Для работы Snort необходим компьютер Windows, оснащенный по крайней мере одним сетевым адаптером. Лучше иметь два сетевых адаптера, один из которых подключен к контролируемой сети, а другой - к производственной сети; последний пересылает отчеты. Snort совместим не только с Windows 2000 Server и более поздними версиями, но и с Windows XP Professional Edition, XP Home Edition и Windows 2000 Professional. Лицензии для сервера не требуется. Ежедневно я подключаю ноутбук XP Pro ко многим сетям клиентов и обычно запускаю Snort в качестве службы. Таким образом, программа работает в фоновом режиме, обнаруживая любые атаки на мою систему, исходящие из данной клиентской сети. Я использую Snort как переносной сенсор - программа играет роль NIDS для любого порта, к которому подключается ноутбук.

В небольших сетях развернуть Snort можно на сервере начального уровня. Для обнаружения попыток несанкционированного доступа выделенная машина большой мощности не нужна. Например, мне приходилось слышать об узлах Snort на платформе FreeBSD с процессорами на 1 ГГц и оперативной памятью объемом 1 Гбайт, которые успешно обслуживали сети с 15 000 пользователей и несколькими соединениями T-3 каналов WAN. Благодаря эффективности исходного текста Snort для работы программы очень мощная машина не требуется.

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

Однако если пользователи подключаются к сети через соединение VPN (по Internet или беспроводной линии связи), имеет смысл разместить NIDS еще дальше за брандмауэром, например за VPN-сервером или концентратором, где пакеты расшифровываются на выходе из туннеля VPN. В противном случае NIDS не сможет противостоять вредоносным программам, встроенным в трафик VPN, так как анализируемые пакеты будут зашифрованы. То же относится и к зашифрованному SMTP-трафику, зашифрованным.zip-файлам, вложенным в сообщения электронной почты, и зашифрованным данным других типов.

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

Теперь, познакомившись с Snort и зная требования к его размещению, можно установить и протестировать NIDS. Более подробную информацию о Snort можно получить из документов, ссылки на которые приведены во врезке «Ресурсы в Web». Данный процесс состоит из семи этапов:

  1. Установка WinPcap
  2. Установка Snort
  3. Тестирование Snort
  4. Настройка Snort
  5. Задание правил
  6. Настройка предупреждений и журналов
  7. Запуск в качестве службы

Этап 1. Установка WinPcap

В сущности, Snort представляет собой сетевой анализатор, работающий в режиме приема всех пакетов (promiscuous-mode), поэтому ему необходима поддержка на уровне драйверов. Эту поддержку обеспечивает WinPcap. Лорис Диджиоанни создал WinPcap, перенеся в среду Windows широко распространенный среди пользователей Unix драйвер перехвата пакетов libpcap. В состав WinPcap входят фильтр пакетов на уровне ядра, низкоуровневая DLL (packet.dll) и высокоуровневая системно-независимая библиотека (wpcap.dll, на базе libpcap 0.6.2).

WinPcap можно загрузить по адресу http://winpcap.polito.it . Драйвер совместим с Windows Server 2003, XP, Windows 2000, Windows NT, Windows Me и Windows 9x. WinPcap также поддерживает открытый анализатор пакетов Ethereal, который можно получить по адресу . С помощью Ethereal можно убедиться в корректности установки Snort.

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

Этап 2. Установка Snort

Следующий шаг - установка Snort. Новейшую версию можно найти на Web-узлах CodeCraft Consultants (http://www.codecraftconsultants.com/snort.aspx ) или Snort.org (http://www.snort.org ). Я рекомендую загрузить Snort из CodeCraft Consultants, так как с этого сайта можно получить саморазворачивающийся исполняемый файл. Программа даже проводит пользователя по элементарным операциям установки Snort на компьютере. При подготовке данной статьи использовалась последняя версия Snort 2.1.1, сборка 18. С тех пор были выпущены обновленные версии.

При запуске программы установки в первом диалоговом окне необходимо выбрать режим настройки базы данных для хранения результатов. Если используется MySQL или ODBC-совместимая база данных, можно согласиться на режим, выбираемый по умолчанию (экран 1). Но если предстоит хранить протоколы в базе данных Microsoft SQL Server или Oracle, то необходимо выбрать соответствующий режим и убедиться, что на машине имеется нужная клиентская программа. При подготовке данной статьи использовался режим по умолчанию.

На следующем шаге следует определить компоненты Snort, которые требуется установить. Стандартный набор (экран 2) вполне приемлем, поэтому я рекомендую принять его и щелкнуть на кнопке Next. В диалоговом окне Choose Install Location необходимо указать каталог, в котором будет развернут Snort. Введя имя каталога, следует щелкнуть на кнопке Next, чтобы завершить процесс установки.

Экран 2. Выбор компонентов установки

Этап 3. Тестирование установки Snort

Завершив процесс установки, Snort требуется протестировать. По умолчанию исполняемому файлу Snort необходимо сообщить два адреса: куда записывать журналы и где найти файл конфигурации (snort.conf). Эту информацию предоставляет пользователь при запуске Snort из командной строки с помощью ключей -l и -c соответственно. Например, команда

Snort -l F:snortlog -c F:snortetcsnort.conf -A console

указывает программе, что журналы следует записывать в каталог F:snortlog, а snort.conf находится в каталоге F:snortetc. Ключ -A задает способ передачи генерируемых программой предупреждений. В данном примере предупреждения выводятся на экран консоли, и администратор может убедиться, что Snort работает корректно. Обратите внимание, что в статье команда напечатана на нескольких строках, но в командном окне ее необходимо вводить в одной строке. То же самое относится и к другим многострочным командам в данной статье. Многие ключи командной строки Snort чувствительны к регистру символов, поэтому вводить команды следует именно так, как они напечатаны.

Если система располагает несколькими сетевыми интерфейсами, то по умолчанию Snort прослушивает первый обнаруженный интерфейс. Если порядок сетевых интерфейсов на машине неизвестен, можно выполнить команду Snort с одним ключом -W. Snort выдает список имен и номеров сетевых интерфейсов в том порядке, в котором их обнаруживает программа. Чтобы заставить Snort использовать определенный сетевой интерфейс, необходимо ввести ключ -i с номером интерфейса при запуске Snort. После выполнения Snort на экране появится информация, подобная приведенной на экране 3 .

Запустив Snort, можно проверить его чувствительность, направив в NIDS специально подготовленный трафик. Один из самых простых способов вызвать предупреждение об опасности - обратиться к командному интерпретатору (cmd.exe) на удаленной машине в рамках запроса HTTP URL (типичный прием «червей» Code Red и Nimda). Чтобы имитировать эту фазу нападения, следует обратиться к любому URL и добавить в конце запроса символы /cmd.exe. Например, в ответ на обращение к http://www.a-website-that-I-can-trust.com/cmd.exe Snort должен вывести предупреждение в командном окне, по виду напоминающее первые три предупреждения на экране 4 . Эти сообщения и записываются в журнал F:snortlog.

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

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

Ping -l 32767 ip_address

где ip_address - IP-адрес целевого сервера или Snort-компьютера. Данная команда должна послать очень длинный пакет (точная длина - 32 Кбайт), что явно необычно для команды Ping. Snort должен обнаружить этот пакет, как видно на примере нижних восьми предупреждений на экране 4 .

Если предупреждения получены, можно приступать к настройке Snort для конкретных условий. В противном случае необходимо вернуться к процедуре установки и проверить, не был ли пропущен какой-нибудь этап.

Этап 4. Настройка Snort

Основные данные о конфигурации Snort хранятся в файле snort.conf, который по умолчанию располагается в каталоге %systemdrive%snortetc. Файл можно оставить в этой папке или переместить в другую, если указать программе путь в командной строке.

Детальное описание всех параметров, представленных в snort.conf, может заполнить весь номер журнала, так как Snort - удивительно мощная программа. Мы пока рассмотрим лишь основные ее параметры.

Чтобы отличить входящий трафик от исходящего, необходимо сообщить Snort узлы и IP-адреса сети предприятия. Для ввода этой информации в файле snort.conf должна быть задана переменная HOME_NET. Следует отыскать строку

Var HOME_NET any

и заменить ее диапазоном IP-адресов. Можно задать один диапазон, например

Var HOME_NET 192.168.0.1/24

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

Var HOME_NET

указывает Snort, что подсети 10.0.1.0/24, 10.0.2.0/24 и 10.0.3.0/24 относятся к сети предприятия. По умолчанию Snort воспринимает все остальные адреса как внешние. Можно явно указать сети, которые следует считать внешними, задав переменную EXTERNAL_NET. В файле snort.config необходимо отыскать строку

Var EXTERNAL_NET any

и заменить ее IP-адресом сети, которую следует считать внешней. Однако, как правило, для начала лучше оставить переменную EXTERNAL_NET со значением any.

Потратив некоторое время, можно указать типы серверов, имеющиеся на предприятии, и их местоположение. Эта информация содержится в переменных DNS_SERVERS, SMTP_SERVERS, HTTP_SERVERS, SQL_SERVERS и TELNET_SERVERS в следующих строках файла snort.conf:

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 SNMP_SERVERS $HOME_NET

По умолчанию всем шести серверным переменным присвоено значение $HOME_NET; это означает, что Snort будет контролировать все типы нападений на все системы в диапазоне HOME_NET. Такая конфигурация вполне приемлема для небольшой сети, администраторы которой допускают некоторое число ложных предупреждений. Но для мониторинга интенсивного трафика желательно выполнить более тонкую настройку Snort для проверки только части сигнатур для определенных узлов. Не имеет смысла защищать Web-сервер, работающий только с Microsoft IIS, от атак с переполнением буфера SQL. Чтобы определить особый класс узлов, необходимо заменить $HOME_NET диапазоном IP-адресов целевых серверов в соответствии с форматом, использованным для переменной HOME_NET. Например, для переменной DNS_SERVERS вместо $HOME_NET следует подставить диапазон IP-адресов DNS-серверов.

Точность настройки можно повысить, если определить порты, используемые серверами для конкретных приложений. Например, если Web-серверы задействуют специальный порт 8080 для трафика HTTP вместо порта 80 (этот порт обычно применяется для Web-серверов и браузеров), то можно настроить Snort на отслеживание порта 8080, изменив переменную HTTP_PORTS. В snort.conf следует отыскать строку

Var HTTP_PORTS 80

и заменить ее строкой

Var HTTP_PORTS 8080

Точно так же можно изменить порты для Oracle (определяемые переменной ORACLE_PORTS) и других приложений. Как и переменная HTTP_PORTS, по умолчанию ORACLE_PORTS имеет значение 80. Если сервер использует вместо него порт 1521, то строка будет иметь вид

Var ORACLE_PORTS 1521

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

Этап 5. Задание правил

В одной из строк snort.conf встречается переменная RULE_PATH. Примерный вид этой строки:

Var RULE_PATH ../rules

Параметр../rules указывает, что правила (т. е. сигнатуры) можно найти в каталоге rules, который находится в структуре каталогов на одном уровне с двоичными файлами Snort. Поэтому, например, если установить Snort в типовой папке F:snort, двоичные файлы Snort находятся в F:snortin, а правила - в F:snort ules. При желании можно изменить переменную RULE_PATH, но вполне приемлем и вариант, выбираемый по умолчанию.

Правила - основа Snort. Они представляют собой последовательности байтов, сигнатуры нападений и данные других типов, при обнаружении которых генерируется предупреждение. Snort располагает более чем 1500 готовых сигнатур.

Как выглядит правило? Правило для cmd.exe, которое было нарушено при проведении теста Snort, имеет следующий вид: alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS (msg:»WEB-IIS cmd.exe access»; flow:to_server, established; content:»cmd.exe»; nocase; classtype:web-application-attack; sid:1002; rev:5;). Рассмотрим основные компоненты правила. Ссылка $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS указывает, что следует анализировать только трафик, поступающий в сеть извне (как определено переменной EXTERNAL_NET). Параметр content: задает поиск последовательности символов cmd.exe в потоке данных. Обнаружив такую последовательность, Snort генерирует предупреждение, задаваемое параметром msg:.

Как видно на примере cmd.exe, правила в основном просты. Можно составить собственные правила для трафика любых типов. Например, если требуется обнаружить несанкционированные попытки удаленного доступа к каталогу на машине через командный интерпретатор, то можно провести поиск строки volume in drive или volume serial number в портах, где они бывают редко, таких как порты для передачи исходящего трафика. Благодаря гибкому подходу к назначению правил, администраторам предоставляются широкие возможности конфигурирования Snort.

1500 правил Snort хранятся в различных файлах в соответствии с типами анализируемых данных. Например, правило для cmd.exe находится в файле web-iis.rules. Если на предприятии IIS не применяется, то программе не нужно обнаруживать атаки IIS. Файл web-iis.rules легко удалить из конфигурации целиком, отыскав и обозначив как комментарий строку

Include $RULE_PATH/web-iis.rules

в файле snort.conf. Чтобы сделать строку комментарием, нужно поставить перед ней символ (#):

# include $RULE_PATH/web-iis.rules

По умолчанию файлы правил некоторых типов (например, icmp-info.rules, chat.rules) представлены комментариями в snort.conf. Используемая по умолчанию конфигурация правил в snort.conf вполне удачна. После активизации блокированных правил программа, как правило, генерирует много лишних предупреждений.

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

При появлении новых источников угрозы файл правил необходимо обновить. Лучший ресурс для новых правил - Web-узел Snort.org. На этом Web-узле нет службы автоматического обновления, поэтому администратору придется регулярно обращаться к нему за обновлениями при возникновении очередной опасности.

Этап 6. Настройка предупреждений и журналов

Как уже отмечалось, Snort обеспечивает запись информации в MySQL, SQL Server, Oracle и ODBC-совместимых базах данных. Достаточно выбрать подходящий тип базы данных в процессе установки Snort. Чтобы чрезмерно не увеличивать объем статьи, рассмотрим стандартные режимы протоколирования с использованием текстового файла и функции записи сообщений в журнал событий Windows.

При запуске NIDS с помощью команды Snort ключ консоли -A обеспечивает вывод предупреждений на экран. Чтобы пересылать сообщения в текстовый файл, следует заменить этот ключ на -A fast или -A full, в зависимости от предпочтительного режима протоколирования. Параметр full выводит подробное описание угрозы в нескольких строках текстового файла с именем alerts.ids каталоге, путь к которому указывает ключ -l. Такой тип протоколирования сообщает исчерпывающие детали, но в них трудно разобраться, если в сети отмечается много событий. В таких «шумных» сетях рекомендуется использовать режим fast для внесения в alerts.ids однострочных записей, содержащих основные характеристики подозрительного трафика. На мой взгляд, работать с текстовым файлом в режиме fast проще, чем в режиме full.

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

Для записи предупреждений в журнал событий Application системы, на которой работает Snort, вместо ключа -A используется ключ -E (параметры не обязательны). На экране 5 показано, как выглядит событие Snort (в данном случае попытка обращения к cmd.exe), опубликованное в журнале Application. Событие Windows обеспечивает такую же детальную информацию, как экран консоли.

NIDS бесполезен, если администратор заглядывает в журналы событий (или текстовые журналы) раз в неделю. Если что-то случается в сети, администратор должен узнать об этом незамедлительно. Централизованная система мониторинга и обработки событий может посылать сообщения по электронной почте, на пейджер и другие устройства связи. Но если такой системы нет, это не повод для беспокойства. Компания NETIKUS.NET предлагает бесплатный пакет EventSentry Light, с помощью которого можно посылать предупреждения.

EventSentry Light - ознакомительная версия EventSentry, ее можно загрузить по адресу http://www.netikus.net/products_downloads.html . С помощью EventSentry Light можно настроить систему на мониторинг журналов событий и автоматическую рассылку по электронной почте подробных сообщений о любых событиях Snort, записанных в журнал. На экране 6 показано почтовое сообщение о попытках нападения на cmd.exe. Я получил это сообщение от EventSentry Light спустя несколько секунд после проведения атаки.

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

Этап 7. Запуск в качестве службы

Завершив все приготовления, можно задействовать Snort в качестве службы, вместо того чтобы регистрироваться на настольном компьютере всякий раз, когда требуется запустить программу. Если запустить Snort с параметрами /SERVICE и /INSTALL (наряду с другими параметрами командной строки), то Snort настраивается на работу в качестве службы Windows и автоматически запускается вместе с Windows без вмешательства пользователя.

Следующий уровень: модули расширения

Snort представляет собой полнофункциональное приложение. Однако в некоторых случаях программа нуждается в расширении. Например, если в разных участках сети развернуто несколько NIDS, то управлять Snort удобно из графического интерфейса. Такие возможности реализованы в модулях расширения IDScenter фирмы Engage Security и IDS Policy Manager компании Activeworx. Иногда бывает необходимо проанализировать информацию, которая содержится в сообщениях. Просмотреть и проанализировать сохраненные данные можно с помощью модуля Analysis Console for Intrusion Databases (ACID), разработанного в Университете Карнеги - Меллона.

Надежная защита

Snort - полнофункциональная программа, которая не нанесет ущерба бюджету компании. Объединив Snort с мощным приложением мониторинга событий, таким как EventSentry Light, можно своевременно предупреждать атаки против сети.

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

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.

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

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

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

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.