Mail: giulio@anche.no Jabber: giulio@anche.no
In questo talk si parlerà di:
In informatica, un MITM ("uomo in mezzo" in Italiano) consiste nel frapporsi tra la comunicazione di due host, facendo credere ad essi di essere l'interlocutore legittimo e ottenendo la possibilità di leggere ed alterare il flusso di dati.
Ricapitolando dunque quando un host desidera comunicare con un altro il kernel si preoccupa di mandare una richiesta per poter mappare l'indirizzo IP destinazione su un indirizzo MAC.
E' possibile forgiare Reply e Request non veritiere, impersonando un altro host.
Esempio:
Vittima ha ip 192.168.1.2 e MAC AA:AA:AA:AA:AA
Router ha ip 192.168.1.1 e MAC BB:BB:BB:BB:BB
Attaccante ha ip 192.168.1.5 e MAC FF:FF:FF:FF:FF
Attaccante invia una ARP Reply a Router dicendo che Vittima è FF:FF:FF:FF:FF.
Attaccante invia una ARP Reply a Vittima dicendo che Router è FF:FF:FF:FF:FF.
In questo modo tutto il traffico tra Router e Vittima passerà attraverso Attaccante che potrà alterarlo.
Poichè l'attacco funzioni è inoltre necessario inoltrare il traffico da vittima a router e viceversa.
E' possibile utilizzare una tabella ARP→IP statica, fissando i valori dei MAC Addres. Questo tipo di approccio tuttavia è utilizzabile solo per reti che utilizzano ip fissi.
Esistono anche vari software che rilevano, ed in alcuni casi prevengono tentativi di ARP Spoofing, tra cui DefendARP, anti-arpspoof e ARPWatch
Ad oggi esistono diversi software open source che offrono ampie possibilità.
Benchè la presentazione si concentri sul protocollo HTTP, un MITM che sfrutta l'ARP Spoofing permette di agire su qualsiasi protocollo con particolare facilità su quelli non criptati.
Un esempio, che tornerà utile in seguito è l'alterazione delle risposte DNS alle richieste della vittima, che permette di falsificare i record DNS per qualsiasi dominio
Di seguito, alcuni esempi di azioni che un attaccante può effettuare sul traffico plaintext:
Benchè esistano alcuni accorgimenti, come l'hashing delle password o la criptazione di dati lato client, per esempio in JavaScript, tali misure non costituiscono una reale difesa.
Qualsiasi funzione infatti può essere facilmente eliminata dall'attaccante.
Sarebbe bene quindi, per la protezione dell'utente finale, che qualsiasi servizio utilizzasse SSL/TLS, con particolare attenzione verso quelli che richiedono l'utilizzo di informazioni sensibili, come una coppia di username/password.
Gli algoritmi di cifratura forniscono sicurezza nella trasmissione dei dati, ma non sicurezza sull'identità del server. Sono quindi necessarie delle Autorità che rilascino dei certificati firmati solo ai legittimi proprietari dei domini.
I browser contengono poi una serie di "root CA", ovvero un elenco di certificati provenienti da Authority fidate, come VeriSign, GeoTrust ecc., che vengono utilizzate per controllare la validità di un certificato.
Esistono una serie di algoritmi che permettono di ottenere la cosiddetta "Perfect Forward Secrecy", ecco le caratteristiche importanti:
Citando Adi Shamir (La S in RSA):
Cryptography is typically bypassed, not penetrated
Cosa significa?
Significa che la maggior parte dei vettori di attacco non sono quasi mai contro la crittografia stessa, ma piusttosto contro la sua implementazione pratica, componenti esterni ad essa ed errori umani.
L'utilizzo della crittografia non impedisce comunque la poissibilità di attacchi MITM.
Un attacante può ugualmente impersonare un server.
In questo caso le uniche contromisure consistono in un po' di attenzione da parte dell'utente finale.
Alcuni provider di servizi ritengono erroneamente che sia sufficiente proteggere con SSL le pagine di login, per prevenire la lettura delle credenziali di accesso.
Ciò tuttavia non è sufficiente in nessun caso.
Un evidente esempio di ciò è il portale libero.it
In questo caso l'attacco è possibile solo grazie ad una errata configurazione del gestore. E' quindi fondamentale:
Le XSS e le CSRF sono tra le vulnerabilità più comuni presenti nelle applicazioni web.
(Rispettivamente la terza e la ottava secondo l'OWASP top 10 2013)
Entrambe queste vulnerabilità richiederebbero in un contesto normale interazione dell'utente.
Nel caso di un MITM l'attaccante può iniettare nel traffico di un qualsiasi sito HTTP del codice javascript per rubare un cookie ed eseguire una richiesta non voluta.
In questo caso lo sviluppatore della webapp deve:
L'SSLstripping è una tecnica ideata da Moxie Marlinspike e da lui stesso presentata al Defcon 2009.
Consiste nell'alterare tutto il traffico plaintext di un utente, sostituendo "https" davanti ai link con il semplice "http", facendo connettere in chiaro la vittima al nostro proxy, che poi utilizzerà SSL per connettersi al server di destinazione.
E' compito sia dell'amministratore del server che dell'utente vigilare su questo attacco:
E' possibile effettuare Session Hijacking anche su risorse interamente HTTPS.
Infatti, quando non diversamente specificato, i cookie sono condivisi tra http e https.
Ciò significa che un cookie la cui origine è https://www.gnu.org può essere richiesto anche da http://www.gnu.org .
Esempio:
Lo sviluppatore deve solo ricordarsi di:
L'attacco descritto nella slide precedente rimane fattibile, nonostante la flag "secure" utilizzando un approccio inverso.
Infatti, nonostante la flag "secure" blocchi l'invio del cookie ad una risorsa non https non ne blocca la sovrascrittura.
http://www.gnu.org può quindi settare un cookie valido anche per http://www.gnu.org .
Questo ci ritorna particolarmente utile per qualsiasi sito utilizzi le sessioni per l'autenticazione o utilizzi i cookie per salvare delle informaizoni sensibili.
Il procedimento è molto simile a quello descritto precedentemente.
Esempio:
Coinbase.com è uno dei maggiori siti di acquisto e scambio di Bitcoin
Una sessione di un utente non autenticato si presenta, in versione semplificata, così:
session_id:"acedfa683d0d9aa4001c7ac6da40c09a"; _csrf_token:"1NaNj4IXj+FVMJcEYimczqYrJNXejTh2x0E1Wgg5GyeE";
Una sessione di un utente autenticato invece così:
session_id:"acedfa683d0d9aa4001c7ac6da40c09a" _csrf_token:"1NaNj4IXj+FVMJcEYimczqYrJNXejTh2x0E1Wgg5GyeE" session_token:"E72b357fa634f0849c9170d80320aba1230e4a2cdae50b7e3ef45ae2d0540968c";
Come si può notare il valore di "session_id" ed il valore di "_csrf_token" rimangono invariati.
Tuttavia, viene aggiunto un campo "session_token" come parametro aggiuntivo di sicurezza per verificare l'avvenuto login.
All'attaccante però è sufficiente conoscere il valore di "_csrf_token" per poter iniettare nel traffico non https richieste GET/POST valide.
Lo sviluppatore:
L'amministratore dovrebbe:
Esistono poi alcuni attacchi più complessi:
-BEAST
-CRIME
-Lucky 13
-BREACH
Per approfondire:
https://www.isecpartners.com/media/106031/ssl_attacks_survey.pdf
Fino a questo punto si è parlatto di ARP Spoofing su una LAN locale, tuttavia questo approccio è molto riduttivo, e tratta solo del più comune degli scenari.
Qualsiasi entità che ha il controllo della rete può effettuare un MITM, cominciando dagli amministratori di rete, per passare agli ISP, per finire, come è emerso anche nei media di recente, chi ha accesso alle backbone e alle infrastruttre principali, come il governo USA.
Nelle prossime slide seguiranno alcuni esempi in cui si può effettuare un MITM senza essere una autorità.
Benchè tutto il traffico tra i nodi Tor sia criptato, compreso quello tra client e Hidden Services, per poter comunicare con la rete normale è prima necessario decriptarlo e ne consegue che questo compito deve essere svolto dall'ultimo nodo, chiamato Exit Node.
Questo fa si che il gestore dell'Exit Node abbia pieno controllo sul traffico dell'utente.
Casi simili si sono già verificati, una lista è disponibile qui https://trac.torproject.org/projects/tor/wiki/doc/badRelays .
La sicurezza dei dispositivi embedded, come modem, router e stampanti è sempre stata sottovalutata.
Questo apre le porte ad un attaccante, che dopo aver compromesso uno di questi dispositivi (spesso basta usare le credenziali di default) può effettuare un MITM in piena regola verso tutti gli utenti della subnet.
Basti pensare cosa sarebbe successo se la botnet Carna, che si era autoreplicata in circa 420.000 dispositivi embedded ed aveva come scopo fare una completa statistica sull'intero range ipv4, avesse adottato un approccio simile.