Euristicamente . nmap osserva il comportamento del sistema durante le sonde, sviluppa una "impronta digitale", che analoga ad un vero test dell'impronta digitale, cerca principalmente le minuzie:
- comportamento fuori specifica e comportamento aggiuntivo o comportamento indefinito
- tempi di ritrasmissione
- risposta alla frammentazione e varie sonde ICMP
- modelli in numeri di sequenza TCP, numeri ID IP e TTL
- comportamento con varie opzioni e flag TCP
Questo è solo un breve riepilogo, qui puoi leggere una descrizione più approfondita
link
L'impronta digitale viene quindi confrontata con un database di impronte digitali note. Nel caso in cui si scansionasse un sistema con un'impronta digitale unica, si otterrebbe una buona corrispondenza, altrimenti si otterrà un'ipotesi basata sul miglior adattamento (che a volte è sbagliato). Potrebbe essere comunque sbagliato, ad alcune persone piace giocare ai giochi (vecchio ma interessante). Se non ci sono buone corrispondenze, nmap
ti incoraggerà a scoprire cos'è il sistema e inviarlo .
Puoi trovare le impronte digitali in /usr/share/nmap/nmap-os-db
(probabilmente), ma dovrai leggere la documentazione per decifrare i dettagli.
Nell'attuale database nmap (6.47) ci sono 4485 impronte digitali per 5009 CPE (piattaforma), oltre 800 di che corrispondono a varie versioni di MS-Windows e oltre 1000 di cui corrispondono a vari sistemi Linux (inclusi gli elettrodomestici).
Ecco una firma reale per un sistema Linux, un tablet Asus Nexus 7:
# Linux 3.1.10-g52027f9 #1 SMP PREEMPT Thu Jun 28 16:19:26 PDT 2012 armv71 GNU/Linux, Asus Nexus 7 Android Tablet
Fingerprint Linux 3.1
Class Asus | Linux | 3.X | general purpose
CPE cpe:/o:asus:linux_kernel:3 auto
SEQ(SP=102-10C%GCD=1-6%ISR=108-112%TI=Z%CI=Z%II=I%TS=6|7)
OPS(O1=M566ST11NW6%O2=M566ST11NW6%O3=M566NNT11NW6%O4=M566ST11NW6%O5=M566ST11NW6%O6=M566ST11)
WIN(W1=3890%W2=3890%W3=3890%W4=3890%W5=3890%W6=3890)
ECN(R=Y%DF=Y%T=3B-45%TG=40%W=3908%O=M566NNSNW6%CC=Y%Q=)
T1(R=Y%DF=Y%T=3B-45%TG=40%S=O%A=S+%F=AS%RD=0%Q=)
T2(R=N)
T3(R=Y%DF=Y%T=3B-45%TG=40%W=3890%S=O%A=S+%F=AS%O=M566ST11NW6%RD=0%Q=)
T4(R=Y%DF=Y%T=3B-45%TG=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)
T5(R=Y%DF=Y%T=3B-45%TG=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)
T6(R=Y%DF=Y%T=3B-45%TG=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)
T7(R=Y%DF=Y%T=3B-45%TG=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)
U1(DF=N%T=3B-45%TG=40%IPL=164%UN=0%RIPL=G%RID=G%RIPCK=G%RUCK=G%RUD=G)
IE(DFI=N%T=3B-45%TG=40%CD=S)
(Wow, non è carino, dato che puoi trovarli nella tua installazione di nmap in nmap-os-db
quindi non ne mostrerò altri.)
Prenderò un campo semplice IE()
- Comportamento echo ICMP (il ping è semplice, giusto?)
IE(DFI=N%T=3B-45%TG=40%CD=S)
Se controlli, vedrai che è condiviso con oltre 1250 altri sistemi (circa due terzi dei quali sono sistemi Linux).
Dalla documentazione:
The IE test involves sending two ICMP echo request packets to the target. The first one has the IP DF bit set, a type-of-service (TOS) byte value of zero, a code of nine (even though it should be zero), the sequence number 295, a random IP ID and ICMP request identifier, and 120 bytes of 0x00 for the data payload.
The second ping query is similar, except a TOS of four (IP_TOS_RELIABILITY) is used, the code is zero, 150 bytes of data is sent, and the ICMP request ID and sequence numbers are incremented by one from the previous query values.
Questo decodifica come:
-
DFI=N
nessuna risposta ICMP avrà set DF (non frammentare)
-
T=3B-45
TTL sarà tra 0x3B e 0x45
-
TG=40
IP iniziale TTL indovinare
-
CD=S
Codici di risposta ICMP (come il probe di richiesta ICMP)
Puoi trovare tutti questi codici e dettagli qui .
Gli altri campi contengono dati similmente dettagliati per le opzioni ECN, TCP (SEQ, OPS, WIN, T1) e TCP (T2-T7).