Android Applications Pentesting

Support HackTricks

Join HackenProof Discord server to communicate with experienced hackers and bug bounty hunters!

Hacking Insights Engage with content that delves into the thrill and challenges of hacking

Real-Time Hack News Keep up-to-date with fast-paced hacking world through real-time news and insights

Latest Announcements Stay informed with the newest bug bounties launching and crucial platform updates

Join us on Discord and start collaborating with top hackers today!

Android Applications Basics

È altamente raccomandato iniziare a leggere questa pagina per conoscere le parti più importanti relative alla sicurezza di Android e i componenti più pericolosi in un'applicazione Android:

Android Applications Basics

ADB (Android Debug Bridge)

Questo è lo strumento principale di cui hai bisogno per connetterti a un dispositivo android (emulato o fisico). ADB consente di controllare i dispositivi sia tramite USB che Network da un computer. Questa utility abilita la copia di file in entrambe le direzioni, installazione e disinstallazione di app, esecuzione di comandi shell, backup di dati, lettura di log, tra le altre funzioni.

Dai un'occhiata alla seguente lista di ADB Commands per imparare come usare adb.

Smali

A volte è interessante modificare il codice dell'applicazione per accedere a informazioni nascoste (forse password o flag ben offuscati). Quindi, potrebbe essere interessante decompilare l'apk, modificare il codice e ricompilarlo. In questo tutorial puoi imparare come decompilare un APK, modificare il codice Smali e ricompilare l'APK con la nuova funzionalità. Questo potrebbe essere molto utile come alternativa per diversi test durante l'analisi dinamica che verranno presentati. Quindi, tieni sempre a mente questa possibilità.

Other interesting tricks

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 di 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

Analisi Statica

Prima di tutto, per analizzare un APK dovresti dare un'occhiata al codice Java utilizzando un decompilatore. Per favore, leggi qui per trovare informazioni sui diversi decompilatori disponibili.

Ricerca di informazioni interessanti

