DNS Poison "El verdadero arte" by MurdeR

----------------------------------------
~= DNS Poison & Spoof by MurdeR =~
----------------------------------------
Para el foro: www.diosdelared.com
----------------------------------------
"La potencia sin control no sirve de nada"
----------------------------------------


~~~~~~~~~~~~~~~~~~~~~~~~~~
Intro:
~~~~~~~~~~~~~~~~~~~~~~~~~~


Muchos me han preguntado que es en realidad el DNS Poisoning, si editar el hosts de windows es envenenar los dns, y la gran mayoría ha admitido no saber bien que es y en qué consiste esta tecnica.

Entre la diversidad de ataques orientados a suplantar una IP de un dominio por otra, la gran mayoría apuntan directamente al DNS server. Como ya sabrán el DNS Server es el ecargado de traducir los dominios a IPs o viceversa, por lo tanto si podemos suplantar o evenenar el dns server primario de una maquina, tendremos total control sobre lo que dicha maquina ve como resultado a su petición.

La utilidad de suplantar o envenenar un dns server puede ser muy variada, puede servir para robar datos de login y así poder controlar el panel de administración de la "victima", puede servir para robar datos sensibles y así conseguir dinerito extra, puede servir para muchisimas cosas y en todos los casos cosas malas xD

La diferencia principal entre el DNS Poisoning y la sustitución de dns en la "victima" es que NO necesitamos utilizar un virus para infectar la maquina "victima" y así nos evitamos las complicaciones de la ingeniería social, los antivirus, programar un code, etc.

Ya que el pete de reberto se niega a aprender-.- les hago un tuto intentando explicar bien que es y como efecutar DNS Caché Poison y DNS ID Spoof.
Aclaro que esto no es una guía paso a paso de como efectuar el ataque, si diré cuales son las herramientas y cual es el metodo del ataque, pero ustedes mismos deberán aprender a usar las herramientas y a efectuar el ataque.

~~~~~~~~~~~~~~~~~~~~~~~~~~
Funcionamiento de los DNS Servers:
~~~~~~~~~~~~~~~~~~~~~~~~~~


Primero y muy importante es comprender como funcionan los servidores de DNS y para esto no queda otra que la teoría, la cual haré lo más amena posible con ejemplos tontos de los mios :P

-DE DOMINIO A IP-
Como sabran en internet todas las maquinas conectadas se comunican entre ellas por la IP, es obvio esto pero es importante tenerlo claro. Cuando escribimos en el navegador www.google.com, nuestra maquina le pedirá a nuestro DNS Server (el que seguramente nos proporciona el ISP) la IP de google.com, este al no saber cual es la IP (pq no puede almacenar todas las IPS de todos los dominios), "leerá" la configuración de google.com y de allí obtendrá cual es el DNS server responsable de dicho dominio (similar a cuando hacemos un whois), en segundo paso contactará a dicho server y le preguntará cual es la IP de google.com, al recibir respuesta nos conectaremos directamente a la IP.

[Pepe] --> cual es la ip de google? --> [DNS de Pepe]
[DNS de Pepe] --> cual es el dns server de google.com --> [whois server]
[DNS de Pepe] <-- el server de google.com es "[DNS de google.com]" <-- [whois server]
[DNS de Pepe] --> cual es la ip de google? --> [DNS de google.com]
[DNS de Pepe] <-- la ip de google es 64.x.x.x <-- [DNS de google.com]
[Pepe] <-- la ip de google es 64.x.x.x <-- [DNS de Pepe]
[Pepe] --> mostrame google.com --> [64.x.x.x]
[Pepe] <-- tomá google.com <-- [64.x.x.x]

Con ejemplo debería quedar claro como funciona más o menos y sin muchos tecnisismos todo el temita :P


-SOBRE LA AUTORIDAD-

Se denomina DNS autoritario a los servidores que tienen "permiso" para resolver directamente (sin preguntarle a otro dns server) determinado dominio. Es importante saber esto pq si hacemos un DNS trucho que se crea autoritario y que responda por el dominio a "atacar" o bien spoofeamos unas cabeceras para atender una respuesta que le hicieron a otro server podremos suplantar a dicho dominio.
El DNS trucho autoritario es el que se usa normalmente en la tecnica "True poison" que en realidad no es más que la suplantación mediante virus del dns server de una maquina concreta.


-SOBRE LA CACHÉ-


Para no estar haciendo todo el lio anteriormente explicado, ya que pepe y muchisimas otras personas visitan con frecuencia google.com, el dns de pepe tiene una cosita que se llama caché, que es una especie de base de datos propia en la que puede guardar las ips a las que apuntan determinados dominios, esta caché está configurada para actualizarce cada determinado tiempo.. en algunos servidores cada media hora, en otros cada 12 horas y en otros cada 24 horas... incluso más.
Ya se van haciendo una idea de como va el caché poisoning, si nos topamos con que determinado dns no tiene almacenado nada relativo a un dominio en concreto y conseguimos engañarlo... tendremos un buen margen de tiempo envenenada la caché con una resolución falsa :P

-SOBRE EL ZONE TRANSFER-

Otra cosa importante que hay que saber es que es y para que sirve el Zone Transfer, basicamente el zone transfer consiste en que cuando un server le pregunta a otro, que es se supone autoridad de determinado dominio, cual es la ip de ese determinado dominio el segundo le devolverá la ip de ese dominio más un monton de otros dominios de los cuales es autoridad, de esta forma quedan almacenado en la caché del primero todos los dominios de los que el segundo es autoridad. Ya es liante así explicado, mejor veamoslo en el ejemplo de pepe, centrmonos en lo remarcado en negrita:

[Pepe] --> cual es la ip de google? --> [DNS de Pepe]
[DNS de Pepe] --> cual es el dns server de google.com --> [whois server]
[DNS de Pepe] <-- el server de google.com es "[DNS de google.com]" <-- [whois server]
[DNS de Pepe] --> cual es la ip de google? --> [DNS de google.com]
[DNS de Pepe] <-- la ip de google es 64.x.x.x & la ip de google.es es 65.x.x.x & la ip de google.uk es 67.x.x.x<-- [DNS de google.com]

[Pepe] <-- la ip de google es 64.x.x.x <-- [DNS de Pepe]
[Pepe] --> mostrame google.com --> [64.x.x.x]
[Pepe] <-- tomá google.com <-- [64.x.x.x]

Como verán el dns de pepe solo preguntó por la ip de google.com, sin embargo el dns de google le respondio con la ip de google.com y de todos los demás dominios sobre los que es autoridad. Automaticamente el dns de pepe guardará esos datos en su caché por si alguien le pregunta por ellos.


~~~~~~~~~~~~~~~~~~~~~~~~~~
1º Ataque: DNS Caché Poison
~~~~~~~~~~~~~~~~~~~~~~~~~~


Recordando la teoría sobre el caché y el zone transfer paso directamente a explicar un ataque con el ejemplo de Pepe y su enemigo un hacker malo llamado Zer0 z0orG xD

Zer0 z0orG que se lleva muy mal con pepe decide ownearle su correo electronico gmail para despues robarle su dominio y borrarle la página.. primero intenta enviandole un troyano pero no cuela pq pepe usa nod32 full update :P
Entonces Zer0 z0orG decide sacar a relucir sus amplios conocimientos de juanking y efecutar un ataque directo al dns server de Pepe. Para el que pregunte como carajo sabe cual es el dns server de pepe... sabe que pepe usa telefonica como isp y telefonica solo tiene 2 dns servers uno primario y uno secundario para sus clientes.

Requisitos para el ataque:
Un servidor dedicado (su pc pedorro con debian instalado).
Un dominio (hackermalo.com).
Un dns server instalado en el dedicado (bind9).


Primer paso: -Configurar un dominio-
Para que funcione este ataque Zer0 z0orG necesita configurar su dominio para que tenga como autoridad al dns server que instalará en su servidor.
Para ello simplemente se va a godaddy.com (donde compró el dominio) y en DNS Configuration cambia la IP del dns primario por la de su servidor.

Segundo paso: -Instalar y hackear el DNS Server-
El siguiente paso es hacer un apt-get install bind9 y "hackearlo", digo hackearlo pq el tiene que configurar las zonas del dns server recien instalado de modo que se sepa autoridad sobre hackermalo.com, eso es logico, pero además debe configurar un zone para gmail.com y debe también hacer que se "crea" autoridad sobre dicho dominio.
Para el que no tenga ni idea de como va este tema, busquen un tuto sobre configuración de bind :P

