Domanda Intercettazione HTTPS Android 11

Helplease

Utente Silver
29 Dicembre 2019
115
31
6
77
Ciao a tutti, è da un po' di tempo che sto provando ad intercettare e decrittare il traffico HTTPS in entrata e uscita dal mio telefono (rooted, che esegue Android 11) utilizzando il tool HTTPToolKit. L'unica app di cui riesco a visualizzare il traffico in chiaro, però, è Chrome. Qualcuno che abbia esperienza con questo tool potrebbe aiutarmi? Grazie
 
Ciao a tutti, è da un po' di tempo che sto provando ad intercettare e decrittare il traffico HTTPS in entrata e uscita dal mio telefono (rooted, che esegue Android 11) utilizzando il tool HTTPToolKit. L'unica app di cui riesco a visualizzare il traffico in chiaro, però, è Chrome. Qualcuno che abbia esperienza con questo tool potrebbe aiutarmi? Grazie
Ti consiglio di dare un occhiata anche a Frida, un tool per l'instrumentation del device (permette di fare hooking delle chiamate di sistema e quindi bypassare i controlli sui certificati).

Fare MitM su device Android non è molto semplice, soprattutto dopo la versione 6.0 (non è più possibile trustare in maniera facile i certificati).
Inoltre non tutte le app si comportano uguale, certe potrebbero implementare il certificate pinning, per cui significa che devi bypassare tale controllo per intercettare il traffico.

Non conosco HTTPToolKit però mi è capitato di utilizzare Frida per bypassare tali controlli sui certificati e intercettare dunque il traffico.

PS. Come hai fatto a far trustare al tuo device il certificato di burp?
 
Ciao e grazie della risposta. Non ho mai provato il tool Frida, appena ho tempo provo a dargli un'occhiata. In teoria HTTPToolKit dovrebbe fare tutto da solo per quanto riguarda i certificati, come viene spiegato in questa pagina (loro dicono che il programma riesce a rendere "scrivibile" system montando un tmpfs e poi iniettando lì il certificato).
 
Ciao e grazie della risposta. Non ho mai provato il tool Frida, appena ho tempo provo a dargli un'occhiata. In teoria HTTPToolKit dovrebbe fare tutto da solo per quanto riguarda i certificati, come viene spiegato in questa pagina (loro dicono che il programma riesce a rendere "scrivibile" system montando un tmpfs e poi iniettando lì il certificato).
Yes, ho letto l'articolo, tra l'altro è scritto molto bene, molto chiaro.
Non mi torna però una cosa, nel tuo caso: che traffico cerchi di vedere nello specifico? Di quale applicazione?

Perchè come dicono anche loro, le app che ricadono nella terza casistica ignorano tutti i certificati, compresi quelli di sistema, per trustare solo il loro:
  • The OS has a 'system' certificate store, at /system/etc/security/cacerts/. This is prepopulated on the device at install time, it's impossible to add certificates to it without root access, and is used as the default list of trusted CA certificates by most apps. In practice, this store defines which CA certificate most apps on your phone will trust.
  • The OS also has a 'user' certificate store, usually at /data/misc/user/0/cacerts-added/, containing trusted CA certificates that were manually installed by the user of the device. Installing one of these certificates requires accepting quite a few warnings, and became even more difficult in Android 11.
    Apps targeting Android API level <24, i.e. before Android 7, or applications that specifically opt in will trust CA certificates in this store. Most apps don't, but this is enabled on a few apps where it's widely useful (notably Chrome, for now) and it's easy for developers to enable for testing with a few lines of XML.
  • Lastly, each application can include its own CA certificates, embedding its own short list of trusted certificate authorities internally, and refusing to trust HTTPS communication with certificates signed by anybody else. Nowadays this is fairly uncommon, except for apps that are especially security conscious (banking) or very high-profile (facebook), mostly because it's complicated and the changes in Android 7 to untrust the user store make this kind of pinning unnecessary.
In questo caso credo che il tool non possa funzionare perchè è vero che inietta il certificato self-signed all'interno di quelli di sistema, se però poi l'applicazione lo ignora e considera solo il proprio certificato, a meno che non bypassi il controllo anche iniettare il proprio certificato diventa inutile
 
  • Mi piace
Reazioni: Helplease
In realtà non stavo testando un'app nello specifico, semplicemente ho fatto partire il tool ed eseguito app a caso che ho sul telefono; per questo mi sembrava strano che il tool non funzionasse per il motivo che hai appena citato. Comunque l'unica app di cui si riesce a vedere il traffico, come spiega l'articolo, è Chrome (per tutte le altre ottengo un errore "Certificate rejected for (nomedelsito)".
 
In realtà non stavo testando un'app nello specifico, semplicemente ho fatto partire il tool ed eseguito app a caso che ho sul telefono; per questo mi sembrava strano che il tool non funzionasse per il motivo che hai appena citato. Comunque l'unica app di cui si riesce a vedere il traffico, come spiega l'articolo, è Chrome (per tutte le altre ottengo un errore "Certificate rejected for (nomedelsito)".
Mmmm per curiosità, puoi controllare se effettivamente il certificato è stato installato da parte del tool? Ho letto che a seguito di un reboot i certificati originali vengono ripristinati, perciò è possibile segnare quelli che c'erano prima e quelli che ci sono dopo e vedere se effettivamente lo inserisce correttamente.
Fatto questo non saprei proprio quale altro problema possa esserci, posso immaginare che tutte le grandi app e i grandi social implementino il certificate pinning, però mi fa strano che non ce ne sia nemmeno una che non lo faccia...

