Lab 3 — Caza de anomalías
En este laboratorio analizarás diferentes capturas de tráfico DNS utilizando Wireshark. El objetivo no es identificar un ataque a partir de una única consulta, sino reconocer patrones mediante la combinación de diferentes señales.
Objetivo
Al finalizar este laboratorio deberás ser capaz de construir una hipótesis basada en evidencia y explicar por qué una sola característica no es suficiente para determinar que existe actividad maliciosa.
Durante el análisis observaremos señales como:
- longitud y estructura de los QNAME;
- composición de los nombres;
- cantidad de FQDN únicos;
- respuestas NXDOMAIN;
- concentración de consultas;
- dominios base compartidos;
- comportamiento a lo largo del tiempo.
Archivos necesarios
Para este laboratorio utilizaremos cuatro capturas de tráfico DNS:
lab3-baseline.pcapng
lab3-long-qname.pcapng
lab3-dga-like.pcapng
lab3-tunneling-like.pcapng
No necesitas generar tráfico adicional. Todo el análisis se realizará sobre los archivos PCAP proporcionados.
Parte 1 — Establecer un baseline
Abre:
lab3-baseline.pcapng
Antes de buscar anomalías necesitamos entender cómo se comporta una muestra de tráfico DNS relativamente normal.
Paso 1 — Mostrar solamente DNS
Aplica el siguiente filtro:
dns
Observa la captura durante unos segundos. No intentes clasificar todavía cada paquete.
Paso 2 — Observar solamente consultas
Aplica:
dns.flags.response == 0
Observa los QNAME y busca diversidad en:
- dominios consultados;
- longitud de los nombres;
- tipos de consulta;
- intervalos entre consultas.
Preguntas
- ¿Los QNAME tienen aproximadamente la misma longitud?
- ¿Todos pertenecen al mismo dominio?
- ¿Los nombres parecen generados automáticamente?
- ¿Existe un patrón temporal evidente?
- ¿Ves diversidad entre las consultas?
No buscamos una respuesta binaria. Estamos construyendo una referencia contra la cual compararemos las demás capturas.
Paso 3 — Buscar NXDOMAIN
Aplica:
dns.flags.response == 1 && dns.flags.rcode == 3
Probablemente encontrarás algunas respuestas NXDOMAIN. Esto es importante.
Un usuario puede escribir incorrectamente un dominio, una aplicación puede consultar un nombre que ya no existe o un servicio puede realizar consultas que legítimamente produzcan NXDOMAIN.
La pregunta importante no es “¿Existe NXDOMAIN?”, sino:
Parte 2 — Cuando el QNAME llama la atención
Abre:
lab3-long-qname.pcapng
Paso 1 — Mostrar consultas A
Aplica:
dns.flags.response == 0 && dns.qry.type == 1
Examina la columna Info. Encontrarás nombres relativamente cortos y otros considerablemente más largos.
Preguntas
- ¿Cómo cambia la longitud de los QNAME?
- ¿Todos los nombres largos parecen iguales?
- ¿Algunos siguen siendo comprensibles para una persona?
- ¿Otros contienen secuencias que parecen menos naturales?
- ¿La longitud por sí sola permite saber por qué existe esa consulta?
Selecciona una consulta corta y una larga y expande:
Domain Name System → Queries
Compara sus nombres.
Paso 2 — Examinar las respuestas
Aplica:
dns.flags.response == 1
Observa el RCODE de las respuestas. En esta captura las consultas controladas reciben respuestas DNS satisfactorias.
La longitud puede ser una señal útil, pero necesita contexto. Un nombre largo puede aparecer legítimamente en servicios cloud, sistemas de distribución, telemetría, tracking, aplicaciones o infraestructuras automatizadas.
Parte 3 — Muchos nombres que no existen
Abre:
lab3-dga-like.pcapng
Esta vez no busques solamente una consulta extraña. Busca comportamiento.
Paso 1 — Mostrar las consultas
Aplica:
dns.flags.response == 0 && dns.qry.type == 1
Observa los QNAME.
Preguntas
- ¿Cuántos nombres diferentes aparecen?
- ¿Los nombres son fáciles de leer?
- ¿Parecen palabras o servicios reconocibles?
- ¿Notas similitudes en su longitud y estructura?
- ¿Los nombres comparten necesariamente un mismo dominio base?
Ahora tenemos una señal que no aparecía con la misma intensidad en el baseline:
muchos nombres únicos con apariencia pseudoaleatoria.
Pero todavía no debemos concluir nada.
Paso 2 — Examinar NXDOMAIN
Aplica:
dns.flags.response == 1 && dns.flags.rcode == 3
Cuenta las respuestas y después compara mentalmente este resultado con el baseline.
Preguntas
- ¿NXDOMAIN aparece ocasionalmente o domina el conjunto observado?
- ¿Las respuestas NXDOMAIN están asociadas con los nombres pseudoaleatorios?
- ¿Tenemos ahora una señal o varias señales relacionadas?
Este comportamiento es compatible con características que pueden observarse en actividad DGA-like.
Parte 4 — Cuando DNS funciona y aun así el patrón importa
Abre:
lab3-tunneling-like.pcapng
Esta captura introduce una diferencia importante.
Paso 1 — Examinar las consultas
Aplica:
dns.flags.response == 0 && dns.qry.type == 1
Observa los QNAME.
Preguntas
- ¿Cuántos FQDN diferentes observas?
- ¿Qué parte de los nombres cambia?
- ¿Qué parte permanece constante?
- ¿Los labels variables parecen lenguaje natural?
- ¿Existe un dominio base común?
Busca específicamente:
telemetry.example.com
Puedes utilizar:
dns.qry.name contains "telemetry.example.com"
Observa qué ocurre con el label situado a la izquierda.
Tenemos muchos nombres diferentes, pero todos siguen una estructura similar:
<variable>.telemetry.example.com
Paso 2 — Examinar las respuestas
Aplica:
dns.flags.response == 1 && dns.flags.rcode == 0 && dns.qry.name contains "telemetry.example.com"
Las consultas reciben NOERROR.
Esto introduce una lección fundamental:
Del mismo modo que:
El RCODE nos dice el resultado de la operación DNS. No determina por sí mismo la intención del tráfico.
Paso 3 — Pensar como analista
Observa nuevamente las consultas.
Ahora tenemos varias señales:
Este comportamiento es compatible con algunas características que podrían observarse en DNS tunneling-like traffic.
Pero seguimos sin demostrar que exista un túnel DNS real.
¿Qué host genera las consultas? ¿Qué proceso las genera? ¿El dominio es conocido? ¿Existe inteligencia de amenazas relacionada? ¿Es normal ese comportamiento para ese dispositivo? ¿Qué volumen mantiene durante periodos más largos?
Parte 5 — Correlacionar las evidencias
Ahora compara los cuatro PCAP y completa la siguiente tabla utilizando solamente tus observaciones.
| Señal | Baseline | Long QNAME | DGA-like | Tunneling-like |
|---|---|---|---|---|
| QNAMEs largos | ||||
| Apariencia pseudoaleatoria | ||||
| Muchos FQDN únicos | ||||
| NXDOMAIN | ||||
| Dominio base común | ||||
| Frecuencia / concentración | ||||
| Varias señales correlacionadas |
No existe una fórmula matemática que debas aplicar aquí. El objetivo es aprender a preguntarte:
Parte 6 — El desafío final
¿Cuál de las cuatro capturas demuestra que existe un ataque?
La respuesta es: ninguna, por sí sola.
Las capturas permiten encontrar comportamientos diferentes y algunas contienen patrones compatibles con técnicas que merecerían investigación, pero los PCAP por sí solos no demuestran intención maliciosa.
Ésta es precisamente la diferencia entre encontrar una anomalía y completar una investigación.
Una hipótesis sólida puede justificar nuevas acciones de investigación. No sustituye la evidencia adicional necesaria para confirmar qué está ocurriendo.
Parte 7 — El problema de escala
Durante este laboratorio pudiste:
- abrir una captura;
- leer los QNAME;
- aplicar filtros;
- contar NXDOMAIN;
- comparar nombres;
- identificar dominios base;
- observar frecuencia;
- correlacionar señales.
Ahora imagina el mismo procedimiento con:
La metodología sigue siendo válida. Lo que deja de ser viable es hacerla manualmente.
Aquí termina el objetivo de este laboratorio.
Ya sabemos qué buscar. El siguiente problema es descubrir cómo hacerlo a escala.
Cierre del laboratorio
El objetivo no es encontrar una señal mágica. El objetivo es aprender a reconocer cuándo diferentes señales forman un patrón que merece una investigación más profunda.