Ping (Packet internet groper) è un'utility di amministrazione per reti generalmente utilizzata per verificare la presenza e la raggiungibilità di un dispositivo di rete (Host) su una rete IP (Internet Protocol).
Ping invia un pacchetto ICMP (Internet Control Message Protocol) di tipo Echo Request al sistema target e rimane in attesa di un pacchetto ICMP di tipo Echo Reply di risposta (solitamente la parte del sistema operativo dedicata alla gestione dello stack di rete è programmato per rispondere automaticamente con un pacchetto Echo Reply alla ricezione di un pacchetto Echo Request). In questo modo viene misurato il tempo, in millisecondi, impiegato da uno o più pacchetti ICMP a raggiungere un dispositivo di rete e a ritornare indietro consentendo di misurare anche le latenze di trasmissione di rete.
Il Time to live (TTL) si riferisce alla quantità di tempo o salti (conosciuti anche con il termine HOPS e che rappresentano, in pratica, il numero di reti attraversate per raggiungere il destinatario) che un pacchetto è impostato per esistere all'interno di una rete prima di essere scartato da un router. I valori di default del TTL differiscono tra i vari sistemi operativi (si veda la tabella) il che consente di effettuare una prima ipotesi sul sistema operativo installato sull'host che si sta analizzando (OS fingerprinting).
Device / OS | Version | Protocol | TTL |
AIX | | TCP | 60 |
AIX | | UDP | 30 |
AIX | 3.2, 4.1 | ICMP | 255 |
BSDI | BSD/OS 3.1 and 4.0 | ICMP | 255 |
Compa | Tru64 v5.0 | ICMP | 64 |
Cisco | | ICMP | 254 |
DEC Pathworks | V5 | TCP and UDP | 30 |
Foundry | | ICMP | 64 |
FreeBSD | 2.1R | TCP and UDP | 64 |
FreeBSD | 3.4, 4.0 | ICMP | 255 |
FreeBSD | 5 | ICMP | 64 |
HP-UX | 9.0x | TCP and UDP | 30 |
HP-UX | 10.01 | TCP and UDP | 64 |
HP-UX | 10.2 | ICMP | 255 |
HP-UX | 11 | ICMP | 255 |
HP-UX | 11 | TCP | 64 |
Irix | 5.3 | TCP and UDP | 60 |
Irix | 6.x | TCP and UDP | 60 |
Irix | 6.5.3, 6.5.8 | ICMP | 255 |
juniper | | ICMP | 64 |
MPE/IX (HP) | | ICMP | 200 |
Linux | 2.0.x kernel | ICMP | 64 |
Linux | 2.2.14 kernel | ICMP | 255 |
Linux | 2.4 kernel | ICMP | 255 |
Linux | Red Hat 9 | ICMP and TCP | 64 |
MacOS/MacTCP | 2.0.x | TCP and UDP | 60 |
MacOS/MacTCP | X (10.5.6) | ICMP/TCP/UDP | 64 |
NetBSD | | ICMP | 255 |
Netgear FVG318 | | ICMP and UDP | 64 |
OpenBSD | 2.6 & 2.7 | ICMP | 255 |
OpenVMS | 07.01.2002 | ICMP | 255 |
OS/2 | TCP/IP 3.0 | | 64 |
OSF/1 | V3.2A | TCP | 60 |
OSF/1 | V3.2A | UDP | 30 |
Solaris | 2.5.1, 2.6, 2.7, 2.8 | ICMP | 255 |
Solaris | 2.8 | TCP | 64 |
Stratus | TCP_OS | ICMP | 255 |
Stratus | TCP_OS (14.2-) | TCP and UDP | 30 |
Stratus | TCP_OS (14.3+) | TCP and UDP | 64 |
Stratus | STCP | ICMP/TCP/UDP | 60 |
SunOS | 4.1.3/4.1.4 | TCP and UDP | 60 |
SunOS | 5.7 | ICMP and TCP | 255 |
Ultrix | V4.1/V4.2A | TCP | 60 |
Ultrix | V4.1/V4.2A | UDP | 30 |
Ultrix | V4.2 – 4.5 | ICMP | 255 |
VMS/Multinet | | TCP and UDP | 64 |
VMS/TCPware | | TCP | 60 |
VMS/TCPware | | UDP | 64 |
VMS/Wollongong | 1.1.1.1 | TCP | 128 |
VMS/Wollongong | 1.1.1.1 | UDP | 30 |
VMS/UCX | | TCP and UDP | 128 |
Windows | for Workgroups | TCP and UDP | 32 |
Windows | 95 | TCP and UDP | 32 |
Windows | 98 | ICMP | 32 |
Windows | 98, 98 SE | ICMP | 128 |
Windows | 98 | TCP | 128 |
Windows | NT 3.51 | TCP and UDP | 32 |
Windows | NT 4.0 | TCP and UDP | 128 |
Windows | NT 4.0 SP5- | | 32 |
Windows | NT 4.0 SP6+ | | 128 |
Windows | NT 4 WRKS SP 3, SP 6a | ICMP | 128 |
Windows | NT 4 Server SP4 | ICMP | 128 |
Windows | ME | ICMP | 128 |
Windows | 2000 pro | ICMP/TCP/UDP | 128 |
Windows | 2000 family | ICMP | 128 |
Windows | Server 2003 | | 128 |
Windows | XP | ICMP/TCP/UDP | 128 |
Windows | Vista | ICMP/TCP/UDP | 128 |
Windows | 7 | ICMP/TCP/UDP | 128 |
Windows | Server 2008 | ICMP/TCP/UDP | 128 |
Windows | 10 | ICMP/TCP/UDP | 128 |
Per cercare di individuare il sistema operativo installato sull'Host target, basta eseguire un Ping. Supponiamo di voler analizzare un host che si trova sulla nostra stessa rete, il comando da eseguire sarà del tipo
ping 192.168.0.55
al posto dell'indirizzo IP possiamo utilizzare il nome Host.
|
FIG 1 - Time to live 64 |
Come visibile in FIG 1, l'Host target ha risposto al ping con un TTL a 64 che, visionando i valori in tabella, ci fa desumere che siamo davanti ad un sistema *nix/Linux.
Questo è il caso più semplice infatti, trovandoci sulla stessa rete dell'Host target, il TTL non viene decrementato.
Quando l'Host target si trova su un'altra rete bisogna tener conto anche degli HOPS. Ad esempio, supponiamo di voler indagare sul sistema operativo che ospita il sito www.cisco.com. Eseguiamo il ping verso il sito web
ping www.cisco.com
|
FIG 2 - Ping www.cisco.com |
Il TTL restituito dal ping è 56 (FIG 2). Dato che mi aspetto si tratti di un sistema *nix/linux posso supporre che tra i due host, quello da cui è stato lanciato il comando e quello target, ci siano 8 router. Per verificarlo basta eseguire un traceroute.
In ambiente Windows il comando da eseguire è
tracert www.cisco.com
in ambiente linux il comando è
traceroute -n www.cisco.com
|
FIG 3 - TraceRoute |
Come visibile da FIG 3 tra i due host ci sono 8 router (il nono è l'indirizzo della macchina target).
I risultati ottenibili con questa tecnica non sono affidabili al 100% anche se si tratta del metodo meno invasivo e che da meno nell'occhio. Innanzitutto, come visibile in tabella, più sistemi operativi hanno lo stesso TTL inoltre i valori di default possono essere modificati. Risultati più attendibili possono essere ottenuti utilizzando tool come p0f, nmap e xprobe.