Bloque 2 — Preparar Wireshark para investigar DNS

Objetivo del Bloque 2

Ir al laboratorio práctico del Bloque 2 ↓

Aprender a identificar y reconstruir una transacción DNS utilizando Wireshark, localizando en los paquetes la evidencia necesaria para determinar quién realizó la consulta, qué preguntó, a qué servidor, qué respuesta recibió, cuál fue el resultado y cuánto tiempo tomó.

WHO → WHAT → WHERE → RESPONSE → RESULT → TIME

En este bloque utilizaremos el conocimiento de DNS del Bloque 1 para investigar la conversación directamente en una captura de red.

2.1 Preparar Wireshark para investigar DNS

Antes de analizar tráfico DNS vamos a preparar Wireshark para que la información importante sea más fácil de localizar.

Durante el curso utilizaremos el perfil:

DNS-under-the-microscope

Columnas DNS

Además de las columnas estándar de Wireshark, agregaremos tres columnas personalizadas:

Columna Campo
QNAME dns.qry.name
RNAME dns.resp.name
RSP TTL dns.resp.ttl

Estas columnas permiten ver información DNS directamente en el Packet List sin abrir cada paquete.

Configuración de columnas QNAME, RNAME y RSP TTL en el perfil DNS-under-the-microscope de Wireshark
Columnas personalizadas del perfil DNS-under-the-microscope.

Coloring Rules

El perfil también utiliza reglas de color para destacar determinados paquetes y facilitar su localización visual.

Regla Propósito
Consultas DNS normales Identificar consultas DNS
Respuestas exitosas Identificar respuestas con RCODE 0
NXDOMAIN Destacar respuestas NXDOMAIN
SERVFAIL Destacar respuestas SERVFAIL
Time Out / Sin Respuesta Identificar consultas sin respuesta correlacionada
DNS en TCP Distinguir tráfico DNS transportado sobre TCP
Reglas de color DNS configuradas en el perfil DNS-under-the-microscope de Wireshark
Reglas de color utilizadas durante el curso.
Un color indica que un paquete cumple una condición. No significa automáticamente que exista un problema o un ataque.
COLOR ↓ ATTENTION ↓ INVESTIGATION ↓ EVIDENCE ↓ CONCLUSION
OBSERVATION ≠ CONCLUSION

2.2 Encontrar DNS dentro de una captura

Una captura puede contener tráfico de muchos protocolos diferentes. Nuestro primer objetivo es mostrar únicamente DNS.

Para ello utilizamos un Display Filter:

dns
CAPTURE ↓ dns ↓ DNS TRAFFIC
Wireshark mostrando tráfico DNS filtrado con columnas QNAME, RNAME y RSP TTL y reglas de color activas
Tráfico DNS visto con el perfil DNS-under-the-microscope.
El filtro selecciona evidencia. No realiza el diagnóstico.

2.3 Distinguir Query de Response

Una vez aislado el tráfico DNS, necesitamos separar las consultas de las respuestas.

Para mostrar únicamente consultas:

dns.flags.response == 0

Para mostrar únicamente respuestas:

dns.flags.response == 1
0 → Query │ 1 → Response

También podemos reconocerlas por la dirección del tráfico:

CLIENT → DNS SERVER
        Query

CLIENT ← DNS SERVER
        Response

Durante el análisis utilizaremos el campo DNS como referencia principal.

¿Qué respuesta corresponde a cada consulta?

2.4 Correlacionar Query y Response

Encontrar una Query y una Response no significa todavía que sepamos que pertenecen a la misma transacción.

Para relacionarlas podemos utilizar el Transaction ID.

Wireshark mostrando una Query DNS expandida con Transaction ID
Query DNS seleccionada y expandida dentro de Wireshark.
QUERY
Transaction ID: 0xcb92

RESPONSE
Transaction ID: 0xcb92

Wireshark también facilita esta relación mediante:

Response In
Request In

En una Query podemos encontrar:

Response In: 12

y en su Response:

Request In: 11
QUERY Transaction ID: 0xcb92 ↓ RESPONSE Transaction ID: 0xcb92
Tomar una Query y localizar con certeza su Response correspondiente.

2.5 Localizar WHO → WHAT → WHERE

Una vez que identificamos la transacción podemos comenzar con la Query.

WHO — ¿quién hizo la consulta?

En el encabezado IP buscamos:

Source Address

Por ejemplo:

172.16.20.242

WHAT — ¿qué preguntó?

