Вы находитесь на странице: 1из 11

06 de Marzo de 2011

Ataque DNS ID Hacking


Descripcin del ataque de secuestro de ID de DNS.

Ataque DNS ID Hacking.

Explicacin del Mecanismo del Protocolo del DNS.

Paquete DNS.

Estructura de los paquetes DNS.

DNS ID Hack/Spoof.

Vulnerabilidad de BIND.

Ataque DNS ID Hacking.


El DNS ID Hacking no es una forma usual de hacking/spoofing o cualquier
otro. Este mtodo se basa en una vulnerabilidad en protocolo del DNS. Ms
eficaz, el DNS ID hack/spoof es muy eficiente y muy fuerte porque no hay
generacin de demonios de DNS que se escape de ella (incluso WinNT).

Explicacin del Mecanismo del


Protocolo del DNS.
En primer lugar, debemos saber cmo trabaja el DNS. Se explicarn
slamente los hechos ms importantes de este protocolo. Para hacer eso,
seguiremos la manera de un paquete de peticin de DNS de la A a la Z.
El cliente (cliente.prueba.com) enva una peticin de resolucin del dominio
"www.pagina.com". Para resolver el nombre, cliente.prueba.com utiliza

"dns.prueba.com" para el DNS. Obsrvese el cuadro siguiente.

/----------------------------------------------\
| 111.1.2.123 = cliente.prueba.com
|
| 111.1.2.222 = dns.prueba.com
|
| format:
|
| IP_ADDR:PORT->IP_ADDR:PORT
|
| ex:
|
| 111.1.2.123:2999->111.1.2.222:53
|
\----------------------------------------------/
...
gethosbyname("www.pagina.com");
...
[cliente.prueba.com]
[dns.prueba.com]
111.1.2.123:1999 --->[?www.pagina.com]------> 111.1.2.222:53

Aqu vemos nuestra peticin de resolucin del nombre del puerto fuente 1999
que est preguntando al DNS en el puerto 53. (Nota: El DNS siempre est en
el puerto 53.)
Ahora que dns.prueba.com ha recibido la peticin de la resolucin de
cliente.prueba.com, dns.prueba.com tendr que resolver el nombre, como
sigue.

[dns.prueba.com]
[ns.internic.net]
111.1.2.222:53-------->[dns?www.pagina.com]----> 198.41.0.4:53
dns.prueba.com pregunta a ns.internic.net quin es el servidor de nombres
raz para la direccin de www.pagina.com, y si no la tiene, enva la peticin a
un servidor de nombres que tenga autoridad en dominios '.com'.(Nota:
Preguntamos a internic porque podra tener esta peticin en su cach.)

[ns.internic.net]
[ns.prueba.com]
198.41.0.4:53 ------>[ns otro.com es 144.44.44.4]------>
111.1.2.222:53
Aqu podemos ver que ns.internic.net contest a ns.prueba.com (que es el
DNS que tiene autoridad sobre el dominio prueba.com), que el servidor de
nombres de otro.com tiene la IP 144.44.44.4 (vamos a llamarlo ns.otro.com).
Ahora nuestro ns.prueba.com pedir a ns.otro.com la direccin de
www.pagina.com, pero ste no la tiene y transmitir la peticin al DNS de
pagina.com el cul tiene autoridad para pagina.com.

[ns.prueba.com]
[ns.otro.com]
111.1.2.222:53 ------>[?www.pagina.com]-----> 144.44.44.4:53

Respuesta de ns.otro.com:

[ns.otro.com]
[ns.prueba.com]
144.44.44.4:53 ------>[ns para pagina.com is 31.33.7.4]--->
144.44.44.4:53
Ahora que conocemos qu direccin IP tiene autoridad en el dominio
"pagina.com" (lo llamaremos ns.pagina.com), le preguntamos cul es la IP de
la mquina www (www.pagina.com).

