Come bypassare i filtri sugli indirizzi IP usati da firewall e
Transcript
Come bypassare i filtri sugli indirizzi IP usati da firewall e
Come bypassare i filtri sugli indirizzi IP usati da firewall e router De Beuckelaer Kristof Articolo pubblicato nel numero 4/2006 della rivista hakin9 Tutti i diritti riservati. E vietato copiare e divulgare l’articolo in forma modificata. Rivista hakin9, Casa editrice Software-Wydawnictwo, via Piaskowa 3, 01-067 Varsavia, Polonia; [email protected] Focus Come bypassare i filtri sugli indirizzi IP usati da firewall e router De Beuckelaer Kristof Grado di difficoltà Il termine spoofing è molto noto nell'ambito della sicurezza informatica e si riferisce a quella particolare situazione in cui una persona o un programma riesce a camuffare un altro programma. Una tecnica simile allo spoofing è il ref-tar spoofing. La tecnica detta di IP smart spoofing è una combinazione di ARP cache poisoning, conversione degli indirizzi di rete e routing. O ggi esiste un nuovo metodo per eseguire uno spoofing di un indirizzo IP grazie ad un programma chiamato ARP-sk, anche se ci sono anche altri strumenti, come per esempio ARP-fillup. Se siete già abbastanza esperti, potete scrivere un semplice script in Perl per automatizzare questo processo e/o usare ARP-sk e ARP-fillup contemporaneamente. Lo spoofing degli IP non è un attacco nuovo ed esistono diversi tool in grado di sfruttarlo. Di seguito, spiegheremo perché il controllo sugli accessi basato sugli IP non è sempre affidabile e perché non dovrebbe mai essere usato in una rete aziendale. La tecnica di IP smart spoofing utilizza una combinazione di ARP cache poisoning, conversione degli indirizzi di rete e routing. Essa non richiede nessuna tecnica particolare. Per prima cosa, in questo articolo incominceremo da zero, in modo da rinfrescarci la memoria su MAC spoofing ed ARP spoofing/cache poisoning, per poi arrivare gradualmente allo smart spoofing. Effetti dello smart spoofing I dispositivi di rete, come i router o i firewall, spesso usano un filtro sugli indirizzi IP di origine. Questi filtri possono essere bypassati da 24 hakin9 Nº 4/2006 qualsiasi computer che si trova sul percorso di rete tra il client autorizzato e il firewall. Per esempio, in molte reti aziendali connesse a Internet attraverso un firewall, sono pochi i computer che possono accedere a Internet direttamente (le informazioni del proxy HTTP o il filtro sull'URL, server di posta, ecc). Allo stesso modo, le applicazioni il cui accesso è riservato a specifici indirizzi IP possono essere violati da qualsiasi computer sul percorso di rete tra un client autorizzato e il server. Questo è il caso di molte applicazioni come Apache ACL, r-commands, NFS, TCP Wrapper, i tool di amministrazione riservata, ecc. Dall'articolo imparerai... • perché il controllo degli accessi in base agli indirizzi IP non è né sicuro né affidabile e perché non dovrebbe mai essere usato in una rete aziendale. Cosa dovresti sapere... • www.hakin9.org le basi dell'ARP spoofing, la conversione degli indirizzi di rete e il routing. Come bypassare i filtri sugli indirizzi IP Tabella 1. Il Frame Ethernet MAC di destinazione MAC di origine Tipo Payload Checksum <<piccola promemoria>> #2 MAC spoofing Il Frame Ethernet Hardware HW addr lth Protocollo P addr lth Opcode Indirizzo di origine hardware Indirizzo di origine protocollo Indirizzo di destinazione hardware Indirizzo di destinazione protocollo Inoltre, anche le regole anti-relay sull'SMTP basate sulla reverse resolution degli indirizzi IP di origine possono essere violate. Eseguendo uno spoofing sull'indirizzo IP di un SMTP relay A, un malintenzionato sul percorso di rete tra A e B, può eseguire un relay dei messaggi attraverso un SMTP relay B, usando un indirizzo email alterato da un dominio di posta su A. Cos'è il protocollo ARP? Il protocollo Address Resolution Protocol (ARP) è un protocollo di rete che fornisce la mappatura tra l'indirizzo del livello di rete e un indirizzo del livello di collegamento. Per esempio, il protocollo ARP viene usato per risolvere un indirizzo IP nell'indirizzo Ethernet corrispondente. Come fa un ARP a risolvere un indirizzo IP in un indirizzo MAC Ethernet? Affinché un protocollo ARP possa risolvere un determinato indirizzo IP in un indirizzo Ethernet, esso deve trasmettere un pacchetto di richiesta ARP. Questo pacchetto di richiesta ARP contiene l'indirizzo MAC di origine, l'indirizzo IP di origine e l'indirizzo IP di destinazione. Ogni host nella rete locale riceverà questo pacchetto. L'host con l'indirizzo IP di destinazione specificato invia un pacchetto di risposta ARP all'host di origine con il suo indirizzo IP. Panoramica delle funzioni di ARP-sk Il protocollo ARP è molto conosciuto, esso permette di eseguire molti at- recuperare quello che c'è oltre, per esempio, uno switch. tacchi anche se quelli più comuni sono limitati allo sniffing. ARP-sk è un software concepito per manipolare le tabelle ARP di qualsiasi strumento. Esso può essere facilmente eseguito inviando i pacchetti appropriati. In sostanza, un messaggio ARP su una rete Ethernet/IP ha 7 parametri importanti (vedere Tabella 1): • • il livello Ethernet fornisce 2 indirizzi (SRC e DST), il livello ARP contiene il codice del messaggio (richiesta OPPURE risposta) e le coppie (ETH, IP) sia per l'origine che la destinazione. Ricordatevi che non è necessario avere una conformità tra il livello ARP e Ethernet. Questo significa tra questi 2 livelli è possibile fornire indirizzi non legati tra loro. <<piccola promemoria>> #1 manipolazioni ARP Manipolazioni ARP o sul come reindirizzare il traffico su una LAN La prima idea che viene in mente per violare una LAN è di impostare l'interfaccia di una rete in modalità promiscua. In questo modo ogni pacchetto che arriva all'interfaccia viene direttamente trasferita dal livello 2 (Ethernet nella maggior parte dei casi) al livello superiore (IP, ARP, DNS...) senza verificare che la corretta destinazione del pacchetto sia realmente quella interfaccia. Sfortunatamente questo metodo è piuttosto limitato perché non è possibile www.hakin9.org MAC spoofing Questo attacco mira al protocollo del livello 2 che nella maggior parte dei casi si tratta di Ethernet. Questo metodo è molto efficace contro gli switch per aggiornare la tabella CAM (Content Addressable Memory), per usare la terminologia Cisco, ed elencare tutti gli indirizzi Ethernet legati alle porte dello switch. Ma alcune volte non è perfetto o sufficientemente efficace. • Se la tabella CAM è statica, la porta della vittima verrà chiusa e l'amministratore verrà allertato. Comunque è da notare che alcuni switch ritornano alla modalità passiva fail open (passano tutti i pacchetti a tutte le porte, proprio come degli hub) in presenza di troppi conflitti. <<piccola promemoria>> #3 ARP spoofing ARP Spoofing Poiché il MAC spoofing non è né efficiente né discreto, passiamo direttamente al livello superiore e al protocollo ARP. In questo caso i messaggi sono scambiati quando un host vuole scoprire un indirizzo MAC di un host remoto. Per esempio, se Batman vuole il MAC di Robin, egli invierà un messaggio di richiesta ARP (Who has? Viene usato Red.ARP per ottenere l'indirizzo Ethernet di un host dall'indirizzo IP. ARP è usato abbondantemente da tutti gli host in una rete Ethernet) all'indirizzo broadcast e Robin risponderà con il proprio indirizzo. Ma cosa succede se Joker risponde prima di Robin? 12:50:31.198300 arp who-has robin dice a batman [1] 12:50:31.198631 risposta arp di robin è -at 0:10:a4:9b:6d:81 [2] Batman inserirà l'indirizzo MAC di Joker nella propria cache ARP. Ma il pacchetto di Batman è stato co- hakin9 Nº 4/2006 25 Focus nuova voce nella cache e vi posizionerà gli indirizzi forniti nel messaggio ARP (vedere Listing 1 e Listing 2). Prima di continuare, forniamo la seguente legenda: Listing 1. Invio di una query Who has [root@joker]# arp-sk -w -d batman -S robin -D batman + Running mode "who-has" + IfName: eth0 + Source MAC: 00:10:a4:9b:6d:81 + Source ARP MAC: 00:10:a4:9b:6d:81 + Source ARP IP : 192.168.1.2 (robin) + Target MAC: 52:54:05:F4:62:30 + Target ARP MAC: 00:00:00:00:00:00 + Target ARP IP : 192.168.1.1 (batman) • • --- Inizia l'invio -To: 52:54:05:F4:62:30 From: 00:10:a4:9b:6d:81 0x0806 ARP Who has 192.168.1.1 (00:00:00:00:00:00) ? Tell 192.168.1.2 (00:10:a4:9b:6d:81) Adesso, quando Batman inizierà una comunicazione con Robin, i pacchetti verranno inviati a Joker senza che Batman faccia niente. Da notare che l'invio di una query ARP in uni-cast è pienamente conforme al RFC. Infatti essi sono autorizzati a lasciare che il sistema verifichi le voci della sua cache. --- batman (00:00:00:00:00:00) statistic --To: 52:54:05:F4:62:30 From: 00:10:a4:9b:6d:81 0x0806 ARP Who has 192.16.1.1 (00:00:00:00:00:00) ? Tell 192.168.1.2 (00:10:a4:9b:6d:81) 1 packets tramitted (each: 42 bytes - total: 42 bytes) munque trasmesso, quindi anche Robin risponderà: 12:50:31.198862 risposta arp di robin è – indirizzo del filtro a cui connettersi -S – indirizzo dell'host fidato dove eseguire lo spoofing -D vittima. Quando un host riceve un who-has, esso si aspetta che verrà eseguita una connessione. Quindi, per minimizzare il traffico ARP, creerà una Aggiornamento di una voce Il metodo usato con l'ARP spoofing è giusto quello che ci serve! L'unica cosa da fare è inviare le risposte -at 52:54:5:fd:de:e5 [3] Nota importante Se il bersaglio da colpire non ha già la voce che l'aggressore vuole imitare, inviare delle risposte sarà inutile poiché la cache non potrà aggiornare una voce non esistente. La cache ARP? ARP salva la mappatura tra l'indirizzo IP e l'indirizzo MAC in una tabella chiamata cache ARP. Le voci di questa tabella sono aggiunte ed eliminate in modo dinamico. ARP Cache poisoning Poiché gli attacchi precedenti presentano dei limiti, la soluzione migliore è quella di manipolare direttamente la cache della vittima, a prescindere dai messaggi ARP inviati dalla vittima stessa. Quindi dobbiamo essere in grado di: • • aggiungere una nuova voce nella cache della vittima aggiornare una voce già esistente Creazione di una nuova voce Per eseguire questa operazione, invieremo una query (Who has?) alla 26 hakin9 Nº 4/2006 Listing 2. Il contenuto della cache di Batman # prima [batman]$ arp -a alfred (192.168.1.3) at 00:90:27:6a:58:74 # dopo [batman]$ arp -a robin (192.168.1.2) at 00:10:a4:9b:6d:81 alfred (192.168.1.3) at 00:90:27:6a:58:74 Listing 3. Metodo di aggiornamento [root@joker]# arp-sk -r -d batman -S robin -D batman + Running mode "reply" + IfName: eth0 + Source MAC: 00:10:a4:9b:6d:81 + Source ARP MAC: 00:10:a4:9b:6d:81 + Source ARP IP : 192.168.1.2 (robin) + Target MAC: 52:54:05:F4:62:30 + Target ARP MAC: 52:54:05:F4:62:30 + Target ARP IP : 192.168.1.1 (batman) --- Inzia l'invio -To: 52:54:05:F4:62:30 From: 00:10:a4:9b:6d:81 0x0806 ARP For 192.168.1.1 (52:54:05:F4:62:30) 192.168.1.2 is at 00:10:a4:9b:6d:81 --- batman (52:54:05:F4:62:30) statistic --To: 52:54:05:F4:62:30 From: 00:10:a4:9b:6d:81 0x0806 ARP For 192.168.1.1 (52:54:05:F4:62:30): 192.168.1.2 is at 00:10:a4:9b:6d:81 1 packets tramitted (each: 42 bytes - total: 42 bytes) www.hakin9.org Come bypassare i filtri sugli indirizzi IP ARP a Batman con l'IP di Robin ma con l'indirizzo MAC di Joker. Quindi, anche se la voce è già presente nella cache di Batman, essa verrà aggiornata dalle informazioni di Joker: [batman]$ arp -a robin (192.168.1.2) at 52:54:05:fd:de:e5 alfred (192.168.1.3) at 00:90:27:6a:58:74 Ed ora, viene aggiornata con questo metodo (vedere Listing 3). Ed ora, analizziamo i risultati: Fig. 1: Attacco di tipo Man in the Middle [batman]$ arp -a robin (192.168.1.2) at 00:10:a4:9b:6d:81 alfred (192.168.1.3) at 00:90:27:6a:58:74 Gli attacchi disponibili A questo punto, dopo le necessarie preparazioni, siamo pronti per iniziare ad interferire nella comunicazione tra Batman e Robin. Analizziamo meglio i possibili tipi di attacco. Sniffing Il modo più ovvio e divertente per lanciare un attacco di sniffing è il Man in the Middle. Fig. 2: Proxying Proxying e hijacking A questo punto siamo in grado di reindirizzare il traffico come farebbe un proxy trasparente con i flussi applicativi. Il livello IP (o qualsiasi altro programma) deve semplicemente prendere i dati all'applicazione appropriata, anche se l'host di destinazione non è quello giusto. Per esempio, Joker vuole modificare alcuni input in una transazione HTTP tra Batman e Robin: [root@joker]# iptables -t nat -A PREROUTING -p tcp -s robin -d batman --dport 80 -j REDIRECT --to-ports 80 Joker deve semplicemente impostare un proxy HTTP sulla porta 80 e poi, può alterare tutti i dati. Inoltre, se esiste una qualche forma di verifica dell'integrità (come CRC32, MD5 o SHA-1 per esempio), Joker potrà Fig. 3: Smartspoofing ricalcolare i checksum prima di rinviare il tutto. I limiti di questa operazione sono legati allo strumento che usiamo per gestire i dati. Per esempio, se Joker possiede una parte di un sito remoto HTTP sul proprio server HTTP, ma alcune parti sono parzialmente modificate. Le query alle parti non modificate so- www.hakin9.org no inoltrate direttamente al sito reale. La seguente figura mostra quando le manipolazioni precedenti sono configurate in questo modo: [root@joker]# arp-sk -r -d robin -S batcave-gw -D robin [root@joker]# arp-sk -r -d batcave-gw -S robin -D batcave-gw hakin9 Nº 4/2006 27 Focus [root@joker]# arp-sk [root@joker]# iptables -r -d batman -S batcave-gw -D batman -t nat -A POSTROUTING [root@joker]# arp-sk -j SNAT --to 192.168.1.2 -r -d batcave-gw -S batman -D batcave-gw [...] Joker invierà dgli ICMP Redirect alle stazioni infette. Per evitarlo, dobbiamo bloccarle. Con Linux, possiamo farlo attraverso IP sysctl: Denial of service Un attacco di tipo denial of service è veramente molto facile da eseguire con i messaggi ARP. Basta abbandonare tutti i pacchetti che sono stati re-indirizzati: [root@joker]# iptables [root@joker]# echo 0 > /proc/sys/net/ipv4/conf/ all/send_redirects Bypassare i firewall (smartspoofing) Con la ARP cache poisoning, l'utente malintenzionato inserisce il suo computer nel percorso di comunicazione server-client. Con l'invio dell'IP, il traffico esistente è ancora indirizzato al lato client. Naturalmente, l'ICMP redirect è stato disabilitato sul computer del malintenzionato. Infine, l'utente malintenzionato usa la conversione di indirizzi di rete di origine per violare l'indirizzo IP del client e stabilire una nuova connessione al server. A questo punto, l'aggressore può eseguire una qualsiasi applicazione di rete per connettersi al server usando l'indirizzo IP del client. Qualsiasi controllo sugli accessi in base all'indirizzo IP del client sarà inutile. Inoltre, il traffico esistente non ne è disturbato e, dal lato server, l'attacco di smartspoofing non può essere rilevato. Imitando un host sulla rete e intercettando una connessione, possiamo bypassare il firewall con le regole applicate per un host falsato. Per fare questo, Joker non deve eseguire un doppio re-indirizzamento (ARP MiM) come nel caso precedente: [root@joker]# arp-sk -r -d batcave-gw -S robin -D batcave-gw L'uso di Linux per perpetrare l'attacco, semplifica notevolmente la procedura poiché la funzionalità Netfilter NAT selezionerà i pacchetti che appartengono alle nostre connessioni e quelli che non appatengono in modo automatico: 28 hakin9 Nº 4/2006 -A FORWARD -s robin -d batman -j DROP Se si preferisce non reindirizzare il traffico alla propria casella, è possibile anche creare un buco nero ARP, inviando pacchetti a indirizzi MAC non utilizzati. [root@joker]# arp-sk -r -d robin -S batman --rand-arp-hwa-src -D robin A questo punto Robin crederà che Batman sia morto. Conclusioni Grazie ai problemi di sicurezza relativi al protocollo ARP e all'attacco smartspoofing che ne consegue, i controlli di accesso che si basano sugli indirizzi IP di origine possono essere violati in molti modi. Quando si inviano risposte ARP falsate, la maggior parte delle reti IDS che ascoltano sulle porte dello switch hub, riesce a rilevare un indirizzo IP duplicato, ma non riesce a bloccare l'attacco. Inoltre, questo approccio dovrebbe richiedere l'uso di numerosi NIDS su molte reti. Un altro approccio potrebbe usare un IDS basato sull'host per rilevare i messaggi ARP e mantenere la conformità con la tabella ARP. Arpwatch, disponibile su molte piattaforme UNIX, riesce a mantenere un database di indirizzi MAC Ethernet visti in rete insieme alle loro coppie IP. Questo strumento invia un messaggio e-mail all'amministratore di sistema avvertendolo di eventuali cambiamenti, tra cui una nuova attività, flip-flop, indirizzi modificati o riutilizzati, ecc. Infine, un controllo sugli accessi veramente affidabile dovrebbe usare www.hakin9.org Cenni sull'autore Questo articolo è stato scritto da Kristof De Beuckelaer che studia e vive in Belgio. Il suo interesse riguardante la sicurezza informatica è iniziato da quando ha incominciato a sperimentare e leggere Linux, a sfruttare e risolvere i problemi di sicurezza e a lavorare sul networking. Da circa 4, 5 anni, è attivamente coinvolto in diversi gruppi di utenti, compresi quelli che si dedicano alla scrittura di codice e script, sia per Windows che Linux. È entrato in contatto con Linux per la prima volta attraverso una terminal session e da quel giorno l'esperienza non si è mai conclusa, fino a dare alla luce il suo primo e personale sistema operativo auto-costruito in Linux. Al momento, sta continuando a studiare per trasformare il suo grande hobby in lavoro e per diventare un ingegnere nell'ambito della Sicurezza, dello sviluppo dei software e del Networking. Ringraziamenti Vorrei ringraziare Laurent Licour & Vincent Royer per aver sviluppato la nuova tecnica di smartspoofing, le cui informazioni hanno costituito la base per la redazione di questo articolo. una autenticazione forte invece dell'identificazione di un indirizzo IP di origine o autenticazione di password in testo semplice. I protocolli VPN come SSH, SSL o IpSec possono migliorare enormemente la sicurezza attraverso l'autenticazione, l'integrità dei dati e la segretezza. Infine esistono un paio di modi che offrono una protezione migliore contro questi attacchi, tra cui un metodo di rilevamento che duplica gli indirizzi MAC su uno switch (ARPwatch per esempio) e/o abilita un sticky ARP. Questo eviterà che i terminali possano modificare l'indirizzo MAC, ma è richiesto un lavoro amministrativo potenzialmente elevato. Vi ringrazio per aver letto questo articolo. Sarò lieto di rispondere alle vostre domande nel mio forum sul sito (http://www.hakin9.org/). l