Dando un'occhiata alle stringhe dell'APK puoi cercare password, URL (https://github.com/ndelphit/apkurlgrep), chiavi api, crittografia, bluetooth uuids, token e qualsiasi cosa interessante... cerca anche per backdoor di esecuzione del codice o backdoor di autenticazione (credenziali admin hardcoded per l'app).

Firebase

Fai particolare attenzione agli URL di firebase e controlla se è configurato male. Maggiori informazioni su cosa è Firebase e come sfruttarlo qui.

Comprensione di base dell'applicazione - Manifest.xml, strings.xml

L'esame del file _Manifest.xml** e **strings.xml_** di un'applicazione può rivelare potenziali vulnerabilità di sicurezza**. Questi file possono essere accessibili utilizzando decompilatori o rinominando l'estensione del file APK in .zip e poi decomprimendolo.

Vulnerabilità identificate dal Manifest.xml includono:

  • Applicazioni Debuggable: Le applicazioni impostate come debuggable (debuggable="true") nel file Manifest.xml rappresentano un rischio poiché consentono connessioni che possono portare a sfruttamenti. Per ulteriori informazioni su come sfruttare le applicazioni debuggable, fai riferimento a un tutorial su come trovare e sfruttare applicazioni debuggable su un dispositivo.

  • Impostazioni di Backup: L'attributo android:allowBackup="false" dovrebbe essere esplicitamente impostato per le applicazioni che trattano informazioni sensibili per prevenire backup non autorizzati dei dati tramite adb, specialmente quando il debug USB è abilitato.

  • Sicurezza della Rete: Le configurazioni di sicurezza della rete personalizzate (android:networkSecurityConfig="@xml/network_security_config") in res/xml/ possono specificare dettagli di sicurezza come i pin dei certificati e le impostazioni del traffico HTTP. Un esempio è consentire il traffico HTTP per domini specifici.

  • Attività e Servizi Esportati: Identificare attività e servizi esportati nel manifest può evidenziare componenti che potrebbero essere abusati. Ulteriori analisi durante i test dinamici possono rivelare come sfruttare questi componenti.

  • Content Providers e FileProviders: I content provider esposti potrebbero consentire accessi o modifiche non autorizzate ai dati. La configurazione dei FileProviders dovrebbe essere scrutinata.

  • Broadcast Receivers e URL Schemes: Questi componenti potrebbero essere sfruttati per sfruttamenti, prestando particolare attenzione a come vengono gestiti gli URL schemes per vulnerabilità di input.

  • Versioni SDK: Gli attributi minSdkVersion, targetSDKVersion e maxSdkVersion indicano le versioni Android supportate, evidenziando l'importanza di non supportare versioni Android obsolete e vulnerabili per motivi di sicurezza.

Dal file strings.xml, informazioni sensibili come chiavi API, schemi personalizzati e altre note per gli sviluppatori possono essere scoperte, sottolineando la necessità di una revisione attenta di queste risorse.

Tapjacking

Tapjacking è un attacco in cui un applicazione maligna viene lanciata e si posiziona sopra un'applicazione vittima. Una volta che oscura visibilmente l'app vittima, la sua interfaccia utente è progettata in modo da ingannare l'utente a interagire con essa, mentre passa l'interazione all'app vittima. In effetti, sta accecando l'utente dal sapere che sta effettivamente eseguendo azioni sull'app vittima.

Trova ulteriori informazioni in:

Tapjacking

Task Hijacking

Un'attività con il launchMode impostato su singleTask senza alcun taskAffinity definito è vulnerabile al task hijacking. Questo significa che un'applicazione può essere installata e, se lanciata prima dell'applicazione reale, potrebbe dirottare il task dell'applicazione reale (quindi l'utente interagirà con l'applicazione maligna pensando di utilizzare quella reale).

Maggiori informazioni in:

Android Task Hijacking

Memorizzazione dei dati non sicura

Memoria Interna

In Android, i file memorizzati nella memoria interna sono progettati per essere accessibili esclusivamente dall'app che li ha creati. Questa misura di sicurezza è applicata 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 consentire la condivisione di file tra diverse applicazioni. Tuttavia, queste modalità non limitano l'accesso a questi file da parte di altre applicazioni, comprese quelle potenzialmente dannose.

  1. Analisi Statica:

  • Assicurati che l'uso di MODE_WORLD_READABLE e MODE_WORLD_WRITABLE sia scrutinato attentamente. Queste modalità possono potenzialmente esporre file a accessi non intenzionati o non autorizzati.

  1. Analisi Dinamica:

  • Verifica le autorizzazioni impostate sui file creati dall'app. In particolare, controlla se ci sono file impostati per essere leggibili o scrivibili a livello globale. Questo può rappresentare un rischio significativo per la sicurezza, poiché consentirebbe a qualsiasi applicazione installata sul dispositivo, indipendentemente dalla sua origine o intento, di leggere o modificare questi file.

Memoria Esterna

Quando si trattano file su memoria esterna, come schede SD, dovrebbero essere adottate alcune precauzioni:

  1. Accessibilità:

  • I file sulla memoria esterna sono globalmente leggibili e scrivibili. Questo significa che qualsiasi applicazione o utente può accedere a questi file.

  1. Preoccupazioni di Sicurezza:

  • Data la facilità di accesso, è consigliato non memorizzare informazioni sensibili sulla memoria esterna.

  • La memoria esterna può essere rimossa o accessibile da qualsiasi applicazione, rendendola meno sicura.

  1. Gestione dei Dati dalla Memoria Esterna:

  • Esegui sempre validazione dell'input sui dati recuperati dalla memoria esterna. Questo è cruciale perché i dati provengono da una fonte non affidabile.

  • Memorizzare eseguibili o file di classe sulla memoria esterna per il caricamento dinamico è fortemente sconsigliato.

  • Se la tua applicazione deve recuperare file eseguibili dalla memoria esterna, assicurati che questi file siano firmati e verificati crittograficamente prima di essere caricati dinamicamente. Questo passaggio è vitale per mantenere l'integrità della sicurezza della tua applicazione.

La memoria esterna può essere accessibile in /storage/emulated/0, /sdcard, /mnt/sdcard

A partire da Android 4.4 (API 17), la scheda SD ha una struttura di directory che limita l'accesso da un'app alla directory specificamente per quell'app. Questo impedisce a un'applicazione dannosa di ottenere accesso in lettura o scrittura ai file di un'altra app.

Dati sensibili memorizzati in chiaro

  • Preferenze condivise: Android consente a ciascuna 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.

  • Database: Android consente a ciascuna applicazione di salvare facilmente database sqlite nel percorso /data/data/<packagename>/databases/ e a volte è possibile trovare informazioni sensibili in chiaro in quella cartella.

TLS Rotto

Accetta tutti i certificati

Per qualche motivo, a volte gli sviluppatori accettano tutti i certificati anche se, ad esempio, il nome host non corrisponde a righe di codice come la seguente:

SSLSocketFactory sf = new cc(trustStore);
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

A good way to test this is to try to capture the traffic using some proxy like Burp without authorising Burp CA inside the device. Also, you can generate with Burp a certificate for a different hostname and use it.

Broken Cryptography

Poor Key Management Processes

Alcuni sviluppatori salvano dati sensibili nello storage locale e li criptano con una chiave hardcoded/predicibile nel codice. Questo non dovrebbe essere fatto poiché alcune operazioni di reverse engineering potrebbero consentire agli attaccanti di estrarre le informazioni riservate.

Use of Insecure and/or Deprecated Algorithms

Gli sviluppatori non dovrebbero utilizzare algoritmi deprecati per eseguire controlli di autorizzazione, memorizzare o inviare dati. Alcuni di questi algoritmi sono: RC4, MD4, MD5, SHA1... Se i hash vengono utilizzati per memorizzare le password, ad esempio, dovrebbero essere utilizzati hash resistenti al brute-force con sale.

Other checks

  • È consigliato offuscare l'APK per rendere più difficile il lavoro di reverse engineering per gli attaccanti.

  • Se l'app è sensibile (come le app bancarie), dovrebbe eseguire i propri controlli per vedere se il mobile è rootato e agire di conseguenza.

  • Se l'app è sensibile (come le app bancarie), dovrebbe controllare se viene utilizzato un emulatore.

  • Se l'app è sensibile (come le app bancarie), dovrebbe controllare la propria integrità prima di eseguirla per verificare se è stata modificata.

  • Usa APKiD per controllare quale compilatore/pacchetto/offuscatore è stato utilizzato per costruire l'APK

React Native Application

Read the following page to learn how to easily access javascript code of React applications:

React Native Application

Xamarin Applications

Read the following page to learn how to easily access C# code of a xamarin applications:

Xamarin Apps

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

The tool mariana-trench is capable of finding vulnerabilities by scanning the code of the application. This tool contains a series of known sources (that indicates to the tool the places where the input is controlled by the user), sinks (which indicates to the tool dangerous places where malicious user input could cause damages) and rules. These rules indicates the combination of sources-sinks that indicates a vulnerability.

With this knowledge, mariana-trench will review the code and find possible vulnerabilities on it.

Secrets leaked

Un'applicazione può contenere segreti (chiavi API, password, URL nascosti, sottodomini...) al suo interno che potresti essere in grado di scoprire. Potresti usare uno strumento come https://github.com/dwisiswant0/apkleaks

Bypass Biometric Authentication

Bypass Biometric Authentication (Android)

Other interesting functions

  • Code execution: Runtime.exec(), ProcessBuilder(), native code:system()

  • Send SMSs: sendTextMessage, sendMultipartTestMessage

  • Native functions declared as native: public native, System.loadLibrary, System.load

Other tricks

content:// protocol

Join HackenProof Discord server to communicate with experienced hackers and bug bounty hunters!

Hacking Insights Engage with content that delves into the thrill and challenges of hacking

Real-Time Hack News Keep up-to-date with fast-paced hacking world through real-time news and insights

Latest Announcements Stay informed with the newest bug bounties launching and crucial platform updates

Join us on Discord and start collaborating with top hackers today!


Dynamic Analysis

First of all, you need an environment where you can install the application and all the environment (Burp CA cert, Drozer and Frida mainly). Therefore, a rooted device (emulated or not) is extremely recommended.

Online Dynamic analysis

You can create a free account in: https://appetize.io/. This platform allows you to upload and execute APKs, so it is useful to see how an apk is behaving.

You can even see the logs of your application in the web and connect through adb.

Thanks to the ADB connection you can use Drozer and Frida inside the emulators.

Local Dynamic Analysis

Using an emulator

  • Android Studio (Puoi creare dispositivi x86 e arm, e secondo questoultimi x86 versioni supportano le librerie ARM senza bisogno di un emulatore arm lento).

  • Learn to set it up in this page:

AVD - Android Virtual Device
  • Genymotion (Versione gratuita: Edizione personale, è necessario creare un account. È consigliato scaricare la versione CON VirtualBox per evitare potenziali errori.)

  • Nox (Gratuito, ma non supporta Frida o Drozer).

When creating a new emulator on any platform remember that the bigger the screen is, the slower the emulator will run. So select small screens if possible.

To install google services (like AppStore) in Genymotion you need to click on the red marked button of the following image:

Also, notice that in the configuration of the Android VM in Genymotion you can select Bridge Network mode (this will be useful if you will be connecting to the Android VM from a different VM with the tools).

Use a physical device

You need to activate the debugging options and it will be cool if you can root it:

  1. Impostazioni.

  2. (Da Android 8.0) Seleziona Sistema.

  3. Seleziona Informazioni sul telefono.

  4. Premi Numero di build 7 volte.

  5. Torna indietro e troverai le Opzioni sviluppatore.

Once you have installed the application, the first thing you should do is to try it and investigate what does it do, how does it work and get comfortable with it. I will suggest to perform this initial dynamic analysis using MobSF dynamic analysis + pidcat, so we will be able to learn how the application works while MobSF captures a lot of interesting data you can review later on.

Unintended Data Leakage

Logging

Gli sviluppatori dovrebbero prestare attenzione a non esporre informazioni di debug pubblicamente, poiché ciò può portare a perdite di dati sensibili. Gli strumenti pidcat e adb logcat sono raccomandati per monitorare i log dell'applicazione per identificare e proteggere le informazioni sensibili. Pidcat è preferito per la sua facilità d'uso e leggibilità.

Note that from later newer than Android 4.0, applications are only able to access their own logs. So applications cannot access other apps logs. Anyway, it's still recommended to not log sensitive information.

Copy/Paste Buffer Caching

Il framework basato su clipboard di Android consente la funzionalità di copia e incolla nelle app, ma presenta un rischio poiché altre applicazioni possono accedere alla clipboard, esponendo potenzialmente dati sensibili. È fondamentale disabilitare le funzioni di copia/incolla per sezioni sensibili di un'applicazione, come i dettagli della carta di credito, per prevenire perdite di dati.

Crash Logs

Se un'applicazione crasha e salva log, questi log possono assistere gli attaccanti, in particolare quando l'applicazione non può essere reverse-engineered. Per mitigare questo rischio, evitare di registrare in caso di crash e, se i log devono essere trasmessi attraverso la rete, assicurarsi che vengano inviati tramite un canale SSL per la sicurezza.

As pentester, try to take a look to these logs.

Analytics Data Sent To 3rd Parties

Le applicazioni spesso integrano servizi come Google Adsense, che possono involontariamente leak sensitive data a causa di un'implementazione impropria da parte degli sviluppatori. Per identificare potenziali perdite di dati, è consigliabile intercettare il traffico dell'applicazione e controllare se ci sono informazioni sensibili inviate a servizi di terze parti.

SQLite DBs

La maggior parte delle applicazioni utilizzerà database SQLite interni per salvare informazioni. Durante il pentest, dai un'occhiata ai database creati, ai nomi delle tabelle e delle colonne e a tutti i dati salvati perché potresti trovare informazioni sensibili (che costituirebbero una vulnerabilità). I database dovrebbero trovarsi in /data/data/the.package.name/databases come /data/data/com.mwr.example.sieve/databases

Se il database sta salvando informazioni riservate ed è criptato ma puoi trovare la password all'interno dell'applicazione, è comunque una vulnerabilità.

Enumera le tabelle usando .tables e enumera le colonne delle tabelle eseguendo .schema <table_name>

Drozer (Exploit Activities, Content Providers and Services)

From Drozer Docs: Drozer consente di assumere il ruolo di un'app Android e interagire con altre app. Può fare qualsiasi cosa che un'applicazione installata può fare, come utilizzare il meccanismo di comunicazione interprocesso (IPC) di Android e interagire con il sistema operativo sottostante. . Drozer è uno strumento utile per sfruttare attività esportate, servizi esportati e Content Providers come imparerai nelle sezioni seguenti.

Exploiting exported Activities

Read this if you want to refresh what is an Android Activity. Ricorda anche che il codice di un'attività inizia nel metodo onCreate.

Authorisation bypass

Quando un'Attività è esportata, puoi invocare il suo schermo da un'app esterna. Pertanto, se un'attività con informazioni sensibili è esportata, potresti bypassare i meccanismi di autenticazione per accedervi.

Learn how to exploit exported activities with Drozer.

Puoi anche avviare un'attività esportata da adb:

  • PackageName è com.example.demo

  • Exported ActivityName è com.example.test.MainActivity

adb shell am start -n com.example.demo/com.example.test.MainActivity

NOTA: MobSF rileverà come malevolo l'uso di singleTask/singleInstance come android:launchMode in un'attività, ma a causa di questo, apparentemente questo è pericoloso solo su versioni obsolete (versioni API < 21).

Nota che un bypass di autorizzazione non è sempre una vulnerabilità, dipenderebbe da come funziona il bypass e quali informazioni sono esposte.

Perdita di informazioni sensibili

Le attività possono anche restituire risultati. Se riesci a trovare un'attività esportata e non protetta che chiama il setResult e restituisce informazioni sensibili, c'è una perdita di informazioni sensibili.

Tapjacking

Se il tapjacking non è prevenuto, potresti abusare dell'attività esportata per far eseguire azioni inaspettate all'utente. Per ulteriori informazioni su cos'è il Tapjacking segui il link.

Sfruttare i Content Providers - Accesso e manipolazione di informazioni sensibili

Leggi questo se vuoi rinfrescare cosa è un Content Provider. I content provider sono fondamentalmente utilizzati per condividere dati. Se un'app ha content provider disponibili, potresti essere in grado di estrarre dati sensibili da essi. È anche interessante testare possibili SQL injection e Path Traversals poiché potrebbero essere vulnerabili.

Scopri come sfruttare i Content Providers con Drozer.

Sfruttare i Servizi

Leggi questo se vuoi rinfrescare cosa è un Servizio. Ricorda che le azioni di un Servizio iniziano nel metodo onStartCommand.

Un servizio è fondamentalmente qualcosa che può ricevere dati, elaborarli e restituire (o meno) una risposta. Quindi, se un'applicazione sta esportando alcuni servizi, dovresti controllare il codice per capire cosa sta facendo e testarlo dinamicamente per estrarre informazioni riservate, bypassare misure di autenticazione... Scopri come sfruttare i Servizi con Drozer.

Sfruttare i Broadcast Receivers

Leggi questo se vuoi rinfrescare cosa è un Broadcast Receiver. Ricorda che le azioni di un Broadcast Receiver iniziano nel metodo onReceive.

Un broadcast receiver attenderà un tipo di messaggio. A seconda di come il receiver gestisce il messaggio, potrebbe essere vulnerabile. Scopri come sfruttare i Broadcast Receivers con Drozer.

Puoi cercare deep links manualmente, utilizzando strumenti come MobSF o script come questo. Puoi aprire uno schema 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 nome del pacchetto e il 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'attività chiamata dal deeplink e cerca la funzione onNewIntent.

Informazioni sensibili

Ogni volta che trovi un deep link, controlla che non stia ricevendo dati sensibili (come password) tramite parametri URL, perché qualsiasi altra applicazione potrebbe fingere di essere il deep link e rubare quei dati!

Parametri nel percorso

Devi controllare anche se qualche deep link sta usando un parametro all'interno del percorso dell'URL come: https://api.example.com/v1/users/{username}, in tal caso puoi forzare un percorso di traversata accedendo a qualcosa come: example://app/users?username=../../unwanted-endpoint%3fparam=value. Nota che se trovi i corretti endpoint all'interno dell'applicazione potresti essere in grado di causare un Open Redirect (se parte del percorso è usata come nome di dominio), account takeover (se puoi modificare i dettagli degli utenti senza token CSRF e l'endpoint vulnerabile usava il metodo corretto) e qualsiasi altra vulnerabilità. Maggiori info su questo qui.

Altri esempi

Un interessante rapporto di bug bounty sui link (/.well-known/assetlinks.json).

Ispezione e verifiche del livello di trasporto

  • I certificati non vengono sempre ispezionati correttamente dalle applicazioni Android. È comune che queste applicazioni trascurino gli avvisi e accettino certificati autofirmati o, in alcuni casi, tornino a utilizzare connessioni HTTP.

  • Le negoziazioni durante il handshake SSL/TLS sono a volte deboli, impiegando suite di cifratura insicure. Questa vulnerabilità rende la connessione suscettibile ad attacchi man-in-the-middle (MITM), consentendo agli attaccanti di decrittografare i dati.

  • La perdita di informazioni private è un rischio quando le applicazioni si autenticano utilizzando canali sicuri ma poi comunicano tramite canali non sicuri per altre transazioni. Questo approccio non riesce a proteggere i dati sensibili, come i cookie di sessione o i dettagli degli utenti, dall'intercettazione da parte di entità malevole.

Verifica del certificato

Ci concentreremo sulla verifica del certificato. 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 crittografati possono comportare rischi significativi. Per passaggi dettagliati sulla verifica dei certificati del server e sulla risoluzione delle vulnerabilità, questa risorsa fornisce indicazioni complete.

SSL Pinning

SSL Pinning è una misura di sicurezza in cui l'applicazione verifica il certificato del server rispetto a una copia nota memorizzata all'interno dell'applicazione stessa. Questo metodo è essenziale per prevenire attacchi MITM. Si raccomanda vivamente di implementare SSL Pinning per le applicazioni che gestiscono informazioni sensibili.

Ispezione del traffico

Per ispezionare il traffico HTTP, è necessario installare il certificato dello strumento proxy (ad es., Burp). Senza installare questo certificato, il traffico crittografato potrebbe non essere visibile attraverso il proxy. Per una guida sull'installazione di un certificato CA personalizzato, clicca qui.

Le applicazioni destinate a API Level 24 e superiori richiedono modifiche alla Configurazione della Sicurezza di Rete per accettare il certificato CA del proxy. Questo passaggio è critico per ispezionare il traffico crittografato. Per istruzioni su come modificare la Configurazione della Sicurezza di Rete, fai riferimento a questo tutorial.

Bypassare SSL Pinning

Quando SSL Pinning è implementato, bypassarlo diventa necessario per ispezionare il traffico HTTPS. Sono disponibili vari metodi per questo scopo:

Ricerca di vulnerabilità web comuni

È importante cercare anche vulnerabilità web comuni all'interno dell'applicazione. Informazioni dettagliate su come identificare e mitigare queste vulnerabilità vanno oltre l'ambito di questo riepilogo, ma sono ampiamente trattate altrove.

Frida

Frida è un toolkit di strumentazione dinamica per sviluppatori, ingegneri inversi e ricercatori di sicurezza. Puoi accedere all'applicazione in esecuzione e agganciare metodi in tempo reale per cambiare il comportamento, cambiare valori, estrarre valori, eseguire codice diverso... Se vuoi fare pentesting su applicazioni Android, devi sapere come usare Frida.

Dump della memoria - Fridump

Controlla se l'applicazione sta memorizzando informazioni sensibili all'interno della memoria che non dovrebbe memorizzare, come password o mnemoniche.

Utilizzando Fridump3 puoi dumpare la memoria dell'app con:

# With PID
python3 fridump3.py -u <PID>

# With name
frida-ps -Uai
python3 fridump3.py -u "<Name>"

Questo dump sarà memorizzato nella cartella ./dump, e lì potresti usare grep con qualcosa come:

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

In Android, il Keystore è il miglior posto per memorizzare dati sensibili, tuttavia, con privilegi sufficienti è ancora possibile accedervi. Poiché le applicazioni tendono a memorizzare qui dati sensibili in chiaro, i pentest dovrebbero controllare per questo come utente root o qualcuno con accesso fisico al dispositivo potrebbe essere in grado di rubare questi dati.

Anche se un'app ha memorizzato dati nel keystore, i dati dovrebbero essere crittografati.

Per accedere ai dati all'interno del keystore, puoi utilizzare questo script Frida: 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

Utilizzando il seguente script Frida potrebbe essere possibile bypassare l'autenticazione tramite impronta digitale che le applicazioni Android potrebbero eseguire per proteggere determinate aree sensibili:

frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app.package>

Immagini di Sfondo

Quando metti un'applicazione in background, Android memorizza un istantanea dell'applicazione in modo che, quando viene ripristinata in primo piano, inizi a caricare l'immagine prima dell'app, quindi sembra che l'app sia stata caricata più velocemente.

Tuttavia, se questa istantanea contiene informazioni sensibili, qualcuno con accesso all'istantanea potrebbe rubare quelle informazioni (nota che è necessario avere i permessi di root per accedervi).

Le istantanee sono solitamente memorizzate in: /data/system_ce/0/snapshots

Android fornisce un modo per prevenire la cattura dello screenshot impostando il parametro di layout FLAG_SECURE. Utilizzando questo flag, i contenuti della finestra vengono trattati come sicuri, impedendo loro di apparire negli screenshot o di essere visualizzati su display non sicuri.

getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);

