Home page logo
/
Intro Reference Guide Book Install Guide
Download Changelog Zenmap GUI Docs
Bug Reports OS Detection Propaganda Related Projects
In the Movies In the News

Sponsors


Nmap Network Scanning

Bypassing e Spoofing di Firewall e Intrusion Detection System (Firewall/IDS Evasion and Spoofing)

Tanti pionieri dell'epoca di Internet immaginarono una rete globale aperta con uno spazio di indirizzi IP universale, che potesse consentire connessioni virtuali tra qualsiasi coppia di nodi. Questo permette ad ogni host di diventare allo stesso tempo fruitore e fornitore di informazioni da e per l'altro. Chiunque poteva accedere dal lavoro a tutti i propri sistemi di casa, regolando il termostato o aprendo la porta per un visitatore che dovesse arrivare in anticipo. Questa visione di connettivita` universale e` stata soffocata da carenze nello spazio di indirizzamento e da preoccupazioni legate alla sicurezza. Nei primi anni novanta le compagnie iniziarono a sviluppare firewall con lo scopo di ridurre la connettivita`. Enormi reti vennero tagliate fuori dall'Internet non filtrato da application proxy, NAT (Network Address Translation) e packet filter (filtri di pacchetto). Il flusso incontrollato delle informazioni lascio` il posto a regole stringenti sui canali di comunicazione approvati e sul contenuto che puo` transitare su di essi.

Ostruzioni di rete come i firewall possono rendere la stesura della topografia di una rete un lavoro fin troppo difficile. E non migliorera` mai, perche` limitare le differenze che permettono di distinguere tra un apparecchio e un altro e` spesso lo scopo primario nella loro costruzione. Nondimeno, Nmap offre molte caratteristiche che possono aiutare a capire tali reti complesse e a verificare che i filtri impostati stiano funzionando come previsto. Nmap include anche meccanismi per effettuare il bypassing di difese poco robuste o mal implementate. Uno dei migliori metodi per capire quant'e` sicura la propria rete e` proprio il cercare di forzarla. Mettetevi nei panni di un attaccante, e usate le tecniche spiegate in questa sezione contro le vostre reti. Lanciate una scansione "FTP bounce", un "Idle scan", un "fragmentation attack", o provate a entrare attraverso uno dei vostri proxy.

In aggiunta alle restrizioni delle attivita` di rete, le aziende stanno sempre piu` tenendo sotto controllo il traffico con sistemi anti-intrusione (IDS). La maggior parte di questi IDS e` configurato per accorgersi di una scansione di Nmap di default, poiche` molto spesso l'attacco segue direttamente la scansione. Molti di questi strumenti inoltre si sono evoluti in sistemi di prevenzione delle intrusioni (IPS, "intrusion prevention systems") che bloccano attivamente tutto il traffico che potrebbe essere nocivo. Sfortunatamente per gli amministratori di rete e per i produttori di IDS, pero`, rilevare cattive intenzioni analizzando semplicemente i dati contenuti nei pacchetti e` un problema difficile. Un attaccante con una buona dose di pazienza, talento e l'aiuto di alcune opzioni di Nmap puo` generalmente scavalcare un IDS senza esser visto. Allo stesso tempo un amministratore ha a che fare con molti falsi positivi dovuti ad intenzioni legittime che vengono erroneamente bloccati o per i quali scattano allarmi.

Ogni tanto qualcuno suggerisce che Nmap non dovrebbe fornire opzioni per bypassare regole di firewalling o per sgusciare oltre agli IDS. Essi asseriscono che queste caratteristiche sono usate piu` facilmente da attaccanti piuttosto che da amministratori attenti alle problematiche di sicurezza. Il problema con questo tipo di ragionamento e` che tali metodi verrebbero comunque usati da attaccanti che potrebbero semplicemente usare altri strumenti o modificare Nmap per fare cio` che desiderano. E intanto un amministratore si troverebbe a non aver strumenti per poter fare il proprio lavoro correttamente. Sviluppare solo server FTP moderni e con tutte le patch installate e` un approccio molto migliore al voler bloccare lo sviluppo e la distribuzione di strumenti che usano l'attacco "FTP bounce".

Non esiste alcuna bacchetta magica (o opzione di Nmap) per riconoscere o bypassare un firewall o un sistema anti-intrusione. E` un'attivita` che richiede talento ed esperienza. Una guida completa esula dagli intenti di questa guida di riferimento, la quale elenca solo le opzioni rilevanti e descrive cio` che fanno.

-f (frammenta i pacchetti); --mtu (usando l'unita` di trasmissione minima specificata - "MTU")

L'opzione -f obbliga la scansione (anche i "ping scan") a usare pacchetti IP frammentati. L'idea di base e` quella di frammentare l'header TCP su piu` pacchetti, in modo da rendere piu` difficile per un packet filter, per un IDS o per altri fastidiosi strumenti simili il compito di capire cosa sta succedendo. Si presti comunque la massima attenzione nell'uso di questa opzione! Alcuni programmi hanno difficolta` a gestire pacchetti di dimensione troppo piccola. Il vecchio tool "Sniffit" andava in segmentation fault non appena riceveva il primo frammento. Specificando questa opzione una volta Nmap dividera` i pacchetti in piccoli insiemi di al piu` 8 byte ciascuno, inserendoli dopo l'header IP. In questo modo un header TCP di 20 byte verra` diviso in tre pacchetti: due con otto byte ciascuno e uno con i rimanenti quattro. E ovviamente ogni frammento avra` un header IP. Specificando di nuovo l'opzione -f si useranno insiemi di 16 byte (riducendo cosi` il numero di frammenti). In alternativa si puo` indicare lo spiazzamento ("offset") desiderato mediante l'opzione --mtu. Non si usi l'opzione -f se si e` usato --mtu. Lo spiazzamento dev'essere un multiplo di 8. Nonostante i pacchetti frammentati non supereranno i packet filter e i firewall che mantengono una coda di tutti i frammenti IP (come ad esempio le macchine GNU/Linux che hanno l'opzione CONFIG_IP_ALWAYS_DEFRAG impostata nel kernel), alcune reti tuttavia non possono permettersi il calo di performance causato da troppi frammenti e pertanto non avranno quell'opzione abilitata. Altri ancora non possono abilitare quell'opzione perche` i frammenti potrebbero prendere direzioni differenti una volta all'interno. Alcuni sistemi di origine dei dati deframmentano i pacchetti in uscita nel kernel. Linux con il modulo ip_conntrack ("connection tracking module") e` uno di questi. Si raccomanda di effettuare la scansione mentre un packet sniffer (come Ethereal) sta girando, in modo da avere la certezza che i pacchetti inviati vengono effettivamente frammentati. Se il proprio sistema operativo dovesse causare problemi in questo, si usi l'opzione --send_eth per bypassare il livello IP ed inviare direttamente frame Ethernet sul cavo.

-D <decoy1 [,decoy2][,ME],...> (Maschera una scansione utilizzando esche - "decoy scan")

Quest'opzione invoca una "decoy scan" (ovvero una scansione utilizzando esche) che agli occhi dell'host di destinazione apparira` come se provenisse dagli host specificati come decoy. In questo modo l'IDS della rete bersaglio mostrera` 5-10 port scan provenienti da indirizzi IP singoli, e non potra` capire quale IP e` veramente la sorgente dell'attacco e quale IP e` usato solo come mascheramento. Nonostante quest'opzione possa essere resa inutile mediante il tracciamento del percorso fatto dai router ("router path tracing"), tecniche di response-dropping e altri meccanismi attivi sono generalmente una tecnica effettiva per nascondere il proprio indirizzo IP.

Separando gli host decoy con una virgola e` possibile usare il parametro ME come uno dei decoy per rappresentare la posizione del proprio indirizzo IP. Se si pone il parametro ME nella sesta posizione o ancora oltre, alcuni sensori di port scan (come l'eccellente "scanlogd" di Solar Designer) difficilmente mostreranno il vostro indirizzo IP. Se non si dovesse usare il parametro ME, Nmap mettera` il vostro IP in una posizione a caso.

Si noti che gli host che vengono usati come decoy dovrebbero essere attivi o si corre il rischio di creare un "SYN flood" verso il proprio obbiettivo. Inoltre diventerebbe molto facile capire quale host e` la causa della scansione, se solo uno e` attivo in una rete. E` consigliabile usare indirizzi IP al posto di nomi, per evitare che la rete dei decoy individui i propri tentativi di risoluzione dei nomi nei log dei propri DNS.

I decoy vengono usati sia nel "ping scan" iniziale (indipendentemente dal fatto che si usi ICMP, SYN, ACK, eccetera) sia durante la fase di port scanning effettiva. Infine i decoys vengono usati durante la "Operating System Detection" remota, specificabile con l'opzione -O). L'utilizzo dei decoy non e` valido con scansioni di tipo "version detection" o scansioni di tipo TCP connect().

Inutile ricordare che l'uso di troppi decoy puo` rallentare la propria rete e potenzialmente renderla meno accurata. Inoltre, alcuni ISP ("Internet Service Providers") potrebbero filtrare i pacchetti "spoofed" (falsificati), anche se molti non operano alcun tipo di azione su questi ultimi.

-S <IP_Address> (falsifica l'indirizzo sorgente - "spoof source address")

In talune circostanze Nmap potrebbe non essere in grado di determinare il proprio indirizzo sorgente (in questi casi Nmap avvertira` della problematica). Se cosi` fosse si puo` usare l'opzione -S seguita dall'indirizzo IP dell'interfaccia che si vuole usare per inviare pacchetti.

Un altro possibile uso di quest'opzione potrebbe essere per falsificare ("spoof") la scansione per far credere al bersaglio che qualcun altro li sta prendendo di mira e sta effettuando una scansione su di loro. Si immagini solo cosa potrebbe succedere se un'azienda si accorgesse di essere preda di port scan da parte dei propri concorrenti! L'opzione -e e` in genere richiesta per questo particolare utilizzo, e si consiglia anche di usare -P0.

-e <interface> (Usa l'interfaccia di rete specificata - "use specified interface")

Indica a Nmap che interfaccia di rete usare per inviare e ricevere pacchetti. Nmap dovrebbe essere in grado di capire autonomamente quale usare, ma nel caso non sia possibile vi avvertira`.

--source-port <portnumber>; -g <portnumber> (Effettua uno spoof del numero di porta di origine)

Un errore di configurazione sorprendente comune e` quello di fidarsi del traffico di rete basandosi solo sulla porta di origine. E` facile capire come puo` succedere: un amministratore configura un firewall nuovo fiammante per poi ritrovarsi sommerso dalle lamentele degli utenti ingrati le cui applicazioni hanno smesso di funzionare. Ad esempio le query DNS possono non funzionare piu` perche` le risposte (sotto forma di pacchetti UDP) provenienti da server esterni non possono piu` entrare nella rete. Anche l'ftp e` un esempio piuttosto comune: nei trasferimenti di dati attivi (opposti a quelli di tipo "passive ftp") il server remoto cerca di stabilire una connessione diretta con il client per trasferire i file richiesti.

Esistono soluzioni sicure a questi problemi, spesso nella forma di proxy a livello di applicazione o moduli del firewall che fanno parsing del protocollo. Sfortunatamente ci sono anche soluzioni facili ma insicure. Ad esempio, notando che le risposte alle query DNS arrivano dalla porta 53 e i transfer ftp "active" provengono dalla porta 20, tanti amministratori cadono nella trappola di lasciar passare il traffico proveniente da queste porte. Essi assumono spesso che nessun attaccante potrebbe accorgersi di questi buchi di sicurezza e appprofittarne. In altri casi un amministratore puo` considerare questa soluzione una misura temporanea fino a quando non implementera` una soluzione migliore e piu` sicura. E poi si dimentica di farlo.

Gli amministratori di rete con troppe cose da fare non sono gli unici a cadere in questa trappola. Molti prodotti sono venduti con queste regole insicure; anche Microsoft e` colpevole. I filtri IPSec parte di Windows 2000 e Windows XP contengono una regola implicita che permette il passaggio di tutto il traffico proveniente dalla porta 88 (Kerberos). Un altro caso ben conosciuto e` quello di Zone Alarm Personal Firewall (fino alla versione 2.1.25: esso permetteva l'ingresso nel sistema a qualsiasi pacchetto UDP che avesse come porta di origine la 53 (DNS) o 67 (DHCP).

Nmap offre le opzioni (equivalenti) -g e --source-port per sfruttare queste debolezze. Basta fornire un numero di porta e Nmap mandera` pacchetti da questa porta quando possibile. Tuttavia Nmap deve usare numeri di porta diversi per alcuni test di OS detection perche` essi funzionino a dovere, e le richieste DNS ignorano l'opzione --source-port poiche` Nmap si appoggia alle librerie di sistema per gestirle. La maggior parte delle scansioni TCP, incluse le scansioni SYN e UDP, supportano quest'opzione.

--data-length <number> (Aggiunta di dati random ai pacchetti inviati)

In genere Nmap invia pacchetti nella dimensione piu` piccola possibile, contenenti soltanto l'header (intestazione). Quindi i pacchetti TCP sono in genere di 40 bytes e le richieste ICMP echo di 28 bytes. Quest'opzione indica a Nmap di aggiungere un certo numero di bytes casuali a quasi tutti i pacchetti che invia. I pacchetti di OS detection tuttavia non vengono modificati, perche` la precisione in essi richiede una certa consistenza nell'invio dei probe; in ogni modo quasi tutte le opzioni di ping e portscan supportano questa modalita`. Essa rallenta leggermente le performance ma puo` risultare in una scansione piu` accurata.

--ttl <value> (Imposta il campo IP time-to-live)

Imposta il campo time-to-live (tempo di vita del pacchetto IPv4) al valore richiesto.

--randomize-hosts (Rimescola l'ordine degli host bersaglio)

Quest'opzione indica a Nmap di rimescolare l'ordine di scansione di ogni gruppo di host (fino a 8096) prima di iniziare la scansione. Questo puo` nascondere le scansioni a vari sistemi di network monitoring, specialmente quando e` affiancato a opzioni di rallentamento ("slow timing"). Se si desidera un random su gruppi di dimensione maggiore, e` necessario incrementare la direttiva PING_GROUP_SZ in nmap.h e ricompilare l'applicativo. Una soluzione alternativa potrebbe essere quella di generare una lista degli IP sui quali effettuare lo scan mediante un list scan (opzione -sL -n -On <filename>), randomizzarla con uno script Perl e passare la lista a Nmap con l'opzione -iL.

--spoof-mac <mac address, prefix, or vendor name> (Effettua uno spoof dell'indirizzo hardware (MAC))

Richiede a Nmap di usare l'indirizzo hardware (mac) per tutti i frame ethernet raw che invia. Quest'opzione implica --send-eth per garantire che Nmap invii di fatto pacchetti a livello ethernet. Il MAC puo` essere specificato in vari formati: nel caso in cui sia la stringa 0, Nmap sceglie un MAC completamente random per la sessione. Se la stringa e` un numero pari di simboli esadecimali (con le coppie separate eventualmente dal simbolo di due punti), Nmap usera` questo come MAC. Se dovessero essere specificate meno di 12 cifre decimali, Nmap riempira` il resto dei 6 bytes con valori casuali. Se l'argomento non e` uno zero (0) o una stringa esadecimale, Nmap cerchera` nel file nmap-mac-prefixes per cercare il nome di un produttore contenente la stringa indicata (senza distinguere tra maiuscole e minuscole). Se trova una corrispondenza, Nmap usera` la parte OUI del produttore (il prefisso di 3 bytes) e riempira` i restanti 6 bytes in maniera casuale. Esempi validi dell'uso di --spoof-mac sono Apple, 0, 01:02:03:04:05:06, deadbeefcafe, 0020F2, e Cisco.

--badsum (Invia pacchetti con checksum TCP/UDP non valido)

Richiede a Nmap di usare un checksum TCP o UDP non valido per i pacchetti inviati alla macchina di destinazione. Poiche` teoricamente tutti gli stack IP degli host finiranno per ignorare questi pacchetti, qualunque risposta ricevuta dovra` per forza provenire da un firewall o da un Intrusion Detection System (IDS) che non si preoccupa di verificare il checksum. Per maggiori informazioni su questa tecnica, si consulti http://nmap.org/p60-12.txt

[ Nmap | Sec Tools | Mailing Lists | Site News | About/Contact | Advertising | Privacy ]
AlienVault