0Pricing
Cyber Security Academy · Урок

Сигнатурные правила для Snort и Suricata

Написание и чтение сетевых правил

«Сигнатурные правила для Snort и Suricata» — бесплатный урок Cyber Security Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cyber Security Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cyber Security Academy содержит 4 уроков всего.

Snort и Suricata

Snort и Suricata — два ведущих механизма IDS/IPS с открытым исходным кодом. Они используют в основном совместимый язык правил, поэтому правило, написанное для одного механизма, обычно работает и в другом.

Suricata добавляет многопоточность, встроенные анализаторы протоколов, извлечение файлов и подробное журналирование (EVE JSON); Snort 3 аналогично модернизировал собственный механизм. Освоив синтаксис правил один раз, вы сможете эффективно работать с обоими механизмами.

Структура правила

У каждого правила есть две части: заголовок и заключённое в скобки тело с параметрами. Заголовок задаёт действие, протокол и направление трафика, а тело определяет, что сопоставлять и как формировать отчёт.

alert tcp $EXTERNAL_NET any -> $HOME_NET 80 ( \
  msg:"WEB suspicious request"; \
  content:"/admin.php"; http_uri; \
  sid:1000001; rev:1; )

Поля заголовка

Заголовок читается слева направо:

  • действие — оповещение, отбрасывание, отклонение, разрешение
  • протокол — tcp, udp, icmp, ip (или протоколы приложений в Suricata: http, dns, tls)
  • исходный IP/порт и IP/порт назначения
  • направление — -> одностороннее или <> двустороннее

Переменные вроде $HOME_NET и $EXTERNAL_NET берутся из конфигурации, поэтому правила остаются переносимыми между разными сетями.

drop tcp any any -> $HOME_NET 22 ( msg:"SSH blocked"; sid:1000002; rev:1; )

Действия: оповещение и отбрасывание

Действие определяет, будет ли это правило работать в режиме IDS или IPS:

  • alert — вести журнал и отправлять уведомление, но не останавливать трафик (IDS)
  • drop — молча отбрасывать пакет (IPS, только во встроенном режиме)
  • reject — отбрасывать пакет и отправлять сброс TCP-соединения или сообщение ICMP о недоступности
  • pass — явно разрешать трафик, пропуская последующие правила

Один и тот же движок работает как IDS или IPS в зависимости от того, развёрнут ли он во встроенном режиме и какие действия используются.

Сопоставление содержимого

Ключевое слово content сопоставляет последовательность байтов с полезной нагрузкой. Текст заключают в кавычки, а двоичные данные записывают в вертикальных чертах в шестнадцатеричном виде.

Ключевые слова привязки уточняют сопоставление: offset, depth, distance и within ограничивают место появления последовательности, что повышает точность и производительность.

alert tcp any any -> $HOME_NET any ( \
  msg:"Malware magic bytes"; \
  content:"|4D 5A|"; offset:0; depth:2; \
  sid:1000003; rev:1; )

Буферы с фиксацией

Современные правила сопоставляют данные с буферами с учётом протокола, а не с необработанным потоком. После ключевого слова буфера последующие сопоставления content применяются к соответствующей части разобранного протокола.

  • http_uri — URI запроса
  • http_header — заголовки запроса и ответа
  • http_user_agent — агент пользователя
  • tls_sni / dns_query — имя сервера TLS / запрос DNS

Это гораздо надёжнее, чем искать подстроку во всём пакете.

alert http any any -> any any ( \
  msg:"Suspicious user agent"; \
  http.user_agent; content:"sqlmap"; nocase; \
  sid:1000004; rev:1; )

PCRE и нечувствительность к регистру

Если фиксированных строк недостаточно, pcre добавляет регулярные выражения, совместимые с Perl. Сочетайте недорогой предварительный фильтр content с pcre, чтобы регулярное выражение запускалось только для подходящих пакетов и не снижало производительность.

Модификатор nocase делает сопоставление содержимого нечувствительным к регистру. Это важно для заголовков и полей, управляемых пользователем и изменяемых злоумышленниками.

alert http any any -> $HOME_NET any ( \
  msg:"SQLi attempt in URI"; \
  http.uri; content:"select"; nocase; \
  pcre:"/union\s+select/i"; \
  sid:1000005; rev:1; )

Ключевые слова потока и состояния

