Обзор — что делает экран
Безопасность ▸ Угрозы (/security/threats) преобразует таблицу оповещений Suricata IDS suricata_alert_ct в представление сущностей исходных IP (src_ip) для разбора. Вместо перечисления тысяч исходных оповещений экран группирует их в ответ на вопрос «кто (какой IP) нас атаковал, насколько сильно и каким образом» и ранжирует по критичности.
Он связывает на одном экране три вещи:
- Разбор сущностей угроз — по карточке на каждый src_ip со сводкой: число оповещений, максимальная критичность, количество различных сигнатур и время последнего наблюдения.
- Связь с автоматическим действием (блокировкой) — сеть /24 каждого угрожающего IP сопоставляется с таблицей автозащиты
blacklist_info, чтобы добавить значок Заблокирован / Обнаружен: обнаружение и реагирование читаются как одна история. - Пояснения к сигнатурам (Signature Lore) — большинство строк сигнатур Suricata представляют собой трудночитаемые события движка (события stream / decoder / app-layer), а не контентные правила. Этот экран в панели пояснений рассказывает, что на самом деле подразумевает каждая сигнатура (что она обнаружила · почему сработала [benign→malicious] · на что обратить внимание · худший сценарий).
Всё работает только на чтение. Единственное действие, изменяющее состояние, — это глубокая ссылка, которая передаёт угрожающий IP в Блок-лист; сама запись блокировки выполняется там, под отдельным разрешением.
Когда использовать
- Утренний разбор: бегло просмотреть IP-адреса, которые атаковали вас чаще всего за последние 24 часа, и их критичность.
- Решить, является ли конкретный IP настоящей угрозой или шумом, — быстро классифицировать по тону [benign/watch/malicious] в пояснении и по значку автоблокировки.
- Объяснить коллеге, «что вообще означает эта сигнатура», — панель пояснений служит и обучающим материалом.
- После расследования угрожающего IP перевести его в кандидаты на блокировку (→ глубокая ссылка на Блок-лист, → всплывающее окно Репутация 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), а кнопка проверки репутации скрывается.
распределение критичности · категории · сигнатуры
- распределение критичности:
{1: n, 2: n, 3: n}— число критических, предупреждающих и информационных оповещений. - категории: 10 ведущих категорий (по убыванию количества) с минимальной критичностью каждой.
- сигнатуры: 12 ведущих сигнатур (по убыванию количества). Каждый элемент содержит
signature·sid·cnt·sev(минимум) и дополнительноexplain(классификацию SignatureLore). Щелчок по сигнатуре открывает соседнюю панель пояснений.
Панель пояснений к сигнатурам
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
- Начинайте с сущностей с наибольшей критичностью (
sev=1, критическая) и наибольшим числом оповещений. - Значок Заблокирован означает, что автозащита уже отреагировала, — посмотрите
block_source, чтобы понять, какой движок выполнил блокировку. - Не заблокирован + высокая критичность + множество сигнатур — ваш главный кандидат на расследование или блокировку.
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"
}
}
- geo/ASN: обогащение через
ip_info_loop. - signatures: 8 ведущих сигнатур этого IP (по убыванию количества), каждая со своим пояснением
explain. - статус блокировки: совпадение /24 с
blacklist_info(c_class,is_use=1) → метка источника · исходный reason · время блокировки.
4) Проверьте репутацию · переведите в блокировку
- Щёлкните по символу (
.infr-ipsym) рядом с IP → встроенное всплывающее окно AbuseIPDB в разделе Репутация IP (mixins/abuse_check.js+/security/ip-reputation). Оно показывает уровень доверия к злоупотреблению, число жалоб, страну, тип использования и подробности недавних жалоб. - Если после расследования решено блокировать → глубокая ссылка на Блок-лист с
?add=<IP>(при вставке нормализуется до /24, под отдельным разрешением и с аудитом).
Источники данных
| Таблица | Назначение | Доступ |
|---|---|---|
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). Контроллер и сервис никогда не создают и не изменяют эти таблицы.
Кеш · обновление
- Результаты
ThreatService::build()кешируются на 30 секунд для каждого периода (ключinfr:sec:th:<range>). - Экран обновляется опросом раз в 30 секунд (
/security/threats/live), а не через Reverb. - Поскольку максимальная критичность вычисляется как
MIN(severity), меньшее значениеsevопаснее (1=критическая, 3=информационная).
Доступ
| Действие | Уровень |
|---|---|
| Просмотр экрана · детализация · репутация | ≥ 2 (staff=5, admin=10) |
| Доступ демо (1) | запрещён |
- Весь префикс
/security/*защищён посредникомinfr.level:2. Демо (1) ограничено в доступе к данным безопасности (Уровни RBAC). - Сам экран «Угрозы» целиком построен на GET (только чтение), поэтому не является объектом записи в аудит. Разрушительные и внешние действия — запись блокировки или отправка жалобы на злоупотребление — выполняются под собственными разрешениями и аудитом соответственно в Блок-листе и в процессах международного взаимодействия.
Устранение неполадок и часто задаваемые вопросы
В. Преобладают 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 секунд. Если самое свежее значение нужно немедленно, перезагрузите страницу после истечения кеша (это заставит пересчитать данные).
Связанные материалы
- Обзор безопасности — воронка защиты угроза→обнаружение→реагирование (центральный экран)
- Обнаружения и JA3 — Kitsune ML · эвристики srct · аномалия последовательности JA3
- Наборы правил — эталонный каталог обнаружения из 44 наборов правил
- Блок-лист и репутация — просмотр, добавление и снятие автоблокировок (
blacklist_info) - Репутация IP — встроенное всплывающее окно репутации AbuseIPDB
- Белый список — IP и CIDR, освобождённые от блокировки