Android Application Analyzer

Questo strumento può aiutarti a gestire diversi strumenti durante l'analisi dinamica: https://github.com/NotSoSecure/android_application_analyzer

Intent Injection

Gli sviluppatori spesso creano componenti proxy come attività, servizi e ricevitori di broadcast che gestiscono questi Intent e li passano a metodi come startActivity(...) o sendBroadcast(...), il che può essere rischioso.

Il pericolo risiede nel consentire agli attaccanti di attivare componenti dell'app non esportati o accedere a provider di contenuti sensibili deviando questi Intent. Un esempio notevole è il componente WebView che converte URL in oggetti Intent tramite Intent.parseUri(...) e poi li esegue, potenzialmente portando a iniezioni di Intent malevoli.

Essential Takeaways

  • Intent Injection è simile al problema di Open Redirect del web.

  • Gli exploit coinvolgono il passaggio di oggetti Intent come extra, che possono essere deviati per eseguire operazioni non sicure.

  • Può esporre componenti non esportati e provider di contenuti agli attaccanti.

  • La conversione di URL in Intent di WebView può facilitare azioni indesiderate.

Android Client Side Injections and others

Probabilmente conosci questo tipo di vulnerabilità dal Web. Devi essere particolarmente attento a queste vulnerabilità in un'applicazione Android:

  • SQL Injection: Quando gestisci query dinamiche o Content-Providers assicurati di utilizzare query parametrizzate.

  • JavaScript Injection (XSS): Verifica che il supporto per JavaScript e Plugin sia disabilitato per qualsiasi WebView (disabilitato per impostazione predefinita). Maggiori informazioni qui.

  • Local File Inclusion: Le WebView dovrebbero avere l'accesso al file system disabilitato (abilitato per impostazione predefinita) - (webview.getSettings().setAllowFileAccess(false);). Maggiori informazioni qui.

  • Eternal cookies: In diversi casi, quando l'applicazione android termina la sessione, il cookie non viene revocato o potrebbe essere persino salvato su disco.


