InfraGuard

Amenazas — Triaje de amenazas IDS

Clasifique las alertas del IDS Suricata como entidades de IP de origen, con distintivos de vinculación al bloqueo automático y explicaciones de firmas que aclaran lo que implica realmente cada detección.

Resumen — qué hace

Seguridad ▸ Amenazas (/security/threats) reorganiza la tabla de alertas del IDS Suricata suricata_alert_ct en una vista de entidades de IP de origen (src_ip) pensada para el triaje. En lugar de enumerar miles de alertas en bruto, las agrupa en «quién (qué IP) nos atacó, con qué intensidad y de qué forma» y las ordena por gravedad.

Une tres cosas en una sola pantalla:

  1. Triaje de entidades de amenaza: una tarjeta por src_ip que resume el número de alertas, la gravedad máxima, las firmas distintas y la hora de la última observación.
  2. Vinculación con la acción automática (bloqueo): el /24 de cada IP amenazante se coteja con la tabla de defensa automática blacklist_info para añadir un distintivo Bloqueada / Detectada, de modo que detección y respuesta se lean como una sola historia.
  3. Explicación de firmas (Signature Lore): la mayoría de las cadenas de firma de Suricata son eventos del motor difíciles de leer (eventos de stream, decoder o app-layer), no reglas de contenido. Esta pantalla narra en un panel explicativo lo que cada firma implica realmente (qué detectó · por qué se disparó [benign→malicious] · a qué prestar atención · el peor de los casos).

Todo es de solo lectura. La única acción que cambia el estado es un enlace directo que envía una IP amenazante a la Lista de bloqueo; la escritura real del bloqueo ocurre allí, bajo un permiso independiente.

Cuándo utilizarla

Disposición

KPI superiores (limitados a la ventana)

KPI Significado Derivación
alerts Total de alertas IDS en la ventana recuento de suricata_alert_ct con alert_ts >= since
entities Número de entidades de IP amenazante src_ip principales (hasta 48)
blocked IP amenazantes ya bloqueadas automáticamente el /24 de la entidad ∈ blacklist_info(is_use=1)
critical IP amenazantes críticas sin mitigar (el total observado es critical_all) max_sev <= 1 y todavía sin bloquear

Tarjetas/filas de entidades de amenaza

Muestra hasta 48 src_ip principales ordenadas por número de alertas (descendente). Cada entidad incluye:

Campo Descripción
ip IP de origen (src_ip)
alerts número de alertas de esta IP en la ventana
sev gravedad máxima (1=crítica … 3=informativa). En Suricata, cuanto menor, más grave → MIN(severity) es la máxima
sigs firmas distintas (sid): variedad del ataque
last_ts hora de la última observación
blocked true si el /24 de esta IP está en la lista de bloqueo automático
block_source etiqueta de origen del bloqueo: kitsune · suricata · manual · other (extraída de la cadena reason)
country / asn enriquecimiento geográfico/ASN (ip_info_loop, última fila)

Su propia red queda excluida. SecurityScope::excludePrefixes() filtra con NOT LIKE el /24 de las IP de las instancias registradas (más la lista blanca de redes internas de la Política de operaciones), de modo que sus propios servidores no aparecen como origen ni saturan la lista de amenazas. Si aun así aparece una IP interna por la etiqueta de dirección, se le añade un distintivo internal (gobernado por internalMatchers) y se oculta el botón de reputación.

distribución de gravedad · categorías · firmas

Panel de explicación de firmas

App\Support\SignatureLore::classify() clasifica la cadena de firma en una familia y una clave de detalle; el texto propiamente dicho vive en el paquete de idioma resources/lang/{ko,en}/siglore.php. El frontend fusiona family + key (el detalle prevalece sobre la familia) en una narración de cuatro partes.

Parte Contenido
Qué detectó (meaning) qué capturó la firma en términos de protocolo
Por qué se disparó · posibilidades (why) causas candidatas enumeradas por tono [benign] → [watch] → [malicious]
A qué prestar atención (caution) cómo separar el ruido de una señal real
El peor de los casos (worst) la brecha a la que puede conducir si se ignora

Cada familia lleva una gravedad implícita (tone): incluso los eventos informativos difieren en lo que implican.

family Etiqueta tone Icono
stream Anomalía de reensamblado de flujo TCP warn mdi-transit-connection-variant
decoder Anomalía de decodificación/integridad de paquetes info mdi-package-variant-closed
applayer Anomalía del protocolo de aplicación warn mdi-swap-horizontal-bold
http Anomalía de análisis HTTP warn mdi-web
tls Anomalía TLS warn mdi-lock-outline
dns Anomalía DNS warn mdi-dns-outline
scan Escaneo/reconocimiento warn mdi-radar
exploit Intento de explotación crit mdi-bug-outline
malware Malware/C2 crit mdi-virus-outline
dos DoS/inundación crit mdi-flash-alert-outline
policy Política/informativo info mdi-file-document-outline
generic Otra firma IDS info mdi-shield-alert-outline

