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ó.
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.
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 |
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
dns
↓
DNS TRAFFIC
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
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.
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
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.
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:
y aplicar sobre la transacción nuestro modelo:
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.
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.
1. Objetivo del laboratorio
Al finalizar este laboratorio, el participante deberá ser capaz de:
- Generar consultas DNS controladas con dig.
- Capturar tráfico DNS utilizando Wireshark.
- Identificar una consulta DNS y su respuesta correspondiente.
- Identificar la dirección IP del cliente y del resolver.
- Localizar QNAME y QTYPE.
- Identificar el Transaction ID.
- Interpretar el RCODE.
- Examinar la sección Answer.
- Identificar el TTL de una respuesta.
- Observar el tiempo transcurrido entre Query y Response.
2. Requisitos previos
Antes de iniciar, verifica que tu equipo tenga los siguientes elementos:
- Conexión a Internet.
- Wireshark instalado.
- Permisos para realizar capturas de red.
- La herramienta dig instalada y disponible desde Terminal.
3. Validar que dig está disponible
Abre una ventana de Terminal y ejecuta:
dig example.comSi dig está instalado correctamente, deberás obtener una respuesta DNS con información similar a:
- QUESTION SECTION
- ANSWER SECTION
- SERVER
- Query time
4. Preparar Wireshark
Abre Wireshark y selecciona la interfaz de red que estás utilizando.
- Wi-Fi
- Ethernet
Inicia la captura.
5. Filtrar tráfico DNS
En la barra de filtros de Wireshark escribe:
dnsPresiona 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 ARegresa inmediatamente a Wireshark y localiza la consulta.
7. Identificar WHO — ¿Quién participa?
Selecciona el paquete correspondiente a la consulta DNS y localiza:
- IP Source
- IP Destination
Anota ambos valores:
Cliente DNS: ______________________
Resolver DNS: _____________________8. Identificar WHAT — QNAME y QTYPE
Expande la sección:
Domain Name SystemDespués identifica:
- QNAME
- QTYPE
Para esta consulta deberías observar:
QNAME: example.com
QTYPE: A9. Identificar WHERE — Resolver y puerto
Revisa nuevamente la información IP y de transporte.
Identifica:
- Dirección IP del resolver.
- Puerto de origen.
- Puerto de destino.
En una consulta DNS tradicional deberás observar el puerto:
5310. Identificar Query y Response
Para mostrar únicamente consultas DNS utiliza:
dns.flags.response == 0Para mostrar únicamente respuestas DNS utiliza:
dns.flags.response == 1Observa 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 IDDespué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 codeTambién puedes utilizar el siguiente filtro para trabajar con el Response Code:
dns.flags.rcodePara una consulta exitosa normalmente observarás:
NOERROR13. Analizar la sección Answer
Dentro de la respuesta DNS, localiza:
AnswersIdentifica la dirección IPv4 devuelta.
Respuesta A: __________________14. Identificar TTL
Dentro del registro de respuesta localiza:
Time to liveTambién puedes utilizar el siguiente campo en filtros de Wireshark:
dns.resp.ttlAnota el TTL observado.
TTL: __________________ segundos15. 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 AAAARegresa 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:
- IP de destino de la consulta.
- IP de origen de la respuesta.
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:
dnsMostrar únicamente consultas:
dns.flags.response == 0Mostrar únicamente respuestas:
dns.flags.response == 1Filtrar por nombre consultado:
dns.qry.nameExaminar el tipo de consulta:
dns.qry.typeExaminar Response Code:
dns.flags.rcodeExaminar TTL:
dns.resp.ttl20. 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
- ¿Qué dirección IP está utilizando tu equipo como resolver DNS?
- ¿Qué diferencia observaste entre una consulta A y una AAAA?
- ¿Cómo puedes relacionar una Query con su Response?
- ¿Qué información proporciona el RCODE?
- ¿Qué función tiene el TTL?
- ¿El tiempo de respuesta fue similar en todas las consultas?
- ¿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:
- WHO: ¿quién realizó la consulta y quién respondió?
- WHAT: ¿qué nombre y qué tipo de registro se consultó?
- WHERE: ¿qué resolver recibió la consulta?
- RESPONSE: ¿cuál es la respuesta correspondiente?
- RESULT: ¿qué RCODE, Answer y TTL se obtuvieron?
- TIME: ¿cuánto tardó la respuesta?
Conclusión
El objetivo de este ejercicio no es memorizar campos de Wireshark. El objetivo es desarrollar una metodología repetible para analizar DNS.