Сетевое обнаружение вторжений

Рейтинг: 74.1% · 11 голосов
Специализация LPIC-3 303 (v3.0): криптография и PKI/X.509, шифрование ФС (LUKS/TPM2/Clevis), DNSSEC, hardening хоста, IDS, контроль доступа (SELinux/AppArmor), сетевая безопасность, nftables, VPN, пентест.
Ответить
Аватара пользователя
Sergey_Sysadmin
Сообщения: 134
Зарегистрирован: 11 май 2026, 05:31

Сетевое обнаружение вторжений

Сообщение Sergey_Sysadmin »

Оглавление курса (16)
  1. Введение в LPIC-3 303: безопасность Linux
  2. X.509 и инфраструктура открытых ключей [331.1]
  3. X.509 для шифрования, подписи и аутентификации [331.2]
  4. Шифрование файловых систем [331.3]
  5. DNS и криптография [331.4]
  6. Усиление защиты хоста [332.1]
  7. Урок 6. Обнаружение вторжений на хосте: AIDE, auditd, сканеры руткитов и OpenSCAP
  8. Контроль ресурсов [332.3]
  9. Дискреционный контроль доступа: ACL и атрибуты [333.1]
  10. Мандатный контроль доступа: SELinux и AppArmor [333.2]
  11. Усиление сетевой защиты [334.1]
  12. Сетевое обнаружение вторжений (вы здесь)
  13. Фильтрация пакетов [334.3]
  14. Виртуальные частные сети (VPN) [334.4]
  15. Уязвимости и угрозы [335.1]
  16. Основы тестирования на проникновение [335.2]
Урок 11. Сетевое обнаружение вторжений [334.2]

Хостовая защита видит только то, что происходит на самой машине. Но атака сначала идет по проводу: сканирование, эксплойт, выгрузка данных наружу. Задача этого урока - научиться ставить уши на сетевой трафик. Разберем, чем NIDS отличается от NIPS, как работают Suricata и Snort, как читать и обновлять правила, как руками ковырять пакеты через tcpdump, tshark и Wireshark, и зачем рядом с сигнатурным движком держать Zeek. В конце поговорим про самое важное и самое заваливаемое на практике - куда физически воткнуть сенсор.

Изображение

Как это работает

NIDS (Network Intrusion Detection System) - это пассивный наблюдатель. Он получает копию трафика, прогоняет каждый пакет или поток через набор правил-сигнатур и при совпадении пишет алерт. Сам трафик он не трогает, задержку не вносит, упасть может без последствий для сети. NIPS (Network Intrusion Prevention System) - тот же движок, но включенный в разрыв (inline): он не просто видит пакет, а решает, пропустить его или дропнуть. Цена за это - он становится точкой отказа и источником задержки.

Сигнатурный подход прост: есть база описаний известных атак (байтовые последовательности, аномалии заголовков, URI эксплойтов), движок ищет совпадение. Минус очевиден - новую, еще не описанную атаку он не увидит. Поэтому современные сенсоры дополняют сигнатуры поведенческим анализом и логированием метаданных, чтобы было что разбирать постфактум.

Suricata и Snort решают одну задачу разными способами. Snort 3 - наследник классики, однопоточное ядро детекта в основе, свой обновленный формат правил, родная база - Talos. Suricata (актуальна ветка 8.x на 2026) изначально многопоточная: модель worker-потоков раскладывает обработку пакетов по всем ядрам и масштабируется почти линейно с ростом числа CPU. Suricata понимает большинство правил Snort 2.x и Emerging Threats, выдает структурированный лог eve.json и умеет вытаскивать файлы из потока. На практике на одном железе Suricata держит больше включенных правил и шумит больше алертов.

Zeek (бывший Bro) - не про сигнатуры. Это движок сетевого мониторинга: он не ищет атаки по шаблону, а превращает сырые пакеты в богатые структурированные логи. conn.log - каждое соединение, dns.log - все DNS-запросы, http.log, ssl.log, files.log. Это золото для threat hunting и расследований: даже если в момент атаки сигнатуры не было, у вас остается полная история того, кто с кем и когда говорил. Классическая боевая связка - Suricata как быстрый сигнатурный детектор плюс Zeek как контекстный регистратор.

Команды и примеры

Установка. В Debian 13 / Ubuntu 24.04 пакеты есть в репозиториях, но для свежей ветки лучше PPA OISF:

Код: Выделить всё

# Debian/Ubuntu
apt install suricata suricata-update
# свежее - из официального PPA OISF
add-apt-repository ppa:oisf/suricata-stable && apt update && apt install suricata

# RHEL 10 / Fedora 41+
dnf install suricata
# Snort 3 в Fedora
dnf install snort3
Обновление сигнатур. Это suricata-update - отдельный инструмент, который тянет и собирает правила:

Код: Выделить всё

suricata-update update-sources          # список доступных источников
suricata-update enable-source et/open   # включить Emerging Threats Open
suricata-update                          # скачать и собрать правила
Собранные правила лягут в /var/lib/suricata/rules/suricata.rules. Перечитать без рестарта - сигналом:

Код: Выделить всё

kill -USR2 $(pidof suricata)
Запуск как IDS (пассивно слушаем интерфейс) и проверка конфига:

Код: Выделить всё

suricata -T -c /etc/suricata/suricata.yaml -v   # тест конфигурации
suricata -i ens3 -c /etc/suricata/suricata.yaml # IDS на интерфейсе
Режим IPS строится не на ключе запуска, а на источнике пакетов. В Linux трафик заворачивают в NFQUEUE через nftables (iptables - легаси, на 2026 пишем правила в nft), и Suricata читает очередь:

