In questo articolo parleremo di come può essere utilizzato Nmap per cercare di evadere i controlli effetuati dai firewall di rete. Nmap ("Network Mapper"), per quei pochissimi che ancora non lo conoscessero, è un "must-have" nel mondo dei SysAdmin e degli esperti di sicurezza. Si tratta di uno strumento free ed open source in grado di effettuare sia attività di network inventory (effettuando il discovery di host e relativi servizi esposti), sia attività di security auditing. Nmap è inoltre disponibile per Linux, Windows e Mac ed è dotato anche di una GUI (Zenmap) e di vari altri tool per il debugging, redirection, correlazione di risultati e packet generation, come Ncat, Ndiff e Nping.
Tecniche di firewall evasion
Con il progredire delle metodologie di attacco e delle tecniche di evasion, sempre più difficili da individuare, il problema di intercettare e gestire i tentativi di intrusione è diventato di fondamentale importanza nel mondo della network security. Le firewall evasion sono tecniche di attacco aventi l'obiettivo di eludere i controlli di firewall e IDS/IPS. Tali tecniche possono interessare anche più livelli della pila ISO/OSI contemporaneamente, secondo quanto riportato ad esempio dal CERT-FI.
Passiamo ora all'analisi dei metodi di evasion utilizzando Nmap.
Packet Fragmentation
Si tratta di un "classico" nel mondo della firewall evasion. Il metodo consiste nel frammentare a livello IP un datagramma e inviare i frammenti in modo non ordinato. Per individuare e bloccare un attacco del genere, un IDS deve prima memorizzare tutti i frammenti, riassemblare l'intero pacchetto IP e analizzarlo. Anche se la maggioranza delle sonde IDS/IPS sono oggi in grado di intercettare e bloccare questo tipo di attacco, potrebbero ancora verificarsi, in alcuni casi, problemi legati alla gestione dell'overlapping dei frammenti o di dati malformati all'interno del payload, nonchè problemi di overhead legati alla necessità di memorizzare tutti i frammenti provenienti da un elevato numero di connessioni contemporanee. Attraverso Nmap, l'attacco viene portato utilizzando l'opzione -f come mostrato in Fig. 1:
Specificare un valore di MTU
Nmap consente di specificare un valore di MTU (Maximum Transmission Unit), ovvero la dimensione massima (in byte) consentita per un pacchetto da trasmettere sul network. Così facendo, il firewall potrebbe essere ingannato dal valore che andremo a specificare manualmente. Con Nmap questo effetto si ottiene applicando l'opzione --mtu, come mostrato in Fig. 2:
Usare una scansione di tipo "Decoy"
L'utilizzo di questa tecnica con Nmap permette di definire una serie di host "esca" (denominati appunto Decoys), da cui inviare pacchetti che avranno quindi IP differenti. In questo modo il firewall si vedrà arrivare pacchetti da vari indirizzi IP e potrebbe non riuscire a determinare da quale di essi è partita la scansione. Resta inteso che i decoy devono essere host reali e online sul network. Per effettuare questo tipo di attacco sono disponibili 2 opzioni in Nmap, la cui sintassi è specificata di seguito:
nmap -D RND:10 [target]
genera un numero random di decoys.
nmap -D decoy1,decoy2,decoy3
Specifica manualmente gli indirizzi IP degli host "esca".
Idle Zombie Scan
Questo metodo consiste nell'utilizzare un altro host per lanciare una scansione e non il proprio. In questo modo il firewall registrerà l'indirizzo IP dell'host "zombie" e non quello della vostra macchina. Per condurre questo tipo di attacco è però necessario individuare host la cui attività sul network sia ridotta al minimo, il che dimostra che non sono utilizzati o presidiati. Per individuare questi "idle hosts" possiamo utilizzare un modulo ausiliario di Metasploit denominato ipidseq, come mostrato in Fig. 4:
ipidseq è l'IPID Sequence Scanner di Metasploit. Questo modulo consente di sondare i sequence number dei pacchetti IP inviati dagli host e classificarli o meno come Idle, in modo tale da poterli poi utilizzare come zombie durante la scansione con Nmap. Dopo aver individuato gli zombie (gli host aventi indirizzi IP 192.168.1.67 e 192.168.1.69 nella figura precedente), possiamo lanciare il comando che avrà la seguente sintassi:
nmap -sI [Zombie IP] [Target IP]
Un esempio viene mostrato nella figura seguente, in cui è stato utilizzato l'IP 192.168.1.69 come zombie host (Fig. 5):
Source port number specification
Attraverso questo metodo, è possibile lanciare una scansione specificando una porta di origine ben definita. Questo tipo di attacco può avere successo quando nella policy del firewall è definita una regola che consente di acccettare indistintamente tutto il traffico proveniente da una certa porta. Tipicamente si usano le porte 53, 20 o 67. Nel nostro esempio, mostrato in Fig. 6, abbiamo utilizzato la 53 e il comando da lanciare ha la seguente sintassi:
nmap --source-port [porta] [target]
Aggiungere dati random
Uno dei meccanismi di inspection usati dai firewall è quello di investigare la dimensione dei pacchetti per identificare un eventuale port scan. Ciò a causa del fatto che tipicamente molti portscanner utilizzano pacchetti aventi dimensioni fisse, il che li caratterizza. Per evadere questo tipo di controllo possiamo usare l'opzione --data-length di nmap per "appendere" ai pacchetti una certa quantità di bytes in modo tale da confondere il firewall con dimensioni "non standard". Nell'esempio mostrato in Fig. 7, abbiamo aggiunto ulteriori 30 bytes ai nostri pacchetti:
MAC Address Spoofing
Tralasciamo la trattazione della tecnica basata sull'opzione -–randomize-hosts, che consente di scansionare gli host in ordine casuale e non sequenziale, di facile comprensione, per passare direttamente a quella che utilizza il MAC Address Spoofing. Il metodo consiste nel cambiare il MAC address della propria scheda di rete ed impostarne un altro, magari di un Vendor ben conosciuto come ad esempio Cisco, Apple, Dell o altri. in questo modo, se sul firewall è attiva una regola di MAC filtering che accetta tutto il traffico solo da determinati Vendor, l'attacco può avere successo. Utilizzando l'opzione --spoof-mac siamo quindi in grado di specificare, oltre ad un MAC address di un determinato vendor, un MAC address scelto in modo randomico, oppure ancora impostare un ben definito MAC address. Di seguito sono mostrati i 3 casi:
–spoof-mac Dell/Apple/3Com/Cisco (Specifichiamo il MAC address di un certo Vendor)
–spoof-mac 0 (Generiamo un mac address random)
–spoof-mac 00:01:02:21:07:AB (Specifichiamo un mac address)
Nell'esempio mostrato in Fig. 8 abbiamo utilizzato un mac address Cisco:
Bad Checksum
Questa tecnica consiste nell'inviare pacchetti con checksum volutamente errati e può essere efficace soprattutto in presenza di firewall non propriamente configurati. L'opzione da utilizzare in questo caso è --badsum, come mostrato in Fig. 9:
Nell'esempio precedente non abbiamo ottenuto risultati, il che dimostra che il firewall è ben configurato.
Conclusioni
Nell'articolo sono state analizzate alcune tecniche di evasion utilizzabili con Nmap. A onor del vero va detto che esse sono efficaci soprattutto in presenza di firewall non propriamente configurati. Per approfondire l'argomento si veda anche quanto accennato all'inizio riguardo al report CERT-FI in merito alle cosiddette Advanced Evasion Techniques (AET) e relative soluzioni proposte dai vari Vendor. Tali tecniche non sono state analizzate perchè, oltre a meritare una trattazione specifica, implicano il confronto tra vari Produttori di Firewall e IDS/IPS, il che esula ovviamente dagli scopi di questo articolo.