Nel mio ultimo post ho discusso una scansione di inattività e come si può consentire a un utente malintenzionato di mascherare il proprio indirizzo IP durante una scansione delle porte. In questa puntata vedremo alcune tracce, oltre a discutere su come stabilire quando una scansione di inattività è stata utilizzata contro la rete.
L'incremento di monitoraggio IP ID
Iniziamo guardando i pacchetti che stavano monitorando il campo IP ID sul sistema Windows. Ecco ciò che il nostro pacchetto sonda assomiglia a questo:
07:22:15.367140 IP (tos 0 × 0, ttl 64, id 63897, offset 0, flags [none], proto TCP (6), lunghezza 40) 192.168.100.1.2203> 192.168.100.2.0:., Cksum 0xeca2 (corretto), vinci 512
Alcuni di questi campi sono abbastanza interessante. Il valore TTL è impostato su "64", che suggerisce un sistema Linux o UNIX. Dal momento che stiamo scrivendo prima il pacchetto direttamente al filo di questo valore è in realtà controllato da hping. 64 appena capita di essere il programma predefinito, ma possiamo cambiare il valore a tutto ciò che vogliamo con il "-t" interruttore.
L'indirizzo di destinazione viene stampato come "192.168.100.2.0", il che significa che il pacchetto è stato inviato alla porta TCP 0 a indirizzo IP 192.168.100.2. Windows non offre servizi sulla porta TCP 0, ma va bene così. Non stiamo in realtà cercando di connettersi al sistema di Windows. Abbiamo solo bisogno di inviare un pacchetto IP in modo da poter verificare il valore IP ID. Se volessimo colpire una porta diversa, potremmo usare hping il "-p" interruttore.
L '"." Dopo la specifica destinazione significa che non sono stati flag TCP trova all'interno del pacchetto. Questo viene definito come un pacchetto nullo e non avrebbe mai verificarsi durante le normali comunicazioni IP. Per questo motivo, NIDS può, NIPS e firewall lo bandiera. Abbiamo creato un pacchetto nullo perché non dire hping inviati a uno qualsiasi dei flag TCP. Per esempio aggiungendo lo switch "-S" avrebbe acceso il flag SYN, "-A" si trasformerebbe sulla bandiera riconoscimento, e così via.
Tutti i nostri pacchetti di prova per i sistemi di Windows è simile a questo. Gli unici valori che cambierebbe è il timestamp (ovviamente), la porta TCP di origine e il valore di checksum CRC.
Ecco cosa le risposte sembrano tornare dal sistema di Windows:
07:22:15.367296 IP (tos 0 × 0, ttl 128, id 108, offset 0, flags [none], proto TCP (6), lunghezza 40) 192.168.100.2.0> 192.168.100.1.2203: R, cksum 0xc431 (corretto), 0:0 (0) ack 918250228 win 0
07:22:16.367453 IP (tos 0 × 0, ttl 128, id 109, offset 0, flags [none], proto TCP (6), lunghezza 40) 192.168.100.2.0> 192.168.100.1.2204: R, cksum 0xfa78 (corretto), 0:0 (0) ack 2127488152 win 0
07:22:17.367763 IP (tos 0 × 0, ttl 128, id 110, offset 0, flags [none], proto TCP (6), lunghezza 40) 192.168.100.2.0> 192.168.100.1.2205: R, cksum 0x2b9f (corretto), 0:0 (0) ack 1611256374 win 0
Il valore importante è l'ID IP, identificato come "id". Nel primo pacchetto è impostato a 108, e poi gli incrementi di valore di +1 per ogni pacchetto successivo (109 poi 110). Finché continuiamo a vedere una sequenza ininterrotta l'ID IP, sappiamo che il sistema Windows non trasmette tutti i pacchetti eccetto quelli che fanno parte di questa sessione.
Sondando una porta chiusa
Ricorda che come parte del nostro scansione, saremo spoofing l'indirizzo IP sorgente del sistema Windows quando porte di destinazione su un sistema remoto. Un cambiamento l'incremento ID IP è quello che ci dice che abbiamo trovato una porta aperta.
Diamo uno sguardo a uno di questi pacchetti in grado di:
10:30:28.852602 IP (tos 0 × 0, ttl 64, id 41256, offset 0, flags [none], proto TCP (6), lunghezza 40) 192.168.100.2.1266> 192.168.100.3.79: S, cksum 0x97a6 (corretto), 1704542340:1704542340 (0) vince 512
Nota l'indirizzo IP di origine è quella del sistema Windows (192.168.100.2). Sappiamo che questo non poteva venire dal sistema Windows ma perché il TTL è impostato a 64. Quindi questo è un pacchetto che abbiamo generato da 192.168.100.1 con una seconda istanza di hping.
Si noti anche che hanno preso di mira la porta TCP 79 e hanno acceso il flag SYN. Ecco la risposta che abbiamo ricevuto dal target remoto:
10:30:28.852839 IP (tos 0 × 0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), lunghezza 40) 192.168.100.3.79> 192.168.100.2.1266: R, cksum 0xbb1a (corretto), 0:0 (0) ack 1704542341 win 0
Notare il valore "R" che ci dice la bandiera ripristino è stato acceso nell'intestazione TCP. Vediamo anche "ack" che ci racconta la bandiera riconoscimento è stato acceso pure. Si tratta di un pacchetto di errore informa la fonte che la porta TCP è in uno stato chiuso. Si noti inoltre che il pacchetto viene trasmesso al sistema Windows dal momento che era l'indirizzo IP sorgente del pacchetto della sonda.
Così come sarà il sistema Windows rispondere? Si può ricordare dal mio ultimo post che la RFC stato non si dovrebbe mai rispondere ad un pacchetto di errore. Anche se il sistema Windows non ha idea di cosa il target sta parlando, verrà tranquillamente scartare questo pacchetto di errore. In altre parole, il sistema Windows non inviare una risposta. Questo significa che dovremmo vedere alcun cambiamento nella incremento IP ID.
Sondando una porta aperta
Ora diamo un'occhiata a cosa succede quando ci bersaglio di una porta che in realtà è in uno stato aperto. Ecco il pacchetto della sonda. Nota è abbastanza simile a quello ultimo, solo che adesso stiamo verificando la porta TCP 80.
10:29:46.947964 IP (tos 0 × 0, ttl 64, id 15249, offset 0, flags [none], proto TCP (6), lunghezza 40) 192.168.100.2.1984> 192.168.100.3.80: S, cksum 0x476b (corretto), 947341260:947341260 (0) vince 512
Ecco la risposta da parte del target. Si noti che vediamo una "S" invece di una "R", il che significa che SYN flag è acceso e non la bandiera reset. Questo è il modo obiettivi di informare la fonte che la porta TCP 80 è aperta e se ha un'applicazione seduto dietro di esso le connessioni di manutenzione.
10:29:46.953333 IP (tos 0 × 0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), lunghezza 44) 192.168.100.3.80> 192.168.100.2.1984: S, cksum 0x0de6 (corretto), 262246932:262246932 (0) ack 947341261 win 5840 <mss 1460>
Così questa volta il sistema Windows riceve un pacchetto dicendo: "Certo, è possibile collegare alla porta TCP 80". Questo è un problema per il sistema di Windows perché non ha voce di connessione dicendo che in realtà tentato di connettersi alla porta 80 sul bersaglio. Senza la voce di connessione, Windows non ha modo di sapere quale applicazione richiesta la sessione. Con questo in mente, lo fa l'unica cosa che può fare: trasmettere un pacchetto ripristinare l'obiettivo di chiudere la sessione. Ecco cosa il pacchetto sembrava:
10:29:46.953439 IP (tos 0 × 0, ttl 128, id 176, offset 0, flags [none], proto TCP (6), lunghezza 40) 192.168.100.2.1984> 192.168.100.3.80: R, cksum 0x5df1 (corretto), 947341261:947341261 (0) win 0
Si noti che Windows timbrato il successivo ID IP disponibili nell'header IP (176). Quindi, se fossimo stati l'incremento di monitoraggio IP ID sul sistema Windows in una sessione diversa, avremmo visto: 173, 174, 175, 177, 178, 179. In altre parole, avremmo visto che mancava 176 (+2 dal pacchetto precedente). Questa sarebbe la nostra indicazione che il TCP/80 sonda inviata verso il bersaglio ha colpito una porta aperta.
Identificare una scansione inattiva
Quindi una scansione inattiva fa un ottimo lavoro di mascherare il vero indirizzo IP sorgente di un port scan. Ciò significa che senza l'accesso per registrare le informazioni sul host di Windows (cosa che non esisterà se l'attacco ha fatto i compiti a casa), non saremo mai in grado di scoprire il vero indirizzo IP di origine dell'attacco.
C'è un modo per raccontare una scansione di inattività è stata eseguita piuttosto che una scansione rettilineo porta avanti in modo da sapere se vale la pena indagare l'indirizzo IP sorgente? Ci sono infatti un paio di indizi possiamo cercare.
Sonda tentativi
Se il sistema mirato è seduto dietro un firewall, si noterà una differenza nel numero di tentativi sonda rispetto a un port scanner normale. Quando qualcuno esegue un normale scanner porta, lo scanner in genere colpire le porte aperte, ma solo una volta le porte firewall più volte. Questo perché le porte firewall di ritorno alcuna risposta. Lo scanner farà diversi tentativi di assicurarsi che i pacchetti non sono solo perdersi. Dato che la porta aperta effettivamente rispondere, solo un pacchetto sonda è necessaria.
Quando una scansione inattiva viene eseguita, è vero il contrario. Se una porta firewall viene sondato non ci sarà alcun incremento IP cambiare ID sul sistema Windows. Quindi, solo un controllo è necessario per confermare questa non è una porta di ascolto attivo. Quando una porta aperta è sondato comunque, faremo rilevare un cambiamento di ID incremento IP del sistema Windows. Anche se pensiamo che questo sia dovuto a noi trovare una porta aperta, potrebbe altrettanto probabilmente perché il sistema Windows ha inviato una trasmissione. Così si desidera eseguire più sonde contro la porta aperta per garantire che i dati IP ID di Windows rimane costante.
Così:
- Sonda firewall le porte il più delle volte le porte aperte = port scanner normale
- Porte sonda aprire più spesso che le porte firewalled = scansione inattiva
Tempismo
Scansioni delle porte normali essere estremamente veloce. Non è raro vedere centinaia di pacchetti di prova al secondo. Con una scansione di inattività però, dobbiamo prendere le cose un po 'più lento. Questo perché dobbiamo controllare l'ID IP spoofing dell'indirizzo, inviare il pacchetto sonda, consentono tempo sufficiente per la sonda di ottenere una risposta, dare al sistema contraffatto tempo sufficiente per rispondere con un reset, se necessario (e quindi utilizzando un ID alto IP ), e quindi controllare l'ID IP per vedere se l'incremento è cambiato.
Tenta di eseguire tutti questi passaggi troppo in fretta, e si pagherà il prezzo in precisione. Per esempio nmap supporta la scansione di inattività con l'opzione "-SI" interruttore. La velocità di scansione estremamente veloce di default funziona bene se tutti i sistemi sono sulla stessa rete commutata. Se i padroni di casa sono 15 hop lontano gli uni dagli altri su Internet però, la mia esperienza è stata la valutazione accuratezza cade notevolmente a meno che non rallentare la velocità di scansione.
Così:
- Centinaia di pacchetti al secondo port scanner = normale
- Una dozzina o meno pacchetti al secondo scan = possibile inattivo, potrebbe essere solo una scansione lenta
TTL campo
Guardiamo di nuovo il pacchetto sonda contraffatti nonché il ripristino risposta legittima inviata dal sistema di Windows:
10:29:46.947964 IP (tos 0 × 0, ttl 64, id 15249, offset 0, flags [none], proto TCP (6), lunghezza 40) 192.168.100.2.1984> 192.168.100.3.80: S, cksum 0x476b (corretto), 947341260:947341260 (0) vince 512
10:29:46.953439 IP (tos 0 × 0, ttl 128, id 176, offset 0, flags [none], proto TCP (6), lunghezza 40) 192.168.100.2.1984> 192.168.100.3.80: R, cksum 0x5df1 (corretto), 947341261:947341261 (0) win 0
Avrete notato il TTL sono lontano gli uni dagli altri. Se entrambi di questi pacchetti ha infatti origine da 192.168.200.2 allora avrebbero entrambi hanno lo stesso valore di partenza TTL. Il fatto che essi sono diversi ci dice che uno di loro è falso.
Se si sta monitorando il perimetro del sistema di destinazione e notare che il SYN e pacchetti di reset hanno differenti valori di TTL, questo è un indizio che potrebbe trattarsi di una scansione inattiva. Ora, come detto prima, è del tutto possibile impostare il TTL a che cosa mai vogliamo nel nostro pacchetto camuffato. Quindi, un attaccante intelligente è semplicemente andando a fissare i loro partenza TTL a 128 per imitare meglio il sistema Windows. Se fanno questo, la vostra unica speranza è che l'attaccante e il sistema Windows sono un diverso numero di salti di distanza. In altre parole, se si vede costantemente i pacchetti SYN con un TTL di 115, ma il ripristino sempre hanno un TTL di 113, si sta probabilmente guardando una scansione di inattività.
Se il TTL coincidono, non possiamo del tutto escludere una scansione inattivo. L'attaccante potrebbe essere solo quella buona.
Così:
- TTL di SYN e RSTS sono coerenti ma che non corrispondono scansione minimo =
- TTLS di SYN e RSTS corrispondere port scanner normale = o smart scanner stand-by
ID valore IP
Il miglior modo per contrassegnare una scansione minimo è sfruttare la stessa cosa l'attaccante usa, cioè il valore di ID IP. Prendere un altro sguardo a queste ultime due pacchetti decodificati. Si noti che l'ID IP nel primo è 15249, ma nel secondo è 176. Se state vedendo una scansione inattiva, noterete i pacchetti resto sempre un ID di IP +2 (stessa cosa l'attaccante vede), ma i pacchetti SYN avrà un valore del tutto indipendenti. L'incremento ID IP nei pacchetti SYN possono essere prevedibili o potrebbe essere casuale. Onestamente non importa. Ciò che conta è che si possono individuare alcuni pattern in ID IP dei pacchetti riposo che non jive con gli ID di IP nei pacchetti SYN.
Così:
- ID IP dei pacchetti SYN e RST sembrano essere legati port scanner = normale
- Incremento ID IP di RST non corrisponde SYN = scansione inattiva
Executive Summary
Spero che ora hanno una migliore comprensione di ciò che sta accadendo sul filo quando un pirata informatico effettua la scansione di inattività. Se ci sono mirati con una scansione di inattività, non siamo in grado di determinare il vero indirizzo IP di origine dell'attaccante. Il meglio che possiamo sperare di ottenere è quello di determinare che la scansione è una scansione inattiva contro una scansione delle porte normali. Ci sono una serie di indizi dicono racconto in pacchetti, il migliore dei quali è il valore ID IP.