Nmap Security Scanner
Intro
Ref Guide
Install Guide
Download
Changelog
Book
Docs
Security Lists
Nmap Hackers
Nmap Dev
Bugtraq
Full Disclosure
Pen Test
Basics
More
Security Tools
Pass crackers
Sniffers
Vuln Scanners
Web scanners
Wireless
Exploitation
Packet crafters
More
Site News
Site Search:
Exploit World
Advertising
About/Contact
Credits
Sponsors:
|

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://www.phrack.org/phrack/60/p60-0x0c.txt
|
|