Tecer paso: -Server web y Scam-
Ahora Zer0 hace un scam de gmail.con, lo monta en el htdocs de apache y configura el http.conf para que apunte gmail.com a htdocs/gmail-scam/
*Para el que no sabe que shit es un scam: http://www.diosdelared.com/index.php?topic=1451.0

Ultimo paso: -El ataque!-
Ahora Zer0 z0orG entra en su laptop con Windows Vista Home Edition y configura las conexiones de red modificando la parte de DNS Server y mete como primario a "[DNS de pepe]".
Una vez hecho lo anterior lo unico que resta es entrar a hackermalo.com y esperar que la magia suceda.


Y que sucede?

[Zer0 z0orG] --> cual es la ip de hackermalo.com? --> [DNS de Pepe]
[DNS de Pepe] --> cual es el dns server de hackermalo.com --> [whois server]
[DNS de Pepe] <-- el server de hackermalo.com es "[DNS de Zer0 z0orG]" <-- [whois server]
[DNS de Pepe] --> cual es la ip de hackermalo.com? --> [DNS de Zer0 z0orG]
[DNS de Pepe] <-- la ip de hackermalo.com es 192.x.x.x & la ip de gmail.com es 192.x.x.x<-- [DNS de Zer0 z0orG]

[Zer0 z0orG] <-- la ip de hackermalo.com es192.x.x.x <-- [DNS de Zer0 z0orG]
[Zer0 z0orG] --> mostrame hackermalo.com --> [192.x.x.x]
[Zer0 z0orG] <-- tomá hackermalo.com <-- [192.x.x.x]

¡¡¡CACHé ENVENENADA!!! (en teoría si es vulnerable :P)

Y minutos más tarde...


[Pepe] --> cual es la ip de gmail.com? --> [DNS de Pepe]
[DNS de Pepe] mira en su caché y encuentra gmail, obviamente con la IP falsa que le devolvió el [DNS de Zer0 z0orG]
[Pepe] <-- la ip de gmail.com es 192.x.x.x <-- [DNS de Pepe]
[Pepe] --> mostrame gmail.com --> [192.x.x.x]
[Pepe] <-- tomá scam de gmail !! OWNED <-- [192.x.x.x]

~~~~~~~~~~~~~~~~~~~~~~~~~~
Ataque 2: DNS ID Spoofing
~~~~~~~~~~~~~~~~~~~~~~~~~~

En caso de que estemos en la misma red local que [Pepe] o que el [DNS de Pepe] no es necesario realmente armar todo el bardo, es suficiente con efectuar un man in the middle y ponerse a spoofear. No transmitir los mensajes desde el dns de pepe o bien el dns autoritario le envien a pepe o al dns de pepe y falsearlos..

Antes de seguir deben saber efectuar un man in the middle y spoofear paquetes, por suerte MurdeR ya habló de eso en los siguientes posts:
http://www.diosdelared.com/index.php/topic,176.0.html -> Arp Spoof
http://www.diosdelared.com/index.php?topic=9126.0 -> Sniffing + Spoofing de Redes

Volvemos al ejemplo de Pepe y Zer0 z0orG para que resulte mas sencillo:

Zer0 z0orG no pudo ownearse el DNS con su tecnica anterior pq estaba parcheado y no se owneó el mail de Pepe, entonces aprovecha que tiene control sobre un server que está en la misma red local que el [DNS de Pepe] para intentar hacer un Man in The Middle y envenenar a mano la caché! (Zer0 es bien leet eh :O)

Requisitos:
- Acceso y control total (/root) de una maquina en la red local
- hping2 (incluye en teoría arpspoof)

Primer paso:
Zer0 envenena la ARP haciendole creer al [Router] que el [PC OWNED] es en realidad [DNS de Pepe] y haciendole creer a [DNS de Pepe] que el [PC OWNED] es el [Router]:

Activa el forwarding para que todo lo que pase por [PC OWNED] sea retrasmitido automáticamente a su verdadero destinatario:
Citar
[root@PC OWNED Zer0]# echo 1 > /proc/sys/net/ipv4/ip_forward

Y procede a envenenar el ARP:

Citar
[root@PC OWNED Zer0]# arpspoof -t [Router] [DNS de Pepe]
arp reply [DNS de Pepe] is-at [PC OWNED]
arp reply [DNS de Pepe] is-at [PC OWNED]

