Top.Mail.Ru
Загрузка

Snort — на защите от сетевых вторжений

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

Snort — одна из первых и наиболее надёжных систем обнаружения сетевых вторжений, была создана в 1998 году Мартином Роешем (Martin Roesch), который на тот момент был техническим директором компании Sourcefire. С самого своего начала Snort стала быстро набирать популярность, и в 2009 году портал InfoWorld назвал её одной из 36 лучших программ среди свободного программного обеспечения.

Для обнаружения большинства известных способов проникновения в систему, Snort использует ряд правил, которые помогают определить вредоносную сетевую активность. После выявления угрозы, программа генерирует предупреждение для пользователя. Установка же программы не вызовет никаких затруднений, если конечно вы не намерены тщательно прописывать каждую строчку файла настроек. Но обо всём по порядку. Ниже приведена инструкция по минимальной установке для Debian-подобных дистрибутивов, чего, в принципе, должно быть достаточно для многих пользователей.

Установка Snort

Если вы хотите, чтобы у вас была самая последняя актуальная версия программы, я рекомендую устанавливать её из исходников. Скачать исходный код программы можно с официального сайта. Прежде чем приступить к сборке пакета вам придётся удовлетворить некоторые зависимости, без которых процесс застопорится на этапе подготовки. Подробная инструкция по компиляции дана в файле README.md, там же приведён список зависимостей.

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

Каким бы образом вы не решили установить Snort, перед установкой вам необходимо собрать информацию о сетевых интерфейсах, выполнив команду:

ip a

Вам потребуется имя сетевого интерфейса, — идёт под номером 2 на скриншоте, и IP-адрес, который находится ниже в строке, начинающейся с inet. Держите терминал открытым, чтобы можно было копировать и вставлять данные по мере необходимости. Если вы устанавливаете пакет Snort из репозитория Ubuntu, то при установке вам будет предложено ввести IP-адрес. Если у вас возникли сомнения, то вы можете просто выбрать OK для продолжения и при необходимости изменить настройки позже.

Настройка Snort

После успешного завершения установки необходимо отредактировать файл /etc/snort/snort.conf от имени суперпользователя (root).

sudo nano /etc/snort/snort.conf

Как минимум, в этом огромном файле надо найти строку, которая начинается с ipvar, и заменить в ней значение HOME_NET на свой IP-адрес (заменить any):

ipvar HOME_NET any

Для более детальной настройки вам надо будет ознакомиться с открытой документацией Snort, доступной на сайте проекта. Приведение файла конфигурации под ваши нужды может занять несколько часов. Пока же достаточно отметить, что файл 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 / Настройка правил общих объектов Snort

Для Debian имеется дополнительная настройка, так называемый Шаг 0, в котором можно для каждого сетевого интерфейса указать свой файл настроек. В большинстве случаев этот шаг можно пропустить, и оставить всё как есть.

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

Загрузка правил

Для обнаружения вторжений разработчики Snort предлагают три типа правил:

  • Community rules — это правила, написанные сообществом и доступные бесплатно. Они, безусловно, могут быть полезными, но стоит помнить о том, что они пишутся спустя какое-то время после того, как стало известно о новом способе вторжения. Их качество и актуальность зависит от добросовестности разработчиков.
  • Registered rules — это бесплатные правила, которые доступны только зарегистрированным пользователям.
  • Subscription rules — это правила, доступные только тем пользователям, кто оформил платную подписку. Этот набор правил доступен сразу после выпуска — на 30 дней быстрее, чем зарегистрированным пользователям.

Правила, созданные разработчиками проекта, можно скачать с их официального сайта. Будьте внимательны при выборе наборов правил, так как там присутствуют правила как для версии 2.9, так и для 3 версии программы.

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

Будем полагать, что вы зарегистрировались и скачали второй набор правил. Разархивируйте полученный архив в каталог /etc/snort/rules:

sudo tar -xvf ~/registered.tar.gz -C /etc/snort

Последние штрихи

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

ip link set NETWORK-INTERFACE promisc on

Можно запустить Snort в тестовом режиме, чтобы убедиться в отсутствии каких-либо ошибок. От имени суперпользователя (root) выполните команду:

sudo snort -T -c /etc/snort/snort.conf

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

Тестирование конфигурации

Для того чтобы проверить, правильно ли Snort регистрирует предупреждения, надо в файл local.rules добавить правило для обнаружения предупреждений о входящих ICMP-соединениях. Откройте файл в текстовом редакторе:

sudo nano /etc/snort/rules/local.rules

Затем добавьте в файл следующую строку.

alert tcp any any -> $HOME_NET any (msg: «Тест TCP»; sid:10000001; rev:001;)

Правило состоит из следующих частей:

  • действие для трафика, соответствующего правилу, в данном случае alert
  • протокол трафика, например ICMP, UDP или, как в нашем случае, TCP
  • адрес и порт источника, просто помечается как any, чтобы включить все адреса и порты
  • адрес и порт назначения, $HOME_NET, как объявлено в конфигурации, и любой порт
  • сообщение журнала
  • уникальный идентификатор правила (sid), который для локальных правил должен быть 1000001 или выше
  • номер версии правила.

Сохраните файл local.rules и выйдите из редактора.

Запустите Snort с опцией -A console для печати предупреждений в стандартный вывод (stdout). При этом необходимо выбрать правильный сетевой интерфейс с публичным IP-адресом вашего сервера, который вы уже узнавали в выводе команды ip a (eth0 замените на свой интерфейс):

sudo snort -A console -i eth0 -c /etc/snort/snort.conf

Snort записывает предупреждения в журнал /var/log/snort/snort.log.timestamp, где timestamp — это момент времени запуска Snort, обозначенный в Unix-времени. Прочитать журнал можно с помощью команды, приведенной ниже:

sudo snort -r /var/log/snort/snort.log.

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

Запустите браузер и в журнале отобразится предупреждение для каждого TCP-вызова с IP-адресами источника и получателя, временем и датой, а также некоторая дополнительная информация, как показано в примере ниже.

После проверки удалите или закомментируйте добавленную для теста строку в файле local.rules.

Запуск Snort

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

sudo snort -d -l /var/log/snort/ -h IP-ADDRESS -A console -c /etc/snort/snort.conf

Отметим, что данная команда является командой общего назначения для прослушивания пакетов по-указанному IP-адресу, записи журнала в стандартный вывод (-A console), а также в файл (-l) и использования указанного конфигурационного файла (-c). Вывод начинается с информации об авторских правах, затем следует описание используемых правил и список устаревших или отсутствующих правил, и, наконец, текущий список событий на IP-адресе.

Отдельные записи журнала начинаются с даты и времени, затем указывается активность, её классификация и источник активности. Активности присваивается номер приоритета, как правило, по шкале от 1 (серьёзная) до 4 (слабая), хотя при написании или модификации правила можно назначать приоритеты сколь угодно высокого уровня. Если вы новичок в пакетном сниффинге, вас может насторожить частота и постоянство активности на современном компьютере, поэтому помните, что Snort регистрирует всю сетевую активность, а не только потенциально подозрительную. Помните, что ложные срабатывания будут встречаться часто. Все логи записываются в папку /var/log/snort.

Скорее всего, вы захотите, чтобы Snort запускался автоматически и работал в фоне постоянно, особенно если ваша машина находится в сети. Если в вашей системе используется systemd, создайте и отредактируйте от имени суперпользователя (root) файл /lib/systemd/system/snort.service

sudo nano /lib/systemd/system/snort.service

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

[Unit]
Description=Snort NIDS Daemon
After=syslog.target network.target
[Service]
Type=simple
ExecStart=/usr/bin/snort -q -u snort -g snort -c /etc/snort/snort.conf -i eth0
[Install]
WantedBy=multi-user.target

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

sudo systemctl daemon-reload

Запускаем службу:

sudo systemctl start snort

Проверить работу службы можно командой:

sudo systemctl status snort

Если нет никаких ошибок и всё работает корректно, то следующая команда добавит службу в автозагрузку:

sudo systemctl enable snort

Заключение

Поздравляю, вы успешно настроили и протестировали сетевую систему обнаружения вторжений Snort. Однако в этом руководстве мы рассмотрели только самые базовые понятия. На самом деле man-страница Snort содержит описание десятков опций. Попытка подробно описать все опции здесь была бы нереальной. Для получения более подробной информации обратитесь к последней версии документации на официальном сайте проекта Snort.

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

Sguil обрабатывает все события перехваченные Snort, но также включает ряд сопутствующих инструментов, в том числе Barnyard2, tcpdump и Wireshark.

svg

Что вы думаете?

Показать комментарии / Оставить комментарий

Комментировать

svg
Быстрая навигация
  • 01

    Snort — на защите от сетевых вторжений