InfraGuard

Угрозы — разбор угроз IDS

Разбирайте оповещения Suricata IDS как сущности исходных IP-адресов — со значками связи с автоблокировкой и пояснениями к сигнатурам, которые раскрывают, что на самом деле означает каждое обнаружение.

Обзор — что делает экран

Безопасность ▸ Угрозы (/security/threats) преобразует таблицу оповещений Suricata IDS suricata_alert_ct в представление сущностей исходных IP (src_ip) для разбора. Вместо перечисления тысяч исходных оповещений экран группирует их в ответ на вопрос «кто (какой IP) нас атаковал, насколько сильно и каким образом» и ранжирует по критичности.

Он связывает на одном экране три вещи:

  1. Разбор сущностей угроз — по карточке на каждый src_ip со сводкой: число оповещений, максимальная критичность, количество различных сигнатур и время последнего наблюдения.
  2. Связь с автоматическим действием (блокировкой) — сеть /24 каждого угрожающего IP сопоставляется с таблицей автозащиты blacklist_info, чтобы добавить значок Заблокирован / Обнаружен: обнаружение и реагирование читаются как одна история.
  3. Пояснения к сигнатурам (Signature Lore) — большинство строк сигнатур Suricata представляют собой трудночитаемые события движка (события stream / decoder / app-layer), а не контентные правила. Этот экран в панели пояснений рассказывает, что на самом деле подразумевает каждая сигнатура (что она обнаружила · почему сработала [benign→malicious] · на что обратить внимание · худший сценарий).

Всё работает только на чтение. Единственное действие, изменяющее состояние, — это глубокая ссылка, которая передаёт угрожающий IP в Блок-лист; сама запись блокировки выполняется там, под отдельным разрешением.

Когда использовать

Структура экрана

Верхние KPI (в границах окна)

KPI Значение Как вычисляется
alerts Всего оповещений IDS в окне количество строк suricata_alert_ct с alert_ts >= since
entities Число сущностей угрожающих IP ведущие src_ip (до 48)
blocked Угрожающие IP, уже заблокированные автоматически /24 сущности ∈ blacklist_info(is_use=1)
critical Необработанные критические угрожающие IP (всего наблюдалось — critical_all) max_sev <= 1 и ещё не заблокировано

Карточки и строки сущностей угроз

Показывает до 48 ведущих src_ip, отсортированных по числу оповещений (по убыванию). Каждая сущность содержит:

Поле Описание
ip исходный IP (src_ip)
alerts число оповещений этого IP в окне
sev максимальная критичность (1=критическая … 3=информационная). В Suricata меньшее значение опаснее → MIN(severity) даёт максимум
sigs число различных сигнатур (sid) — разнообразие атаки
last_ts время последнего наблюдения
blocked true, если /24 этого IP находится в списке автоблокировки
block_source метка источника блокировки: kitsune · suricata · manual · other (разобрана из строки reason)
country / asn обогащение гео/ASN (ip_info_loop, последняя строка)

Ваша собственная сеть исключается. SecurityScope::excludePrefixes() отфильтровывает через NOT LIKE сети /24 адресов зарегистрированных инстансов (а также белый список внутренних сетей из Операционной политики), чтобы ваши собственные серверы не появлялись в роли источника и не засоряли список угроз. Если внутренний IP всё же появился из-за метки направления, к нему добавляется значок internal (управляется internalMatchers), а кнопка проверки репутации скрывается.

распределение критичности · категории · сигнатуры

Панель пояснений к сигнатурам

App\Support\SignatureLore::classify() относит строку сигнатуры к семейству и детальному ключу; сам текст хранится в языковом пакете resources/lang/{ko,en}/siglore.php. Фронтенд объединяет family и key (деталь переопределяет семейство) в повествование из четырёх частей.

Часть Содержание
Что обнаружено (meaning) что именно сигнатура выявила на уровне протокола
Почему сработала · возможности (why) вероятные причины, перечисленные по тону [benign] → [watch] → [malicious]
На что обратить внимание (caution) как отделить шум от настоящего сигнала
Худший сценарий (worst) к какой компрометации это может привести, если игнорировать

Каждое семейство несёт подразумеваемую критичность (tone) — даже информационные события подразумевают разное.

family Название tone Значок
stream Аномалия сборки TCP-потока warn mdi-transit-connection-variant
decoder Аномалия декодирования/целостности пакета info mdi-package-variant-closed
applayer Аномалия протокола прикладного уровня warn mdi-swap-horizontal-bold
http Аномалия разбора HTTP warn mdi-web
tls Аномалия TLS warn mdi-lock-outline
dns Аномалия DNS warn mdi-dns-outline
scan Сканирование/разведка warn mdi-radar
exploit Попытка эксплуатации crit mdi-bug-outline
malware Вредоносное ПО/C2 crit mdi-virus-outline
dos DoS/флуд crit mdi-flash-alert-outline
policy Политика/информация info mdi-file-document-outline
generic Прочая сигнатура IDS info mdi-shield-alert-outline

Существует 14 детальных ключей, переопределяющих семейство: invalid_timestamp · checksum · retransmit · handshake · evasion · stateanomaly · host_header · desync · malformed · one_direction · mismatch · starttls · tls_anomaly · unsolicited.

