Como capturar el bit recursion desired con tcpdump en un query DNS
Problema
El día de hoy escuchando el Podcast de </span>Mr DNS escuché la idea de tomar el Bit de recursividad (recursion desired) en un paquete DNS. En ese momento me pareció buena idea intentarlo y por ello el presente post.</span>
Solución
Lo primero que hice fue hacer una captura y analizarla con Tcpdump y adicionalmente averiguar especificamente como es un paquete de pregunta DNS. Para esto último conseguí el siguiente paquete el cual tomé de: </span>An Illustrated Guide to the Kaminsky DNS Vulnerability
En este sentido, me interesa tomar el bit RD cuando se encuentre encendido. Debido a que tcpdump permite obtener el encendido/apagado de los bits pero en octetos hay que darse cuenta que el bit RD es el bit menos significativo del octeto numero 10 dentro del paquete UDP.</span>
En otras palabras, en el gráfico anterior cada “linea” tiene 4 octetos (32 bits). Si comenzamos a contar desde el Campo </span>Source Port</span> de UDP hasta el campo Query ID (incluyendo) existen 9 octetos. Por ello los próximos 8 bits son los flags del paquete DNS y el último de estos 8 (de izquierda a derecha) es el RD.</span>
En un query standard DNS estos 8 bits generalmente vienen de la manera: 00000001, por ello el comando tcpdump que necesitamos es el siguiente:</span>
#tcpdump -i eth0 udp[10] == 1 and port 53
Captura del wireshark:
Links importantes:
http://www.unixwiz.net/techtips/iguide-kaminsky-dns-vuln.html
Mr DNS Podcast