Applicazioni Android Pentesting
Tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al đŹ gruppo Discord o al gruppo telegram o seguici su Twitter đŚ @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
Fondamenti delle Applicazioni Android
Ă fortemente consigliato iniziare leggendo questa pagina per conoscere le parti piĂš importanti relative alla sicurezza Android e i componenti piĂš pericolosi in unâapplicazione Android:
ADB (Android Debug Bridge)
Questo è lo strumento principale necessario per connettersi a un dispositivo Android (emulato o fisico).
ADB permette di controllare dispositivi sia tramite USB che tramite Network da un computer. Questa utility consente la copia di file in entrambe le direzioni, lâinstallazione e la disinstallazione di app, lâesecuzione di comandi shell, il backup dei dati, la lettura dei log, tra le altre funzioni.
Dai unâocchiata alla seguente lista di ADB Commands per imparare come usare adb.
Smali
A volte è utile modificare il codice dellâapplicazione per accedere a informazioni nascoste (ad esempio password fortemente offuscate o flag). In tal caso, può essere interessante decompilare lâapk, modificare il codice e ricompilarlo.
In this tutorial you can learn how to decompile and APK, modify Smali code and recompile the APK with the new functionality. Questo può essere molto utile come alternativa per diversi test durante lâanalisi dinamica che verranno presentati. Quindi, tieni sempre presente questa possibilitĂ .
Altri trucchi interessanti
- Spoofing your location in Play Store
- Shizuku Privileged API (accesso privilegiato non-root basato su ADB)
- Sfruttare meccanismi di In-App Update insicuri
- Abuso di Accessibility Services (Android RAT)
- NFC/EMV Relay via HCE (abuso Android Tap-to-Pay)
- Scarica APK: https://apps.evozi.com/apk-downloader/, https://apkpure.com/es/, https://www.apkmirror.com/, https://apkcombo.com/es-es/apk-downloader/, https://github.com/kiber-io/apkd
- Estrai APK dal dispositivo:
adb shell pm list packages
com.android.insecurebankv2
adb shell pm path com.android.insecurebankv2
package:/data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk
adb pull /data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk
- Unisci tutti gli split e gli APK base con APKEditor:
mkdir splits
adb shell pm path com.android.insecurebankv2 | cut -d ':' -f 2 | xargs -n1 -i adb pull {} splits
java -jar ../APKEditor.jar m -i splits/ -o merged.apk
# after merging, you will need to align and sign the apk, personally, I like to use the uberapksigner
java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed
Casi di studio e vulnerabilitĂ
Air Keyboard Remote Input Injection
Android Rooting Frameworks Manager Auth Bypass Syscall Hook
Static Analysis
Prima di tutto, per analizzare un APK dovresti dare unâocchiata al codice Java usando un decompiler.
Per favore, leggi qui per trovare informazioni sui diversi decompilatori disponibili.
Ricerca di informazioni interessanti
Bastando osservare le strings dellâAPK puoi cercare password, URL (https://github.com/ndelphit/apkurlgrep), API keys, crittografia, bluetooth uuids, tokens e qualsiasi cosa interessante⌠cerca anche eventuali backdoors per esecuzione di codice o backdoor di autenticazione (credenziali admin hardcoded nellâapp).
Firebase
Presta particolare attenzione alle Firebase URLs e verifica se è mal configurato. Ulteriori informazioni su cosâè Firebase e come sfruttarlo qui.
Nozioni di base sullâapplicazione - Manifest.xml, strings.xml
Lâesame dei file Manifest.xml e strings.xml di unâapplicazione può rivelare potenziali vulnerabilitĂ di sicurezza. Questi file possono essere accessi tramite decompiler o rinominando lâestensione del file APK in .zip e poi estraendolo.
Le vulnerabilitĂ identificate dal Manifest.xml includono:
- Debuggable Applications: Le applicazioni impostate come debuggable (
debuggable="true") nel file Manifest.xml rappresentano un rischio perchĂŠ consentono connessioni che possono portare a sfruttamento. Per capire meglio come sfruttare applicazioni debuggable, consulta un tutorial su come trovare e sfruttare applicazioni debuggable su un dispositivo. - Backup Settings: Lâattributo
android:allowBackup="false"dovrebbe essere impostato esplicitamente per le applicazioni che gestiscono informazioni sensibili per prevenire backup non autorizzati dei dati tramite adb, specialmente quando usb debugging è abilitato. - Network Security: Le configurazioni personalizzate di network security (
android:networkSecurityConfig="@xml/network_security_config") in res/xml/ possono specificare dettagli di sicurezza come certificate pins e impostazioni per il traffico HTTP. Un esempio è permettere traffico HTTP per domini specifici. - Exported Activities and Services: Identificare attivitĂ e servizi esportati nel manifest può evidenziare componenti che potrebbero essere abusati. Unâanalisi piĂš approfondita durante i test dinamici può rivelare come sfruttare questi componenti.
- Content Providers and FileProviders: Content provider esposti potrebbero permettere accesso o modifica non autorizzata dei dati. Anche la configurazione dei FileProviders va esaminata attentamente.
- Broadcast Receivers and URL Schemes: Questi componenti potrebbero essere sfruttati per attacchi, prestando particolare attenzione a come gli URL schemes gestiscono lâinput.
- SDK Versions: Gli attributi
minSdkVersion,targetSDKVersion, emaxSdkVersionindicano le versioni Android supportate, sottolineando lâimportanza di non supportare versioni Android obsolete e vulnerabili per ragioni di sicurezza.
Dal file strings.xml si possono scoprire informazioni sensibili come API keys, schemi custom e altre note degli sviluppatori, il che sottolinea la necessitĂ di una revisione accurata di queste risorse.
Tapjacking
Tapjacking è un attacco in cui una malicious application viene lanciata e si posiziona sopra unâapplicazione vittima. Una volta che oscura visivamente lâapp vittima, la sua interfaccia utente è progettata in modo da ingannare lâutente facendogli interagire con essa, mentre lâinterazione viene passata allâapp vittima.
Di fatto, sta accecando lâutente facendogli ignorare che in realtĂ sta eseguendo azioni sullâapp vittima.
Trova piĂš informazioni in:
Task Hijacking
Unâactivity con il launchMode impostato su singleTask senza alcun taskAffinity definito è vulnerabile al task Hijacking. Questo significa che unâapplication può essere installata e se lanciata prima della reale applicazione potrebbe hijackare il task della vera applicazione (cosĂŹ lâutente interagirĂ con la malicious application pensando di usare quella reale).
Maggiori info in:
Archiviazione dati insicura
Internal Storage
In Android, i file memorizzati nella internal storage sono progettati per essere accessibili esclusivamente dallâapp che li ha creati. Questa misura di sicurezza è imposta dal sistema operativo Android ed è generalmente adeguata per le esigenze di sicurezza della maggior parte delle applicazioni. Tuttavia, gli sviluppatori a volte utilizzano modalitĂ come MODE_WORLD_READABLE e MODE_WORLD_WRITABLE per permettere che file siano condivisi fra diverse applicazioni. Queste modalitĂ non limitano lâaccesso a questi file da altre applicazioni, incluse quelle potenzialmente malevoli.
- Static Analysis:
- Verifica che lâuso di
MODE_WORLD_READABLEeMODE_WORLD_WRITABLEsia scrutinato con attenzione. Queste modalitĂ possono potenzialmente esporre file ad accessi non intenzionati o non autorizzati.
- Dynamic Analysis:
- Controlla i permessi impostati sui file creati dallâapp. In particolare, verifica se alcuni file sono impostati come leggibili o scrivibili a livello mondiale. Questo può rappresentare un rischio significativo per la sicurezza, poichĂŠ permetterebbe a qualsiasi applicazione installata sul dispositivo, indipendentemente dallâorigine o dallâintento, di leggere o modificare tali file.
External Storage
Quando si lavora con file su external storage, come le SD Card, dovrebbero essere prese alcune precauzioni:
- AccessibilitĂ :
- I file su external storage sono globalmente leggibili e scrivibili. Questo significa che qualsiasi applicazione o utente può accedere a questi file.
- Problemi di sicurezza:
- Data la facilità di accesso, è consigliato non memorizzare informazioni sensibili su external storage.
- Lâexternal storage può essere rimosso o accessibile da qualsiasi applicazione, rendendolo meno sicuro.
- Gestione dei dati provenienti da External Storage:
- Esegui sempre validazione degli input sui dati recuperati dallâexternal storage. Questo è fondamentale perchĂŠ i dati provengono da una fonte non attendibile.
- Ă fortemente sconsigliato memorizzare eseguibili o file di class su external storage per il caricamento dinamico.
- Se la tua applicazione deve recuperare file eseguibili dallâexternal storage, assicurati che questi file siano firmati e verificati crittograficamente prima di essere caricati dinamicamente. Questo passaggio è vitale per mantenere lâintegritĂ di sicurezza della tua applicazione.
Lâexternal storage può essere accessed in /storage/emulated/0 , /sdcard , /mnt/sdcard
Tip
A partire da Android 4.4 (API 17), la SD card ha una struttura di directory che limita lâaccesso da unâapp alla directory specifica per quellâapp. Questo impedisce a applicazioni malevoli di ottenere accesso in lettura o scrittura ai file di unâaltra app.
Dati sensibili memorizzati in chiaro
- Shared preferences: Android permette a ogni applicazione di salvare facilmente file xml nel percorso
/data/data/<packagename>/shared_prefs/e a volte è possibile trovare informazioni sensibili in chiaro in quella cartella. - Databases: Android permette a ogni applicazione di salvare facilmente database sqlite nel percorso
/data/data/<packagename>/databases/e a volte è possibile trovare informazioni sensibili in chiaro in quella cartella.
Broken TLS
Accept All Certificates
Per qualche motivo a volte gli sviluppatori accettano tutti i certificati anche se, per esempio, lâhostname non corrisponde, con righe di codice come la seguente:
SSLSocketFactory sf = new cc(trustStore);
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
Un buon modo per testare questo è provare a catturare il traffico usando un proxy come Burp senza autorizzare Burp CA sul dispositivo. Inoltre, puoi generare con Burp un certificato per un hostname diverso e usarlo.
Crittografia debole
Processi di gestione delle chiavi inadeguati
Alcuni sviluppatori salvano dati sensibili nello storage locale e li cifrano con una chiave hardcoded/predicibile nel codice. Questo non dovrebbe essere fatto perchĂŠ del reversing potrebbe permettere agli attaccanti di estrarre le informazioni riservate.
Uso di algoritmi insicuri e/o deprecati
Gli sviluppatori non dovrebbero usare algoritmi deprecati per eseguire controlli di autorizzazione, memorizzare o inviare dati. Alcuni di questi algoritmi sono: RC4, MD4, MD5, SHA1⌠Se vengono usati hash per memorizzare password per esempio, dovrebbero essere usati algoritmi resistenti al brute-force con salt.
Altri controlli
- Si raccomanda di offuscare lâAPK per rendere piĂš difficile il lavoro di reverse engineering agli attaccanti.
- Se lâapp è sensibile (come bank apps), dovrebbe eseguire i propri controlli per verificare se il mobile è rooted e agire di conseguenza.
- Se lâapp è sensibile (come bank apps), dovrebbe verificare se è in uso un emulator.
- Se lâapp è sensibile (come bank apps), dovrebbe controllare la propria integritĂ prima di eseguirla per verificare se è stata modificata.
- Usa APKiD per verificare quale compiler/packer/obfuscator è stato usato per costruire lâAPK
React Native Application
Read the following page to learn how to easily access javascript code of React applications:
Xamarin Applications
Read the following page to learn how to easily access C# code of a xamarin applications:
Superpacked Applications
According to this blog post superpacked is a Meta algorithm that compress the content of an application into a single file. The blog talks about the possibility of creating an app that decompress these kind of apps⌠and a faster way which involves to execute the application and gather the decompressed files from the filesystem.
Automated Static Code Analysis
Lo strumento mariana-trench è in grado di trovare vulnerabilities scansionando il code dellâapplicazione. Questo tool contiene una serie di known sources (che indicano al tool i posti dove lâinput è controllato dallâutente), sinks (che indicano i posti pericolosi dove un input malevolo dellâutente potrebbe causare danni) e rules. Queste regole indicano la combinazione di sources-sinks che segnala una vulnerability.
Con queste informazioni, mariana-trench esaminerĂ il codice e troverĂ possibili vulnerabilitĂ al suo interno.
Segreti leaked
Unâapplicazione può contenere segreti (API keys, password, url nascosti, sottodominiâŚ) al suo interno che potresti essere in grado di scoprire. Puoi usare uno strumento come https://github.com/dwisiswant0/apkleaks
Bypass Biometric Authentication
Bypass Biometric Authentication (Android)
Altre funzioni interessanti
- Code execution:
Runtime.exec(), ProcessBuilder(), native code:system() - Send SMSs:
sendTextMessage, sendMultipartTestMessage - Native functions dichiarate come
native:public native, System.loadLibrary, System.load - Leggi questo per imparare how to reverse native functions
- In-memory native code execution via JNI (downloaded shellcode â mmap/mprotect â call):
In Memory Jni Shellcode Execution
Other tricks
Analisi dinamica
Prima di tutto, hai bisogno di un ambiente dove poter installare lâapplicazione e tutta la configurazione (Burp CA cert, Drozer e Frida principalmente). Perciò, un dispositivo rooted (emulato o no) è fortemente raccomandato.
Analisi dinamica online
Puoi creare un account gratuito su: https://appetize.io/. Questa piattaforma ti permette di caricare ed eseguire APK, quindi è utile per vedere come si comporta un apk.
Puoi persino vedere i log della tua applicazione nel web e connetterti tramite adb.
.png)
Grazie alla connessione ADB puoi usare Drozer e Frida allâinterno degli emulatori.
Analisi dinamica locale
Usare un emulator
- Android Studio (Puoi creare dispositivi x86 e arm, e secondo questole versioni x86 piĂš recenti supportano librerie ARM senza bisogno di un lento emulator arm).
- Impara come configurarlo in questa pagina:
- Genymotion (versione gratuita: Personal Edition, è necessario creare un account. à consigliato scaricare la versione CON VirtualBox per evitare potenziali errori.)
- Nox (Gratuito, ma non supporta Frida o Drozer).
Tip
Quando crei un nuovo emulator su qualsiasi piattaforma ricorda che piĂš grande è lo schermo, piĂš lento girerĂ lâemulatore. Quindi seleziona schermi piccoli se possibile.
Per installare google services (come AppStore) in Genymotion devi cliccare sul pulsante evidenziato in rosso nellâimmagine seguente:
.png)
Inoltre, nota che nella configurazione della VM Android in Genymotion puoi selezionare la modalitĂ Bridge Network (questo sarĂ utile se ti connetterai alla VM Android da una VM differente con gli strumenti).
Usare un dispositivo fisico
Devi attivare le opzioni di debugging e sarebbe consigliabile se puoi rootarlo:
- Impostazioni.
- (Da Android 8.0) Seleziona Sistema.
- Seleziona Informazioni sul telefono.
- Premi Numero build 7 volte.
- Torna indietro e troverai le Opzioni sviluppatore.
Una volta installata lâapplicazione, la prima cosa da fare è provarla e investigare cosa fa, come funziona e prendere confidenza con essa.
Suggerisco di eseguire questa analisi dinamica iniziale usando MobSF dynamic analysis + pidcat, cosĂŹ saremo in grado di imparare come funziona lâapplicazione mentre MobSF cattura molti dati interessanti che potrai rivedere in seguito.
Note rapide Magisk/Zygisk (raccomandate sui dispositivi Pixel)
- Patch del boot.img con lâapp Magisk e flash tramite fastboot per ottenere root systemless
- Abilita Zygisk + DenyList per nascondere il root; considera LSPosed/Shamiko quando è richiesto un nascondimento piÚ forte
- Conserva il boot.img originale per recuperare dagli aggiornamenti OTA; ripatcha dopo ogni OTA
- Per il mirroring dello schermo, usa scrcpy sul host
Unintended Data Leakage
Logging
Gli sviluppatori dovrebbero fare attenzione a non esporre pubblicamente informazioni di debugging, poichĂŠ possono portare a leak di dati sensibili. Gli strumenti pidcat e adb logcat sono raccomandati per monitorare i log dellâapplicazione e identificare e proteggere informazioni sensibili. Pidcat è preferito per la sua facilitĂ dâuso e leggibilitĂ .
Warning
Nota che da versioni successive a Android 4.0, le applicazioni possono accedere solo ai propri log. Quindi le app non possono accedere ai log di altre app.
Comunque, è sempre raccomandato di non loggare informazioni sensibili.
Copy/Paste Buffer Caching
Il framework basato su clipboard di Android abilita la funzionalitĂ copia-incolla nelle app, ma comporta un rischio poichĂŠ altre applicazioni possono accedere alla clipboard, esponendo potenzialmente dati sensibili. Ă cruciale disabilitare le funzioni di copia/incolla per sezioni sensibili di unâapplicazione, come i dettagli delle carte di credito, per prevenire leak di dati.
Crash Logs
Se unâapplicazione crasha e salva log, questi log possono aiutare gli attaccanti, specialmente quando lâapp non può essere reverse-engineerata. Per mitigare questo rischio, evita di loggare durante i crash, e se i log devono essere trasmessi in rete, assicurati che vengano inviati tramite un canale SSL per sicurezza.
Come pentester, prova a dare unâocchiata a questi log.
Analytics Data Sent To 3rd Parties
Le applicazioni spesso integrano servizi come Google Adsense, che possono involontariamente leak sensitive data a causa di implementazioni errate da parte degli sviluppatori. Per identificare potenziali leak di dati, è consigliabile intercettare il traffico dellâapplicazione e verificare se informazioni sensibili vengono inviate a servizi di terze parti.
SQLite DBs
La maggior parte delle applicazioni utilizzerĂ internal SQLite databases per salvare informazioni. Durante il pentest dai unâocchiata ai database creati, i nomi delle tabelle e delle colonne e a tutti i dati salvati perchĂŠ potresti trovare informazioni sensibili (che costituirebbero una vulnerability).
I database dovrebbero trovarsi in /data/data/the.package.name/databases come /data/data/com.mwr.example.sieve/databases
Se il database salva informazioni riservate ed è encrypted ma puoi trovare la password allâinterno dellâapplicazione è comunque una vulnerability.
Enumera le tabelle usando .tables e enumera le colonne delle tabelle con .schema <table_name>
Drozer (Exploit Activities, Content Providers and Services)
From Drozer Docs: Drozer permette di assumere il ruolo di unâapp Android e interagire con altre app. Può fare qualsiasi cosa che unâapp installata può fare, come usare il meccanismo di Inter-Process Communication (IPC) di Android e interagire con il sistema operativo sottostante. .
Drozer è uno strumento utile per exploit exported activities, exported services and Content Providers come imparerai nelle sezioni seguenti.
Exploiting exported Activities
Read this if you want to refresh what is an Android Activity.
Ricorda inoltre che il codice di un activity inizia nel metodo onCreate.
Authorisation bypass
Quando un Activity è exported puoi invocare la sua schermata da unâapp esterna. Pertanto, se un activity con informazioni sensibili è exported potresti bypassare i meccanismi di autenticazione per accedervi.
Learn how to exploit exported activities with Drozer.
Puoi anche avviare un exported activity da adb:
- PackageName is com.example.demo
- Exported ActivityName is com.example.test.MainActivity
adb shell am start -n com.example.demo/com.example.test.MainActivity
NOTE: MobSF will detect as malicious the use of singleTask/singleInstance as android:launchMode in an activity, but due to this, apparently this is only dangerous on old versions (API versions < 21).
Tip
Nota che un authorisation bypass non è sempre una vulnerabilità : dipende da come funziona il bypass e quali informazioni vengono esposte.
Sensitive information leakage
Activities can also return results. Se riesci a trovare unâactivity exported e non protetta che chiama il metodo setResult e restituisce informazioni sensibili, si verifica una sensitive information leakage.
Tapjacking
If tapjacking isnât prevented, you could abuse the exported activity to make the user perform unexpected actions. For more info about what is Tapjacking follow the link.
Exploiting Content Providers - Accessing and manipulating sensitive information
Read this if you want to refresh what is a Content Provider.
Content providers sono fondamentalmente usati per condividere dati. Se unâapp ha content providers disponibili potresti essere in grado di estrarre dati sensibili da essi. Ă inoltre interessante testare possibili SQL injections e Path Traversals in quanto potrebbero essere vulnerabili.
Learn how to exploit Content Providers with Drozer.
Exploiting Services
Read this if you want to refresh what is a Service.
Ricorda che le azioni di un Service iniziano nel metodo onStartCommand.
Un service è fondamentalmente qualcosa che può ricevere dati, processarli e restituire (o meno) una risposta. Quindi, se unâapp sta exportando alcuni services dovresti controllare il code per capire cosa fa e testarlo dinamicamente per estrarre info riservate, bypassare misure di autenticazioneâŚ
Learn how to exploit Services with Drozer.
Exploiting Broadcast Receivers
Read this if you want to refresh what is a Broadcast Receiver.
Ricorda che le azioni di un Broadcast Receiver iniziano nel metodo onReceive.
Un Broadcast Receiver rimane in attesa di un tipo di messaggio. A seconda di come il receiver gestisce il messaggio, potrebbe essere vulnerabile.
Learn how to exploit Broadcast Receivers with Drozer.
Exploiting Schemes / Deep links
Puoi cercare deep links manualmente, usando tool come MobSF o script come this one.
Puoi open uno scheme dichiarato usando adb o un browser:
adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name]
Nota che puoi omettere il package name e il dispositivo mobile chiamerĂ automaticamente lâapp che dovrebbe aprire quel link.
<!-- Browser regular link -->
<a href="scheme://hostname/path?param=value">Click me</a>
<!-- fallback in your url you could try the intent url -->
<a href="intent://hostname#Intent;scheme=scheme;package=your.package.name;S.browser_fallback_url=http%3A%2F%2Fwww.example.com;end">with alternative</a>
Codice eseguito
Per trovare il codice che verrĂ eseguito nellâApp, vai allâactivity chiamata dal deeplink e cerca la funzione onNewIntent.
 (1) (1) (1).png)