Большинство сигнатур stream/decoder (например, SURICATA STREAM Packet with invalid timestamp, SURICATA TCPv4 invalid checksum) — информационные, sev3, и срабатывают массово из-за особенностей инфраструктуры: асимметричной маршрутизации и разгрузки подсчёта контрольных сумм на сетевой карте. Это безобидный шум. Смотрите не столько на саму сигнатуру, сколько на то, накапливает ли один и тот же src_ip несколько семейств за короткое окно (сканирование + аномалия рукопожатия и т. п.). Именно такое наслоение и есть признак намерения.

Как пользоваться

1) Выберите период

Окно по умолчанию — 24 ч. Поддерживаемые периоды:

range окно (мин.)
1h 60
6h 360
24h 1440 (по умолчанию)

Переключатель передаётся как ?range=; любое значение вне белого списка понижается до 24h.

2) Разберите угрожающие IP

  1. Начинайте с сущностей с наибольшей критичностью (sev=1, критическая) и наибольшим числом оповещений.
  2. Значок Заблокирован означает, что автозащита уже отреагировала, — посмотрите block_source, чтобы понять, какой движок выполнил блокировку.
  3. Не заблокирован + высокая критичность + множество сигнатур — ваш главный кандидат на расследование или блокировку.

3) Детализация по IP (всплывающее окно, специфичное для безопасности)

Щелчок по IP вызывает GET /security/threats/ip-detail?ip=<IP>&range=<range>. IP строго проверяется через FILTER_VALIDATE_IP; недопустимое значение возвращает 422 (invalid_ip). Возвращаемые поля:

{
  "ok": true,
  "detail": {
    "ip": "203.0.113.10",
    "cidr": "203.0.113.0/24",
    "geo": { "country": "US", "city": null, "asn": "ASNNNNN", "isp": "...", "org": "..." },
    "signatures": [
      { "signature": "...", "severity": 3, "cnt": 42, "explain": { "family": "stream", "key": "invalid_timestamp", "tone": "warn", "icon": "mdi-...", "svg": "stream" } }
    ],
    "blocked": true,
    "block_source": "suricata",
    "block_reason": "[Suricata Auto-Block] ...",
    "block_at": "2026-08-13 04:12:00",
    "abuse_url": "https://www.abuseipdb.com/check/203.0.113.10"
  }
}

4) Проверьте репутацию · переведите в блокировку

Источники данных

Таблица Назначение Доступ
suricata_alert_ct оповещения IDS (src_ip · severity · category · signature · sid · alert_ts) чтение
blacklist_info список автоблокировки (/24 c_class · reason · country · is_use) чтение (значок автоматического действия)
ip_info_loop обогащение гео/ASN/ISP чтение
IP зарегистрированных инстансов + внутренние сети из Операционной политики исключение собственной сети · значок internal SecurityScope

Все источники находятся на подключении legacy_glory (устаревшие таблицы без префикса, наполняемые парком коллекторов) и доступны только на чтение. Опора чтения — App\Repositories\SecurityRepository (привязка параметров · узкие окна · LIMIT). Контроллер и сервис никогда не создают и не изменяют эти таблицы.

Кеш · обновление

Доступ

Действие Уровень
Просмотр экрана · детализация · репутация ≥ 2 (staff=5, admin=10)
Доступ демо (1) запрещён

Устранение неполадок и часто задаваемые вопросы

В. Преобладают invalid timestamp / invalid checksum — это атака? Обычно нет. invalid checksum срабатывает массово на трафике ваших же серверов из-за разгрузки подсчёта контрольных сумм на сетевой карте; invalid timestamp возникает из-за асимметричной маршрутизации и промежуточных устройств. И то и другое — безобидный шум уровня sev3; записи [benign] в пояснении объясняют именно это. Подозревайте их, только когда они концентрируются на конкретном внешнем src_ip, который вдобавок накапливает другие признаки (сканирование · аномалия рукопожатия).

В. Почему критичность 1 самая опасная? По соглашению Suricata severity 1=высокая, 2=средняя, 3=информационная. Поэтому максимальный риск сущности вычисляется как MIN(severity).

В. IP моего собственного сервера попал в список угроз. SecurityScope исключает сети /24 зарегистрированных инстансов и внутренний белый список, но незарегистрированный IP или метка направления (src/dst) всё же может всплыть. Зарегистрируйте IP в разделе Инстансы или добавьте диапазон в Операционной политике. Если он всё равно отображается, к нему добавляется значок internal.

В. Детализация по IP возвращает 422. Параметр ip не является допустимым IP (invalid_ip). Убедитесь, что это реальное значение IPv4/IPv6.

В. В пояснении показано только «Прочая сигнатура IDS». Сигнатуры, которые не улавливает ни одно правило по ключевым словам в SignatureLore::match(), попадают в семейство generic. Судите по категории и имени сигнатуры, а при необходимости добавьте детальный ключ в siglore.php.

В. Список не меняется в течение 30 секунд. Так и задумано. Сервис использует кеш на 30 секунд для каждого периода плюс опрос раз в 30 секунд. Если самое свежее значение нужно немедленно, перезагрузите страницу после истечения кеша (это заставит пересчитать данные).

Связанные материалы

IDS 위협 트리아지
IDS 위협 트리아지