martedì 6 luglio 2021

OS Fingerprinting: Individuare il sistema operativo attraverso il comando Ping

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 / OSVersionProtocolTTL
AIX TCP60
AIX UDP30
AIX3.2, 4.1ICMP255
BSDIBSD/OS 3.1 and 4.0ICMP255
CompaTru64 v5.0ICMP64
Cisco ICMP254
DEC PathworksV5TCP and UDP30
Foundry ICMP64
FreeBSD2.1RTCP and UDP64
FreeBSD3.4, 4.0ICMP255
FreeBSD5ICMP64
HP-UX9.0xTCP and UDP30
HP-UX10.01TCP and UDP64
HP-UX10.2ICMP255
HP-UX11ICMP255
HP-UX11TCP64
Irix5.3TCP and UDP60
Irix6.xTCP and UDP60
Irix6.5.3, 6.5.8ICMP255
juniper ICMP64
MPE/IX (HP) ICMP200
Linux2.0.x kernelICMP64
Linux2.2.14 kernelICMP255
Linux2.4 kernelICMP255
LinuxRed Hat 9ICMP and TCP64
MacOS/MacTCP2.0.xTCP and UDP60
MacOS/MacTCPX (10.5.6)ICMP/TCP/UDP64
NetBSD ICMP255
Netgear FVG318 ICMP and UDP64
OpenBSD2.6 & 2.7ICMP255
OpenVMS07.01.2002ICMP255
OS/2TCP/IP 3.0 64
OSF/1V3.2ATCP60
OSF/1V3.2AUDP30
Solaris2.5.1, 2.6, 2.7, 2.8ICMP255
Solaris2.8TCP64
StratusTCP_OSICMP255
StratusTCP_OS (14.2-)TCP and UDP30
StratusTCP_OS (14.3+)TCP and UDP64
StratusSTCPICMP/TCP/UDP60
SunOS4.1.3/4.1.4TCP and UDP60
SunOS5.7ICMP and TCP255
UltrixV4.1/V4.2ATCP60
UltrixV4.1/V4.2AUDP30
UltrixV4.2 – 4.5ICMP255
VMS/Multinet TCP and UDP64
VMS/TCPware TCP60
VMS/TCPware UDP64
VMS/Wollongong1.1.1.1TCP128
VMS/Wollongong1.1.1.1UDP30
VMS/UCX TCP and UDP128
Windowsfor WorkgroupsTCP and UDP32
Windows95TCP and UDP32
Windows98ICMP32
Windows98, 98 SEICMP128
Windows98TCP128
WindowsNT 3.51TCP and UDP32
WindowsNT 4.0TCP and UDP128
WindowsNT 4.0 SP5- 32
WindowsNT 4.0 SP6+ 128
WindowsNT 4 WRKS SP 3, SP 6aICMP128
WindowsNT 4 Server SP4ICMP128
WindowsMEICMP128
Windows2000 proICMP/TCP/UDP128
Windows2000 familyICMP128
WindowsServer 2003 128
WindowsXPICMP/TCP/UDP128
WindowsVistaICMP/TCP/UDP128
Windows7ICMP/TCP/UDP128
WindowsServer 2008ICMP/TCP/UDP128
Windows10ICMP/TCP/UDP128


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.
Time to live 64
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 
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
TraceRoute
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.




Nessun commento:

Posta un commento

I messaggi sono soggetti a moderazione da parte dell'amministratore prima della loro pubblicazione.