Existen 14 claves de detalle que prevalecen sobre la familia: invalid_timestamp · checksum · retransmit · handshake · evasion · stateanomaly · host_header · desync · malformed · one_direction · mismatch · starttls · tls_anomaly · unsolicited.

La mayoría de las firmas de stream/decoder (por ejemplo SURICATA STREAM Packet with invalid timestamp o SURICATA TCPv4 invalid checksum) son informativas de sev3 y se disparan en masa por rasgos de la infraestructura como el enrutamiento asimétrico y la descarga de sumas de comprobación en la NIC: ruido inofensivo. Fíjese menos en la firma en sí y más en si la misma src_ip acumula varias familias en una ventana corta (escaneo + anomalía de handshake, etc.). Esa acumulación es la señal de intención.

Cómo utilizarla

1) Elegir el rango

La ventana predeterminada es de 24 h. Rangos admitidos:

range ventana (min)
1h 60
6h 360
24h 1440 (predeterminado)

El selector se pasa como ?range=; cualquier valor que no figure en la lista blanca se degrada a 24h.

2) Clasificar las IP amenazantes

  1. Empiece por las entidades con mayor gravedad (sev=1 crítica) y más alertas.
  2. Un distintivo Bloqueada significa que la defensa automática ya respondió: consulte block_source para ver qué motor la bloqueó.
  3. Sin bloquear + gravedad alta + muchas firmas es su principal candidata a investigar o bloquear.

3) Detalle de IP (ventana emergente específica de seguridad)

Al hacer clic en una IP se llama a GET /security/threats/ip-detail?ip=<IP>&range=<range>. La IP se valida estrictamente con FILTER_VALIDATE_IP; un valor no válido devuelve 422 (invalid_ip). Campos devueltos:

{
  "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) Consultar la reputación · promover a bloqueo

Fuentes de datos

Tabla Finalidad Acceso
suricata_alert_ct alertas IDS (src_ip · severity · category · signature · sid · alert_ts) lectura
blacklist_info lista de bloqueo automático (/24 c_class · reason · country · is_use) lectura (distintivo de acción automática)
ip_info_loop enriquecimiento geográfico/ASN/ISP lectura
IP de instancias registradas + redes internas de Política de operaciones exclusión de la red propia · distintivo internal SecurityScope

Todas las fuentes residen en la conexión legacy_glory (tablas heredadas sin prefijo que rellena la flota de recolectores) y son de solo lectura. La columna vertebral de lectura es App\Repositories\SecurityRepository (vinculación de parámetros · ventanas estrechas · LIMIT). El controlador y el servicio nunca crean ni modifican estas tablas.

Caché · actualización

Acceso

Acción Nivel
Ver la pantalla · detalle · reputación ≥ 2 (staff=5, admin=10)
Acceso de demo (1) denegado

Resolución de problemas y preguntas frecuentes

P. Predominan invalid timestamp / invalid checksum: ¿es un ataque? Normalmente no. invalid checksum se dispara en masa con el tráfico de sus propios servidores por la descarga de sumas de comprobación en la NIC; invalid timestamp procede del enrutamiento asimétrico y de los middleboxes. Ambas son ruido inofensivo de sev3: las entradas [benign] de la explicación describen exactamente esto. Sospeche solo cuando se concentren en una src_ip externa concreta que además acumule otras señales (escaneo · anomalía de handshake).

P. ¿Por qué la gravedad 1 es la más crítica? Por convención de Suricata, severity 1=alta, 2=media, 3=informativa. Por eso el riesgo máximo de una entidad se calcula con MIN(severity).

P. La IP de mi propio servidor aparece en la lista de amenazas. SecurityScope excluye los /24 de las instancias registradas y la lista blanca interna, pero una IP no registrada o una etiqueta de dirección (src/dst) todavía puede aflorar. Registre la IP en Instancias o añada el rango en Política de operaciones. Si aun así se muestra, se le añade un distintivo internal.

P. El detalle de IP devuelve 422. El parámetro ip no es una IP válida (invalid_ip). Confirme que se trata de un valor IPv4/IPv6 real.

P. La explicación solo muestra «Otra firma IDS». Las firmas que ninguna regla de palabras clave de SignatureLore::match() captura recaen en la familia generic. Juzgue por la categoría y el nombre de la firma y, si hace falta, añada una clave de detalle en siglore.php.

P. La lista no cambia durante 30 segundos. Es lo esperado. El servicio usa una caché de 30 segundos por rango más un sondeo de 30 segundos. Si necesita el valor más reciente de inmediato, vuelva a cargar cuando caduque la caché (fuerza el recálculo).

Relacionado

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