Informazioni sensibili
Ogni volta che trovi un deep link verifica che non stia ricevendo dati sensibili (come password) tramite parametri URL, perchĂŠ qualsiasi altra applicazione potrebbe impersonare il deep link e rubare quei dati!
Parametri nel path
Devi controllare anche se qualche deep link usa un parametro allâinterno del path dellâURL come: https://api.example.com/v1/users/{username} , in tal caso puoi forzare un path traversal accedendo a qualcosa come: example://app/users?username=../../unwanted-endpoint%3fparam=value .
Nota che se trovi gli endpoint corretti allâinterno dellâapplicazione potresti essere in grado di causare un Open Redirect (se parte del path viene usata come nome di dominio), account takeover (se puoi modificare i dettagli degli utenti senza CSRF token e lâendpoint vuln usa il metodo corretto) e qualsiasi altra vuln. Maggiori info su questo qui.
Altri esempi
Un interessante bug bounty report su links (/.well-known/assetlinks.json).
Ispezione del Transport Layer e problemi di verifica
- I certificati non vengono sempre ispezionati correttamente dalle applicazioni Android. Ă comune che queste applicazioni ignorino gli avvisi e accettino certificati self-signed o, in alcuni casi, tornino a usare connessioni HTTP.
- Le negoziazioni durante lâhandshake SSL/TLS sono talvolta deboli, impiegando suite di cifratura insicure. Questa vulnerabilitĂ rende la connessione suscettibile ad attacchi man-in-the-middle (MITM), permettendo agli attacker di decrittare i dati.
- Leakage of private information è un rischio quando le applicazioni si autenticano usando canali sicuri ma poi comunicano su canali non sicuri per altre transazioni. Questo approccio non protegge i dati sensibili, come cookie di sessione o dettagli degli utenti, dallâintercettazione da parte di entitĂ malevole.
Verifica del certificato
Ci concentreremo sulla verifica dei certificati. LâintegritĂ del certificato del server deve essere verificata per migliorare la sicurezza. Questo è cruciale perchĂŠ configurazioni TLS insicure e la trasmissione di dati sensibili su canali non cifrati possono comportare rischi significativi. Per passaggi dettagliati sulla verifica dei certificati server e sulla risoluzione delle vulnerabilitĂ , questa risorsa fornisce una guida completa.
SSL Pinning
SSL Pinning è una misura di sicurezza in cui lâapplicazione verifica il certificato del server confrontandolo con una copia nota memorizzata nellâapp stessa. Questo metodo è essenziale per prevenire attacchi MITM. Implementare SSL Pinning è fortemente raccomandato per applicazioni che gestiscono informazioni sensibili.
Ispezione del traffico
Per ispezionare il traffico HTTP, è necessario installare il certificato dello strumento proxy (es. Burp). Senza installare questo certificato, il traffico cifrato potrebbe non essere visibile tramite il proxy. Per una guida sullâinstallazione di un certificato CA custom, clicca qui.
Le applicazioni che targettizzano API Level 24 and above richiedono modifiche al Network Security Config per accettare il certificato CA del proxy. Questo passaggio è critico per ispezionare il traffico cifrato. Per istruzioni sulla modifica del Network Security Config, consulta questo tutorial.
Se viene usato Flutter, è necessario seguire le istruzioni in questa pagina. Questo perchÊ, aggiungere semplicemente il certificato nello store non funzionerà in quanto Flutter ha la propria lista di CA valide.
Rilevamento statico dello SSL/TLS pinning
Prima di tentare bypass a runtime, mappa rapidamente dove il pinning è applicato nellâAPK. La scoperta statica ti aiuta a pianificare hooks/patches e a concentrarti sui giusti code paths.
Tool: SSLPinDetect
- Utility open-source di static-analysis che decompila lâAPK in Smali (via apktool) e scansiona per pattern regex curati di implementazioni di SSL/TLS pinning.
- Riporta il file path esatto, il numero di linea e uno snippet di codice per ogni match.
- Copre framework comuni e code paths custom: OkHttp CertificatePinner, custom javax.net.ssl.X509TrustManager.checkServerTrusted, SSLContext.init con custom TrustManagers/KeyManagers, e Network Security Config XML pins.
Install
- Prerequisiti: Python >= 3.8, Java on PATH, apktool
git clone https://github.com/aancw/SSLPinDetect
cd SSLPinDetect
pip install -r requirements.txt
Uso
# Basic
python sslpindetect.py -f app.apk -a apktool.jar
# Verbose (timings + per-match path:line + snippet)
python sslpindetect.py -a apktool_2.11.0.jar -f sample/app-release.apk -v
Esempi di regole di pattern (JSON) Usa o estendi le signatures per rilevare stili di pinning proprietari/custom. Puoi caricare il tuo JSON e scansionare su larga scala.
{
"OkHttp Certificate Pinning": [
"Lcom/squareup/okhttp/CertificatePinner;",
"Lokhttp3/CertificatePinner;",
"setCertificatePinner"
],
"TrustManager Override": [
"Ljavax/net/ssl/X509TrustManager;",
"checkServerTrusted"
]
}
Notes e consigli
- Scansione veloce su app di grandi dimensioni tramite multi-threading e memory-mapped I/O; regex precompilate riducono overhead/falsi positivi.
- Raccolta di pattern: https://github.com/aancw/smali-sslpin-patterns
- Tipici obiettivi di rilevamento da analizzare dopo:
- OkHttp: uso di CertificatePinner, setCertificatePinner, riferimenti al package okhttp3/okhttp
- TrustManagers personalizzati: javax.net.ssl.X509TrustManager, override di checkServerTrusted
- Contesti SSL personalizzati: SSLContext.getInstance + SSLContext.init con manager personalizzati
- Pin dichiarativi in res/xml network security config e riferimenti nel manifest
- Usa le posizioni corrispondenti per pianificare Frida hooks, patch statici o revisioni della config prima dei test dinamici.
Bypassare SSL Pinning
Quando SSL Pinning è implementato, bypassarlo diventa necessario per ispezionare il traffico HTTPS. Sono disponibili vari metodi per questo scopo:
- Automatically modify the apk to bypass SSLPinning with apk-mitm. Il principale vantaggio di questa opzione è che non servirĂ root per bypassare lo SSL Pinning, ma dovrai eliminare lâapplicazione e reinstallare quella nuova, e non sempre funzionerĂ .
- Puoi usare Frida (discusso sotto) per bypassare questa protezione. Qui trovi una guida per usare Burp+Frida+Genymotion: https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/
- Puoi anche provare a bypassare automaticamente SSL Pinning usando objection:
objection --gadget com.package.app explore --startup-command "android sslpinning disable" - Puoi anche provare a bypassare automaticamente SSL Pinning usando MobSF dynamic analysis (spiegato sotto)
- Se pensi ancora che ci sia traffico che non stai catturando puoi provare a inoltrare il traffico a Burp usando iptables. Leggi questo blog: https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62
Ricerca di vulnerabilitĂ web comuni
Ă importante cercare anche vulnerabilitĂ web comuni allâinterno dellâapplicazione. Informazioni dettagliate sullâidentificazione e la mitigazione di queste vulnerabilitĂ sono oltre lo scopo di questo sommario ma vengono trattate estensivamente altrove.
Frida
Frida è un toolkit di instrumentazione dinamica per sviluppatori, reverse-engineer e ricercatori della sicurezza.
Puoi accedere allâapplicazione in esecuzione e hookare i metodi a runtime per cambiare il comportamento, modificare valori, estrarre valori, eseguire codice diversoâŚ
Se vuoi pentest applicazioni Android devi sapere come usare Frida.
- Learn how to use Frida: Frida tutorial
- Alcune âGUIâ per azioni con Frida: https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security
- Ojection è ottimo per automatizzare lâuso di Frida: https://github.com/sensepost/objection , https://github.com/dpnishant/appmon
- Puoi trovare alcuni Awesome Frida scripts qui: https://codeshare.frida.re/
- Prova a bypassare meccanismi anti-debugging / anti-frida caricando Frida come indicato in https://erfur.github.io/blog/dev/code-injection-without-ptrace (tool linjector)
Anti-instrumentation & SSL pinning bypass workflow
Android Anti Instrumentation And Ssl Pinning Bypass
Dump della memoria - Fridump
Verifica se lâapplicazione sta memorizzando informazioni sensibili nella memoria che non dovrebbe memorizzare, come password o mnemonici.
Usando Fridump3 puoi fare il dump della memoria dellâapp con:
# With PID
python3 fridump3.py -u <PID>
# With name
frida-ps -Uai
python3 fridump3.py -u "<Name>"
Questo effettuerĂ il dump della memoria nella cartella ./dump, e lĂŹ potresti usare grep con qualcosa del tipo:
strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+$"
Dati sensibili nel Keystore
Su Android il Keystore è il posto migliore per memorizzare dati sensibili, tuttavia, con sufficienti privilegi è ancora possibile accedervi. PoichÊ le applicazioni tendono a memorizzare qui dati sensibili in chiaro, i pentests dovrebbero verificarne la presenza, poichÊ un root user o qualcuno con accesso fisico al dispositivo potrebbe riuscire a rubare questi dati.
Anche se unâapp memorizzasse dati nel keystore, i dati dovrebbero essere cifrati.
Per accedere ai dati allâinterno del keystore puoi usare questo Frida script: https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js
frida -U -f com.example.app -l frida-scripts/tracer-cipher.js
Fingerprint/Biometrics Bypass
Usando il seguente Frida script potrebbe essere possibile bypass fingerprint authentication che le applicazioni Android eseguono per proteggere alcune aree sensibili:
frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app.package>
Immagini in background
Quando mandi unâapplicazione in background, Android memorizza una snapshot of the application cosĂŹ quando viene riportata in primo piano inizia a caricare lâimmagine prima dellâapp, in modo che sembri che lâapp sia stata caricata piĂš velocemente.
Tuttavia, se questa snapshot contiene informazioni sensibili, qualcuno con accesso alla snapshot potrebbe rubare quelle informazioni (nota che è necessario avere root per accedervi).
Gli snapshot sono solitamente memorizzati in: /data/system_ce/0/snapshots
Android fornisce un modo per impedire la cattura di screenshot impostando il parametro di layout FLAG_SECURE. Usando questo flag, il contenuto della finestra viene trattato come sicuro, impedendone la comparsa negli screenshot o la visualizzazione su display non sicuri.
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
Android Application Analyzer
This tool could help you managing different tools during the dynamic analysis: https://github.com/NotSoSecure/android_application_analyzer
Intent Injection
Gli sviluppatori spesso creano componenti proxy come activities, services e broadcast receivers che gestiscono questi Intent e li passano a metodi come startActivity(...) o sendBroadcast(...), il che può essere rischioso.
Il pericolo risiede nel permettere ad un attaccante di attivare componenti non-exported dellâapp o di accedere a content providers sensibili deviando questi Intent. Un esempio notevole è il componente WebView che converte le URL in oggetti Intent tramite Intent.parseUri(...) e poi li esegue, potenzialmente portando a malicious Intent injections.
Essential Takeaways
- Intent Injection è simile al problema Open Redirect del web.
- Gli exploit implicano il passaggio di oggetti
Intentcome extras, che possono essere reindirizzati per eseguire operazioni non sicure. - Può esporre componenti non-exported e content providers agli attaccanti.
- La conversione da URL a
IntentdiWebViewpuò facilitare azioni non intenzionate.
Android Client Side Injections and others
Probabilmente conosci questo tipo di vulnerabilitĂ dal Web. Devi prestare particolare attenzione a queste vulnerabilitĂ in unâapp Android:
- SQL Injection: When dealing with dynamic queries or Content-Providers ensure you are using parameterized queries.
- JavaScript Injection (XSS): Verify that JavaScript and Plugin support is disabled for any WebViews (disabled by default). More info here.
- Local File Inclusion: WebViews should have access to the file system disabled (enabled by default) -
(webview.getSettings().setAllowFileAccess(false);). More info here. - Eternal cookies: In diversi casi quando lâapp Android termina la sessione il cookie non viene revocato o può essere addirittura salvato su disco
- Secure Flag in cookies
Automatic Analysis
MobSF
Analisi statica
.png)
Valutazione delle vulnerabilitĂ dellâapplicazione usando una comoda interfaccia web. Puoi anche eseguire analisi dinamica (ma devi preparare lâambiente).
docker pull opensecurity/mobile-security-framework-mobsf
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
Nota che MobSF può analizzare Android(apk), IOS(ipa) e Windows(apx) applicazioni (Le applicazioni Windows devono essere analizzate da unâistanza di MobSF installata su un host Windows).
Inoltre, se crei un file ZIP con il codice sorgente di unâapp Android o IOS (vai nella cartella root dellâapplicazione, seleziona tutto e crea un file ZIP), sarĂ in grado di analizzarlo.
MobSF permette anche di fare il diff/Compare delle analisi e di integrare VirusTotal (dovrai impostare la tua API key in MobSF/settings.py e abilitarla: VT_ENABLED = TRUE VT_API_KEY = <Your API key> VT_UPLOAD = TRUE). Puoi anche impostare VT_UPLOAD a False, in tal caso verrĂ caricato lâhash invece del file.
Analisi dinamica assistita con MobSF
MobSF può essere molto utile anche per lâanalisi dinamica su Android, ma in questo caso dovrai installare MobSF e genymotion sullâhost (una VM o Docker non funzioneranno). Nota: Devi avviare prima una VM in genymotion e poi MobSF.
Il MobSF dynamic analyser può:
- Dump application data (URL, log, clipboard, screenshot fatti da te, screenshot fatti da âExported Activity Testerâ, email, database SQLite, file XML e altri file creati). Tutto questo viene fatto automaticamente eccetto per gli screenshot: devi premere quando vuoi uno screenshot oppure premere âExported Activity Testerâ per ottenere gli screenshot di tutte le attivitĂ esportate.
- Catturare HTTPS traffic
- Usare Frida per ottenere informazioni runtime
Per le versioni Android > 5, avvierĂ automaticamente Frida e imposterĂ le impostazioni di proxy globali per catturare il traffico. CatturerĂ solo il traffico dellâapplicazione testata.
Frida
Di default, utilizzerĂ anche alcuni Frida Scripts per bypass SSL pinning, root detection e debugger detection e per monitorare API interessanti.
MobSF può anche invoke exported activities, catturare screenshots di esse e salvarle per il report.
Per start del testing dinamico premi il pulsante verde: âStart Instrumentationâ. Premi âFrida Live Logsâ per vedere i log generati dagli script Frida e âLive API Monitorâ per vedere tutte le invocazioni ai metodi hookati, gli argomenti passati e i valori restituiti (questo apparirĂ dopo aver premuto âStart Instrumentationâ).
MobSF permette anche di caricare i propri Frida scripts (per inviare i risultati dei tuoi Frida scripts a MobSF usa la funzione send()). Ha anche diversi script pre-scritti che puoi caricare (puoi aggiungerne altri in MobSF/DynamicAnalyzer/tools/frida_scripts/others/), selezionali, premi âLoadâ e premi âStart Instrumentationâ (potrai vedere i log di quegli script dentro âFrida Live Logsâ).
.png)
Inoltre, hai alcune funzionalitĂ ausiliarie di Frida:
- Enumerate Loaded Classes: stamperĂ tutte le classi caricate
- Capture Strings: stamperĂ tutte le stringhe catturate durante lâuso dellâapplicazione (molto rumoroso)
- Capture String Comparisons: può essere molto utile. Mostrerà le 2 stringhe confrontate e se il risultato è True o False.
- Enumerate Class Methods: Inserisci il nome della classe (es. âjava.io.Fileâ) e stamperĂ tutti i metodi della classe.
- Search Class Pattern: cerca classi tramite pattern
- Trace Class Methods: Trace una classe intera (mostra input e output di tutti i metodi della classe). Ricorda che di default MobSF traccia diversi metodi interessanti delle Android API.
Una volta selezionato il modulo ausiliario che vuoi usare devi premere âStart Intrumentationâ e vedrai tutti gli output in âFrida Live Logsâ.
Shell
MobSF offre anche una shell con alcuni comandi adb, MobSF commands, e comuni comandi di shell nella parte inferiore della pagina di analisi dinamica. Alcuni comandi interessanti:
help
shell ls
activities
exported_activities
services
receivers
HTTP tools
Quando il traffico http viene catturato puoi vedere una vista brutta del traffico catturato nel pulsante âHTTP(S) Trafficâ in basso o una vista piĂš gradevole nel pulsante verde âStart HTTPToolsâ. Dalla seconda opzione, puoi inviare le richieste catturate a proxies come Burp o Owasp ZAP.
To do so, accendi Burp â> disattiva Intercept â> in MobSB HTTPTools seleziona la richiesta â> premi âSend to Fuzzerâ â> seleziona lâindirizzo del proxy (http://127.0.0.1:8080\).
Una volta terminata lâanalisi dinamica con MobSF puoi premere âStart Web API Fuzzerâ per fuzz http requests e cercare vulnerabilitĂ .
Tip
Dopo aver eseguito unâanalisi dinamica con MobSF le impostazioni del proxy possono essere misconfigure e potresti non essere in grado di correggerle dallâinterfaccia GUI. Puoi correggere le impostazioni del proxy eseguendo:
adb shell settings put global http_proxy :0
Assisted Dynamic Analysis with Inspeckage
Puoi ottenere lo strumento da Inspeckage.
Questo strumento usa alcuni Hooks per farti capire cosa sta succedendo nellâapplicazione mentre esegui unâanalisi dinamica.
Yaazhini
Questo è un ottimo tool per eseguire analisi statica con una GUI
.png)
Qark
Questo strumento è progettato per cercare diverse vulnerabilitĂ delle applicazioni Android legate alla sicurezza, sia nel source code che negli packaged APKs. Lo strumento è anche capace di creare un âProof-of-Conceptâ deployable APK e ADB commands, per sfruttare alcune delle vulnerabilitĂ trovate (Exposed activities, intents, tapjackingâŚ). Come con Drozer, non è necessario effettuare il root del dispositivo di test.
pip3 install --user qark # --user is only needed if not using a virtualenv
qark --apk path/to/my.apk
qark --java path/to/parent/java/folder
qark --java path/to/specific/java/file.java
ReverseAPK
- Mostra tutti i file estratti per un facile riferimento
- Decompila automaticamente i file APK nel formato Java e Smali
- Analizza AndroidManifest.xml per vulnerabilitĂ e comportamenti comuni
- Analisi statica del codice sorgente per vulnerabilitĂ e comportamenti comuni
- Informazioni dispositivo
- e altro
reverse-apk relative/path/to/APP.apk
SUPER Android Analyzer
SUPER è unâapplicazione a riga di comando che può essere usata in Windows, MacOS X e Linux, che analizza i file .apk alla ricerca di vulnerabilitĂ . Lo fa decomprimendo gli APK e applicando una serie di regole per rilevarle.
Tutte le regole sono centralizzate in un file rules.json, e ogni azienda o tester può creare le proprie regole per analizzare ciò di cui ha bisogno.
Scarica i binari piĂš recenti dalla download page
super-analyzer {apk_file}
StaCoAn
.png)
StaCoAn è uno strumento multipiattaforma che aiuta gli sviluppatori, bugbounty hunters e ethical hackers a eseguire static code analysis su applicazioni mobili.
Il concetto è che trascini e rilasci il file della tua applicazione mobile (un file .apk o .ipa) sullâapplicazione StaCoAn e questa genererĂ per te un report visivo e portatile. Puoi modificare le impostazioni e le wordlists per ottenere unâesperienza personalizzata.
Download latest release:
./stacoan
AndroBugs
AndroBugs Framework è un sistema di analisi delle vulnerability per Android che aiuta sviluppatori o hackers a trovare potenziali vulnerability nelle applicazioni Android.
Windows releases
python androbugs.py -f [APK file]
androbugs.exe -f [APK file]
Androwarn
Androwarn è uno strumento il cui obiettivo principale è rilevare e avvertire lâutente riguardo a potenziali comportamenti malevoli sviluppati da unâapplicazione Android.
La rilevazione viene effettuata mediante la static analysis del Dalvik bytecode dellâapplicazione, rappresentato come Smali, con la libreria androguard.
Questo strumento cerca comportamenti comuni di applicazioni âmaligneâ come: Telephony identifiers exfiltration, Audio/video flow interception, PIM data modification, Arbitrary code executionâŚ
python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
MARA Framework
.png)
MARA è un framework per il reverse engineering e lâanalisi di applicazioni mobile. Ă uno strumento che mette insieme strumenti comunemente usati per il reverse engineering e lâanalisi di mobile application, per aiutare nei test delle applicazioni mobile contro le minacce di sicurezza mobile OWASP. Il suo obiettivo è rendere questo compito piĂš semplice e amichevole per gli sviluppatori di applicazioni mobile e i professionisti della sicurezza.
Ă in grado di:
- Estrarre codice Java e Smali usando diversi strumenti
- Analizzare APK utilizzando: smalisca, ClassyShark, androbugs, androwarn, APKiD
- Estrarre informazioni private dallâAPK usando regexps.
- Analizzare il Manifest.
- Analizzare i domini trovati usando: pyssltest, testssl e whatweb
- Deobfuscare APK via apk-deguard.com
Koodous
Utile per rilevare malware: https://koodous.com/
Offuscamento/Deoffuscamento del codice
Nota che, a seconda del servizio e della configurazione usati per offuscare il codice, i segreti possono o non possono risultare offuscati.
ProGuard
Da Wikipedia: ProGuard è uno strumento open source da riga di comando che riduce, ottimizza e offusca codice Java. à in grado di ottimizzare il bytecode e di rilevare e rimuovere istruzioni non usate. ProGuard è software libero e viene distribuito sotto la GNU General Public License, versione 2.
ProGuard è distribuito come parte dellâAndroid SDK e viene eseguito durante la build dellâapplicazione in modalitĂ release.
DexGuard
Trova una guida passo-passo per deoffuscare lâapk in https://blog.lexfo.fr/dexguard.html
(Dalla guida) Lâultima volta che abbiamo controllato, la modalitĂ di funzionamento di Dexguard era:
- caricare una risorsa come un InputStream;
- passare il risultato a una classe che eredita da FilterInputStream per decriptarlo;
- eseguire qualche inutile offuscamento per far perdere qualche minuto a un reverser;
- passare il risultato decriptato a un ZipInputStream per ottenere un file DEX;
- infine caricare il DEX risultante come Resource usando il metodo
loadDex.
DeGuard
DeGuard inverte il processo di offuscamento eseguito dagli strumenti di offuscamento Android. Questo abilita numerose analisi di sicurezza, inclusa lâispezione del codice e lâidentificazione delle librerie.
Puoi caricare un APK offuscato sulla loro piattaforma.
[Deobfuscate android App]https://github.com/In3tinct/deobfuscate-android-app
Questo è uno strumento LLM per trovare potenziali vulnerabilitĂ di sicurezza nelle app android e deoffuscare il codice delle app android. Usa lâAPI pubblica Gemini di Google.
Simplify
Ă un deoffuscatore android generico. Simplify esegue virtualmente unâapp per comprenderne il comportamento e poi cerca di ottimizzare il codice in modo che si comporti in modo identico ma sia piĂš facile da comprendere per un umano. Ogni tipo di ottimizzazione è semplice e generico, quindi non importa quale specifico tipo di offuscamento venga usato.
APKiD
APKiD ti dà informazioni su come è stato creato un APK. Identifica molti compilers, packers, obfuscators, e altre cose strane. à PEiD per Android.
Manuale
Laboratori
Androl4b
AndroL4b è una virtual machine per la sicurezza Android basata su ubuntu-mate che include una raccolta degli ultimi framework, tutorial e lab provenienti da diversi security geeks e ricercatori per il reverse engineering e lâanalisi di malware.
Riferimenti
- https://owasp.org/www-project-mobile-app-security/
- https://appsecwiki.com/#/ Ă unâottima lista di risorse
- https://maddiestone.github.io/AndroidAppRE/ Corso rapido di Android
- https://manifestsecurity.com/android-application-security/
- https://github.com/Ralireza/Android-Security-Teryaagh
- https://www.youtube.com/watch?v=PMKnPaGWxtg&feature=youtu.be&ab_channel=B3nacSec
- SSLPinDetect: Advanced SSL Pinning Detection for Android Security Analysis
- SSLPinDetect GitHub
- smali-sslpin-patterns
- Build a Repeatable Android Bug Bounty Lab: Emulator vs Magisk, Burp, Frida, and Medusa
- CoRPhone â Android in-memory JNI execution and packaging pipeline
Tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al đŹ gruppo Discord o al gruppo telegram o seguici su Twitter đŚ @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
HackTricks

