Spesso mi viene chiesto: “Come faccio a rubare le password di un utente per un determinato sito?”, quando la domanda più corretta da porsi dovrebbe essere: “Posso autenticarmi a un sito senza possederne le credenziali?”
Può sembrare assurdo, ma non è strettamente necessario possedere username e password di un utente per far credere ad un sito internet di essere un utente accreditato! Infatti, in questa guida analizzeremo una tecnica di attacco chiamata Session Hijacking, facente parte della grande famiglia dei Man-in-the-middle attacks, che permette a chiunque di introdursi nell’account di un’altra persona collegata alla stessa LAN.
Per chi è completamente a digiuno di nozioni sul funzionamento di Internet, la spiegazione teorica della Session Hijacking (in italiano dirottamento di sessione) potrebbe risultare un po’ ostica, ma prometto che tenterò per quanto possibile di essere semplice.
Normalmente, per accedere all’area riservata di un sito, un utente è costretto ad autenticarsi con uno username e una password tramite un pannello di login. Al fine di evitare all’utente la reimmissione delle credenziali ad ogni pagina visitata, la maggior parte dei siti web o meglio, i server che ospitano questi siti rilasciano dei piccoli file di testo che vengono memorizzati dal browser dell’utente per essere reinviati al server ogni volta che il sito richiede una conferma sull’identità dell’utente, permettendo a quest’ultimo di mantenere la sessione attiva. Questi piccoli file di testo vengono chiamati cookies di sessione.
Un attaccante che riesca ad intercettare i cookies di sessione di un utente, potrà fingersi quell’utente semplicemente inviando i dati contenuti in questi piccoli file al server che ospita il sito web tramite il proprio browser.
Quali strumenti utilizzare
Esistono una miriade di modi per raggiungere lo stesso obiettivo. In questa guida ho deciso di utilizzare il famoso sniffer di rete Wireshark, di cui ho già discusso nell’articolo Ottenere username e password dei siti web con Wireshark, per intercettare i pacchetti in transito tra vittima e server e identificare i cookies di sessione di un sito in WordPress servito tramite protocollo Http. Una volta identificati i cookies di sessione della vittima, li passerò a Firefox tramite l’add-on Cookies Manager + per accedere indisturbato al pannello di controllo del sito.
Sebbene io abbia testato il procedimento su Kali Linux, sia Wireshark sia Cookies Manager + possono essere installati anche su Windows e su Mac OS X, quindi sentitevi liberi di utilizzare il sistema operativo che ritenete più opportuno.
Informazioni preliminari
Ho preparato l’ambiente di test configurando tre macchine come segue:
- Attaccante: Kali Linux Rolling con Wireshark e Mozzilla Firefox con l’add-on Cookies Manager +
- Bersaglio: Windows 7 Ultimate SP1 con Google Chrome, indirizzo IP 192.168.1.10
- Server: Ubuntu Server 14.04, Apache 2.4, MySQL 5.5, indirizzo IP 192.168.1.15, ospita un sito in WordPress aggiornato all’ultima versione reperibile all’url http://wp.uvm/
Intercettare i cookies di sessione con Wireshark
Avviamo Wireshark. La schermata di benvenuto presenterà una lista di tutte le interfacce di rete disponibili sulla macchina attaccante.
Essendo collegato al router tramite wi-fi seleziono l’interfaccia wlan0 per la cattura dei pacchetti. Con doppio click su wlan0 avvio la cattura. Come è possibile vedere dall’immagine che segue, una volta avviata la cattura, cominceremo a vedere tutti i pacchetti in transito sulla LAN.
Vi renderete presto conto della mole enorme di pacchetti in transito, dopo pochissimi secondi dall’avvio della cattura. Sarebbe impossibile analizzarli tutti trovando quelli che realmente ci servono: per questo scopo, Wireshark dà la possibilità di filtrare questi pacchetti secondo una serie di regole. Sapendo che ci servono i cookie di sessione passati tramite protocollo Http provenienti dalla macchina bersaglio (IP 192.168.1.10), impostiamo il seguente filtro
http.cookie && ip.src == 192.168.1.10
Applicando il filtro noteremo come i pacchetti elencati da Wireshark diminuiscono sensibilmente.
Login della vittima
Passiamo sulla macchina bersaglio dove l’utente amministratore sta per effettuare il login al pannello di controllo del suo sito.
L’amministratore del sito, ignaro di ciò che sta capitando a pochi metri da lui, clicca sul pulsante di login, si autentica al sito e consegna all’attacker il pacchetto contenente i cookie di sessione.
Dall’immagine possiamo anche notare come i pacchetti presentino come sorgente l’indirizzo IP della vittima grazie al filtro impostato e come destinatario quello del server che ospita il sito.
Analisi dei pacchetti, iniezione in Firefox dei cookies e dirottamento della sessione
Individuato il pacchetto che ci interessa non ci resta che visualizzarne il contenuto, facendo doppio click su di esso o selezionando dal menù di Wireshark Visualizza -> Mostra pacchetto in una nuova finestra. Possiamo quindi estrarre i cookie in formato cookie=valore espandendo la voce Hypertext Transfer Protocol e la voce Cookie.
Attiviamo Firefox sul quale abbiamo installato Cookies Manager + e immettiamo l’url della pagina di login del sito.
Apriamo Cookies Manager +. Una prima schermata ci mostra tutti i cookies presenti nel browser.
Aggiungiamo i due cookies necessari al dirottamento di sessione.
Ora la schermata principale principale di Cookies Manager + riporta i cookies appena inseriti.
Possiamo collegarci all’url di amministrazione del sito bypassando il form di login.
Conclusioni
Abbiamo visto come sia semplice utilizzare i dati in transito in una rete per guadagnare un accesso ad un’area privilegiata di un sito senza possederne le credenziali. Tuttavia, alcuni accorgimenti possono aiutarci a non diventare vittime di questo tipo di attacco, quindi se possibile, preferiamo i siti interamente protetti dal protocollo Https ed evitiamo le reti wi-fi pubbliche.
Di seguito, un video dimostrativo di quanto spiegato precedentemente.