Citar
[root@PC OWNED Zer0]# arpspoof -t [PC OWNED] [Router]
arp reply [Router] is-at [PC OWNED]
arp reply [Router] is-at [PC OWNED]

Con eso todo lo que envie [Router] a [DNS de Pepe] y viceversa pasará por [PC OWNED] pues hemos efecuado un envenenamiento de ARP.

Segundo paso:
Ahora Zer0 necesitá poner a funcionar un sniffer en tiempo real, en nuestro caso tcpdump con un script que detecte si hay una petición de parte de [DNS de Pepe] al [DNS de GMAIL] y en ese preciso instante de de baja el ip_forwarding:

Citar
[root@PC OWNED Zer0]# tcpdump -vvv -w /dump host [Router] and proto udp

Con eso se snifará todo el trafico que pase por nuestra maquina con destino a [Router] en protocolo udp. Lo que resta es hacer un script en bash que analice cada 1 segundo el contenido de "/dump", chequee si hay una peticion a [DNS de GMAIL], que en caso negativo borre el dump, en caso afirmativo detenga el ip_forwarding.

Tecer paso:
Ahora Zer0 que ya tiene el id de la petición falsea una respuesta de forma similar a la siguiente:

Citar
[DNS de GMAIL]. 124594 IN A 192.x.x.x

Donde 124594 es la ID y 192.x.x.x es la IP falseada.

Con esto quedaría en teoría envenenada la caché del [DNS de Pepe]!

Alternativa al Tercer paso:
Imaginando que Zer0 tuviera acceso la red local de Pepe en lugar de al DNS de Pepe sería mucho más sencillo usar la herramienta DNSSpoof:
(Los pasos anteriores serían identicos salvando la diferencia entre [DNS de Pepe] y [Pepe])

Citar
[root@PC OWNED Zer0]# dnsspoof -f hosts
dnsspoof: listening on eth0 [udp dst port 53 and not src [PC OWNED]]

Y luego creado el hosts de la siguiente forma:

Citar
----
[root@PC OWNED Zer0]# cat > hosts
192.x.x.x *.gmail.com
----

Con eso en cuanto [Pepe] le haga una petición al DNS relativa a gmail estará spoofeado el dns server y no habrá necesidad de envenenar la caché del verdadero DNS :P


~~~~~~~~~~~~~~~~~~~~~~~~~~
Despedida:
~~~~~~~~~~~~~~~~~~~~~~~~~~


Queda mucho más por decir, se puede hablar de metodos para intentar "adivinar" la ID de los mensajes y así evitar tener que spoofear, se puede hablar de exploits que lo hacen todo solo, de servidores mas o menos vulnerables, etc etc.
Yo creo que la teoría hasta acá llega y los que hayan leido y comprendido ya pueden considerar que saben bien que es y mas o menos como realizar un ataque a un DNS Server.

Para finalizar les pongo documentación y enlaces interesantes que DEBEN si o si chequear:


- Kaminsky DNS Cache Poisoning Flaw Exploit for host
http://www.caughq.org/exploits/CAU-EX-2008-0002.txt
- Kaminsky DNS Cache Poisoning Flaw Exploit for Domains
http://www.caughq.org/exploits/CAU-EX-2008-0003.txt
- DNS Spoofing techniques
http://www.securesphere.net/download/papers/dnsspoof.htm
- Información técnica:
http://www.kb.cert.org/vuls/id/800113
http://www.us-cert.gov/cas/techalerts/TA08-190B.html
http://nvd.nist.gov/nvd.cfm?cvename=CVE-2008-1447
-Lista con el estado de servidores DNS de los principales ISP españoles:
http://bandaancha.eu/analizador-dns

2 comentarios:

Anónimo dijo...

Eres un crack, me ha encantado tu forma de explicar. Suelo leer blogs de ciberseguridad y esta entrada es de las mejores que he leido. Sigue así!

Salu2!

Anónimo dijo...

En el ataque 1, en realidad estás "envenenando" la caché del DNS de un ISP???? Es eso posible??? Digo yo que los ISP tendrán los servidores DNS bien protegidos contra ese tipo de ataques... En cualquier caso, si se llegase a comprometer el DNS de un ISP, entonces estarías afectando a todos los usuarios de dicho ISP lo cual me parece una pasada... De todas formas me ha gustado la entrada.