In questo episodio di hacking vedremo come sia facile installare una backdoor, rubare l’accesso a milioni di siti e accedere al router di una rete con un dispositivo super economico: il Raspberry Pi Zero.
Iniziamo con cosa ci serve per questo tutorial:
- Un Raspberry Pi Zero
- Scheda SD per il sistema operativo del Raspberry e l’exploit
- Un cavo Micro USB, uno di quelli per caricare i telefoni
Questo è davvero tutto l’occorrente per mettere in atto PoisonTap, un attacco (forse uno dei più potenti che abbiamo mai visto in questa serie) ideato da Samy Kamkar, il famoso hacker esperto di sicurezza.
Vediamo cosa fa il Raspberry, passo passo, durante tutto l’attacco.
Step primo: far finta di avere una rete locale grande come tutto internet
La prima fase di PoisonTap avviene quando si connette il Raspberry a un computer via usb: viene infatti riconosciuto come una scheda di rete ethernet (una di quelle usb, ad esempio per usare il wifi su computer che non ne sono provvisti) e il computer, siccome probabilmente è già connesso a internet, imposta la rete del Raspberry, che si chiama molto fantasiosamente PoisonTap, come “low priority” e in condizioni normali la ignorerebbe.
Tuttavia, appena un computer si connette a una nuova rete, vengono scambiati dei pacchetti con alcune informazioni: il router ad esempio comunica il suo indirizzo IP e dove il computer può trovare i DNS, ma soprattutto quali sono gli indirizzi IP disponibili nella rete locale (normalmente, da 192.168.1.1 a 192.168.1.255). Tutti gli altri indirizzi IP saranno quindi identificati come “mondo esterno”. Inoltre, qualsiasi sistema operativo gestisce le connessioni in modo che, per connettersi a un indirizzo IP, cerca prima se è connesso a una rete per cui quell’IP è locale, anche se così facendo deve usare una rete “low priority” invece che una “high priority”.
Noi sfruttiamo proprio questo: quando il Raspberry viene connesso al computer, comunica che la sua rete locale (“finta”) ha tutti gli IP da 1.0.0.1 a 255.255.255.255: quello che succede, quindi, è che il computer userà la nostra rete “finta” e non quella “vera” per connettersi a tutti gli indirizzi IP esterni, perché nella nostra rete figurano come locali!
Step secondo: Cookie Siphoning
Alla seconda fase ci pensa il computer stesso, purché ci sia un browser connesso a qualche sito con dei pulsanti social, della pubblicità, un’estensione Chrome o qualsiasi componente che richieda al browser di contattare il server: appena questo succede, la richiesta verrà intercettata dal Raspberry (perché il computer pensa che sia rivolta a un indirizzo locale della rete PoisonTap) che risponde con del codice che è il vero e proprio exploit. Il componente infatti esegue quasi sicuramente il codice che gli è stato mandato, creando tantissimi iframe (dei componenti delle pagine web in cui solitamente si carica una risorsa esterna, come un’altra pagina o un video), in ognuno dei quali viene aperto un sito diverso: viene creato un milione di piccole finestrelle invisibili che caricano il milione di siti più visitati al mondo.
Per alcuni di questi il browser ha una sessione aperta (perché l’utente li aveva visitati in passato e aveva fatto il login senza fare il logout) e quindi per farsi riconoscere dal sito e saltare la fase di login manderà i cookie di autenticazione salvati in locale, che però non arriveranno mai a destinazione, ma verranno salvati dal Raspberry. Gli unici che non verranno mandati sono quelli con la flag “secure”, ma sono pochissimi anche sui siti che usano SSL.
Tra gli iframes che vengono aperti, oltre al milione di siti, ce n’è qualcuno che contiene una backdoor e finché rimane aperta la tab che contiene gli iframes (che sono invisibili e quindi nessuno si accorge che ci sono), anche se il raspberry sarà disconnesso dal computer, quella backdoor continuerà a funzionare e potremo usarla da remoto, ad esempio per loggare dati o connetterci alla rete locale (ricordate che la “vera” rete locale continua ad essere disponibile per il computer, perché gli indirizzi IP locali li trova già nella rete “vera” senza bisogno di usare quella “finta”). Possiamo quindi portare a termine tantissimi altri attacchi, come ad esempio connetterci al vero router che magari ha login “admin” - “admin” e quindi riusciamo cambiare le impostazioni.
Abbiamo inoltre rubato tutti gli accessi dell’utente: se mettiamo nel browser di un altro computer i cookie salvati nella sd del Raspberry, potremo accedere a tutti i siti, anche se l’utente ha l’autenticazione a due fattori: non c’è nessun problema, perché il sito riconoscerà quella sessione come già autorizzata!
Vediamo ora come difendersi:
Se siete webmaster e volete difendere il vostro sito da questo tipo di attacchi, dovete innanzitutto usare sempre SSL e il flag secure nei cookie.
Se invece siete un normale utente e volete poter lasciare incustodito il vostro computer acceso ma bloccato, ad esempio in pausa pranzo, l’unica soluzione oltre a mettere del cemento nelle porte usb (come suggerisce Samy Kamar) è chiudere sempre il browser e assicurarsi in questo modo che non ci siano cose che si caricano in background (attenzione alle estensioni Chrome!). Un’altra alternativa può essere mettere una telecamera di sorveglianza, così da denunciare tutti quelli che passano con un raspberry in mano… I metodi per difendersi non sono tantissimi ed è per questo motivo che l’attacco è particolarmente efficace!
L'attacco all'atto pratico: come fare
Vediamo ora come trasformare un Raspberry Pi Zero da 4€ in un potentissimo vettore di exploit.
Ci basta installare un Raspbian Lite sul Pi Zero, attivare l'SSH e iniziare scaricando il repo GitHub. Per far questo dobbiamo prima ovviamente installare Git
sudo apt-get install git
Procediamo quindi a scaricare tutti i file che servono al Raspberry:
git clone https://github.com/samyk/poisontap.git
A questo punto con un unico comando scarichiamo un piccolo script che si occupa di installare e preparare tutto ciò che serve all'exploit
wget https://www.demmsec.co.uk/install.sh; sudo bash install.sh
Per questo episodio è tutto!