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