Безопасность — это не только про секьюрную настройку всего и вся. Атакующие ломают даже самые защищенные системы, а администраторы месяцами не замечают злоумышленника, который прочно закрепился в системе и сливает данные. Чтобы предотвратить такой сценарий и детектировать атаку, существуют системы обнаружения вторжений. С одной из них — опенсорсной 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
Версия 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
Дерево папок и файлов /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, значит, все в порядке и ничего пока не сломано.

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

Материалы из последних выпусков можно покупать отдельно только через два месяца после публикации. Чтобы продолжить чтение, необходимо купить подписку.

Подпишись на «Хакер» по выгодной цене!

Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов. Подробнее о подписке

4 комментария

  1. Андрей Васильков

    Андрей Васильков

    15.11.2018 at 00:41

  2. rutkit

    15.11.2018 at 05:52

  3. admsevgb

    16.11.2018 at 07:33

  4. Artem

    22.11.2018 at 23:31

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

Оставить мнение

Check Also

Энкодеры msfvenom. Разбираемся с кодированием боевой нагрузки при бинарной эксплуатации

Генерация полезной нагрузки — неотъемлемая часть эксплуатации. При использовании модулей M…