Leggendo anche qua (https://httptoolkit.tech/blog/android-11-trust-ca-certificates/) sembra che per i device rootati non si dovrebbero avere problemi, perciò mi fa ancora più strano
 
  • Mi piace
Reazioni: Helplease
Ultima modifica da un moderatore:
Allora, mi sono accorto ora che l'app dà questo errore:
Screenshot_20220308-185031__01.jpg

Questo in teoria significa che il certificato non è stato inserito correttamente: infatti, controllando nella cartella /system/etc/security/cacerts non c'è nessun nuovo certificato. Allora ho provato ad eseguire io stesso i comandi che ho trovato nel codice sorgente da adb inserendo un file casuale nella cartella cacerts. Il file risulta inserito però soltanto su adb, infatti se provo a fare ls in cacerts dal terminale su Android, ottengo i files che c'erano prima (non so se questo c'entri qualcosa). Poi ho trovato sul sito di HTTPToolKit una sezione che parla proprio di quell'errore che si vede nello screenshot, lì dicono di provare ad eseguire quei tre comandi, di cui mi riescono soltanto i primi due, infatti il terzo mi dà l'errore "adbd cannot run as root in production builds".
Ho cercato soluzioni per questo errore e ho trovato uno script che però funziona solo su Android 9/10.
Tu hai qualche idea? Grazie ancora
 
Ultima modifica:
Allora, mi sono accorto ora che l'app dà questo errore:
Visualizza allegato 60892
Questo in teoria significa che il certificato non è stato inserito correttamente: infatti, controllando nella cartella /system/etc/security/cacerts non c'è nessun nuovo certificato. Allora ho provato ad eseguire io stesso i comandi che ho trovato nel codice sorgente da adb inserendo un file casuale nella cartella cacerts. Il file risulta inserito però soltanto su adb, infatti se provo a fare ls in cacerts dal terminale su Android, ottengo i files che c'erano prima (non so se questo c'entri qualcosa). Poi ho trovato sul sito di HTTPToolKit una sezione che parla proprio di quell'errore che si vede nello screenshot, lì dicono di provare ad eseguire quei tre comandi, di cui mi riescono soltanto i primi due, infatti il terzo mi dà l'errore "adbd cannot run as root in production builds".
Ho cercato soluzioni per questo errore e ho trovato uno script che però funziona solo su Android 9/10.
Tu hai qualche idea? Grazie ancora
Mmmm... sinceramente no, ecco il motivo per cui dicevo che di solito faccio test su versioni più vecchie di android (ove possibile).


Visto che però hai i privilegi di root puoi provare ad eseguire gli stessi comandi utilizzando però anche il comando per diventare root:
Bash:
adb shell "su -c 'command1'"
adb shell "su -c 'command2'"
adb shell "su -c 'command3'"

Forse in questo modo riesci a bypassare il blocco imposto, anche se non ne sono per nulla sicuro.

EDIT: Ho letto ora il link legato alla sezione che hai letto. E' normale che il terzo comando non funzioni perchè sebbene il tuo device sia rootato, adb non possiede i permessi per girare da root. So che esistono delle patch, le menzionano anche qua, ma non dovrebbe servire.

Io proverei a lanciare questi comandi (estratti dal codice sorgente), usando però la sintassi che ti ho messo sopra, quella con adb shell "su -c 'comando'"
Bash:
# Create a separate temp directory, to hold the current certificates
            # Without this, when we add the mount we can't read the current certs anymore.
            mkdir -m 700 /data/local/tmp/htk-ca-copy
            # Copy out the existing certificates
            cp /system/etc/security/cacerts/* /data/local/tmp/htk-ca-copy/
            # Create the in-memory mount on top of the system certs folder
            mount -t tmpfs tmpfs /system/etc/security/cacerts
            # Copy the existing certs back into the tmpfs mount, so we keep trusting them
            mv /data/local/tmp/htk-ca-copy/* /system/etc/security/cacerts/
            # Copy our new cert in, so we trust that too
            mv ${certificatePath} /system/etc/security/cacerts/
            # Update the perms & selinux context labels, so everything is as readable as before
            chown root:root /system/etc/security/cacerts/*
            chmod 644 /system/etc/security/cacerts/*
            chcon u:object_r:system_file:s0 /system/etc/security/cacerts/*
            # Delete the temp cert directory & this script itself
            rm -r /data/local/tmp/htk-ca-copy
            rm ${injectionScriptPath}
            echo "System cert successfully injected"
 
  • Mi piace
Reazioni: Helplease
Non so se sia stato eseguire i comandi con il prefisso "su -c", però adesso funziona, infatti se apro la cartella cacerts trovo il certificato di HTTPToolKit.
Volevo chiederti un'ultima cosa: esistono programmi simili a HTTPToolKit che intercettano anche il traffico WebSocket su Android?
 
Non so se sia stato eseguire i comandi con il prefisso "su -c", però adesso funziona, infatti se apro la cartella cacerts trovo il certificato di HTTPToolKit.
Volevo chiederti un'ultima cosa: esistono programmi simili a HTTPToolKit che intercettano anche il traffico WebSocket su Android?
Non ne sono sicuro al 100% ma credo che Burpsuite li intercetti. Non è completamente automatico come httptoolkit, nel senso che devi metterti a mano il certificato e devi impostare a mano burp come proxy nelle impostazioni del WiFi del device, però mi è capitato di intercettare i websocket durante alcuni pentest su web app, per cui non credo ci sia molta differenza anche su mobile
 
  • Mi piace
Reazioni: Helplease