Ronald Koh y otros tipos me han pedido recientemente hacer un relato sobre DNS Pinning aka, principalmente para evitar las politicas que lo originan con el Anti DNS Pinning. Esto no es nada realmente nuevo y algunas explicaciones de esta tecnica estan escrita ya, yo pienso que es una buena idea hablar sobre esto de nuevo, principalmente por dos razones.
Primeramente, este tema es sabido que mantiene un alto grado de complexidad y solamente un muy limitado numero de individuos actualmente comprenden de que se trata. Por lo tanto atraer la atencion de la gente hacia el no seria seguramente inorportuno.
Segundo, esto no es una solucion de prueba para proteger otra vez esto y mas la gente que comprende esto sabe de que se trata, lo grabe son los cambios que podrian darse iyendo a una solucion en algun futuro. Cuatro ojos probablemente ven mejor que dos, comienzo.
La misma politica de origen en un acceso registringido implementado en los navegadores mas modernos para prevenir la carga de un script de un origen para accesar a documentos de un origen diferente en alguna busqueda. Por lo tanto, esto no es posible fijar o no tomar informacion de un origen foraneo. Sin embargo, desde hace tiempo esta medida de seguridad en primer lugar ha sido inicializada creo que por Netscape, los investigadores de seguridad tienen una significante espectacion para encontrar maneras de puentear esta restriccion. Uno de los resultados finalmente son Anti DNS Pinning y despues en Anti-Anti-Anti DNS Pinning, ambos explotando algunos otros mecanismos de seguridad de los navegadores modernos, llamado DNS Pinning.
Ahora puede sonar razonable empezar explicando que es el DNS Pinning actualmente, afortunadamente este fuera de turno es bonito y facil con un bit de la informacion no mostrada en el Sistema de Nombres de Dominios(DNS por sus siglas en ingles). Donde algunas peticiones a un website llamado como www.example.com, el navegador necesita resolver un DNS Lookup en ese dominio para tomar la direccion numerica asociada (IP) de el server de ese host la pregunta al website. EN el siguiente paso, el navegador envia una consulta a esa IP eso ultimo contiene el dominio, una pagina web especifica y otras variables para ser ultimamente retiradas de los datos de peticion.
Deja asumir las operaciones de busqueda del DNS en www.example.com proporciono la IP 111.111.111.111. Una peticion HTTP normal es enviada por el navegador a www.example.com puede parecer esto:
GET / HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows; U;
Windows NT 5.1; de; rv:1.8.1.4) Gecko/20070515 Firefox/2.0.0.4
Accept:
*/*
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding:
gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive:
300
Connection: keep-alive
Cookie: secret authentication token 12345
Aqui es donde el DNS Pinning entrar en el juego. Como unatentativa de la proteccion otra vez Anti DNS Pinning, la cache del navegador tiene el par de hostname-a-ip hasta que la ventana del navegador se cierra, sin importar de que el actual DNS Time To Live (TTL) es puesto. Tengo visualizado un escenario donde esa proteccion de DNS Pinning otra vez falle below. En este ejemplo un atacante corre www.attacker.com apuntando a la direccion IP 222.222.222.222.
Por otra parte el tiene total acceso a la entrada del servidor DNS, que es puesto a TTL (DNS Timeout) de 1 segundo. Donde viendo ese sitio web en un navegador, Javascripts malicioso puede ser ejecutado por la peticion del navegador para conectarlo detras en 2 segundos y entonces responder con los datos devueltos a otro servidor diverso con el control del atacante.
1) El navegador del usuario se conecta con www.attacker.com y realiza sus operaciones de busqueda del DNS para esa URL que recibe 222.222.222.222 con un TTL de 1 segundo.
2) El javascripts dice al navegador que se conecte de nuevo a www.attacker.com despues de dos segundos, poco despues de que el TTL expiro.
3) Puesto que el DNS no es un valido mas largo, el navegador del usuario se conecta con el servidor del DNS para preguntar donde www.attacker.com esta localizado.
4) El servidor DNS responde con 111.111.111.111, que apunta a www.example.com
5) El navegador del usuario se conecta con 111.111.111.111 que envia una cabezera como:
GET / HTTP/1.1
Host: www.attacker.com
User-Agent: Mozilla/5.0 (Windows; U;
Windows NT 5.1; de; rv:1.8.1.4) Gecko/20070515 Firefox/2.0.0.4
Accept:
*/*
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding:
gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive:
300
Connection: keep-alive
Ahora lo importante es notar que aqui el host se ha cambiado a www.attacker.com en de www.example.com y ademas de falta la cookie. Debido al hostname-a-ip ubicado en la cache del navegador, el DNS Pinning es prevenido en las segundas operaciones de busqueda de www.attacker.com que es porque este ataque fue condenado por fallar desde el principio.
Anti DNS Pinning
Segun lo he mencionado anteriormente, Anti DNS Pinning es contra lo que significaba el DNS Pinning para proteger - forzando al navegador a solicitar una entrada manipulada del DNS e.g. haciendolo creer otra vez que expiro su cache.
Bien, el 14 de Agosto del 2006, Martin Johns descubrio un concepto de como esto puede ser hecho. El esencialmente descubrio que el DNS Pinning solamente trabaja a condicion de que el servidor web este realmente en linea y disponible. En la mano esto tiene sentido porque si el servidor parece estar caido, las nuevas operaciones de busqueda del DNS son necesarias para descubrir si ha cambiado o se han movido de cierta manera. Sin embargo por otra parte un atacante puede cerrar su servidor siempre que lo desee y de ese modo evita el DNS Pinning del DNS del navegadores del usuario. Una vez mas visualizo este ataque:
1) El navegador de los usuarios se conectar con www.attacker.com y realiza sus operaciones de busqueda de DNS para la URL que recibe 222.222.222.222 con un TTL de 1 segundo.
2) El javascripts le dice al navegador que se conecte de nuevo a www.attacker.com despues de dos segundos, poco despues el TTL expira. Despues de que el servidor ha dicho al firewall sobre si mismo.
3) El DNS Pinning ahora ha caido Anti DNS Pinning. Puesto que el DNS no es un numero valido muy largo, el navegador del usuario se conectar con el servidor DNS para preguntar por www.attacker.com donde esta localizado.
4) El servidor DNS responde con 111.111.111.111, apuntando a www.example.com
5) El navegador del usuario se conecta a 111.111.111.111 que envia una cabecera como:
GET / HTTP/1.1
Host: www.attacker.com
User-Agent: Mozilla/5.0 (Windows; U;
Windows NT 5.1; de; rv:1.8.1.4) Gecko/20070515 Firefox/2.0.0.4
Accept:
*/*
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding:
gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive:
300
Connection: keep-alive
Puesto que ahora la IP ha cambiado, el XMLHttpRequest atacante esta leyendo un web site diferente (www.example.com), aun cuando el navegador cree que sigue siendo el mismo. Ahora puedes entender porque inicie este articulo explicando cual es la politica de origen. Podemos romperla usando Anti DNS Pinning.
De todas formas, vamos a resaltar algunas cosas. En primer lugar, el host se cambia a www.attacker.com en vez de www.example.com, mas alli es mejor porque el dato de la cookie no es enviado en la cabecera. Tomar esto en consideracion, pueden preguntarse que haria una persona cualquiera con Anti DNS Pinning en vez de solicitar www.example.com.
Bien, de hecho Anti DNS Pinning del DNS, el atacante no esta haciendo nada bueno a menos que estemos hablando de una intranet o de otra manera los websites serian restringidos por IP, por lo cual el atacante no se podria conectar porque el sitio no es accesible al publico. Aqui es donde Anti DNS Pinning llegar a ser realmente peligroso. En vez de apuntar a www.example.com, podriamos lanzar posiblemente un ataque contra intranet.example.com, que es considerado realmente ser seguro puesto que recide detras de un firewall.
No solo podemos leer los datos contenidos en esas paginas protegidas si no tambien utilizar la informacion para lanzar ataques Cross Site Request Forgery contra usos del intranet.
Kanatako proporciono un buen ejemplo de como trabaja esto en su website. Yo recomiendo checar esto.
http://www.jumperz.net/index.php?i=2&a=1&b=7
Adicionalmente el describe en sla.ckers.org como trabaja su script detalladamente. Si lo lees cuidadosamente, veras que es exactamente lo que acabas de aprender mientras estabas leyendo.
Anti Anti DNS Pinning
El nombre indica sobre de que trata esta tecnica. Alguna gente que se inicia piensa de como Anti DNS Pinning se podria prevenir y terminar con la comprobacion si la cebecera del host es correcta. Recordar que esta se ha cambiado a www.attacker.com y asi que indica un ataque.
Ciertamente no se porque siempre es www.attacker.com pero simplemente porque la cabecera del host diferencia de de el que ha sido permitido por el administrador del servidor.
Anti Anti Anti DNS Pinning
Desafortunadamente esta cabecera puede ser spoofeada facilmente en mas de una forma de modo que la tecnica previamente descrita no resulte ser muy eficaz. Amit Klein publico un post en Bugtraq donde demostro como spoofear el host en MSIE usando XMLHttpRequest o en flash.
<script>
var x = new
ActiveXObject("Microsoft.XMLHTTP");
x.open(
"GET\thttp://attacker.com/\tHTTP/1.0\r\nHost:\twww.example.com
\r\n\r\n,
"http://www.attacker.com/",
false
);
x.send();
alert(x.responseText);
</script>
Espero que este articulo pueda ayudarte a conseguir una comprension del DNS Pinning y sus mutaciones. Sin embargo si tu piensas que esto es una construccion teorica, estas muy equivocado. Chequar RSnakes stories, especialmente Death By 1000 Cutts.
Good luck!!
Autor: christ1an
0 comentarios :
Publicar un comentario