Знакомство с системами IDPS на примере Suricata
Теоретические сведения
Это IDPS-система (обнаружения и предотвращения атак), способная выполнять глубокий анализ сетевых пакетов.
-
📑 Документация на английском языке. Рекомендована к ознакомлению.
-
🧑🔬 Все описанное проверено на Debain 11.7 (Proxmox 8 LXC), Suricata 6.0.1 RELEASE.
Установка
apt update
apt install suricata
Посмотреть версию
suricata -V
Обновление базы правил
Обновление правил. Загружается база данных (несколько файлов) уже кем-то созданных правил
suricata-update
Внимательно ознакомившись с выводом, можно найти путь к файлу suricata.rules
(далее может понадобиться, чтобы избавиться от ошибки).
Данных правил может быть достаточно для нетребовательной системы, но при этом могут генерироваться множество событий в лог-файлах.
Проверка конфигурации перед запуском
Проверка файла конфигурации и файлов с правилами на наличие ошибок
suricata -T -c /etc/suricata/suricata.yaml
<Warning> - [ERRCODE: SC_ERR_NO_RULES(42)] - No rule files match the pattern /etc/suricata/rules/suricata.rules
⚠️ Предупреждение. Файл с правилами не найден. Не смотря на то, что это только предупрежение, а не ошибка, от него лучше избавиться.
После внесения изменений в конфигурацию лучше проверять на наличие ошибок.
Запуск
С помощью systemctl
можно управлять сервисом suricata.service
, например,перезапустить сервис - systemctl restart suricata.service
.
Также можно с помощью команды suricata ...
запускать с определенными параметрами
-D
- режим демона-c
- путь к файлу.conf
q <число>
- запуск в режиме IPS (требуется firewall, например, iptables)
Параметры запуска можно изменить в файле /etc/systemd/system/multiuser.target/suricata.service
. Предварительно лучше сделать его копию. После изменения требуется systemctl daemon-reload
.
Настройка
Расположение файлов
Каталог с конфигурационными файлами - /etc/suricata
.
Каталог с правилами - /etc/suricata/rules
и /var/lib/suricata/rules
.
Основной файл конфигурации - suricata.yaml
.
Каталог с логами - /var/log/suricata
.
После изменения конфигурации требуется перезапуск сервиса.
Интерфейс для анализа трафика
В /etc/suricata/suricata.yaml
необходимо указать название интерфейса, на котором будет анализироваться трафик (посмотреть название интерфейса - ip a
)
af-packet:
- interface: <имя интерфейса>
Адрес внутренней (домашней) сети
Значение переменной HOME_NET
в /etc/suricata/suricata.yaml
отвечает за адреса в локальной (домашней) сети. Данная переменная отвечает за номера вашей внутренней сети. Сетей может быть несколько. По умолчанию уже есть сети из приватных диапазонов.
address-groups:
HOME_NET: "[192.168.0.0/16,10.0.0.0/8,172.16.0.0/12]"
Данную переменную можно использовать в правилах.
Файл с правилами
В suricata.yaml
перечисляются все пути к файлам с правилами.
Собественные правила рекомендуется создавать в отдельном файле, например, local.rules
(или логически разделять на несколько файлов, например, local-web.rules
). В конфигурации необходимо указать путь к ним.
default-rule-path: <путь к каталогу с файлами с правилами>
rule-files:
- <файл с правилами 1>
- <файл с правилами 2>
- ...
Правила
Структура и параметры
<действие> <протокол> <src IP> <src port> [->|<>] <dest IP> <dest port> (<ключевое слово>: <значение>; ...)
К некоторым параметрам можно применять:
- инверсию с помощью символа
!
- группировку с помощью конструкции
[<значение 1>, <значение 2>, ...]
что может быть иногда удобно.
Основные действия
alert
- оповеститьpass
- закончить анализ трафика (пропустить)drop
- отбросить без оповещения и сгенерировать alertreject
- отбросить с оповещением- есть еще несколько вариантов
Примеры протоколов
ip
icmp
tcp
udp
dns
ssh
http
- есть еще много других вариантов
Направление анализа трафика
Показывает, в каком направлении работает правило
->
- однонаправленное (стрелка указывает направление, это важно)<>
- двунаправленное
Далее приведены описание некоторых мета-параметров, которые перечисляются в (...)
правила. Не все из них являются обязательными.
⚠️ Предупреждение. Для разных протоколов существуют еще дополнительные мета-параметры. См. документацию.
msg
Текстовая информация о сигнатуре и возможном предупреждении.
sid
Уникальный идентификатор сигнатуры. Информация о назначении id здесь.
rev
Номер версии правила. Обычно используется вместе с sid. При его редактировании необходимо увеличивать число.
classtype
Информация о классе правила. Файл, где хранятся классы - classification.config
.
Синтаксис
config classification: <короткое название>,<полное название>,<приоритет по умолчанию>
Например,
config classification: web-application-attack,Web Application Attack,1
reference
Указывает на место, где можно найти информацию о сигнатуре и проблеме. Может быть указано несколько раз.
Например,
reference: url, www.example.com
reference: cve, CVE-2024-0001
priority
Приориет, который влияет на порядок применения правил. Обработка начинается с наибольшего значения.
Диапазон значений от 1 до 255. Чаще всего используются от 1 до 4.
metadata
Прочая полезная информация в формате
metadata: <ключ> <значение>, <ключ> <значение>;
Не является служебной для Suricata.
threshold
threshold: type { threshold | limit }, track { by_src | by_dst | by_both }, count <value>, seconds <value>;
См. полный синтаксис в документации.
Примеры
Пример 1
В примере генерируется оповещение о любом "пинге", который приходит к Suricata или отправляется от нее.
alert icmp any any -> any any (msg:"My rule 1"; sid:1000001; rev:1;)
Чтобы проверить срабатывание правила нужно выполнить "пинг" в сторону Suricata или от нее.
При этом в файле /var/log/suricata/fast.log
появятся логи с вашим сообщением
tail /var/log/suricata/fast.log
Пример 2
В примере генерируется оповещение при наличии на web-странице строки, указанной в поле content
alert http any any -> any any (msg:"My rule 2"; content:"malicious"; sid:1000002; rev:1;)
Чтобы проверить срабатывание правила нужно выполнить HTTP-запрос с Suricata на любой сайт, который поддерживает HTTP и содержит на странице указанную строку
Например,
curl http://testmynids.org [ > /dev/null ]
Пример 3
В примере генерируется оповещение при обращении к веб-северу по URI, не совпадающему с /uid/index.html
alert http any any -> any any (msg:"My rule 3"; http.uri; content:!"/uid/index.html"; sid:1000001; rev:1;)
Данный вызов не приведет к появлению оповещения
curl http://testmynids.org/uid/index.html
Данные вызовы приведут к появлению оповещения
curl http://testmynids.org/
curl http://testmynids.org/uid/index.html
Пример 4
В примере генерируются оповещения при ICMP-сообщениях раз в минуту, если было зафиксировано минимум 3 инцидента в течение этого времени.
alert icmp any any -> any any (msg:"My rule 1"; threshold: type threshold, track by_src, count 3, seconds 60; sid:1000001; rev:1;)
Дополнительно см. документацию.
Режим IPS
Требуется firewall, например, iptables
apt install iptables
Создать входящее, исходящее или транзитное правило
iptables -I [ INPUT | OUTPUT | FORWARD ] [ -p <protocol> ] [ ... ] -j NFQUEUE [ --queue-num 0 ] [ --queue-bypass ]
💡 Информация. NFQUEUE
- это специальный target в iptables, что означает, что решение по сетевым пакетам выполняется с помощью программного обеспечения из пользовательского пространства (в данном случае - Suricata).
-q 0
- опция запуска Suricata в режиме IPS.
--queue-bypass
- решение о дальнейшей судьбе пакета принимает iptables, если в Suricata нет подходящего правила.
В режиме IPS имеет смысл использовать правила с действиями drop/reject.
🧰 Лабораторная работа
Ознакомиться перед выполнением любой лабораторной работы (список раскрывается)
- Вместо ❔ или
x
нужно подставить свой номер по журналу - Выполнять задание без "отмашки" не стоит ⛔, т.к. задание здесь может существовать более актуальная версия
- У каждой работы есть срок сдачи 📅, который озвучивается на занятии, после которого работа не может быть защищена на максимальный балл 📉
- Дополнительные задания 📚 не являются обязательными, но по результатам сдачи лабораторной работы может быть выдано одно или несколько из них. Также дополнительное задание может быть сформулировано устно
- Для каждой лабораторной работы должен быть отчет 📝 с описанием выполнения ваших действий, оформление должно соответствовать требованиям (см. на сайте учебного заведения)
- Нужно уметь ответить на вопросы ❓ по теме, контрольные вопросы и другие связанные вопросы
- Примеры могут быть выполнены по желанию, а также выданы в качестве дополнительного задания с изменениями или без в случае неуспешной 😢 защиты основной работы
- Иногда в работах встречаются задания по IPv4 и IPv6 одновременно 🔗. Это считается как одна работа. Допускается сдача работы только с IPv4 или только с IPv6, но максимальный балл в таком случае получить невозможно
🎯 Цель работы: изучить простую настройку IPDS-системы на примере протоколов ICMP, HTTP, DNS.
✔️ Условия
- Одна VM с веб-сервером (apache или nginx) и IDPS (suricata).
- Свой веб-сервер со своими страницами
index.html
,books.html
,authors.html
. Наполнить страницы простым уникальным контентом. - Клиент и VM (веб-сервер + IDPS) должны находиться в разных сетях.
-
Правила
- IDS должна оповещать о любых ICMP-запросах в сторону вашей VM.
- Для оценки выше 3. IDS должна оповещать о любых ICMP-запросах в сторону VM, если их количество 10 или более за 30 секунд.
- IDS должна оповещать о HTTP-запросах по URI, которых не существует на вашем сервере.
-
Для оценки выше 3. IDS должна оповещать о любых HTTP-запросах на ваш веб-сервер, если их количество не менее 5 в минуту.
💡 Подсказка. Сначала нужно изучить в Wireshark обмен сообщениями, т.к. просто применить правило для HTTP может быть недостаточно.
-
IDS должна оповещать о любых DNS-запросах c VM, если запрашиваемый домен не заканчивается на
.ru
или.com
.💡 Подсказка. Можно использовать регулярное выражение.
-
Ни о чем другом IDS оповещать не должна.
- Каждый тип оповещения должен иметь свой
classtype
. - Правила должны храниться в файле
<your_name>.rules
. - Проверить срабатывание правил оповещений.
- ✨ Дополнительный балл. С помощью linux-утилиты (найти самостоятельно) протестировать свой web-сервер и IPS-систему на DoS-атаку. Подобрать такой режим и правила IPS, чтобы DoS-атака была пресечена.
- ✨ Дополнительный балл. Настроить Suricata в режиме IPS и проверить отбрасывание пакетов.
🤔 Контрольные вопросы
- Сколько правил в файле
suricata.rules
? - Из какого диапазона должны выбираться значения
sid
для локальных правил? - В чем отличие IPS и IDS режима?
- Какие мета-параметры в правиле являются обязательными?
- Что будет, если запустить
tail -f <лог-файл>
? - Какими пакетами обмениваются клиент и сервер при открытии веб-страницы с помощью протокола HTTP?
©️ Оформление, изложение, медиаконтент. И. Попов, 2020-2025