Si tratta di bypassare il pinning SSL di Android e intercettare le applicazioni ignare del proxy.

Nov 27 2022
Hola H3ckers, sappiamo tutti che ci sono molti articoli disponibili per "Come intercettare il traffico HTTPS delle app Android", quindi qui non li copriremo. Se non ne hai trovato nessuno, fai riferimento a quanto segue: Configurazione di un dispositivo Android per lavorare con Burp - Prerequisiti di PortSwigger: familiarità con il proxy BurpSuite, Pentesting Android di base e strumenti come adb, frida, Objection, applicazione Magisk, APK di decompilazione/ricompilazione e Firma dell'APK.

Ciao H3ckers,

Sappiamo tutti che ci sono molti articoli disponibili per "Come intercettare il traffico HTTPS delle app Android", quindi qui non li copriremo. Se non ne hai trovato nessuno, fai riferimento a quanto segue:

Configurazione di un dispositivo Android per lavorare con Burp — PortSwigger

Prerequisiti:

Familiarità con il proxy BurpSuite, Pentesting Android di base e strumenti come adb, frida, Objection, applicazione Magisk, APK di decompilazione/ricompilazione e firma APK.

Sommario

  1. La mia app di destinazione ha il pinning SSL?
  2. Aspetta, come possiamo confermare il Pinning?
  3. È ora di bypassare
  4. Perché non sono in grado di intercettare il traffico dell'app anche se l'app funziona con HTTP

Ho capito, sembra uno scherzo, perché voi ragazzi sapete che se il blocco è a posto, non saremo in grado di catturare il traffico HTTPS della nostra applicazione Android di destinazione.

2. Aspetta, come possiamo confermare il Pinning?

Dopo aver configurato il proxy sia nel dispositivo che nel server proxy (Burp), avvia l'applicazione di destinazione, quindi esegui alcune attività che effettuano una comunicazione tra l'applicazione di destinazione e il relativo server.

Tempo di monitorare la dashboard del Burp, in particolare la sezione Log. Se il pinning è attivo, saremo in grado di visualizzare un errore del certificato come segue:

2. È ora di bypassare

2.1 Certificato di spostamento — Modulo Magisk:

Se il tuo dispositivo è rootato con l'applicazione Magisk, il modulo Sposta certificato è una buona opzione.

Questo modulo sposterà i certificati attendibili dell'utente nell'archivio di sistema, facendo in modo che il sistema (root) si fidi del certificato che l'utente installa (il nostro certificato CA proxy)

2.2 Strumento di obiezione

Repo: sensepost/obiezione: obiezione — esplorazione mobile in fase di esecuzione (github.com)

Passaggio 1 : assicurati che il server frida sia in esecuzione sul dispositivo Android

Passaggio 2: allegare l'applicazione di destinazione con obiezione con il seguente comando:

Obiezione -g <nome pacchetto/ PID> esplora

Quindi eseguire il comando " android sslpinning disable "

Ecco fatto, lo script troverà le classi di pinning SSL e le aggancerà durante il runtime per aggirare il pinning.

2.3 Quadro Frida

Repo: Frida (github.com)

Ecco che arriva il metodo più popolare e ampiamente utilizzato.

Passaggio 1 : assicurati che il server frida sia in esecuzione sul dispositivo Android

Passaggio 2: collega la tua applicazione di destinazione con frida ed esegui il tuo script di bypass SSL preferito.

Di seguito i miei script preferiti:

https://codeshare.frida.re/@akabe1/frida-multiple-unpinning/
https://codeshare.frida.re/@pcipolloni/universal-android-ssl-pinning-bypass-with-frida/

2.4 Utilizzo di Xposed Framework

Se il tuo dispositivo è rootato con il framework Xposed , puoi provare i seguenti moduli per bypassare il blocco

  1. ac-pm/SSLUnpinning_Xposed: Modulo Android Xposed per ignorare la convalida del certificato SSL (Certificate Pinning). (github.com)
  2. ViRb3/TrustMeAlready: Disabilita la verifica SSL e il blocco su Android, a livello di sistema (github.com)

apk-mitm è un'applicazione CLI che prepara automaticamente i file APK di Android per l'ispezione HTTPS modificando i file apk e reimballandoli.

Deposito:

shroudedcode/apk-mitm: Un'applicazione CLI che prepara automaticamente i file APK Android per l'ispezione HTTPS (github.com)

