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