Snort: установка настройка и использование

Snort установка настройка и использование

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

Почему именно Snort?

Snort — это опенсорсная система обнаружения вторжений, IDS. Она может работать как сниффер или логгер, но нас интересует именно NIDS (Network Intrusion Detection System). В таком режиме Snort проверяет все входящие пакеты на признаки известных видов сетевых атак (DDoS, сканирование портов, попытки авторизации брутфорсом и так далее).

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

Долго останавливаться на описании этого продукта я не буду. Скажу лишь, почему я выбрал Snort. Этому способствовали три фактора:

  • простота в написании своих правил;
  • хорошая поддержка с информативной почтовой рассылкой;
  • частые обновления.

Плюс к этому компания уже давно куплена гигантом Cisco, а там товарищи как минимум хорошо разбираются в сетях.

Установка Snort

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

Помимо собственно Snort, нам понадобится:

  • Barnyard2;
  • PulledPork;
  • Basic Analysis and Security Engine (BASE).

За работу!

Устанавливать я буду октябрьский релиз Snort 2.9.12, так как Snort 3 представлен лишь бета-версией. В качестве ОС выбрана Ubuntu 16.04.1, установка на Ubuntu 16 и 18 ничем не отличаются. Есть разница в установке на Ubuntu 14, но об этом в статье говорить не будем.

Сначала настраиваем сетевой интерфейс.

Важное замечание для пользователей Ubuntu. С версии 15.10 сетевые интерфейсы уже не следуют стандарту ethХ. Поэтому корректно указывай имя своего интерфейса. Именно тут и возникает большинство проблем с конфигами.

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

Перезагружаем настроенный сетевой интерфейс:

Затем по стандарту — update && upgrade и ставим необходимые компоненты:

Далее создаем папку, в которой будем намешивать исходники, солить и перчить их по вкусу. Скачиваем туда систему сбора данных (DAQ — Data AcQuisition). Это библиотека, которая заменяет прямые вызовы на функции libpcap, что облегчает работу на различных аппаратных и программных интерфейсах без необходимости вносить изменения в сам Snort.

Теперь можно поставить сам Snort.

Пробуем вывести версию Snort для того, чтобы убедиться, что все взлетело и работает.

Вывод должен иметь вид, как на скриншоте.

установка snort
Версия Snort

Установка закончена, погнали дальше!

Настройка в режим IDS

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

Теперь создаем необходимые папки и раздаем права:

Распихаем конфигурационные файлы и файлы настроек по нужным папкам:

В итоге должна получиться вот такая структура папок и файлов.

установка snort
Древо папок и файлов /etc/snort

Комментируем все строки с 457-й по 651-ю в файле /etc/snort/snort.conf. Делается это для того, чтобы Snort при запуске не скачивал правила, поскольку для обработки правил у нас будет настройка PulledPork.

Вносим несколько правок в этот же конфигурационный файл вручную:

  1. Строка 45: указываем нашу сеть.
  2. Строка 104: меняем на var RULE_PATH /etc/snort/rules.
  3. Строка 105: меняем на var SO_RULE_PATH /etc/snort/so_rules.
  4. Строка 106: меняем на var PREPROC_RULE_PATH /etc/snort/preproc_rules.
  5. Строка 113: меняем на var WHITE_LIST_PATH /etc/snort/rules/iplists.
  6. Строка 114: меняем на var BLACK_LIST_PATH /etc/snort/rules/iplists.
  7. Строка 546: необходимо раскомментировать include $RULE_PATH/local.rules для возможности использовать свои правила.
  8. Строка 521: ниже нее необходимо добавить строку output unified2: filename snort.u2, limit 128.
  9. Строка 548: необходимо добавить строку include $RULE_PATH/snort.rules.

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

Если видишь заветные слова Snort successfully validated the configuration! Snort exiting, значит, все в порядке и ничего пока не сломано.

Установка Barnyard2

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

Обрати внимание, что во время установки MySQL попросит ввести пароль для root. Поэтому не отходи от компа надолго.

Затем ставим сам Barnyard2:

Проверяем, не отвернулась ли от нас фортуна:

Снова копируем файлы из исходного пакета, создаем файлы и раздаем права:

Теперь придется поработать с MySQL:

Добавляем в конец файла /etc/snort/barnyard2.conf строку output database: log, mysql, user=snort password=snortpass dbname=snort host=localhost sensor name=sensor01. И снова манипуляция с правами:

Теперь проверим все, что сделали раньше. В файл /etc/snort/rules/local.rules добавляем строчку

Это будет наше правило на проверку пинга (ICMP-пакеты). Дописываем две строки в файл /etc/snort/sid-msg.map:

В описании релиза Barnyard можно прочесть подробнее, что и как.

Запустим Snort в режиме демона (он так и будет работать всегда).

Потом запустим Barnyard2:

Пингуем наш Snort-server и (если все в порядке) получаем предупреждения.

snort barnyard
Работа Snort + Barnyard2

Установка PulledPork

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

Теперь нам необходимо зайти на сайт Snort. Регистрируемся и в своем аккаунте отыскиваем идентификатор oinkcode.

