Home / Network & Sniffing / Network & Sniffing / Scoprire il sistema operativo con ping e traceroute
Mattepuffo

Scoprire il sistema operativo con ping e traceroute

Scoprire il sistema operativo con ping e traceroute

Faccio una piccola premessa: per scoprire il sistema operativo usato dai computer in rete sarebbe meglio usare altri sistemi con Nmap; però se non si ha la possibilità/voglia di installare/studiare qualcosa di nuovo questo potrebbe essere un buon metodo, tenendo però in considerazioni i suoi limiti.

Detto ciò cominciamo con una breve descrizione di che cosa è l'OS Fingerprint: in breve è, appunto, il processo che permette di determinare il sistema operativo dell’host remoto.

Esistono due modi per farlo, uno attivo e uno passivo.

Quello attivo consiste nell'inviare pacchetti e analizzare la risposta.

Quello passivo nell'intercettare (sniffing) i dati in transito e valutare particolari campi dei protocolli.

Possiamo dire che tutti i sistemi operativi creano i pacchetti con valori arbitrari e distintivi.

Analizzando questi valori è possibile sapere con buona precisione quale sistema ha creato quei pacchetti, e di rimbalzo capire quale sistema operativo sta girando sulla macchina target.

Dei vari protocolli disponibili a noi interessa il protoccolo IP (Internet Protocol).

In maniera abbastanza generica possiamo dire che ogni informazione (email, streaming, ecc) attraversa la rete in forma frammentata: ogni frammento viene chiamato pacchetto dati.

Ogni connessione TCP viene fatta a pezzi e inglobata in pacchetti IP.

Questi pezzi contengo sia informazioni sui dati trasmessi, sia informazioni specifiche sul protocollo IP.

Di questi a noi interessa il campo TTL (Time To Live).

Il TTL è un valore che indica per quanto tempo il pacchetto IP può vagare per la rete prima di raggiungere la destinazione, e serve per evitare che pacchetti per qualche motivo sfuggiti al controllo continuino all’infinito a girare per la rete.

Infatti una volta che questo tempo scade, il pacchetto stesso viene eliminato.

Il TTL funziona così: quando il pacchetto viene creato/trasmesso viene impostato un valore TTL non specificato da nessuna parte; ognuno lo può impostare come vuole; ad ogni passaggio di router questo valore è decrementato di uno; quando raggiunge lo zero viene scartato.

Per verificare il TTL basta il comando Ping (disponibile su tutte le piattaforme).

Facciamo un esempio (io uso Linux; su Mac è uguale ma su Windows potete omettere il parametro -c 3 che serve per fare solo 3 ping in quanto Windows lo fa di default):

$ ping -c 3 127.0.0.1

PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.021 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.014 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.018 m

Ho pingato la mia macchina che ha valore 64.

Che ci facciamo con sto numero??

Ve lo spiego subito: se il valore TTL non è impostato a mano ogni sistema operativo ne usa uno di default distinto dagli altri.

Windows XP in genere ha 128 mentre Linux 64.

Ed infatti sul mio bel serverino casalingo gira Linux!

Ma proviamo con un altro pc in rete:

$ ping -c 3 192.168.1.130
PING 192.168.1.130 (192.168.1.130) 56(84) bytes of data.
64 bytes from 192.168.1.130: icmp_seq=1 ttl=64 time=0.016 ms
64 bytes from 192.168.1.130: icmp_seq=2 ttl=64 time=0.014 ms
64 bytes from 192.168.1.130: icmp_seq=3 ttl=64 time=0.013 ms

Anche questo ha Linux!

Fino a qua tutto ok, in rete locale è tutto più facile.

Ma veniamo a un esempio con un server esterno.

Prendo un esempio trovato in rete.

Pinghiamo il sito di Redhat:

$ ping -c 3 www.redhat.com

PING e86.b.akamaiedge.net (95.101.208.112) 56(84) bytes of data.
64 bytes from 95.101.208.112: icmp_seq=1 ttl=59 time=18.7 ms
64 bytes from 95.101.208.112: icmp_seq=2 ttl=59 time=17.7 ms
64 bytes from 95.101.208.112: icmp_seq=3 ttl=59 time=17.5 ms

TTL 59??

E che valore è?....

Calma, ricordate che ad ogni router il valore è decrementao di uno, quindi mi aspetto di trovare 5 router in mezzo.

Per verficarlo usiamo traceroute (tracert in Windows):

$ traceroute www.redhat.com
traceroute to e86.b.akamaiedge.net (95.101.208.112), 30 hops max, 40 byte packets
1  192.168.1.1 (192.168.1.1)  0.596 ms  0.527 ms  0.502 ms
2  l2.rm6.ea.eutelia.it (62.94.58.1)  8.490 ms  10.450 ms  9.868 ms
3  ip-2-6.sn-212-90.eutelia.it (212.90.2.6)  17.338 ms  20.191 ms  18.703 ms
4  mno-b1-link.telia.net (213.248.98.125)  18.020 ms  18.913 ms  18.949 ms
5  tiscali-ic-139531-mno-b1.c.telia.net (80.239.128.114)  19.294 ms  19.402 ms  21.872 ms

La realtà può essere però più complicata in quanto il TTL può essere facilmente modificato.

Questo è un buon metodo ma può essere approssimativo; meglio usare altri strumenti.

Qui trovate una lista dei valori di default; a quanto pare il mio router monta Solaris!