Dentro de Domain Name System → Queries encontramos:

Name:  example.com
Type:  A
Class: IN

La columna QNAME permite localizar rápidamente el nombre consultado desde el Packet List.

WHERE — ¿a quién se envió?

En los encabezados IP y de transporte buscamos:

Destination Address
Destination Port
Modelo Evidencia en Wireshark
WHO Source Address
WHAT Name / Type / Class
WHERE Destination Address / Port
WHO     172.16.20.242
WHAT    example.com / A / IN
WHERE   1.1.1.1:53

2.6 Localizar RESPONSE → RESULT → TIME

Ahora trabajaremos con la respuesta correspondiente a la Query.

Wireshark mostrando una respuesta DNS expandida con Answers, RCODE y tiempo de respuesta
Response DNS expandida dentro de Wireshark.

RESPONSE — ¿qué respondió el servidor?

Dentro de Domain Name System → Answers encontramos los datos devueltos por el servidor.

Name: example.com
Type: A
Address: 93.184.216.34

La columna RNAME puede ayudarnos a reconocer nombres presentes en la respuesta.

RESULT — ¿cuál fue el resultado DNS?

Dentro de los Flags encontramos el Reply code.

Reply code: No error (0)

También podríamos encontrar, por ejemplo:

Reply code: Non-existent domain (3)

En este bloque sólo necesitamos aprender a localizar el resultado.

TIME — ¿cuánto tardó?

Una vez correlacionadas Query y Response, podemos medir el tiempo transcurrido entre ambos paquetes.

QUERY ─────────────── RESPONSE
        elapsed time

Esta medida será útil más adelante cuando analicemos respuestas lentas.

El TTL de la respuesta también puede verse directamente en la columna RSP TTL que configuramos al inicio del bloque.

Modelo Evidencia en Wireshark
RESPONSE Answers
RESULT Reply code / RCODE
TIME Tiempo Query → Response

2.7 Reconstruir una transacción completa

El último paso es unir toda la evidencia en una sola vista.

QUERY
172.16.20.242 → 1.1.1.1

Name:  example.com
Type:  A
Class: IN
Transaction ID: 0xcb92

RESPONSE
1.1.1.1 → 172.16.20.242

Answer: 93.184.216.34
RCODE:  NOERROR
Transaction ID: 0xcb92
Modelo Evidencia
WHO 172.16.20.242
WHAT example.com / A / IN
WHERE 1.1.1.1:53
RESPONSE 93.184.216.34
RESULT NOERROR
TIME Tiempo entre Query y Response

Al terminar este bloque debemos poder seguir este workflow:

FIND ↓ DISTINGUISH ↓ CORRELATE ↓ RECONSTRUCT

y aplicar sobre la transacción nuestro modelo:

WHO → WHAT → WHERE → RESPONSE → RESULT → TIME
Ya no estamos mirando paquetes aislados. Estamos reconstruyendo una transacción DNS a partir de evidencia de red.

Lab 1 — Construye tu Workstation DNS

En el siguiente laboratorio aplicaremos este workflow sobre una captura real y reconstruiremos una transacción completa.

Ir al laboratorio integrado del Bloque 2 ↓

En el Bloque 3 utilizaremos esta misma evidencia para investigar qué ocurre cuando una transacción no se comporta como esperamos.

Laboratorio práctico — Bloque 2

Captura y reconstruye una transacción DNS con dig y Wireshark.

Laboratorio Bloque 2 — Observando una transacción DNS

En este laboratorio utilizaremos dig y Wireshark para generar, capturar y analizar tráfico DNS real.

WHO → WHAT → WHERE → RESPONSE → RESULT → TIME

1. Objetivo del laboratorio

Al finalizar este laboratorio, el participante deberá ser capaz de:

2. Requisitos previos

Antes de iniciar, verifica que tu equipo tenga los siguientes elementos:

3. Validar que dig está disponible

Abre una ventana de Terminal y ejecuta:

dig example.com

Si dig está instalado correctamente, deberás obtener una respuesta DNS con información similar a:

4. Preparar Wireshark

Abre Wireshark y selecciona la interfaz de red que estás utilizando.

Inicia la captura.

5. Filtrar tráfico DNS

En la barra de filtros de Wireshark escribe:

dns

Presiona Enter.

A partir de este momento Wireshark mostrará únicamente tráfico identificado como DNS.

6. Generar una consulta tipo A

Regresa a Terminal y ejecuta:

dig example.com A

Regresa inmediatamente a Wireshark y localiza la consulta.

7. Identificar WHO — ¿Quién participa?

Selecciona el paquete correspondiente a la consulta DNS y localiza:

Anota ambos valores:

Cliente DNS: ______________________

Resolver DNS: _____________________

8. Identificar WHAT — QNAME y QTYPE

Expande la sección:

Domain Name System

Después identifica:

Para esta consulta deberías observar:

QNAME: example.com

QTYPE: A

9. Identificar WHERE — Resolver y puerto

Revisa nuevamente la información IP y de transporte.

Identifica:

En una consulta DNS tradicional deberás observar el puerto:

53

10. Identificar Query y Response

Para mostrar únicamente consultas DNS utiliza:

dns.flags.response == 0

Para mostrar únicamente respuestas DNS utiliza:

dns.flags.response == 1

Observa cómo la dirección IP de origen y destino se invierte entre la consulta y la respuesta.

11. Transaction ID

Selecciona la consulta DNS y localiza:

Transaction ID

Después verifica el mismo valor en la respuesta correspondiente.

Transaction ID Query:    __________________

Transaction ID Response: __________________

Ambos valores deben coincidir.

12. RESULT — RCODE

Selecciona la respuesta DNS y localiza:

Reply code

También puedes utilizar el siguiente filtro para trabajar con el Response Code:

dns.flags.rcode

Para una consulta exitosa normalmente observarás:

NOERROR

13. Analizar la sección Answer

Dentro de la respuesta DNS, localiza:

Answers

Identifica la dirección IPv4 devuelta.

Respuesta A: __________________

14. Identificar TTL

Dentro del registro de respuesta localiza:

Time to live

También puedes utilizar el siguiente campo en filtros de Wireshark:

dns.resp.ttl

Anota el TTL observado.

TTL: __________________ segundos

15. TIME — Tiempo de respuesta

Observa cuánto tiempo transcurrió entre la consulta y la respuesta.

Tiempo de respuesta: __________________

16. Generar una consulta AAAA

Ejecuta:

dig example.com AAAA

Regresa a Wireshark y localiza la nueva transacción.

Compara esta consulta con la consulta tipo A anterior.

17. Consultar un resolver específico

dig también permite decidir qué servidor DNS utilizar.

Utiliza la sintaxis:

dig @DNS-SERVER example.com A

Sustituye DNS-SERVER por la dirección IP del resolver que quieras utilizar durante el laboratorio.

Observa especialmente:

18. Configurar columnas útiles en Wireshark

Para facilitar el análisis de múltiples consultas DNS, podemos agregar columnas específicas a Wireshark.

Nombre de columna Campo Wireshark
QNAME dns.qry.name
RNAME dns.resp.name
RSP TTL dns.resp.ttl

19. Filtros útiles para análisis DNS

Durante el laboratorio puedes utilizar los siguientes filtros.

Mostrar todo el tráfico DNS:

dns

Mostrar únicamente consultas:

dns.flags.response == 0

Mostrar únicamente respuestas:

dns.flags.response == 1

Filtrar por nombre consultado:

dns.qry.name

Examinar el tipo de consulta:

dns.qry.type

Examinar Response Code:

dns.flags.rcode

Examinar TTL:

dns.resp.ttl

20. Tabla de observaciones

Completa la siguiente tabla utilizando los datos observados durante el laboratorio:

Elemento Consulta A Consulta AAAA
IP del cliente
IP del resolver
QNAME
QTYPE
Transaction ID
RCODE
Answer
TTL
Tiempo de respuesta

21. Preguntas de análisis

  1. ¿Qué dirección IP está utilizando tu equipo como resolver DNS?
  2. ¿Qué diferencia observaste entre una consulta A y una AAAA?
  3. ¿Cómo puedes relacionar una Query con su Response?
  4. ¿Qué información proporciona el RCODE?
  5. ¿Qué función tiene el TTL?
  6. ¿El tiempo de respuesta fue similar en todas las consultas?
  7. ¿Qué cambia cuando utilizas un resolver específico con dig?

22. Resultado esperado

Al finalizar el laboratorio deberás poder seleccionar cualquier transacción DNS básica dentro de Wireshark y responder:

Conclusión

El objetivo de este ejercicio no es memorizar campos de Wireshark. El objetivo es desarrollar una metodología repetible para analizar DNS.

WHO → WHAT → WHERE → RESPONSE → RESULT → TIME