Analizzare il protocollo NTP

Tempo di lettura: 7 minuti

NTP è un protocollo client-server designato alla sincronizzazione degli orologi dei computer interni ad una rete. In una rete aziendale è molto probabile trovare un dispositivo che ha il servizio attivo, al fine di sincronizzare gli orologi delle macchine ad esso collegate. Sfortunatamente, molti sistemisti non aggiornano o configurano in maniera adeguata ntpd, il quale sarà in grado di fornire informazioni sul sistema e sulla struttura delle rete aziendale.

Architettura NTP
Architettura NTP

Rilevazione del protocollo

La rilevazione funziona come con ogni altra porta in ascolto, ossia scansionando l’indirizzo IP con un software come nmap sul protocollo UDP.

N.B. L’indirizzo IP che utilizzerò nell’articolo sarà sempre nascosto poiché l’ho trovato tramite una ricerca in shodan (quindi potrete farlo con un qualsiasi altro indirizzo che troverete con la ricerca).

┌─[✗]─[mrtouch@parrot]─[~]
└──╼ sudo nmap -sU 1xx.xxx.xxx.x2

Not shown: 997 open|filtered ports
PORT    STATE  SERVICE
113/udp closed auth
123/udp open   ntp
161/udp open   snmp

Scansione del servizio

Una volta verificata l’effettiva porta aperta, si possono utilizzare una serie di software per ottenere informazioni. Tra i tanti:

  1. ntpdate;
  2. ntptrace;
  3. ntpdc;
  4. ntpq;
  5. nmap.

I primi quattro fanno parte del pacchetto ntp, quindi chiunque abbia un dispositivo Linux (Debian) potrà installarlo con un semplice comando.

sudo apt-get install ntp

ntptrace

Ntptrace segue la catena dei server NTP fino ad arrivare alla sorgente. Questo comando è utile solo nel caso si stia utilizzando un dispositivo con NTP attivo.

 ─[✗]─[mrtouch@parrot]─[~]
└──╼ $ntptrace 1xx.xxx.xxx.x2
1xx.xxx.xxx.x21.abcdefghi.com.br: stratum 16, offset 0.000000, synch distance 0.001620

ntpdc

Viene utilizzato per interrogare il demone ntpd sia in maniera interattiva sia utilizzando i comandi. Alcuni comandi utili possono essere:

  • ntpdc -c monlist: stampa il traffico passante per la macchina;

  • ntpdc -c sysinfo: ritorna informazioni più o meno utili in merito al sistema;

  • ntpdc -c listpeers: lista dei peers connessi alla macchina;

  • ntpdc -c reslist.

    ┌─[mrtouch@parrot]─[~] └──╼ $ntpdc -c sysinfo 1xx.xxx.xxx.x2 system peer: 0.0.0.0 system peer mode: unspec leap indicator: 11 stratum: 16 precision: -15 root distance: 0.00000 s root dispersion: 0.00163 s reference ID: [74] reference time: 00000000.00000000 Thu, Feb 7 2036 7:28:16.000 system flags: auth monitor ntp stats jitter: 0.000000 s stability: 0.000 ppm broadcastdelay: 0.000000 s authdelay: 0.000000 s

ntpq

Molto simile al software appena descritto, ma trovo che la modalità interattiva sia meglio definita e più completa. Per entrare nel host basta digitare

┌─[mrtouch@parrot]─[~]
└──╼ $ntpq 1xx.xxx.xxx.x2
ntpq>help
ntpq commands:
:config 
drefid 
mreadlist 
readvar 
.
..
...
....

Come potete notare i comandi sono molti. Alcuni sono:

  • peers: stampa la lista di ogni peer connesso alla macchina;
  • associations: tutte le associazioni del demone;
  • readvar_: _stampa le informazioni relative all’associazione passata come comando;
  • ntpversion: versione NTP utilizzata.

Per chiunque volesse comprendere gli altri comandi e l’utilizzo degli stessi consiglio il manuale, altrimenti basta digitare help comando e si avranno tutte le informazioni di cui si ha bisogno.

Alcuni comandi ntpq
Alcuni comandi ntpq

Solo con pochi comandi ho ottenuto circa cinque nuovi indirizzi IP, sia interni che esterni, informazioni in merito al sistema operativo e la versione di NTP utilizzata.

nmap

Come per quasi ogni protocollo, nmap ha due script molto utili ai fini di una scansione NTP. Il primo è ntp-info, utilizzato per ottenere la configurazione del servizio attivo sul dispositivo vittima.

┌─[mrtouch@parrot]─[~]
└──╼ $sudo nmap -sU -pU:123 -Pn -n --script=ntp-info 1xx.xxx.xxx.x2

Nmap scan report for 1xx.xxx.xxx.x2
Host is up (0.29s latency).

PORT    STATE SERVICE
123/udp open  ntp
| ntp-info: 
|   receive time stamp: 2015-04-10T02:41:02
|   version: ntpd 4.2.6p5@1.2349-o Thu Apr  9 10:20:57 UTC 2015 (1)
|   processor: mips
|   system: Linux/2.6.36
|   leap: 3
|   stratum: 16
|   precision: -15
|   rootdelay: 0.000
|   rootdisp: 4.305
|   refid: INIT
|   reftime: 0x00000000.00000000
|   clock: 0xd8d1b6bb.7f1b40ec
|   peer: 0
|   tc: 3
|   mintc: 3
|   offset: 0.000
|   frequency: 0.000
|   sys_jitter: 0.000
|   clk_jitter: 0.031
|_  clk_wander: 0.000\x0D
Service Info: OS: Linux/2.6.36

Nmap done: 1 IP address (1 host up) scanned in 1.45 seconds

L’altro è invece ntp-monlist. Ogni sistemista dovrebbe disattivarlo, in quanto permette di ricevere informazioni sensibili sugli host interni all’azienda o collegati al demone ntp. L’utilizzo è il solito

┌─[mrtouch@parrot]─[~]
└──╼ $sudo nmap -sU -pU:123 -Pn -n --script=ntp-monlist 1xx.xxx.xxx.x2
[sudo] password for mrtouch: 

Nmap scan report for 1xx.xxx.xxx.x2
Host is up (0.29s latency).

PORT    STATE SERVICE
123/udp open  ntp
| ntp-monlist: 
|   Public Clients (1)
|_      9x.xx.xxx.xx0

In questo caso ha trovato solamente un client (pubblico) collegato al server. In altri casi si possono trovare centinaia di server collegati.

Conclusioni

Ottenere informazioni non è la sola possibilità nel caso si trovi un demone NTP attivo. Nel caso si trovi una versione non aggiornata del servizio è possibile effettuare attacchi DOS o DDOS, come nel caso dell'attacco a 400 Gb/s di qualche anno fa o in quello da “soli” 100 Gb/s. Ci sono diversi siti che si occupano della sicurezza di NTP; tra i più importanti consiglio: