Сети для акулы. Разворачиваем Snort и пишем правила

texture background template knotted nylon net fishing

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

Почему Snort?

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

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

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

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

INFO

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

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

post-up ethtool -K eth0 gro off
post-up ethtool -K eth0 lro off

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

sudo ifconfig enp0s3 down && sudo ifconfig enp0s3 up

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

sudo apt-get install -y build-essential libpcap-dev libpcre3-dev libdumbnet-dev bison flex zlib1g-dev liblzma-dev openssl libssl-dev libnghttp2-dev.

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

mkdir snort
cd snort
wget https://snort.org/downloads/snort/daq-2.0.6.tar.gz
tar -xvzf daq-2.0.6.tar.gz
cd daq-2.0.6
./configure
make
sudo make install

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

cd ~/snort_src
wget https://www.snort.org/downloads/snort/snort-2.9.12.tar.gz
tar -xvzf snort-2.9.12.tar.gz
cd snort-2.9.12
./configure --enable-sourcefire --disable-open-appid
make
sudo make install
sudo ldconfig
sudo ln -s /usr/local/bin/snort /usr/sbin/snort

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

/usr/sbin/snort –V

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

Версия Snort

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

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

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

sudo groupadd snort
sudo useradd snort -r -s /sbin/nologin -c SNORT_IDS -g snort

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

sudo mkdir /etc/snort
sudo mkdir /etc/snort/rules
sudo mkdir /etc/snort/rules/iplists
sudo mkdir /etc/snort/preproc_rules
sudo mkdir /usr/local/lib/snort_dynamicrules
sudo mkdir /etc/snort/so_rules
sudo touch /etc/snort/rules/iplists/black_list.rules
sudo touch /etc/snort/rules/iplists/white_list.rules
sudo touch /etc/snort/rules/local.rules
sudo touch /etc/snort/sid-msg.map
sudo mkdir /var/log/snort
sudo mkdir /var/log/snort/archived_logs
sudo chmod -R 5775 /etc/snort
sudo chmod -R 5775 /var/log/snort
sudo chmod -R 5775 /var/log/snort/archived_logs
sudo chmod -R 5775 /etc/snort/so_rules
sudo chmod -R 5775 /usr/local/lib/snort_dynamicrules
sudo chown -R snort:snort /etc/snort
sudo chown -R snort:snort /var/log/snort
sudo chown -R snort:snort /usr/local/lib/snort_dynamicrules

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

cd ~/snort/snort-2.9.12/etc/
sudo cp *.conf* /etc/snort
sudo cp *.map /etc/snort
sudo cp *.dtd /etc/snort
cd ~/snort/snort-2.9.12/src/dynamic-preprocessors/build/usr/local/lib/snort_dynamicpreprocessor/
sudo cp * /usr/local/lib/snort_dynamicpreprocessor/

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

Дерево папок и файлов /etc/snort

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

sudo sed -i 's/include \$RULE\_PATH/#include \$RULE\_PATH/' /etc/snort/snort.conf

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

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

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

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

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score! Подробнее

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.


8bit:

Комментарии (10)

  • добрый день
    Строка 104: меняем на var RULE_PATH /etc/snort/rules.
    Строка 105: меняем на var SO_RULE_PATH /etc/snort/so_rules.
    Строка 106: меняем на var PREPROC_RULE_PATH /etc/snort/preproc_rules.
    Строка 113: меняем на var WHITE_LIST_PATH /etc/snort/rules/iplists.
    Строка 114: меняем на var BLACK_LIST_PATH /etc/snort/rules/iplists.
    Строка 546: необходимо раскомментировать include $RULE_PATH/local.rules для возможности использовать свои правила.
    Строка 521: ниже нее необходимо добавить строку output unified2: filename snort.u2, limit 128.
    Строка 548: необходимо добавить строку include $RULE_PATH/snort.rules.
    Правок много, и в них легко ошибиться. К счастью, Snort умеет проверять файл конфигурации. Рекомендую это делать после каждого ковыряния в конфиге.

    sudo snort -T -c /etc/snort/snort.conf -i enp0s3
    Если видишь заветные слова Snort successfully validated the configuration! Snort exiting, значит, все в порядке и ничего пока не сломано.

    на этот блок выдает ошибки подобно этой - ERROR: /etc/snort/snort.conf(546) Undefined variable name: RULE_PATH.

  • на установке Basic Analysis всё и заканчивается :( . Веб страница не запускается "Не удается найти веб-страницу"

  • Статья хорошая, но snort за день выдал несколько тысяч предупреждений. Очевидно, что это ложные срабатывания. Большая их часть сгенерировано посылками с моего же хоста. Как все это убрать чтобы оно ловило настоящие попытки взлома?

    • Надо посмотреть какие срабатывания, и подкорректировать сами правила

  • sudo /usr/local/bin/snort -q -u snort -g snort -c /etc/snort/snort.conf -i ens33 –D
    ERROR: Can't set DAQ BPF filter to '–D' (pcap_daq_set_filter: pcap_compile: illegal token: –)!
    Fatal Error, Quitting..

    у меня такая ошибка, помогите пожалуйста

    • У вас некорректный символ в строчке "–D". Поправьте на обычный дефис.

  • + однозначно, наверное лучшее рук-во которое я читал с такой лёгкостью.