Параметр flow ограничивает область действия правила состоянием и направлением соединения, уменьшая число ложных срабатываний и затраты ресурсов.

  • established — только для завершённых TCP-сеансов
  • to_server / to_client — направление запроса или ответа

Сопоставление ответов сервера только для установленных соединений и направления к клиенту предотвращает срабатывания на случайных или поддельных пакетах.

alert tcp $HOME_NET any -> $EXTERNAL_NET any ( \
  msg:"Beacon response"; \
  flow:established,to_client; \
  content:"|00 01 02 03|"; \
  sid:1000006; rev:1; )

Метаданные: идентификатор, ревизия, сообщение, ссылка

Служебные параметры помогают поддерживать правила в рабочем состоянии:

  • sid — уникальный ID сигнатуры (для локальных правил используйте значения от 1000000)
  • rev — номер ревизии, увеличиваемый после каждого изменения
  • msg — текст оповещения, который видят аналитики
  • classtype — категория, определяющая приоритет
  • reference — ссылка на CVE или рекомендацию по безопасности

Стабильные идентификаторы и возрастающие номера ревизий позволяют отслеживать и обновлять правила, не нарушая работу панелей мониторинга и исключений.

alert tcp any any -> $HOME_NET 445 ( \
  msg:"EternalBlue exploit attempt"; \
  flow:to_server,established; content:"|FF|SMB"; \
  classtype:attempted-admin; \
  reference:cve,2017-0144; sid:1000007; rev:2; )

Различия между Snort и Suricata

Хотя правила этих движков совместимы, их возможности различаются:

  • Suricata поддерживает многопоточность, самостоятельно разбирает протоколы приложений, извлекает файлы, вычисляет JA3 и формирует данные EVE в формате JSON
  • Snort 3 переписал свой движок для повышения производительности и добавил модульную систему подключаемых компонентов

Некоторые ключевые слова зависят от конкретного движка. Suricata добавляет ключевые слова уровня приложений (tls.sni, dns.query, http.method), а также возможности работы с наборами данных и битами состояния потока. При совместном использовании правил ориентируйтесь на минимальный общий набор возможностей или поддерживайте отдельные наборы правил для каждого движка.

Фильтрация по частоте и пороги

Чтобы правило не переполняло консоль, применяйте пороги. detection_filter срабатывает только после N событий за заданный интервал, а threshold с limit ограничивает количество оповещений.

Это особенно важно для обнаружения перебора паролей и сканирования, где одно событие ничего не значит, а сигналом является всплеск активности.

alert tcp any any -> $HOME_NET 22 ( \
  msg:"SSH brute force"; flow:to_server; \
  detection_filter:track by_src, count 5, seconds 60; \
  sid:1000008; rev:1; )

Быстрая проверка

Прочитайте правило и спрогнозируйте его поведение.

Повторение

Теперь Вы умеете читать и создавать сигнатуры Snort/Suricata:

  • Правило = заголовок (действие, протокол, источник и назначение, направление) + параметры тела
  • Действие определяет режим IDS или IPS: alert, drop, reject, pass
  • content с ограничениями смещения и глубины сопоставляет байты полезной нагрузки, в том числе в шестнадцатеричном виде
  • Буферы с фиксацией (http.uri, tls.sni, dns.query) сопоставляют разобранные поля протокола
  • pcre и nocase обрабатывают переменные последовательности
  • flow ограничивает область действия состоянием и направлением
  • sid/rev/msg/reference упрощают сопровождение правил
  • Пороги уменьшают шум от перебора и сканирования

Далее: обнаружение угроз без каких-либо сигнатур.

Часто задаваемые вопросы

Урок «Сигнатурные правила для Snort и Suricata» бесплатный?

Да — полный текст урока «Сигнатурные правила для Snort и Suricata» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Cyber Security Academy, подпишись на CoddyKit PRO. Курс Cyber Security Academy содержит 4 уроков всего.

Чему я научусь в уроке «Сигнатурные правила для Snort и Suricata»?

Написание и чтение сетевых правил Ты практикуешь Cyber Security Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Cyber Security Academy?

Предыдущий опыт не требуется. Cyber Security Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Сигнатурные правила для Snort и Suricata»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Cyber Security Academy?

Да. Каждый урок Cyber Security Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Понятия IDS и IPS
  2. Сигнатурные правила для Snort и Suricata
  3. Обнаружение аномалий и поведения
  4. Настройка и развёртывание
← Назад к Cyber Security Academy