Unisciti al server HackenProof Discord per comunicare con hacker esperti e cacciatori di bug bounty!

Hacking Insights Interagisci con contenuti che approfondiscono il brivido e le sfide dell'hacking.

Real-Time Hack News Rimani aggiornato con il mondo dell'hacking in rapida evoluzione attraverso notizie e approfondimenti in tempo reale.

Latest Announcements Rimani informato sulle nuove bug bounty in arrivo e sugli aggiornamenti cruciali della piattaforma.

Unisciti a noi su Discord e inizia a collaborare con i migliori hacker oggi stesso!

Automatic Analysis

Static analysis

Valutazione della vulnerabilità dell'applicazione utilizzando un bel frontend web-based. 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 MobSF installato su un host Windows). Inoltre, se crei un file ZIP con il codice sorgente di un'app Android o di un'app IOS (vai alla cartella radice dell'applicazione, seleziona tutto e crea un file ZIP), sarà in grado di analizzarlo anche.

MobSF consente anche di diff/Confrontare analisi e di integrare VirusTotal (dovrai impostare la tua chiave API in MobSF/settings.py e abilitarla: VT_ENABLED = TRUE VT_API_KEY = <La tua chiave API> VT_UPLOAD = TRUE). Puoi anche impostare VT_UPLOAD su False, quindi l'hash sarà caricato invece del file.

Analisi dinamica assistita con MobSF

MobSF può essere molto utile per l'analisi dinamica in Android, ma in quel caso dovrai installare MobSF e genymotion sul tuo host (una VM o Docker non funzioneranno). Nota: Devi avviare prima una VM in genymotion e poi MobSF. L'analizzatore dinamico MobSF può:

  • Dump dei dati dell'applicazione (URL, log, appunti, screenshot fatti da te, screenshot fatti da "Exported Activity Tester", email, database SQLite, file XML e altri file creati). Tutto questo viene fatto automaticamente tranne per gli screenshot, devi premere quando vuoi uno screenshot o devi premere "Exported Activity Tester" per ottenere screenshot di tutte le attività esportate.

  • Catturare il traffico HTTPS

  • Usare Frida per ottenere informazioni runtime

Dalla versione Android > 5, avvierà automaticamente Frida e imposterà le impostazioni del proxy globale per catturare il traffico. Catturerà solo il traffico dall'applicazione testata.

Frida

Per impostazione predefinita, utilizzerà anche alcuni script Frida per bypassare SSL pinning, rilevamento root e rilevamento debugger e per monitorare API interessanti. MobSF può anche invocare attività esportate, acquisire screenshot di esse e salvarle per il rapporto.

Per iniziare il test 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 consente anche di caricare i propri script Frida (per inviare i risultati dei tuoi script Frida a MobSF usa la funzione send()). Ha anche diversi script pre-scritti che puoi caricare (puoi aggiungerne di più in MobSF/DynamicAnalyzer/tools/frida_scripts/others/), basta selezionarli, premere "Load" e premere "Start Instrumentation" (sarai in grado di vedere i log di quegli script all'interno di "Frida Live Logs").

Inoltre, hai alcune funzionalità ausiliarie di Frida:

  • Enumerare Classi Caricate: Stampa tutte le classi caricate

  • Catturare Stringhe: Stampa tutte le stringhe catturate mentre utilizzi l'applicazione (super rumoroso)

  • Catturare Confronti di Stringhe: Potrebbe essere molto utile. Mostrerà le 2 stringhe confrontate e se il risultato è stato Vero o Falso.

  • Enumerare Metodi di Classe: Inserisci il nome della classe (come "java.io.File") e stamperà tutti i metodi della classe.

  • Cerca Modello di Classe: Cerca classi per modello

  • Tracciare Metodi di Classe: Traccia un'intera classe (vedi input e output di tutti i metodi della classe). Ricorda che per impostazione predefinita MobSF traccia diversi metodi API Android interessanti.

Una volta selezionato il modulo ausiliario che desideri utilizzare, devi premere "Start Instrumentation" e vedrai tutti gli output in "Frida Live Logs".

Shell

Mobsf ti offre anche una shell con alcuni comandi adb, comandi MobSF e comandi shell comuni nella parte inferiore della pagina di analisi dinamica. Alcuni comandi interessanti:

help
shell ls
activities
exported_activities
services
receivers

Strumenti HTTP

Quando il traffico http viene catturato, puoi vedere una vista brutta del traffico catturato in "HTTP(S) Traffic" in basso o una vista più bella in "Start HTTPTools" in basso verde. Dalla seconda opzione, puoi inviare le richieste catturate a proxy come Burp o Owasp ZAP. Per farlo, 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 su "Start Web API Fuzzer" per fuzzare le richieste http e cercare vulnerabilità.

Dopo aver eseguito un'analisi dinamica con MobSF, le impostazioni del proxy potrebbero essere configurate in modo errato e non sarai in grado di correggerle dalla GUI. Puoi correggere le impostazioni del proxy facendo:

adb shell settings put global http_proxy :0

Analisi Dinamica Assistita con Inspeckage

Puoi ottenere lo strumento da Inspeckage. Questo strumento utilizza alcuni Hooks per farti sapere cosa sta succedendo nell'applicazione mentre esegui un'analisi dinamica.

Questo è un ottimo strumento per eseguire analisi statiche con un'interfaccia grafica

Questo strumento è progettato per cercare diverse vulnerabilità relative alla sicurezza delle applicazioni Android, sia nel codice sorgente che nei APK confezionati. Lo strumento è anche capace di creare un APK "Proof-of-Concept" deployabile e comandi ADB, per sfruttare alcune delle vulnerabilità trovate (Attività esposte, intenti, tapjacking...). Come con Drozer, non è necessario rootare il 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

  • Mostra tutti i file estratti per un facile riferimento

  • Decompila automaticamente i file APK in formato Java e Smali

  • Analizza AndroidManifest.xml per vulnerabilità comuni e comportamenti

  • Analisi statica del codice sorgente per vulnerabilità comuni e comportamenti

  • Informazioni sul dispositivo

  • e altro ancora

reverse-apk relative/path/to/APP.apk

SUPER è un'applicazione da riga di comando che può essere utilizzata in Windows, MacOS X e Linux, che analizza i file .apk in cerca di vulnerabilità. Lo fa decomprimendo gli APK e applicando una serie di regole per rilevare quelle vulnerabilità.

Tutte le regole sono centrate in un file rules.json, e ogni azienda o tester può creare le proprie regole per analizzare ciò di cui hanno bisogno.

Scarica gli ultimi binari dalla pagina di download

super-analyzer {apk_file}

StaCoAn è uno strumento crossplatform che aiuta sviluppatori, cacciatori di bug e hacker etici a eseguire analisi statica del codice su applicazioni mobili.

Il concetto è che puoi trascinare e rilasciare il file della tua applicazione mobile (un file .apk o .ipa) sull'applicazione StaCoAn e genererà un report visivo e portatile per te. Puoi modificare le impostazioni e le liste di parole per ottenere un'esperienza personalizzata.

Scarica l'ultima versione:

./stacoan

AndroBugs Framework è un sistema di analisi delle vulnerabilità Android che aiuta sviluppatori o hacker a trovare potenziali vulnerabilità di sicurezza nelle applicazioni Android. Windows releases

python androbugs.py -f [APK file]
androbugs.exe -f [APK file]

Androwarn è uno strumento il cui obiettivo principale è rilevare e avvisare l'utente riguardo a potenziali comportamenti malevoli sviluppati da un'applicazione Android.

Il rilevamento viene eseguito con l'analisi statica del bytecode Dalvik dell'applicazione, rappresentato come Smali, utilizzando la libreria androguard.

Questo strumento cerca comportamenti comuni delle applicazioni "cattive" come: esfiltrazione di identificatori di telefonia, intercettazione di flussi audio/video, modifica dei dati PIM, esecuzione di codice arbitrario...

python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3

MARA è un Mobile Application Reverse engineering e Analysis Framework. È uno strumento che riunisce strumenti comunemente usati per il reverse engineering e l'analisi delle applicazioni mobili, per assistere nel testare le applicazioni mobili contro le minacce alla sicurezza mobile di OWASP. Il suo obiettivo è rendere questo compito più facile e accessibile per gli sviluppatori di applicazioni mobili e i professionisti della sicurezza.

È in grado di:

Koodous

Utile per rilevare malware: https://koodous.com/

Offuscare/Deoffuscare codice

Nota che a seconda del servizio e della configurazione che utilizzi per offuscare il codice. I segreti potrebbero essere o meno offuscati.

Da Wikipedia: ProGuard è uno strumento open source da riga di comando che riduce, ottimizza e offusca il codice Java. È in grado di ottimizzare il bytecode e di rilevare e rimuovere istruzioni non utilizzate. ProGuard è software gratuito ed è distribuito sotto la GNU General Public License, versione 2.

ProGuard è distribuito come parte dell'Android SDK e viene eseguito durante la costruzione dell'applicazione in modalità release.

Trova una guida passo-passo per deoffuscare l'apk in https://blog.lexfo.fr/dexguard.html

(Da quella guida) L'ultima volta che abbiamo controllato, il modo di operare di Dexguard era:

  • caricare una risorsa come InputStream;

  • fornire il risultato a una classe che eredita da FilterInputStream per decrittografarlo;

  • fare un po' di offuscazione inutile per far perdere qualche minuto di tempo a un reverser;

  • fornire il risultato decrittografato a un ZipInputStream per ottenere un file DEX;

  • infine caricare il DEX risultante come Risorsa utilizzando il metodo loadDex.

DeGuard inverte il processo di offuscazione eseguito dagli strumenti di offuscazione Android. Questo consente numerose analisi di sicurezza, inclusa l'ispezione del codice e la previsione delle librerie.

Puoi caricare un APK offuscato sulla loro piattaforma.

È un deoffuscatore android generico. Simplify esegue virtualmente un'app per comprendere il suo 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 sia il tipo specifico di offuscazione utilizzato.

APKiD ti fornisce informazioni su come è stato creato un APK. Identifica molti compilatori, packer, offuscatori e altre cose strane. È PEiD per Android.

Manuale

Leggi questo tutorial per imparare alcuni trucchi su come invertire l'offuscazione personalizzata

Laboratori

AndroL4b è una macchina virtuale di sicurezza Android basata su ubuntu-mate che include la raccolta degli ultimi framework, tutorial e laboratori da diversi esperti di sicurezza e ricercatori per il reverse engineering e l'analisi del malware.

Riferimenti

Ancora da provare

Unisciti al HackenProof Discord server per comunicare con hacker esperti e cacciatori di bug!

Hacking Insights Interagisci con contenuti che approfondiscono il brivido e le sfide dell'hacking

Notizie di hacking in tempo reale Rimani aggiornato con il mondo dell'hacking in rapida evoluzione attraverso notizie e approfondimenti in tempo reale

Ultimi annunci Rimani informato sugli ultimi bug bounty lanciati e aggiornamenti cruciali della piattaforma

Unisciti a noi su Discord e inizia a collaborare con i migliori hacker oggi!

Supporta HackTricks

Last updated