Las detecciones automáticas solo encuentran lo que alguien previó. Un atacante paciente que evita las reglas conocidas puede pasar semanas dentro de una red sin generar una sola alerta. El threat hunting existe para ir a buscarlo. En el libro IA en Ciberseguridad explicamos cómo implementar threat hunting proactivo con IA y análisis de comportamiento; este artículo es una introducción práctica.
Qué es el threat hunting (y qué no es)
Threat hunting es la búsqueda proactiva y guiada por hipótesis de actividad maliciosa que las defensas existentes no detectaron. No es:
- Revisar alertas: eso es triaje. La caza empieza donde no hay alerta.
- Buscar IOC de un informe: es útil, pero es un barrido, no una caza.
- Un pentest: el pentester ataca para encontrar debilidades; el cazador busca a alguien que ya podría estar dentro.
El ciclo de caza basado en hipótesis
- Hipótesis: una afirmación comprobable, basada en inteligencia o en una técnica de ATT&CK. Por ejemplo: “Un atacante está haciendo password spraying (T1110.003) contra nuestras cuentas expuestas a Internet”.
- Datos: ¿qué logs prueban o refutan la hipótesis? Aquí, los eventos de autenticación del proveedor de identidad.
- Búsqueda: consultas, estadísticas y visualizaciones sobre esos datos.
- Análisis: separar lo anómalo de lo malicioso. Un pico de fallos puede ser un ataque o un servicio con la contraseña caducada.
- Resultado: si hay hallazgo, se abre un incidente; haya o no, se documenta y se convierte en una detección automática.
Ejemplo: cazar password spraying
En un ataque de fuerza bruta clásico se prueban muchas contraseñas contra una cuenta. En el password spraying es al revés: pocas contraseñas comunes contra muchas cuentas, para no disparar los bloqueos. La señal es una misma IP fallando contra muchos usuarios distintos en poco tiempo.
En Splunk (SPL)
index=auth action=failure
| bin _time span=10m
| stats count AS fallos, dc(user) AS usuarios_distintos BY src_ip, _time
| where usuarios_distintos > 10 AND fallos < usuarios_distintos * 3
| sort - usuarios_distintos
En Microsoft Sentinel (KQL)
SigninLogs
| where ResultType != "0" // "0" = inicio de sesión correcto
| summarize fallos = count(),
usuarios_distintos = dcount(UserPrincipalName)
by IPAddress, bin(TimeGenerated, 10m)
| where usuarios_distintos > 10 and fallos < usuarios_distintos * 3
| order by usuarios_distintos desc
La condición fallos < usuarios × 3 busca el patrón típico del spraying: pocos intentos por
cuenta. Los umbrales son un punto de partida: ajústalos a tu volumen. Y el paso siguiente es clave:
¿alguna de esas IP consiguió después un login correcto? Ese es el hallazgo que importa.
Cómo la IA acelera la caza
- Líneas base de comportamiento: modelos de UEBA que dicen qué es normal para cada usuario, equipo o servicio, para cazar desviaciones en lugar de valores fijos.
- Clustering: agrupar miles de líneas de comandos o procesos y revisar solo los grupos pequeños y raros, que es donde suele esconderse el atacante.
- Detección de anomalías: como el detector de logins que construimos en detección de amenazas con machine learning.
- Copilotos: un LLM puede proponer hipótesis a partir de un informe de threat intelligence, o traducir “muéstrame los procesos que lanzó Office en la última semana” a SPL o KQL. Revisa siempre la consulta antes de confiar en el resultado: un filtro mal escrito puede devolver cero resultados y dar una falsa tranquilidad.
De la caza a la detección
Una caza que encuentra algo una vez y no deja nada detrás se tendrá que repetir a mano. Por eso cada caza debería terminar con:
- La consulta convertida en regla programada en el SIEM, con umbrales ajustados.
- El mapeo de la técnica en tu matriz de cobertura de ATT&CK.
- Si aplica, un playbook de respuesta para cuando salte.
- Una nota con lo aprendido: qué datos faltaron y qué falsos positivos aparecieron.
Caza amenazas antes de que te encuentren
El libro IA en Ciberseguridad enseña a implementar threat hunting proactivo con IA y análisis de comportamiento, con herramientas como MITRE ATT&CK, Splunk, SIEM y EDR.
Comprar en Amazon