ARP SPOOFING - Papaleo Gianluca ARP spoofing è un attacco che può essere effettuato solo dall interno di una rete locale o LAN (Local Area Network). Questa tecnica si basa su alcune caratteristiche di ARP (Address Resolution Protocol), e proprio a ciò si deve il nome dell attacco. Per meglio capire come funziona l ARP spoofing occorre spiegare brevemente come funziona ARP. Funzionamento di ARP ARP è il protocollo utilizzato per conoscere e diffondere all interno di una rete locale, il MAC address di una macchina che ne fa parte. Ad ogni macchina, facente parte di una qualsiasi rete, oltre ad un IP address di 32 bit, viene assegnato un indirizzo fisso di 48 bit che la contraddistingue all interno della rete, il MAC address o ethernet address. Ogni macchina ha una ARP table nella quale sono memorizzate coppie del tipo [indirizzo IP MAC address]. Questa tabella non è persistente nel tempo, quindi le entries nella table relative a MAC address non utilizzati frequentemente vengono cancellate. Qualora la macchina A debba spedire dati alla macchina B (entrambe le macchine risiedono ovviamente sulla stessa LAN) e la entry nella ARP table di A relativa alla macchina B è stata tolta o non ancora inserita, il protocollo Address Resolution inizia. La macchina A, quindi, invia su tutta la rete locale delle domande ARP request per cercare la macchina B (l ARP request della macchina A contiene il MAC address di A e l IP address della macchina B): ciò che viene effettivamente fatto è un broadcast di un pacchetto ARP request. Quando la richiesta arriva alla macchina B, quest ultima invierà un ARP reply alla macchina A contenente il proprio MAC address. Ricevuto l ARP reply, la macchina A aggiornerà la propria ARP table, inserendo la coppia [IP address B MAC address B] Illustriamo il concetto con tcpdump: 192.168.1.1 vuole mandare un icmp echo a 192.168.1.254: # ping -c 1 192.168.1.254 PING 192.168.1.254 (PING 192.168.1.254): 56 octets data 64 octets from 192.168.1.254: icmp_seq=0 ttl=255 time=3.0 ms tcpdump : 19:29:23.217004 0:10:a4:c0:15:92 ff:ff:ff:ff:ff:ff 0806 42: arp who-has 192.168.1.254 tell 192.168.1.1 19:29:23.217563 0:80:c8:7a:39:14 0:10:a4:c0:15:92 0806 64: arp reply 192.168.1.254 is-at 0:80:c8:7a:39:14 19:29:23.217608 0:10:a4:c0:15:92 0:80:c8:7a:39:14 0800 98: 192.168.1.1 > 192.168.1.254: icmp: echo request (DF) 19:29:23.218351 0:80:c8:7a:39:14 0:10:a4:c0:15:92 0800 102: 192.168.1.254 > 192.168.1.1: icmp: echo reply
il primo pacchetto è "dite a 192.168.1.1 il mac di 192.168.1.254". E' un pacchetto broadcast (ff:ff:ff:ff:ff:ff) perché sta cercando l'host. L' host risponde con un pacchetto unicast dicendo "192.168.1.254" si trova all'indirizzo 0:80:c8:7a:39:14. A questo punto puo' essere mandato il pacchetto ICMP. Se ora viene mandato un altro ICMP a 192.168.1.254 non ci sarà un'altra richiesta ARP. Come si può notare ARP manca totalmente di qualsiasi forma di controllo. Considerando solo il funzionamento di ARP, si osserva, invece, che ARP è veloce e svolge bene il suo compito, delegando ai protocolli dei layer superiori eventuali controlli. Campi modificati dallo spoof in un pacchetto ARP In cosa consiste veramente l ARP spoofing? Si esamini il formato di un pacchetto ARP, riportato in figura. Normalmente se si è su di una macchina con indirizzo IP 123.123.123.123 il cui MAC address è EEEEEE, e si inviano dei dati, nel pacchetto ARP che verrà inviato i cambi sender IP address e sender ethernet address conterranno i seguenti valori: sender IP address = 123.123.123.123 sender MAC address = EEEEEE Si supponga, in seguito, di volere intercettare i pacchetti destinati alla macchina con IP address 123.123.123.213 e MAC address CCCCCC. Per fare ciò il nemico invierà un pacchetto ARP request con i campi sender ethernet address e sender IP address contenenti i seguenti valori:
sender MAC address = EEEEEE sender IP address = 123.123.123.213 L attaccante non ha fatto altro che sostituire il proprio indirizzo IP con quello della macchina da spoofare. ARP spoofing su LAN Si esamini ora l ARP spoofing su di una LAN con interfacce ethernet. Si specifica che l ARP spoofing è un attacco effettuato solo ed esclusivamente se la LAN è una rete ethernet: in caso di altri tipi di rete, come i token ring ad esempio, le schede di rete vengono poste a priori in modalità promiscua, e quindi viene a cadere il discorso che si sta tenendo. E possibile distinguere due casi di ARP spoofing su di una LAN: a) LAN con HUB b) LAN con SWITCH a) LAN con HUB Un HUB lavora a layer 1 del modello ISO/OSI: qualora riceva un pacchetto su una porta, l HUB lo invierà a tutti i dispositivi ad esso collegati. I dati viaggiano lungo il cavo ethernet. Quando il pacchetto giunge all interfaccia ethernet, questa ne controlla l intestazione per verificarne il destinatario. Il vero e proprio controllo si basa sul confronto del MAC address del destinatario del pacchetto ed il proprio MAC address. Agendo in questo modo la scheda si comporta come un filtro hardware, lasciando arrivare ai layer superiori solo i pacchetti destinati alla macchina di cui è la scheda ethernet. Schede ethernet in modalità promiscua Ponendo la scheda ethernet in modalità promiscua si elimina la sorta di filtro hardware cui si è accennato poco sopra: ogni pacchetto che viaggia sulla LAN può essere analizzato e registrato. Così facendo si permette al kernel del sistema operativo che si usa di ricevere tutti i pacchetti che viaggiano sulla rete e di gestirli anche se non sono destinati ad esso. Utilizzando un programma di analisi del traffico di rete (sniffer) è possibile catturare tutti i pacchetti (o solo quelli ritenuti interessanti): può accadere che alcuni dei pacchetti prelevati indebitamente dalla LAN contengano dati sensibili. Poiché un attacco effettuato in questo modo non compie alcuna azione nociva, è praticamente impossibile capire se su di una LAN è presente una scheda ethernet in modalità promiscua: basti pensare che uno sniffer è, fondamentalmente, uno strumento di analisi del traffico e non compie alcuna azione attiva. Esistono, comunque, delle possibilità di rilevare la presenza di questi sniffer (e quindi di una scheda di rete in modalità promiscua) in una LAN; tali possibilità si basano su alcune funzionalità ed interpretazioni del kernel del
sistema operativo, in particolar modo di un sistema operativo unix like. Questi metodi sono: i) uso di PING modificato ii) TCP SYN modificato iii) analisi (lecita) del traffico della LAN verso il DNS di riferimento Scoperta di schede in modalità promiscua v Uso di PING modificato: l uso di PING modificato è una tecnica di riconoscimento nella quale viene utilizzato il fatto che una scheda di rete in modalità promiscua non usa il filtro hardware per la gestione dei pacchetti che abbiano un MAC address di destinazione diverso dal proprio. Spedendo un pacchetto ICMP ECHO REQUEST (ping) con un MAC address di destinazione inesistente (si è autorizzati a modificare queste informazioni in veste di amministratori della LAN) la macchina con scheda ethernet in modalità promiscua risponderà alla nostra richiesta di PING in quanto non scarterà il pacchetto. Per capire meglio quanto detto si consideri il seguente esempio: Macchina R: MAC address: 34-67-23-45-4f-45 IP:192.168.0.1 Macchina N: MAC address: 34-67-23-45-4f-46 IP:192.168.0.2 Macchina A: MAC address: 34-67-23-45-4f-47 IP:192.168.0.3 La macchina R invia un pacchetto ICMP ECHO REQUEST alla macchina A, il pacchetto ha IP address: 192.168.0.3, con MAC address di destinazione errato: 34-67-23-45-01-01. Il pacchetto viene scartato dal filtro hardware della scheda di rete, poiché il MAC address non corrisponde con quella della scheda NIC, per cui non si riceverà nessuna risposta. La macchina R invia un pacchetto ICMP ECHO REQUEST alla macchina N, il pacchetto ha IP address: 192.168.0.2, con MAC address di destinazione errato: 34-67-23-45-01-01. La macchina N risponde con un ICMP ECHO REPLY e questo vuol dire che ha la scheda di rete posta in modalità promiscua.
v Uso di TCP/SYN modificato: la tecnica dell uso di TCP SYN modificati consiste nell inviare un pacchetto TCP SYN su di una porta molto alta (ad esempio la porta 54321). Inviando questo tipo di pacchetto è possibile ottenere due tipi di risposte: i) SYN/ACK se la porta richiesta è in listening (ossia attende connessioni) ii) RST se la porta è chiusa Se la macchina alla quale inviamo questo pacchetto TCP SYN è una macchina che non ha una scheda di rete in modalità promiscua riceveremo da essa un pacchetto di tipo RST. v Analisi del traffico verso il DNS: molti sniffer utilizzano spesso il DNS per risolvere l indirizzo IP dei pacchetti che vedono sulla LAN. Se il DNS viene consultato più del solito, allora questo inusuale traffico verso il DNS potrebbe essere un sintomo della presenza di uno sniffer (e quindi di una scheda ethernet in modalità promiscua) sulla LAN. Prevenzione E possibile prevenire in un certo qual modo l uso di ARP spoofing all interno di una LAN che usa un HUB. Una prima difesa consiste nell uso di protocolli di crittografia per collegarsi da una macchina all altra all interno della LAN, come SSH, SSL Una seconda difesa consiste nell utilizzare uno SWITCH al posto dell HUB; tuttavia, come si vedrà in seguito, anche adottare uno SWITCH non pone al riparo dall ARP spoofing. b) LAN con SWITCH Uno SWITCH è più sicuro di un HUB, ma non fornisce una sicurezza nettamente superiore. Uno SWITCH agisce a layer 2 del modello ISO/OSI. Con uno SWITCH sulla LAN, viene adottata una tecnica d attacco chiamata ARP poisoning L ARP poisoning è l attività di contraffazione della ARP table di una macchina. Se il nemico spedisce ad una macchina un ARP reply con il proprio MAC address e l indirizzo IP della macchina obiettivo, il traffico relativo alla macchina obiettivo verrà indirizzato all attaccante. Facendo questo per due diverse macchine obiettivo, avremo l attacco Man in the Middle Attacco Man in the Middle
L attacco Man in the Middle si basa sul fatto che un nemico N può inviare ARP reply creati ad hoc [MAC address N, IP address A] ad una qualunque macchina sulla stessa LAN. Si indichino con N il nemico, con B la macchina soggetta ad attacco, con A la macchina spoofata; A, B, N risiedono sulla stessa LAN. Si supponga che N abbia la scheda di rete posta in modalità promiscua sulla LAN ed uno sniffer attivo e intercetti un ARP request da parte di B richiedente il MAC address di A. N invia l ARP reply precedentemente forgiato a B. Quando B riceve l ARP reply falsificato, contenente la coppia [MAC address N, IP address A] memorizzerà questa coppia nella propria ARP table. Successivamente, ogni volta che la macchina B vorrà inviare dei dati alla macchina A, questi dati arriveranno al nemico N. Quando, infatti, la macchina B creerà un pacchetto IP con dei dati per la macchina A, l intestazione di questo pacchetto conterrà l indirizzo IP di A; il pacchetto così creato verrà passato dal kernel allo strato inferiore del modello ISO/OSI, che controllerà nella ARP table se è presente la coppia [IP address A MAC address x]. Purtroppo per B, x non è il MAC address della macchina A, ma quello della macchina N. Così i dati verranno inviati al nemico. Se si appronta un attacco di questo tipo su due fronti, tra gli host A e B, si ha l attacco noto come Man in the Middle. Come si può notare dalla figura, è possibile suddividere l attacco in due fasi. Nella prima fase l attaccante provvederà ad inviare contemporaneamente alle macchine A e B dei pacchetti ARP reply creati ad hoc; nella seconda fase l attaccante non dovrà far altro che attendere la ricezione dei dati che le macchine soggette ad attacco gli invieranno. Una precauzione che il nemico deve mantenere è l aggiornamento periodico delle ARP table delle sue vittime, affinché in queste ARP table le associazioni [MAC address IP address] desiderate vengano mantenute. Si consideri il seguente esempio pratico per capire meglio come funziona questo tipo di attacco: Macchina Nemico, IP address 192.168.0.1, MAC address, si ponga 1 (in realtà il MAC address come abbiamo visto negli esempi precedenti è composto da 48 bit). Macchina Vittima1, IP address 192.168.0.2, MAC address 2 Macchina Vittima2, IP address 192.168.0.3, MAC address 3 La Macchina N spedisce un ARP reply alla Macchina Vittima1, il pacchetto contiene la nuova associazione 1:1, [IP 192.168.0.3 - MAC address: 1] La Macchina N spedisce un ARP reply alla Macchina Vittima2, il pacchetto contiene la nuova associazione 1:1, [IP 192.168.0.2 - MAC address: 1] Si è già delineato il procedimento che l'attaccante vuole porre in essere, creare una macchina di mezzo, il tramite tra i due computer, ricevendo i loro pacchetti, sniffandoli e reindirizzandoli. Si comprende come non sia necessario che la scheda di rete entri in modalità promiscua, poiché il MAC address dell attaccante è corretto. Una breve attività di forging dei pacchetti ARP reply ha consentito ad un attaccante di sniffare una connessione tra due macchine obiettivo, che magari scambiano dati riservati, ed essenziali per l azienda.
Accorgimenti dell'attacante Le entries della cache, sono provviste di time out, quindi l attaccante deve periodicamente rinfrescarla. Una entry non e aggiornata se non era gia presente nella cache, in questo caso l'attaccante deve spedire un' ARP request spoofato per inserire l'entry nella cache e poi successivamente per aggiornarla potrà utilizzare le ARP reply come visto nell'esempio precedente. Soluzione Hardware L unica soluzione hardware attualmente valida consiste nel configurare lo SWITCH in maniera tale che il traffico di rete in uscita da una determinata porta non possa cambiare il proprio MAC address. Soluzioni software Due sono essenzialmente le soluzioni software che si possono adottare per prevenire l uso di ARP spoofing all interno di una LAN: i) tabelle statiche di arp Viene usato un comando particolare che fa si che le entries nella ARP table siano statiche: arp s hostname hardware_address. Sebbene questo risolva egregiamente il problema dello spoofing, questa tecnica non può essere utilizzata in grandi LAN, con svariate decine di macchine collegata ad essa (ad esempio una rete universitaria): il lavoro manuale da compiere per mantenere aggiornate queste tabelle diventerebbe molto oneroso. ii) uso di arp_watch arp_watch è una utility che controlla i cambiamenti nella ARP table relativa alla macchina sulla quale viene eseguito il programma. Se vengono rilevati cambiamenti, arp_watch aggiorna i file di log relativi a questi cambiamenti ed eventualmente avvisa l amministratore della rete tramite email. Considerazioni Date le particolari vulnerabilità usate e sfruttate, questo è un attacco che viene effettuato solo all interno di reti locali e ciò rende l attacco poco portabile in altre sedi.