apk-mitm può essere estratto usando npm.

Passaggio 1: esegui apk-mitm come mostrato di seguito.

Ecco fatto, apk-mitm ha fatto la sua parte. Ora possiamo installare l'apk con patch e intercettare il traffico dell'applicazione.

2.6 Modifica del file network_security_config.xml

La configurazione della sicurezza di rete consente alle app di personalizzare le impostazioni di sicurezza della rete tramite un file di configurazione dichiarativo . L'intera configurazione è contenuta all'interno di questo file XML e non sono necessarie modifiche al codice.

Fonte : configurazione della sicurezza di rete | Sviluppatori Android

La configurazione della sicurezza di rete funziona in Android 7.0 o versioni successive.

Passaggio 1 : decompilare l'applicazione Android con apktool o alternative. E individuare il file network_security_config.xml in /res/xml.

Passaggio 2 : il file potrebbe avere questo aspetto se l'app ha bloccato i propri certificati CA.

Fonte immagine: developer.android.com

Passaggio 3 : rimuovi la sezione del tag <pin-set>… </pin-set> e aggiungi quanto segue:

Passaggio 4: ora salva il file e reimballa l'applicazione utilizzando apktool e uber-apk-signer (per firmare l'apk modificato).

Ecco fatto, installa il nostro nuovo apk e sei a posto.

3. Cosa succede se l'applicazione non viene intercettata e non mostra alcun errore !!

Qui la prima cosa che mi viene in mente è " Flutter ". Le applicazioni basate su flutter sono fondamentalmente " Proxy inconsapevole ".

Quindi ecco che arriva il nostro eroe " Reflutter ":

" Questo framework aiuta con il reverse engineering delle app Flutter utilizzando la versione con patch della libreria Flutter che è già compilata e pronta per il repacking dell'app. “

Deposito:https://github.com/Impact-I/reFlutter

Step 1: installa il reflutter usando pip

Passo 2: segui i comandi illustrati nello screenshot qui sotto.

Passaggio 3: firma l'applicazione utilizzando uber-apk-signer o qualsiasi altra alternativa e installala.

Passaggio 4: ora in Burp proxy, inizia ad ascoltare la porta 8083 e abilita anche " Support Invisible Proxying ".

Ecco fatto capolino, siete tutti a posto...!

4. La mia applicazione utilizza solo HTTP ma ancora non sono in grado di intercettare!!

Hmm..E' un po' strano, ma a volte succede.

Le applicazioni con questo comportamento sono fondamentalmente chiamate applicazioni " Proxy Unaware ". Tali applicazioni indirizzano il traffico direttamente a Internet senza cooperare con le impostazioni proxy a livello di sistema.

Tempo per bypassare:

Per questo metodo, vorrei ringraziare il fratello Faris ❤.

(60) Faris Maometto | Linkedin

Passaggio 1: scopri l'indirizzo di dominio con cui l'app sta comunicando tramite Wireshark. Mostrato di seguito.

Passaggio 2: decompilare l'applicazione utilizzando apktool

Passaggio 3: accedere alla cartella decompilata e utilizzare lo strumento ack/grep per scoprire il file in cui è menzionato il nome di dominio.

Passaggio 4: sostituire il nome di dominio con l'indirizzo IP e la porta di BurpSuite.

Passaggio 5: reimballare l'applicazione, firmarla e installarla sul dispositivo Android.

Passaggio 7: nel proxy BurpSuite, dalla scheda Gestione richieste, fornire l'host e la porta di reindirizzamento come indirizzo di dominio originale utilizzato dall'app in primo luogo.

Passaggio 8: impostare la corrispondenza e la sostituzione nelle opzioni proxy per sostituire il valore dell'intestazione Host dall'indirizzo IP del listener di burp all'indirizzo di dominio originale dell'applicazione

Questo è tutto. Ora il traffico HTTP dell'applicazione verrà catturato nel nostro proxy Burp.

Nota: - Qui, poiché sostituiamo il dominio dell'applicazione hardcoded, non è necessario configurare il proxy del dispositivo poiché l'applicazione comunica direttamente con il dominio hardcoded (lo abbiamo sostituito con il nostro IP proxy).

Quindi penso di aver finito per ora. In effetti, ci sono altri metodi che possiamo usare per aggirare il pinning SSL di Android. Proverò a fare una parte 2 con quella basata sulle tue risposte.

Grazie fa capolino, buon hacking :)