[ns.prueba.com]
[ns.pagina.com]
111.1.2.222:53 ----->[?www.pagina.com]----> 31.33.7.4:53
Y ahora tenemos por lo menos nuestra respuesta.

[ns.pagina.com]
[ns.prueba.com]
31.33.7.4:53 ------->[www.pagina.com == 31.33.7.44] ---->
111.1.2.222:53
Teniendo la respuesta, podemos remitirla a nuestro cliente
cliente.prueba.com.

[ns.prueba.com]
[cliente.prueba.com]
111.1.2.222:53 ------->[www.pagina.com == 31.33.7.44]---->
111.1.2.123:1999
Ahora cliente.prueba.com sabe la IP de www.pagina.com.
Ahora vamos a imaginarnos que quisiramos tener el nombre de una mquina
a partir de su IP, para hacer esto, la manera de proceder ser una poco
diferente porque la IP tendr que ser transformada:
Ejemplo: 100.20.40.3 se convertirn en 3.40.20.100.in-addr.arpa
Este mtodo es slamente para la peticin de la resolucin de IP (DNS
reverso). As que vamos a observar en la prctica cuando tomamos la IP de
www.pagina.com (31.33.7.44 o "44.7.33.31.in-addr.arpa" despus de la
traduccin en un formato comprensible por DNS).

...
gethostbyaddr("31.33.7.44");
...
[cliente.prueba.com]
[ns.prueba.com]
111.1.2.123:2600 ----->[?44.7.33.31.in-addr.arpa]----->

111.1.2.222:53
Enviamos nuestra peticin a ns.prueba.com

[ns.prueba.com]
[ns.internic.net]
111.1.2.222:53 ----->[?44.7.33.31.in-addr.arpa]------>
198.41.0.4:53
ns.internic.net enviar la IP de un servidor de nombres que tenga autoridad
en '31.in-addr.arpa'.

[ns.internic.net]
[ns.prueba.com]
198.41.0.4:53 --> [DNS para 31.in-addr.arpa es 144.44.44.4] ->
111.1.2.222:53
Ahora ns.prueba.com har la misma pregunta al DNS en 144.44.44.4.

[ns.prueba.com]
[ns.otro.com]
111.1.2.222:53 ----->[?44.7.33.31.in-addr.arpa]------>
144.44.44.4:53
En efecto, el mecanismo es casi igual que el usado para la resolucin de
nombre. Ahora vamos a estudiar el formato de los mensajes del DNS.

Paquete DNS.
Abajo se muestra el formato de un mensaje DNS:

+---------------------------------+-------------------------------------+
|
ID
|
Banderas
|
+---------------------------------+-------------------------------------+
|
Nmero de preguntas
| Nmero de respuestas
|
+---------------------------------+-------------------------------------+
| Nmero de RR autoritarios
| Nmero de RR suplementario
|
+---------------------------------+-------------------------------------+
|
|
\
\
\
PREGUNTA

\
|
|
+-----------------------------------------------------------------------+
|
|
\
\
\
RESPUESTA
\
|
|
+-----------------------------------------------------------------------+
|
|
\
\
\
Etc...
NO IMPORTA
\
|
|
+-----------------------------------------------------------------------+

Estructura de los paquetes DNS.


1. ID: El ID permite identificar cada paquete DNS, puesto que los intercambios
entre los servidores de nombres son desde el puerto 53 a el puerto 53, y
adems, puede ser que sea ms de una peticin a la vez, as que el ID es la
nica manera de reconocer las diversas peticiones del DNS.
2. Banderas: El rea de las banderas se divide en varias partes:

3.
4 bits
3 bits (siempre 0)
4.
|
|
5.
|
|
6. [QR | opcode | AA| TC| RD| RA | zero | rcode ]
7.
|
|_ |_ |_ _|
|______ 4 bits
8.
|
|_ 1 bit
9.
|
10. 1 bit
11. QR: Si el bit QR = 0, significa que el paquete es una pregunta, si no es una
respuesta.
12. opcode: Si el valor es 0 para una peticin normal, 1 para una peticin de
reserva, y 2 para una peticin de estado.
13. AA: Si es igual a 1, dice que el servidor de nombres tiene una respuesta
autoritaria.
14. TC: No importa.
15. RD: Si esta bandera est a 1, significa "peticin recursiva", por ejemplo
cuando cliente.prueba.com pregunta a ns.prueba.com para resolver el nombre,
la bandera dice al DNS asumir esta peticin.
16. RA: Si se fija a 1, significa que la recursin est disponible. Este bit se coloca a
1 en la respuesta del servidor de nombres si soporta la recursin.
17. Zero: Aqu son tres ceros...
18. rcode: Contiene los mensajes de error de regreso para las peticiones DNS, si

es 0 significa "no error", 3 significa ``error de nombre".

Las 2 banderas siguientes no tienen ninguna importancia para nosotros.


PREGUNTA DNS:
Abajo se muestra el formato de una pregunta DNS:

+------------------------------------------------------------------------+
|
Nombre de la pregunta
|
+------------------------------------------------------------------------+
|
Tipo de pregunta
|
Tipo de consulta
|
+--------------------------------+---------------------------------------+
La estructura de la pregunta es como sigue:
Ejemplo:
www.pagina.com ser [3|w|w|w|5|p|a|g|i|n|a|3|c|o|m|0] para una
direccin IP es lo mismo.
44.33.88.123.in-addr.arpa sera:
[2|4|4|2|3|3|2|8|8|3|1|2|3|7|i|n|-|a|d|d|r|4|a|r|p|a|0]
Nota: Existe un formato de compresin, pero no lo utilizaremos.
Tipo de pregunta: Abajo se muestran los valores que se utilizan la mayora de
las veces:
Nota: Hay ms de 20 tipos de diverso valores.

Nombre
A
PTR

|
|

Valores
1
| IP Address
12
| Pointer

(resolviendo un nombre a una IP)


(resolviendo una IP a un nombre)

Tipo de consulta: Los valores son iguales que el tipo de pregunta.


RESPUESTA DNS:
Las respuestas tienen un formato que llamamos RR.
Abajo se muestra el formato de una respuesta (un RR)

+-----------------------------------------------------------------------+
|
Nombre de Dominio

|
+-----------------------------------------------------------------------+
|
Tipo
|
Clase
|
+----------------------------------+------------------------------------+
|
TTL (Tiempo de Vida)
|
+-----------------------------------------------------------------------+
| Longitud de Datos del Recurso
|
|
|-------------------------------------------+
|
|
Dato del Recurso
|
+-----------------------------------------------------------------------|
Nombre del Dominio: El nombre del dominio en reportes para el siguiente
recurso. El nombre del dominio se almacena de la misma manera que la parte
de la pregunta para la peticin de la resolucin de www.pagina.com, la
bandera ``Nombre del Dominio`` contendr:
[3|w|w|w|5|p|a|g|i|n|a|3|c|o|m|0]
1. Tipo: El tipo de bandera es igual que el ``tipo de consulta'' en la parte de la
pregunta del paquete.
2. Clase: La bandera Clase es igual a 1 para los datos de Internet.
3. Tiempo de Vida: Esta bandera explica en segundos el tiempo-vida de la
informacin en la cach del servidor de nombres.
4. Longitud de datos del Recurso: La longitud de los datos del Recurso, por
ejemplo si la longitud de los datos del recurso es 4, significa que los datos en
los Datos del Recurso es de longitud 4 bytes.
5. Datos del Recurso: Aqu ponemos la IP por ejemplo (por lo menos en nuestro
caso).

Aqu es cuando ns.prueba.com pide a ns.pagina.com la direccin de


www.pagina.com

ns.prueba.com:53 ---> [?www.pagina.com] ----> ns.pagina.com:53


