IDS и IPS: Snort, Suricata
Урок объясняет, как системы обнаружения и предотвращения вторжений видят атаку в трафике, чем IDS отличается от IPS и как писать и тюнинговать правила, чтобы они работали в реальной сети.
IDS (Intrusion Detection System) наблюдает за трафиком и сообщает о подозрительной активности; IPS (Intrusion Prevention System) стоит «в разрыв» и может заблокировать такой трафик в реальном времени.
Файрвол решает, кому разрешён доступ, но не разбирается, что именно происходит внутри разрешённых соединений. Эту задачу берут на себя IDS/IPS — глаза и (в случае IPS) руки Blue Team на уровне сетевого содержимого. Snort и Suricata — два самых известных открытых движка; понимание их логики даёт фундамент для любой системы детектирования.
Зачем это знать защитнику
IDS/IPS — основной источник сетевых алертов в SOC (центре мониторинга безопасности). Если вы не понимаете, как устроены сигнатуры и почему возникают ложные срабатывания, вы получите либо «тихую» систему, которая пропускает атаки, либо «кричащую», которой никто не верит. Хороший инженер обнаружения умеет читать правило, понимать, на что оно реагирует, и осознанно его настраивать.
Два подхода к обнаружению
Сигнатурное (signature-based)
Движок сравнивает трафик с базой сигнатур — описаний известных атак (характерные байты, строки в payload, последовательности). Это как антивирус: точно ловит известное, почти не даёт ложных срабатываний на хорошо написанных правилах, но слеп к новому (zero-day) и к небольшим вариациям, если сигнатура слишком жёсткая. Snort и Suricata в первую очередь сигнатурные.
Поведенческое / аномалийное (anomaly-based)
Система строит профиль нормального поведения (baseline) и поднимает тревогу на отклонениях: внезапный всплеск трафика на нетипичный порт, хост, который вдруг начал сканировать сеть, аномальный объём DNS-запросов. Такой подход способен заметить неизвестную атаку, но платит ложными срабатываниями: «необычное» не всегда «вредоносное». Часто оба подхода комбинируют.
| Критерий | Сигнатурное | Поведенческое |
| Ловит известные атаки | Отлично | Средне |
| Ловит zero-day | Нет | Да, потенциально |
| Ложные срабатывания | Мало (при хороших правилах) | Больше |
| Требует baseline | Нет | Да |
Как читается правило Snort/Suricata
Правило имеет понятную грамматику: действие, протокол, источник/назначение и блок опций в скобках. Разберём учебный пример (детектирование строки в HTTP-трафике лабораторного стенда):
alert tcp any any -> $HOME_NET 80 ( \
msg:"LAB Suspicious user-agent observed"; \
flow:to_server,established; \
content:"User-Agent|3a| BadScanner"; http_header; \
classtype:web-application-activity; \
sid:1000001; rev:1; )
Читается так: alert — действие (только уведомить); tcp any any -> $HOME_NET 80 — любой источник к нашей сети на порт 80; flow:to_server,established — только установленные соединения к серверу; content:"..." — что искать в payload (|3a| — шестнадцатеричный код двоеточия); sid — уникальный идентификатор правила. Это иллюстрация синтаксиса, а не боевая сигнатура.
Действия задают режим работы: alert — уведомить (IDS-поведение), drop — отбросить пакет (IPS), reject — отбросить и разорвать соединение.
IDS против IPS: где стоит и что делает
IDS обычно подключают пассивно: трафик зеркалируется на неё через SPAN-порт или TAP, она анализирует копию и шлёт алерты. Она не в состоянии остановить атаку, но и не может ничего сломать — нулевой риск для доступности.
IPS стоит инлайн (in-line), весь трафик физически идёт через неё, поэтому она может блокировать пакет в реальном времени. Цена — риск: если IPS заблокирует легитимный трафик (ложное срабатывание в режиме блокировки), пострадает работа бизнеса; а ещё она становится точкой отказа и узким местом по производительности. Поэтому новые правила сначала запускают в режиме alert и только после проверки переводят в drop.
Как это работает под капотом
Движок реассемблирует TCP-потоки и нормализует протоколы (например, раскодирует URL-encoding в HTTP), чтобы атакующий не спрятался за разным представлением одних и тех же данных — это называется защитой от evasion. Затем нормализованные данные прогоняются через скомпилированный набор правил с помощью быстрого многошаблонного поиска (Aho-Corasick и подобные алгоритмы). Suricata вдобавок многопоточна и умеет извлекать файлы и метаданные (JA3-отпечатки TLS, логи HTTP/DNS), что делает её одновременно IDS и сетевым сенсором для SIEM.
Как защититься (правильно эксплуатировать IDS/IPS)
- Начинайте в режиме обнаружения. Любое новое правило — сперва
alert; смотрите неделю, какие срабатывания реальны, и лишь потом включайте блокировку. - Тюнингуйте против ложных срабатываний. Отключайте или сужайте правила, которые шумят на вашем легитимном трафике (
suppress, порогиthreshold, списки исключений). Цель — высокое отношение сигнал/шум. - Поддерживайте сигнатуры свежими. Подписки на наборы правил (например, ET Open для Suricata) обновляются часто — устаревшая база слепа к новым угрозам.
- Покрывайте внутренний трафик, не только периметр: латеральное перемещение атакующего видно именно внутри сети.
- Соединяйте с SIEM. Один алерт малоинформативен; ценность — в корреляции событий.
Юридическое напоминание: разворачивать и тестировать IDS/IPS, а также прогонять атакующие пейлоады для проверки правил можно только в своей сети или в разрешённой лаборатории. Несанкционированное вмешательство в чужие системы наказуемо (УК РФ ст. 272–274).
Итоги
- IDS обнаруживает и уведомляет (пассивно, без риска); IPS стоит инлайн и может блокировать (мощнее, но рискованнее).
- Сигнатурное обнаружение точно ловит известное, поведенческое способно заметить новое ценой ложных срабатываний.
- Правило Snort/Suricata = действие + протокол + поток + опции (
content,flow,sid). - Новые правила запускают в
alertи только после проверки переводят вdrop. - Тюнинг, свежие сигнатуры, покрытие внутреннего трафика и интеграция с SIEM — обязательны.