Come nmap indovina il sistema operativo?

7

nmap ha la capacità di indovinare il sistema operativo con l'opzione -O . Sono rimasto molto sorpreso dal fatto che possa trovare il kernel o il service pack corretto.

* In che modo nmap indovina il sistema operativo?

* Quali sono le firme comuni per Windows 7,8, vari sistemi Linux, ecc?

    
posta Jon 16.10.2014 - 10:47
fonte

2 risposte

5

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).

    
risposta data 16.10.2014 - 11:58
fonte
6

Un elenco dei vari test utilizzati viene fornito nella documentazione di mmap all'indirizzo link . Per ulteriori dettagli specifici, devi leggere il codice sorgente.

In sostanza vengono inviati vari pacchetti di probe diversi ei risultati vengono analizzati. Lievi differenze tra il software TCP / IP indicano che talvolta vi sono lievi differenze nella risposta a determinati pacchetti sonda. Con un numero sufficiente di test è possibile creare un'impronta digitale che identifichi il sistema operativo in modo accurato.

Un esempio potrebbe aiutare. Se si riceve un pacchetto TCP da un host, contiene un numero di opzioni di intestazione. La definizione del protocollo TCP in RFC793 non specifica l'ordine in cui queste opzioni devono essere inserite. Quindi se la persona che ha scritto il codice di networking per BeOS ha inserito tali opzioni in un ordine particolare e si riceve un pacchetto con le opzioni in tale ordine, è possibile dedurre che il pacchetto potrebbe provenire da un host BeOS. Questo potrebbe non bastare per assicurarsi che sia BeOs; forse lo stack TCP in Haiku mette le opzioni nello stesso ordine. Quindi devi trovare qualche altro test che dia risultati diversi per un pacchetto da BeOS piuttosto che da Haiku.

    
risposta data 16.10.2014 - 11:28
fonte

Leggi altre domande sui tag