+----------------------------------------+-------------------------------------------+
|
ID = 1999
|
QR = 0 opcode = 0 RD
= 1
|
+----------------------------------------+-------------------------------------------+
| Nmero de Preguntas = htons(1)
| Nmero de Respuestas =
0
|
+----------------------------------------+-------------------------------------------+
| Nmero de RR autoritativo = 0
| Nmero de RR
suplementario = 0
|
+----------------------------------------+-------------------------------------------+

La parte de la pregunta.

+---------------------------------------------------------------------------+
|
Nombre de la Pregunta = [3|w|w|w|5|p|a|g|i|n|a|3|c|o|m|0]
|
|
|
+---------------------------------------------------------------------------+
| Tipo de Pregunta = htons(1)
|
Tipo de
consulta=htons(1)
|
+-------------------------------------+-------------------------------------+
Ahora vamos a observar fijamente la respuesta de ns.pagina.com

ns.pagina.com:53 -->[IP of www.pagina.com is 31.33.7.44] ->ns.prueba.com:53


+------------------------------------------------+------------------------------------------------+
|
ID = 1999
|
QR=1
opcode=0 RD=1 AA =1 RA=1
|
+------------------------------------------------+------------------------------------------------+
|
Nmero de Preguntas = htons(1)
|
Nmero de
Respuestas = htons(1)
|
+------------------------------------------------+------------------------------------------------+
|
Nmero de RR Autoritativo = 0
|
Nmero de
RR suplementario = 0
|
+------------------------------------------------+------------------------------------------------+
+-------------------------------------------------------------------------------------------------+
|
Nombre de la Pregunta =
[3|w|w|w|5|p|a|g|i|n|a|3|c|o|m|0]
|
+-------------------------------------------------------------------------------------------------+
|
Tipo de Pregunta = htons(1)
|
Tipo de
Consulta = htons(1)
|
+-------------------------------------------------------------------------------------------------+
+-------------------------------------------------------------------------------------------------+
|
Nombre del Dominio = [3|w|w|w|5|p|a|g|i|n|a|3|c|o|m|0]
|
+-------------------------------------------------------------------------------------------------+
|
Tipo = htons(1)
|
Clase = htons(1)
|
+-------------------------------------------------------------------------------------------------+
|
Tiempo de Vida = 999999

|
+-------------------------------------------------------------------------------------------------+
|
Longitud de Datos del Recurso = htons(4)
|
Datos del
Recurso=inet_addr("31.33.7.44")
|
+-------------------------------------------------------------------------------------------------+
Enseguida se muestra el anlisis de las banderas:

En la respuesta QR = 1 porque es una respuesta.


AA = 1 porque el servidor de nombres tiene autoridad en su dominio.
RA = 1 porque la recursin est disponible.

DNS ID Hack/Spoof.
Ahora vamos a explicar claramente que es DNS ID hacking/spoofing. Como se
explic antes, la nica manera para que el demonio DNS reconozca las
diferentes preguntas/respuestas es la bandera en el paquete. Obsrvese este
ejemplo:
ns.prueba.com;53 ----->[?www.pagina.com] ------>
ns.pagina.com:53
Solamente tenemos que engaar la IP de ns.pagina.com y contestar
informacin falsa antes de que ns.pagina.com lo haga a ns.prueba.com

ns.prueba.com <-------........... ns.pagina.com


|
|<--[IP para www.pagina.com es
1.2.3.4]<-- atacante.malo.com
Pero en la prctica tenemos que suponer un buen ID. Si estamos en una LAN,
podemos escuchar para conseguir este ID y responder antes que el servidor
de nombres (es fcil en una red local).
Si deseamos hacer esto remotamente no tenemos muchas opciones, tenemos
slamente 4 mtodos bsicos:
1. Probar aleatoriamente todos los valores posibles de la bandera ID. Debemos
contestar antes que el ns (ns.pagina.com en este ejemplo). Este mtodo es
obsoleto a menos que deseemos saber el ID o cualquier otra condicin
favorable para su prediccin.
2. Algunas peticiones DNS (200 o 300) en orden para incrementar las
oportunidades de obtener un buen ID.
3. Inundar el DNS para evitar su trabajo. El servidor de nombres se caer y
mostrar el error siguiente:

