viernes, 23 de septiembre de 2011

Enumeración de direccionamiento IP mediante NTP


El protocolo NTP (Network Time Protocol) está diseñado para permitir sincronizar los relojes de los distintos dispositivos de red mediante su uso. Utiliza el protocolo de transporte UDP y el puerto 123.

Entre las distintas consultas que se pueden realizar a un servidor NTP tenemos la consulta monlist, pensada como herramienta de diagnóstico y que nos proporciona información de las últimas 600 direcciones IP que consultaron al servidor NTP.
Desde el punto de vista del atacante, o a la hora de hacer un pentest, podemos aprovecharnos de dicho comportamiento para realizar una enumeración de direcciones de red y obtener direcciones IP de los equipos de la empresa, internos o externos, que utilicen dicho servidor NTP.

Antes de empezar a realizar las pruebas conviene tener en mente que, en el caso por ejemplo de 0.europe.pool.ntp.org, detrás de dicho nombre de host existen varias direcciones IP y que, dependiendo de la que resuelva cuando uséis los programas, tendrán o no activada dicha consulta.

Entradas A para 0.europe.pool.ntp.org
Para realizar dicha enumeración disponemos de distintos métodos, el primero de ellos es utilizar el cliente ntp de linux “ntpdc”, tal y como vemos en la siguiente imagen (si da un error de timeout hay que repetir la petición).

Consulta monlist mediante ntpdc
También podemos utilizar el módulo de metasploit auxiliary/scanner/ntp/ntp_monlist para ello, aunque a mí me da algunos problemas y me muestra basura al final...

Nmap tiene también un script para realizar esto, ntp-monlist.nse , el cual presenta la ventaja de separarnos los clientes con direccionamiento público de aquellos que utilicen direccionamiento privado.

Script ntp-monlist de Nmap
La última herramienta que voy a comentar es de sensepost y se llama ntp_monlist.py que, además de realizar dicha consulta, nos genera también un fichero para maltego.
Para ejecutarlo basta con hacer lo siguiente: z0mbiehunt3r@ph0b0s:/$ ./ntp_monlist.py 0.europe.pool.ntp.org y luego comprobar el fichero NTP.txt.

Resultados obtenidos por ntp_monlist.py
Comentar también que HD Moore, quien hizo público este “uso alternativo” del comando monlist, comentó también la posibilidad de utilizar una lista de servidores que permitan realizar dicho comando para realizar un ataque de tipo DdoS ya que, con una única petición, obtenemos múltiples respuestas hasta completar el listado completo de los últimos 600 clientes. Esto, unido al uso de UDP como capa de transporte, hace trivial la falsificación de dirección IP de origen para hacer que un servidor objetivo reciba gran cantidad de respuestas NTP no solicitadas.

Por último, y para aquellos que queráis buscar servidores NTP con los que trastear, deciros que podéis hacerlo fácilmente con Nmap de la siguiente manera:

root@ph0b0s:~/nmap-svn# ./nmap -sU -pU:123 -Pn -n -iR 10000 --reason -v -oA /tmp/ntp-happyhunting –min-hostgroup=500

Con ello, estáis diciendo que escanee sólo el puerto UDP 123, que no realice ping primero ni resolución DNS (ahorramos bastante tiempo y ancho de banda), que genere 10000 direcciones IP aleatorias a escanear, que nos muestre el motivo por el cual Nmap establece el estado del puerto, que muestre más información del estado del escaneo, que nos guarde la salida en /tmp/ntp-happyhunting (en tres formatos distintos con sus correspondientes extensiones) y que realice el escaneo de forma paralela con grupos de 500 host.
Una vez acabado sólo tenéis que buscar en los ficheros de salida el texto udp-response que nos indica que ha habido respuesta, lo que significa que el puerto está abierto.
También podéis buscar en los listados de servidores NTP públicos pero, admitámoslo, no es tan divertido.... ;)

Espero que os haya resultado interesante y que os acordéis de ello si algún día estáis haciendo un pentest y os encontráis con un servidor NTP.

Saludos y hasta otra.




No hay comentarios:

Publicar un comentario