Come avrete capito dal titolo, oggi parliamo di come sniffare, ossia intercettare silenziosamente, il traffico sia http, che https, su un dispositivo Android. Questo articolo prende spunto da questa guida in inglese, ormai vecchia (datata fine 2012) e quasi impossibile da seguire passo passo a parer mio, dal momento che gli strumenti e la tecnologia cambiano.
Perché dovrebbe servirci? Il caso più banale è quello di fare il debug, e scoprire come funziona un’applicazione che dialoga con server esterni, che tipo di informazioni chiede, a chi le chiede, a chi manda i nostri dati, sensibili o meno, e così via.
Attenzione però: sniffare il traffico di un’app non nostra potrebbe essere contro i Termini di Servizio dell’app stessa. Assicurarsi quindi di avere i diritti per fare queste operazioni.
I prerequisiti per intercettare il traffico, come verrà spiegato in quest’articolo, sono semplicemente i seguenti:
Sfrutteremo un programma che farà da Proxy, ossia si metterà tra il dispositivo Android e il server, e trasmetterà le informazioni tra i due in modo silenzioso.
In questo modo potremo intercettare tutto ciò che che il cellulare comunicherà al server, e viceversa.
Scarichiamo da Internet il programma Burp. Esistono due versioni: free, e pro (a pagamento). In questa guida userò la versione free v.1.6.25, ma ovviamente non cambierà nulla, se volete investire in quella Pro.
Avviate il programma Burp, recatevi nella scheda Proxy, e selezionate la sottoscheda Intercept, e cliccate sul pulsante “Intercept is on”, per disabilitare la modifica al volo dei pacchetti. Se il pulsante fosse già off, lasciate così com’è e andiamo oltre.
Quindi andate nella scheda Proxy, sottoscheda Options.
Qui troveremo una lista di impostazioni infinita, che potrebbe deconcentrarci: niente panico, andiamo passo-passo.
Prima di tutto assicuriamoci che le impostazioni di base del Proxy siano corrette, ossia l’indirizzo di ascolto e la porta.
Clicchiamo sull’unico elemento della lista “Proxy Listener”:
e clicchiamo a sinistra su “Edit”. Si aprirà una finestra d’impostazioni. Selezionate, se non fosse di default, “All interfaces”, in modo che il proxy sia in ascolto su tutte le interfacce.
Diamo “OK”, e facciamolo partire, mettendo un tick su “Running”:
A questo punto abbiamo impostato il Proxy sul PC, e ci rimane impostarlo su Android, in modo tale che il nostro dispositivo vada a chiedere i dati al Proxy, invece che al server.
Andiamo in impostazioni, Wi-Fi, e teniamo premuto sulla rete a cui il dispositivo è connesso, finché non apparirà il menu “Elimina Rete”, “Modifica Rete”. Selezioniamo il secondo, e mettiamo un tick su “Opzioni Avanzate” nel nuovo menu che ci viene proposto.
A questo punto settiamo Proxy su “Manuale” e mettiamo la porta 8080, e l’hostname proxy, ossia l’indirizzo ip del nostro pc. Se lo conoscete, saltate il prossimo capitolo. Premiamo su Salva.
Windows
Seguite questi passi, o andare nel terminale e scrivere “ipconfig”, e cercare qualcosa di simile a 192.168.x.x
Mac Os X
Seguite questi passi fino al punto 4.
Linux
Date da terminale il comando:
ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1'
A questo punto siamo in grado di intercettare tutto il traffico non cifrato (http) che parte/arriva dal/al dispositivo Android. Per vederlo possiamo andare su Burp, scheda Proxy, sottoscheda “HTTP History”.
Qui dovremo vedere una lista di richieste riempirsi non appena generiamo traffico http sul dispositivo Android, ad esempio recandoci presso insidevcode.eu tramite browser. Se così non fosse, o abbiamo sbagliato qualcosa e dobbiamo rivederci i passaggi prima, oppure c’è qualche anomalia. Se non riuscite a vedere il traffico dati, scrivetelo qui nei commenti, vedrò di aiutarvi dove posso.
Ma lo sniff HTTPS? Per quello c’è un piccolo passo in più, ora vediamo come fare.
Qual è il problema dello sniff https? Il problema sta nei certificati. Il client, attendendo dati dal server, si aspetta che questi vengano cifrati con un certificato “attendibile”. Se però in mezzo al client e al server ci siamo noi, il certificato che utilizziamo con Burp, essendo diverso da quello del server, sarà dichiarato come “non attendibile”. Come facciamo a forzare Android a pensare che il certificato di Burp sia attendibile?
Innanzitutto rechiamoci da PC presso l’indirizzo http://127.0.0.1:8080/ mentre è in funzione il Proxy Burp.
In questo modo scaricheremo il famoso certificato con cui Burp firma ogni richiesta https. Rinominiamolo in “cacert.crt”, modificando l’estensione, in modo che venga riconosciuto da Android.
Ora inviamolo in qualche modo al dispositivo Android, via bluetooth, via email, via cloud (dropbox, drive) o altri metodi. Una volta scaricato sull’Android, andiamo nelle Impostazioni, Sicurezza, e cerchiamo nella sezione “Archivio Credenziali” l’impostazione “Installa da Archivio”. Se non abbiamo ancora nessun PIN/Sequenza di blocco, ci verrà chiesto di impostarlo. Abbastanza noioso, ma necessario. Dopodiché ci si aprirà il file manager per selezionare il CA Certificate che avevamo precedentemente scaricato.
Diamogli un nome che vogliamo, ad esempio “burp”, e selezioniamo Wi-Fi.
Finalmente ora, recandoci su Burp nella scheda Proxy, sottoscheda HTTP History, potremo vedere il traffico HTTPS generato da Android.
Se avete una delle più recenti versioni di Android, sul vostro dispositivo apparirà anche una notifica persistente che vi avviserà che il traffico potrebbe essere monitorato. You don’t say? Purtroppo questa notifica non si può rimuovere finchè non elimineremo il certificato installato dalle Impostazioni, Sicurezza, ma poco male.
Seguiteci anche su Facebook, Google Plus, Tumblr e Twitter, per restare sempre in contatto con noi e con le nostre guide.