4.

>> Oct 06 El 05:18:12 ADM named[1913 ]:


DB_F_ACTIVE set - ABORT at this
5.
time named daemon is out of order.

db_free:

6. O podemos utilizar la vulnerabilidad en las versiones 8.1.x, 4.9.3, 4.9.5 y


4.9.6 de BIND descubierta por SNI (Secure Networks, Inc.) con la prediccin

del ID.

Vulnerabilidad de BIND.
Esta es una vulnerabilidad en BIND (descubierta por SNI). De hecho, el DNS
es fcilmente predecible, tenemos que escuchar slamente un DNS en orden
para hacer lo que deseemos. El DNS utiliza un ID al azar en el principio pero
slamente aumenta para las preguntas siguientes. Es fcil explotar esta
vulnerabilidad. Abajo se muestra la forma:
1. Puede escuchar fcilmente los mensajes que viene a un DNS al azar
(ns.ejemplo.com para este ejemplo).
2. Preguntamos NS.victima.com para resolver (aleatorio).ejemplo.com.
NS.victima.com pedir a ns.ejemplo.com resolver (aleatorio).ejemplo.com

3.

ns.victima.com --> [?(aleatorio).ejemplo.com ID = 444 ] -> ns.ejemplo.com

4. Ahora tenemos el ID del mensaje de NS.victima.com, y sabemos qu rango ID


tendremos que utilizar. (ID = 444 en este ejemplo).
5. Entonces hacemos una peticin de resolucin por ejemplo a
www.microsoft.com para NS.victima.com

6.
7. (Nosotros) --> [?www.microsoft.com ] --> ns.victima.com
8. nc.victima.com --> [?www.microsoft.com ID = 446 ] -->
ns.microsoft.com
9. Inundamos el servidor de nombres ns.victima.com con el ID (444) que
tenemos y entonces lo aumentamos.

10.

ns.microsoft.com -->
444] --> ns.victima.com
11.
ns.microsoft.com -->
445] --> ns.victima.com
12.
ns.microsoft.com -->
446] --> ns.victima.com
13.
ns.microsoft.com -->
447] --> ns.victima.com
14.
ns.microsoft.com -->
448] --> ns.victima.com
15.
ns.microsoft.com -->
449] --> ns.victima.com

[www.microsoft.com = 1.1.1.1 ID =
[www.microsoft.com = 1.1.1.1 ID =
[www.microsoft.com = 1.1.1.1 ID =
[www.microsoft.com = 1.1.1.1 ID =
[www.microsoft.com = 1.1.1.1 ID =
[www.microsoft.com = 1.1.1.1 ID =

(Ahora sabemos que los ID's son predecibles, y aumentan solamente.


Inundamos ns.victim.com con respuestas engaosas con ID 444+. Las
versiones de 8.3.4, 4.9.11 y las recientes 8.2.x y 9.x de BIND no son
vulnerables a este tipo de ataque.)

Acerca Contacto Staff FTP


SSI

Noticias
Artculos
Servicios
Discusin

Vulnerabilidades
Distribucin de correos electrnicos falsos

UNAM-CERT

Estadsticas
Boletines
Atencin a Incidentes
Reporte de vulnerabilidades

Seguridad TV

Seguridad TV
Programacin
Galera
Regstrate

Usuario Casero

Eduteca
Diccionario
Participa
Animaciones
Dlitos informticos

Becarios

Plan de becas
Convocatoria
Generaciones
Calendario
Noticias

Revista .Seguridad

Visitanos!

Aviso legal | Crditos | Administracin


Copyright Todos los derechos reservados
UNAM - CERT