Переходим к настройкам PulledPork. В файл /etc/snort/pulledpork.conf вносим следующие изменения:

  1. Строка 19: вводим свой oinkcode ( rule_url=https://www.snort.org/reg-rules/|snortrules-snapshot.tar.gz).
  2. Строка 29: необходимо раскомментировать rule_url=https://rules.emergingthreats.net/|emerging.rules.tar.gz|open-nogpl.
  3. Строка 74: меняем путь к правилам на rule_path=/etc/snort/rules/snort.rules.
  4. Строка 89: меняем путь к нашим правилам на local_rules=/etc/snort/rules/local.rules.
  5. Строка 92: приводим к виду sid_msg=/etc/snort/sid-msg.ma.
  6. Строка 96: выставляем вторую версию ( sid_msg_version=2).
  7. Строка 119: указываем путь к конфигу Snort ( config_path=/etc/snort/snort.conf).
  8. Строка 133: указываем дистрибутив ( distro=Ubuntu-16-04).
  9. Строка 141: меняем путь к black_list на /etc/snort/rules/iplists/black_list.rules.
  10. Строка 150: приводим к виду IPRVersion=/etc/snort/rules/iplists.

Запускаем PulledPork:

Наблюдаем, как скачиваются правила. Проверяем, как отработает наш Snort после изменения конфига.

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

Обращу внимание, что команда разработчиков Snort просит рандомно указывать время обращения загрузчика, чтобы распределить нагрузку на канал.

Установка Basic Analysis and Security Engine

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

Загружаем библиотеку ADODB:

Загружаем BASE:

Копируем конфигурационный файл:

И приводим некоторые строки в файле /var/www/html/base/base_conf.php к образцам:

Естественно, необходимо изменить права, чтобы никто не увидел пароль в файле:

Перезапускаем Apache. Открываем браузер и идем по адресу (айпишник указывай свой) http://192.168.1.20/base/index.php. Нажимаем кнопку Create BASE AG в правом верхнем углу. В случае успеха будут созданы базовые таблицы, роли и все, что необходимо для дальнейшей работы.

Создание службы

Вишенкой на нашем торте будет создание служб из Snort и Barnyard2 с добавлением их в автозапуск. Для Snort необходимо создать файл /lib/systemd/system/snort.service с содержимым:

Скажем системе, что службу надо запускать при загрузке:

И запустим службу:

Введем команду для проверки статуса службы:

Для второй будущей службы необходимо создать файл /lib/systemd/system/barnyard2.service и прописать в нем следующие строки:

Затем повторим команды:

Перезагружаем нашу систему и убеждаемся, что все запущено.

Отслеживаем действия в сети

Для проверки работоспособности я взял немного неординарное задание, чтобы показать чуть больше возможностей Snort. К примеру, нам необходимо отследить посещение сайта www.tech-geek.ru каким-то пользователем (любым из локальной сети). Для этого нам нужно создать правило, которое отслеживало бы это действие. Оно будет выглядеть следующим образом:

Запишем его в /etc/snort/rules/local.rules и перезапустим мониторинг. Так как Snort у меня отслеживает только мой сервер, я вышел на сайт при помощи Links с сервера.

использование snort
Оповещение о посещении сайта

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

snort как пользоваться
Ошибка запуска Snort

Создание своих правил в Snort

Установить и проверить на работоспособность — этого мало. Необходимо его еще и просматривать. Вот давай и проверим, на что способна эта IDS с заводскими правилами. У нас есть SSH, Apache и FTP. Значит, минимальный набор правил, которые надо иметь, — это обнаруживать сканирование портов, атаку на учетные записи (brute force), DoS и SQL-инъекции.

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

snort правила
Действия подозрительного IP

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

snort windows
Атака на 22-й порт

Виден брутфорс SSH-сервиса на 22-м порте. Так же дела обстояли и с FTP-портом (21-м).

Далее ведется расследование, просматриваем логи самой ОС, выявляем слабое звено защиты, откуда он пришел и так далее. Главное, что оповещения сработали и причастность данного IP к противоправным действиям установлена.

Давай пойдем чуть дальше. Поднимаем Kali Linux и пробуем провести DoS-атаку на наш Apache. Так как BASE работает по HTTP, самый легкий способ его «положить», как по мне, это атака Slowloris. Поэтому скачиваем на нашу Kali соответствующий скрипт и запускаем атаку.

snort инструкция
DoS Slowloris на Kali Linux

Через 15–30 секунд наш BASE перестает отвечать. И даже после остановки атаки пришлось перезапустить веб-сервер. Сам он за короткий промежуток времени не смог подняться. Упал только BASE. Snort, естественно, продолжал работать и записывать оповещения в базу.

правила для snort
Лог Snort после DoS

Вот так выглядит наш лог после атаки. Следом я попробовал зафлудить SYN-пакетами свой Snort-сервер. Проделано это было при помощи программы hping3.

snort установка и настройка
snort установка и настройка

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

Следующим этапом я натравил sqlmap на BASE по запросу http://192.168.1.20/base/base_stat_alerts.php?sensor=1. К сожалению, это тоже не дало результатов: подходящих правил определения атак на базу данных в дефолтной подборке Snort нет. Значит, нужно написать правило самому. В нашем примере оно выглядит следующим образом:

Теперь зайдем на web-интерфейс с компьютера атакующего и попробуем проэксплуатировать данный метод, добавив в конце запроса and 1=1. В логе отобразилось оповещение с номером правила.

snort установка и настройка
Оповещение Snort об SQL injection

Заключение

С моей точки зрения, NIDS необходима на предприятии. Мне встречались крупные компании, которые не утруждали себя установкой подобного звена защиты. На вопрос: «Как вы хакера обнаружите?» — я получал невнятные ответы вроде «Мне DLP скажет…».

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

Зато после всех донастроек и написания своих правил она становится довольно мощным инструментом.

Понравилась статья? Поделиться с друзьями:
Комментарии: 1
  1. alex

    Подскажите пожалуйста, что не так я сделал
    ERROR: /etc/snort/snort.conf(547) => Bad character included in the User defined method: /etc/snort/rules/local.rules.Make sure space before and after ‘}’.
    Fatal Error, Quitting..

Добавить комментарий