Код: Выделить всё

# nftables: отправить форвардящийся трафик в очередь 0
nft add rule inet filter forward queue num 0
# Suricata в inline-режиме на этой очереди
suricata -q 0 -c /etc/suricata/suricata.yaml
Анатомия правила (одинакова для Snort 2.x и Suricata):

Код: Выделить всё

alert tcp any any -> $HOME_NET 22 (msg:"SSH brute force attempt"; \
  flow:to_server; threshold:type both,track by_src,count 5,seconds 30; \
  classtype:attempted-admin; sid:1000001; rev:1;)
Действие (alert/drop/reject), протокол, источник и адресат с портами, стрелка направления, в скобках - опции. msg - текст алерта, sid - уникальный номер правила, threshold ограничивает срабатывание.

Ручной анализ трафика. tcpdump - захват и BPF-фильтры:

Код: Выделить всё

tcpdump -i ens3 -nn -s0 -w capture.pcap 'tcp port 443 and host 10.0.0.5'
-nn не резолвит имена и порты, -s0 берет пакет целиком, -w пишет в pcap. tshark - консольный Wireshark, читает тот же pcap, но фильтрует уже по полям протоколов (display filter, не BPF):

Код: Выделить всё

tshark -r capture.pcap -Y 'http.request.method == "POST"' -T fields -e ip.src -e http.host
Wireshark - графический разбор того же файла, удобен для follow TCP stream и просмотра payload вручную.

Частые грабли
  • Путают BPF и display-фильтры. В tcpdump и в ключе -f tshark - синтаксис BPF (port 443). В поле -Y tshark и в строке фильтра Wireshark - синтаксис дисплея (tcp.port == 443). Перепутал - либо ошибка, либо тихо ничего не отфильтровалось.
  • Сенсор на обычном порту коммутатора видит только свой бродкаст и трафик к себе. Без зеркалирования или TAP половина пакетов до движка просто не доходит.
  • Забывают про офлоадинг сетевой карты. GRO/LRO/TSO склеивают сегменты, и движок видит несуществующие в проводе гигантские пакеты. Перед захватом - ethtool -K ens3 gro off lro off tso off.
  • suricata-update только собирает правила в файл. Чтобы движок их применил, нужен USR2 или рестарт. Скачал и думаешь что заработало - а оно нет.
  • IPS в разрыве без продумывания отказа. Упал процесс или забил очередь - и весь сегмент сети встал. Нужны fail-open bypass или хотя бы тестирование на отключение.
  • Хешируете прохождение по SPAN-порту, а он перегружен и молча дропает пакеты при превышении пропускной способности. Алертов нет не потому что чисто, а потому что пакеты не дошли.
Мини-лаба
  • Поднимите два пакета: Suricata в Ubuntu 24.04 и (опционально) Snort 3 в Fedora.
  • Выполните suricata-update, включите источник et/open, соберите правила и проверьте конфиг через suricata -T.
  • Добавьте свое правило с sid:1000001 на детект ICMP (alert icmp any any -> any any (msg:"PING"; sid:1000001;)) и перечитайте правила сигналом USR2.
  • Запустите Suricata в IDS-режиме на интерфейсе, с другой машины пингуйте стенд и найдите алерт в /var/log/suricata/fast.log и в eve.json.
  • Параллельно снимите трафик tcpdump в файл, откройте его в tshark с display-фильтром icmp и сверьте, что видите те же пакеты.
  • Заверните трафик в nftables NFQUEUE, запустите Suricata с -q 0 и замените действие правила на drop - убедитесь, что пинг теперь блокируется.
  • Дополнительно: установите Zeek, прогоните тот же pcap через zeek -r capture.pcap и посмотрите conn.log.
Контрольные вопросы
  • Чем принципиально отличается размещение NIDS от NIPS в топологии сети и какие риски добавляет inline-режим?
  • Почему Suricata масштабируется на многоядерном железе лучше, чем классическое ядро Snort?
  • Какой инструмент обновляет правила Suricata, куда он кладет результат и что нужно сделать, чтобы движок применил новые сигнатуры без полного рестарта?
  • В чем разница между BPF-фильтром tcpdump и display-фильтром tshark/Wireshark, приведите пример одного и того же условия в обоих синтаксисах.
  • Зачем в зрелом SOC держать Zeek рядом с сигнатурным движком, какую задачу он закрывает, которую сигнатуры не решают?
  • Что такое SPAN-порт и сетевой TAP, в чем их слабые места при высокой нагрузке?
👍2 ❤️5 🔥2 😄 🤔
Аватара пользователя
wireguard_main
Сообщения: 1
Зарегистрирован: 28 май 2026, 05:59

Re: Сетевое обнаружение вторжений

Сообщение wireguard_main »

А если воткнуть Suricata прямо в IPS-режим сразу на проде - это норм или сначала всё-таки IDS погонять?
👍1 ❤️1 🔥 😄 🤔2
Аватара пользователя
zig98
Сообщения: 1
Зарегистрирован: 11 май 2026, 11:34

Re: Сетевое обнаружение вторжений

Сообщение zig98 »

У меня tshark с фильтром port 443 ругается, а tcpdump с тем же норм. Теперь дошло - в tshark надо tcp.port == 443, спасибо за разбор BPF vs display.
👍1 ❤️ 🔥1 😄 🤔
Ответить
← Предыдущая глава
Усиление сетевой защиты [334.1]
Следующая глава →
Фильтрация пакетов [334.3]

Все главы курса «LPIC-3 303: безопасность Linux»

Поделиться темой: ✈ Telegram VK

Вернуться в «LPIC-3 303: безопасность Linux»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость