hacktricks/mobile-pentesting/android-app-pentesting/README.md
2024-02-10 13:03:23 +00:00

58 KiB

Android Applications Pentesting

Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

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

Insight sull'hacking
Interagisci con contenuti che approfondiscono l'emozione e le sfide dell'hacking

Notizie sull'hacking in tempo reale
Resta aggiornato sul mondo dell'hacking frenetico attraverso notizie e approfondimenti in tempo reale

Ultime notizie
Rimani informato sul lancio delle nuove bug bounty e sugli aggiornamenti cruciali della piattaforma

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

Concetti di base delle applicazioni Android

È altamente consigliato 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:

{% content-ref url="android-applications-basics.md" %} android-applications-basics.md {% endcontent-ref %}

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 tramite USB o Rete 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 Comandi ADB per imparare come utilizzare adb.

Smali

A volte è interessante modificare il codice dell'applicazione per accedere a informazioni nascoste (ad esempio password o flag ben oscurati). 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 presente questa possibilità.

Altri trucchi interessanti

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

Analisi statica

Innanzitutto, per analizzare un APK dovresti dare un'occhiata al codice Java utilizzando un decompiler.
Per favore, leggi qui per trovare informazioni sui diversi decompiler disponibili.

Ricerca di informazioni interessanti

Semplicemente dando un'occhiata alle stringhe dell'APK puoi cercare password, URL (https://github.com/ndelphit/apkurlgrep), chiavi api, crittografia, UUID Bluetooth, token e qualsiasi altra cosa interessante... cerca anche backdoor di esecuzione del codice o backdoor di autenticazione (credenziali admin codificate nell'app).

Firebase

Presta particolare attenzione agli URL di Firebase e verifica se sono configurati in modo errato. Ulteriori informazioni su cosa è Firebase e come sfruttarlo qui.

Comprensione di base dell'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 accessibili utilizzando decompiler o rinominando l'estensione del file APK in .zip e quindi decomprimendolo.

Le vulnerabilità identificate dal Manifest.xml includono:

  • Applicazioni in modalità di debug: Le applicazioni impostate come debuggable (debuggable="true") nel file Manifest.xml rappresentano un rischio in quanto consentono connessioni che possono portare a sfruttamenti. Per una comprensione più approfondita su come sfruttare le applicazioni in modalità di debug, consulta un tutorial su come trovare ed esplorare le applicazioni in modalità di debug su un dispositivo.

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

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

  • Attività e servizi esportati: L'individuazione di attività e servizi esportati nel manifesto può evidenziare componenti che potrebbero essere utilizzati impropriamente. Un'analisi ulteriore durante il testing dinamico può rivelare come sfruttare questi componenti.

  • Provider di contenuti e FileProviders: I provider di contenuti esposti potrebbero consentire l'accesso o la modifica non autorizzati dei dati. Anche la configurazione dei FileProviders dovrebbe essere attentamente esaminata.

  • Broadcast Receiver e URL Scheme: Questi componenti potrebbero essere sfruttati per scopi malevoli, prestando particolare attenzione a come vengono gestiti gli URL Scheme per le vulnerabilità di input.

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

Dal file strings.xml, è possibile scoprire informazioni sensibili come chiavi API, schemi personalizzati e altre note degli sviluppatori, sottolineando la necessità di una revisione attenta di queste risorse.

Tapjacking

Tapjacking è un attacco in cui un'applicazione malintenzionata viene avviata e si posiziona sopra un'applicazione vittima. Una volta che oscura visivamente l'app vittima, la sua interfaccia utente è progettata in modo tale da ingannare l'utente a interagire con essa, mentre passa l'interazione all'app vittima.
In pratica, acceca l'utente facendogli credere di eseguire azioni sull'app vittima.

Trova ulteriori informazioni in:

{% content-ref url="tapjacking.md" %} tapjacking.md {% endcontent-ref %}

Task Hijacking

Un'attività con launchMode impostato su singleTask senza alcun taskAffinity definito è vulnerabile all'hijacking del task. Ciò significa che un'applicazione può essere installata e se viene avviata prima dell'applicazione reale può dirottare il task dell'applicazione reale (quindi l'utente interagirà con l'applicazione malevola pensando di utilizzare quella reale).

Ulteriori informazioni in:

{% content-ref url="android-task-hijacking.md" %} android-task-hijacking.md {% endcontent-ref %}

Archiviazione non sicura dei dati

Archiviazione interna

In Android, i file archiviati nell'archiviazione interna sono progettati per essere accessibili esclusivamente dall'app che li ha creati. Questa misura di sicurezza è imposta dal sistema operativo Android ed è generalmente adeguata alle esigenze di sicurezza della maggior parte delle applicazioni. Tuttavia, gli sviluppatori talvolta 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 malevole.

  1. Analisi statica:
  • Assicurarsi che l'uso di MODE_WORLD_READABLE e MODE_WORLD_WRITABLE sia scrupolosamente esaminato. Queste modalità possono potenzialmente esporre i file a accessi non intenzionali o non autorizzati.
  1. Analisi dinamica:
  • Verificare le autorizzazioni impostate sui file creati dall'app. In particolare, verificare se alcuni file sono impostati come leggibili o scrivibili a livello globale. Ciò può rappresentare un rischio significativo per la sicurezza, in quanto consentirebbe a qualsiasi applicazione installata sul dispositivo, indipendentemente dalla sua origine o intento, di leggere o modificare questi file.

Archiviazione esterna

Quando si lavora con file su archiviazione esterna, come le schede SD, è necessario prendere alcune precauzioni:

  1. Accessibilità:
  • I file su archiviazione esterna sono leggibili e scrivibili globalmente. Ciò significa che qualsiasi applicazione o utente può accedere a questi file.
  1. Preoccupazioni per la sicurezza:
  • Date le facilità di accesso, è consigliabile non archiviare informazioni sensibili su archiviazione esterna.
  • L'archiviazione esterna può essere rimossa o accessibile da qualsiasi applicazione, rendendola meno sicura.
  1. Gestione dei dati da archiviazione esterna:
  • Effettuare sempre una validazione dell'input sui dati recuperati dall'archiviazione esterna. Questo è fondamentale perché i dati provengono da una fonte non attendibile.
  • È fortemente sconsigliato archiviare eseguibili o file di classe su archiviazione esterna per il caricamento dinamico.
  • Se la tua applicazione deve recuperare file eseguibili da archiviazione esterna, assicurati che questi file siano firmati e verificati crittograficamente prima di essere caricati dinamicamente. Questo passaggio è fondamentale per mantenere l'integrità della sicurezza della tua applicazione.

L'archiviazione esterna può essere accessibile in /storage/emulated/0, /sdcard, /mnt/sdcard

{% hint style="info" %} A partire da Android 4.4 (API 17), la scheda SD ha una struttura delle directory che limita l'accesso di un'app alla directory specifica per quell'app. Ciò impedisce alle applicazioni malevole di ottenere accesso in lettura o scrittura ai file di un'altra app. {% endhint %}

Dati sensibili archiviati in chiaro

  • Preferenze condivise: Android consente a ogni applicazione di salvare facilmente file XML nel percorso /data/data/<nomedelpackage>/shared_prefs/ e talvolta è possibile trovare informazioni sensibili in chiaro in quella cartella.
  • Database: Android consente a ogni applicazione di salvare facilmente database SQLite nel percorso /data/data/<nomedelpackage>/databases/ e talvolta è possibile trovare informazioni sensibili in chiaro in quella cartella.

TLS non sicuro

Accettare tutti i certificati

Per qualche motivo, a volte gli sviluppatori accettano tutti i certificati anche se, ad esempio, il nome host 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 ciò è cercare di catturare il traffico utilizzando un proxy come Burp senza autorizzare Burp CA all'interno del dispositivo. Inoltre, è possibile generare con Burp un certificato per un nome host diverso e utilizzarlo.

Crittografia non sicura

Processi di gestione delle chiavi scadenti

Alcuni sviluppatori salvano dati sensibili nella memoria locale e li crittografano con una chiave codificata/predicibile nel codice. Questo non dovrebbe essere fatto poiché un'operazione di reversing potrebbe consentire agli attaccanti di estrarre le informazioni confidenziali.

Utilizzo di algoritmi non sicuri e/o deprecati

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 ad esempio vengono utilizzati hash per memorizzare le password, dovrebbero essere utilizzati hash resistenti all'attacco di forza bruta con salt.

Altri controlli

  • È consigliabile oscurare l'APK per rendere più difficile il lavoro di reverse engineering agli attaccanti.
  • Se l'app è sensibile (come le app bancarie), dovrebbe effettuare i propri controlli per verificare se il dispositivo mobile è rootato e agire di conseguenza.
  • Se l'app è sensibile (come le app bancarie), dovrebbe verificare se viene utilizzato un emulatore.
  • Se l'app è sensibile (come le app bancarie), dovrebbe verificare la propria integrità prima di eseguirsi per verificare se è stata modificata.
  • Utilizzare APKiD per verificare quale compilatore/packer/obfuscator è stato utilizzato per creare l'APK.

Applicazione React Native

Leggi la seguente pagina per imparare come accedere facilmente al codice JavaScript delle applicazioni React:

{% content-ref url="react-native-application.md" %} react-native-application.md {% endcontent-ref %}

Applicazioni Xamarin

Leggi la seguente pagina per imparare come accedere facilmente al codice C# di un'applicazione Xamarin:

{% content-ref url="../xamarin-apps.md" %} xamarin-apps.md {% endcontent-ref %}

Applicazioni Superpacked

Secondo questo post del blog, Superpacked è un algoritmo Meta che comprime il contenuto di un'applicazione in un singolo file. Il blog parla della possibilità di creare un'app che decomprime questo tipo di app... e un modo più veloce che consiste nell'eseguire l'applicazione e raccogliere i file decompressi dal filesystem.

Analisi statica automatizzata del codice

Lo strumento mariana-trench è in grado di individuare vulnerabilità analizzando il codice dell'applicazione. Questo strumento contiene una serie di fonti conosciute (che indicano allo strumento i luoghi in cui l'input è controllato dall'utente), sink (che indicano allo strumento luoghi pericolosi in cui l'input utente malintenzionato potrebbe causare danni) e regole. Queste regole indicano la combinazione di fonti-sink che indica una vulnerabilità.

Con questa conoscenza, mariana-trench esaminerà il codice e troverà possibili vulnerabilità.

Leaks di segreti

Un'applicazione potrebbe contenere segreti (API key, password, URL nascosti, sottodomini...) al suo interno che potresti essere in grado di scoprire. Puoi utilizzare uno strumento come https://github.com/dwisiswant0/apkleaks

Bypass dell'autenticazione biometrica

{% content-ref url="bypass-biometric-authentication-android.md" %} bypass-biometric-authentication-android.md {% endcontent-ref %}

Altre funzioni interessanti

Altri trucchi

{% content-ref url="content-protocol.md" %} content-protocol.md {% endcontent-ref %}


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

Hacking Insights
Interagisci con contenuti che approfondiscono l'emozione e le sfide dell'hacking

Notizie sull'hacking in tempo reale
Resta aggiornato sul mondo dell'hacking frenetico attraverso notizie e approfondimenti in tempo reale

Ultime novità
Rimani informato sul lancio delle nuove taglie di bug e sugli aggiornamenti cruciali della piattaforma

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


Analisi dinamica

Innanzitutto, è necessario un ambiente in cui è possibile installare l'applicazione e tutto l'ambiente (certificato Burp CA, Drozer e Frida principalmente). Pertanto, è estremamente consigliato un dispositivo rootato (emulato o meno).

Analisi dinamica online

Puoi creare un account gratuito su: https://appetize.io/. Questa piattaforma ti consente di caricare ed eseguire APK, quindi è utile per vedere come si comporta un APK.

Puoi persino visualizzare i log della tua applicazione sul web e connetterti tramite adb.

Grazie alla connessione ADB, puoi utilizzare Drozer e Frida all'interno degli emulatori.

Analisi dinamica locale

Utilizzo di un emulatore

  • Android Studio (Puoi creare dispositivi x86 e arm, e secondo questo ultime versioni x86 supportano le librerie ARM senza la necessità di un lento emulatore ARM).
  • Impara come configurarlo in questa pagina:

{% content-ref url="avd-android-virtual-device.md" %} avd-android-virtual-device.md {% endcontent-ref %}

  • Genymotion (Versione gratuita: Personal Edition, è necessario creare un account. Si consiglia di scaricare la versione CON VirtualBox per evitare errori potenziali.)
  • Nox (Gratuito, ma non supporta Frida o Drozer).

{% hint style="info" %} Quando si crea un nuovo emulatore su qualsiasi piattaforma, ricorda che più grande è lo schermo, più lento sarà l'emulatore. Quindi seleziona schermi piccoli se possibile. {% endhint %}

Per installare i servizi Google (come AppStore) in Genymotion, è necessario fare clic sul pulsante evidenziato in rosso nell'immagine seguente:

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 diversa VM con gli strumenti).

Utilizzare un dispositivo fisico

È necessario attivare le opzioni di debugging ed è consigliabile eseguire il root:

  1. Impostazioni.
  2. (Da Android 8.0) Seleziona Sistema.
  3. Seleziona Informazioni sul telefono.
  4. Premi Numero build 7 volte.
  5. Torna indietro e troverai le Opzioni sviluppatore.

Una volta installata l'applicazione, la prima cosa da fare è provarla e indagare su cosa fa, come funziona e familiarizzare con essa.
Suggerisco di effettuare questa analisi dinamica iniziale utilizzando l'analisi dinamica di MobSF + pidcat, in modo da poter imparare come funziona l'applicazione mentre MobSF acquisisce molti dati interessanti che potrai rivedere in seguito.

Divulgazione non intenzionale di dati

Logging

Gli sviluppatori dovrebbero fare attenzione a esporre informazioni di debugging pubblicamente, poiché ciò può portare a falle di sicurezza con la divulgazione di dati sensibili. Gli strumenti pidcat e adb logcat sono consigliati per monitorare i log dell'applicazione al fine di identificare e proteggere informazioni sensibili. Pidcat è preferito per la sua facilità d'uso e leggibilità.

{% hint style="warning" %} Nota che a partire da versioni successive ad Android 4.0, le applicazioni possono accedere solo ai propri log. Quindi le applicazioni non possono accedere ai log di altre app.
In ogni caso, è comunque consigliabile non registrare informazioni sensibili. {% endhint %}

Copia/Incolla nella cache del buffer

Il framework basato sulla clipboard di Android consente la funzionalità di copia e incolla nelle app, ma rappresenta un rischio in quanto altre applicazioni possono accedere alla clipboard, potenzialmente esponendo dati sensibili. È fondamentale disabilitare le funzioni di copia/incolla per sezioni sensibili di un'applicazione, come i dettagli della carta di credito, per evitare fughe di dati.

Log di crash

Se un'applicazione si blocca e salva i log, questi log possono essere utili agli attaccanti, soprattutto quando l'applicazione non può essere decompilata. Per mitigare questo rischio, evitare di registrare i crash e, se i log devono essere trasmessi tramite la rete, assicurarsi che vengano inviati tramite un canale SSL per la sicurezza.

Come pentester, cerca di dare un'occhiata a questi log.

Dati di analisi inviati a terze parti

Le applicazioni spesso integrano servizi come Google Adsense, che possono involontariamente divulgare dati sensibili a causa di un'implementazione impropria da parte degli sviluppatori. Per identificare possibili fughe di dati, è consigliabile intercettare il traffico dell'applicazione e verificare se vengono inviate informazioni sensibili a servizi di terze parti.

Database SQLite

La maggior parte delle applicazioni utilizzerà database SQLite interni per salvare le informazioni. Durante il pentest, controlla i database creati, i nomi delle tabelle e delle colonne e tutti i dati salvati, poiché potresti trovare informazioni sensibili (che costituirebbero una vulnerabilità).
I database dovrebbero trovarsi in /data/data/nome.pacchetto/databases come /data/data/com.mwr.example.sieve/databases

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

Elenca le tabelle utilizzando .tables e elenca le colonne delle tabelle con .schema <nome_tabella>

Drozer (Attività di exploit, Content Provider e Servizi)

Da Drozer Docs: Drozer ti consente di assumere il ruolo di un'app Android e interagire con altre app. Può fare tutto ciò 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 Provider, come imparerai nelle sezioni seguenti.

Sfruttare attività esportate

Leggi questo se vuoi rinfrescarti su cosa sia un'attività Android.
Ricorda anche che il codice di un'attività inizia nel metodo onCreate.

Bypass dell'autorizzazione

Quando un'attività viene esportata, è possibile invocare la sua schermata da un'app esterna. Pertanto, se un'attività con informazioni sensibili è esportata, potresti eludere i meccanismi di autenticazione per accedervi.

Scopri come sfruttare le attività esportate con Drozer.

Puoi anche avviare un'attività esportata da adb:

  • PackageName è com.example.demo
  • Nome attività esportata è com.example.test.MainActivity
adb shell am start -n com.example.demo/com.example.test.MainActivity

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

{% hint style="info" %} Nota che un bypass di autorizzazione non è sempre una vulnerabilità, dipenderà da come funziona il bypass e quali informazioni vengono esposte. {% endhint %}

Divulgazione di informazioni sensibili

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

Tapjacking

Se il tapjacking non viene impedito, è possibile abusare dell'attività esportata per far sì che l'utente esegua azioni impreviste. Per ulteriori informazioni su cosa è il Tapjacking segui il link.

Sfruttare i Content Provider - Accesso e manipolazione di informazioni sensibili

Leggi questo se vuoi rinfrescare cosa è un Content Provider.
I content provider vengono utilizzati principalmente per condividere dati. Se un'app dispone di content provider disponibili, potresti essere in grado di estrarre dati sensibili da essi. È anche interessante testare possibili iniezioni SQL e traversali di percorso in quanto potrebbero essere vulnerabili.

Scopri come sfruttare i Content Provider 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 esporta alcuni servizi, dovresti controllare il codice per capire cosa sta facendo e testarlo dinamicamente per estrarre informazioni confidenziali, eludere le misure di autenticazione...
Scopri come sfruttare i Servizi con Drozer.

Sfruttare i Ricevitori di Trasmissione

Leggi questo se vuoi rinfrescare cosa è un Ricevitore di Trasmissione.
Ricorda che le azioni di un ricevitore di trasmissione iniziano nel metodo onReceive.

Un ricevitore di trasmissione sarà in attesa di un tipo di messaggio. A seconda di come il ricevitore gestisce il messaggio, potrebbe essere vulnerabile.
Scopri come sfruttare i Ricevitori di Trasmissione con Drozer.

Puoi cercare i deep link manualmente, utilizzando strumenti come MobSF o script come questo.
Puoi aprire uno schema dichiarato utilizzando adb o un browser:

{% code overflow="wrap" %}

adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name]

{% endcode %}

Nota che puoi ommettere il nome del pacchetto e il dispositivo mobile chiamerà automaticamente l'app che dovrebbe aprire quel link.

{% code overflow="wrap" %}

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

{% endcode %}

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 deeplink, controlla che non stia ricevendo dati sensibili (come password) tramite parametri URL, perché qualsiasi altra applicazione potrebbe fingere il deeplink e rubare quei dati!

Parametri nel percorso

Devi controllare anche se un deeplink sta utilizzando un parametro all'interno del percorso dell'URL come: https://api.example.com/v1/users/{username}, in tal caso puoi forzare una traversa del percorso accedendo a qualcosa del genere: 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 percorso viene utilizzato come nome di dominio), account takeover (se puoi modificare i dettagli degli utenti senza token CSRF e l'endpoint vulnerabile utilizza il metodo corretto) e qualsiasi altra vulnerabilità. Maggiori informazioni su questo qui.

Altri esempi

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

Fallimenti di ispezione e verifica del livello di trasporto

  • I certificati non vengono sempre ispezionati correttamente dalle applicazioni Android. È comune che queste applicazioni ignorino gli avvisi e accettino certificati autofirmati o, in alcuni casi, tornino a utilizzare connessioni HTTP.
  • Le negoziazioni durante la handshake SSL/TLS sono talvolta deboli, utilizzando suite di cifratura non sicure. Questa vulnerabilità rende la connessione suscettibile ad attacchi di tipo man-in-the-middle (MITM), consentendo agli attaccanti di decifrare i dati.
  • La divulgazione di informazioni private è un rischio quando le applicazioni si autenticano utilizzando canali sicuri ma poi comunicano su canali non sicuri per altre transazioni. Questo approccio non protegge i dati sensibili, come i cookie di sessione o i dettagli dell'utente, dall'intercettazione da parte di entità malevole.

Verifica del certificato

Ci concentreremo sulla verifica del certificato. È necessario verificare l'integrità del certificato del server per migliorare la sicurezza. Questo è fondamentale perché le configurazioni TLS non sicure e la trasmissione di dati sensibili su canali non crittografati possono comportare rischi significativi. Per dettagliati passaggi sulla verifica dei certificati del 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 rispetto a una copia nota memorizzata all'interno dell'applicazione stessa. Questo metodo è essenziale per prevenire attacchi MITM. L'implementazione di SSL Pinning è fortemente consigliata per le applicazioni che gestiscono informazioni sensibili.

Ispezione del traffico

Per ispezionare il traffico HTTP, è necessario installare il certificato dello strumento di proxy (ad esempio, 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 che mirano a API Level 24 e superiori richiedono modifiche alla configurazione di sicurezza di rete per accettare il certificato CA del proxy. Questo passaggio è fondamentale per l'ispezione del traffico crittografato. Per istruzioni su come modificare la configurazione di sicurezza di rete, consulta questo tutorial.

Bypassare SSL Pinning

Quando viene implementato SSL Pinning, diventa necessario bypassarlo per ispezionare il traffico HTTPS. Sono disponibili vari metodi a tal fine:

  • Modificare automaticamente l'apk per bypassare SSL Pinning con apk-mitm. Il vantaggio principale di questa opzione è che non sarà necessario ottenere i permessi di root per bypassare l'SSL Pinning, ma sarà necessario eliminare l'applicazione e reinstallarne una nuova, e ciò non funzionerà sempre.
  • Puoi utilizzare Frida (discusso di seguito) per bypassare questa protezione. Qui trovi una guida su come utilizzare Burp+Frida+Genymotion: https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/
  • Puoi anche provare a bypassare automaticamente l'SSL Pinning utilizzando objection: objection --gadget com.package.app explore --startup-command "android sslpinning disable"
  • Puoi anche provare a bypassare automaticamente l'SSL Pinning utilizzando l'analisi dinamica di MobSF (spiegata di seguito)
  • Se pensi ancora che ci sia del traffico che non stai catturando, puoi provare a inoltrare il traffico a burp utilizzando 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. Le informazioni dettagliate sull'individuazione e sulla mitigazione di queste vulnerabilità esulano dallo scopo di questo riassunto, ma sono ampiamente trattate altrove.

Frida

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

Dump della memoria - Fridump

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

Utilizzando Fridump3 puoi eseguire 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 comando scaricherà la memoria nella cartella ./dump, e da lì potrai utilizzare il comando grep con qualcosa del genere:

{% code overflow="wrap" %}

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]+$"

{% endcode %}

Dati sensibili nel Keystore

In Android, il Keystore è il posto migliore per archiviare dati sensibili, tuttavia, con sufficienti privilegi, è ancora possibile accedervi. Poiché le applicazioni tendono a memorizzare qui dati sensibili in chiaro, i test di penetrazione dovrebbero verificarlo poiché un utente root o qualcuno con accesso fisico al dispositivo potrebbe essere in grado di rubare questi dati.

Anche se un'app memorizza dati nel keystore, i dati dovrebbero essere criptati.

Per accedere ai dati all'interno del keystore, è possibile utilizzare questo script di 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

Bypass delle impronte digitali/biometria

Utilizzando lo script Frida seguente potrebbe essere possibile bypassare l'autenticazione tramite impronte digitali che le applicazioni Android potrebbero eseguire al fine di proteggere determinate aree sensibili:

{% code overflow="wrap" %}

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

{% endcode %}

Immagini di sfondo

Quando si mette un'applicazione in background, Android memorizza uno snapshot dell'applicazione in modo che quando viene ripristinata 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 questo snapshot contiene informazioni sensibili, qualcuno con accesso allo snapshot potrebbe rubare tali informazioni (nota che è necessario il root per accedervi).

Gli snapshot di solito vengono memorizzati in: /data/system_ce/0/snapshots

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

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

Analizzatore di Applicazioni Android

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

Iniezione di Intent

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

Il pericolo risiede nel permettere 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 gli URL in oggetti Intent tramite Intent.parseUri(...) e poi li esegue, potenzialmente portando a iniezioni di Intent dannose.

Concetti Fondamentali

  • Iniezione di Intent è simile al problema di reindirizzamento aperto del web.
  • Gli exploit coinvolgono il passaggio di oggetti Intent come extra, che possono essere reindirizzati per eseguire operazioni non sicure.
  • Può esporre componenti non esportati e provider di contenuti agli attaccanti.
  • La conversione di URL di WebView in Intent può facilitare azioni non intenzionali.

Iniezioni lato client Android e altre

Probabilmente conosci questo tipo di vulnerabilità dal Web. Devi fare particolare attenzione a queste vulnerabilità in un'applicazione Android:

  • SQL Injection: Quando si gestiscono query dinamiche o Content-Provider, assicurarsi di utilizzare query parametrizzate.
  • JavaScript Injection (XSS): Verificare che il supporto JavaScript e dei 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.
  • Cookie eterni: In diversi casi, quando l'applicazione Android termina la sessione, il cookie non viene revocato o potrebbe persino essere salvato su disco.
  • Secure Flag nei cookie

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

Approfondimenti sull'Hacking
Interagisci con contenuti che approfondiscono l'emozione e le sfide dell'hacking

Notizie sull'Hacking in Tempo Reale
Resta aggiornato sul mondo dell'hacking frenetico attraverso notizie e approfondimenti in tempo reale

Ultime Novità
Rimani informato sul lancio delle nuove bug bounty e sugli aggiornamenti cruciali della piattaforma

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

Analisi Automatica

MobSF

Analisi statica

Valutazione delle vulnerabilità dell'applicazione utilizzando un'interfaccia web-based piacevole. È anche possibile eseguire un'analisi dinamica (ma è necessario preparare l'ambiente).

docker pull opensecurity/mobile-security-framework-mobsf
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest

Si noti che MobSF può analizzare le applicazioni Android (apk), IOS (ipa) e Windows (apx) (le applicazioni Windows devono essere analizzate da un MobSF installato in un host Windows).
Inoltre, se crei un file ZIP con il codice sorgente di un'app Android o IOS (vai alla cartella principale dell'applicazione, seleziona tutto e crea un file ZIP), sarà in grado di analizzarlo anche.

MobSF consente anche di confrontare/analizzare le analisi e di integrare VirusTotal (è necessario impostare la chiave API in MobSF/settings.py e abilitarla: VT_ENABLED = TRUE VT_API_KEY = <La tua chiave API> VT_UPLOAD = TRUE). È anche possibile impostare VT_UPLOAD su False, quindi l'hash verrà caricato invece del file.

Analisi dinamica assistita con MobSF

MobSF può essere molto utile anche per l'analisi dinamica su Android, ma in questo caso sarà necessario installare MobSF e genymotion nel tuo host (una VM o Docker non funzioneranno). Nota: è necessario avviare prima una VM in genymotion e poi MobSF.
L'analizzatore dinamico di MobSF può:

  • Estrarre i dati dell'applicazione (URL, log, appunti, screenshot effettuati da te, screenshot effettuati da "Exported Activity Tester", email, database SQLite, file XML e altri file creati). Tutto ciò viene fatto automaticamente tranne gli screenshot, devi premere quando desideri uno screenshot o devi premere "Exported Activity Tester" per ottenere gli screenshot di tutte le attività esportate.
  • Catturare il traffico HTTPS
  • Utilizzare Frida per ottenere informazioni in tempo reale

A partire dalle versioni di Android > 5, avvierà automaticamente Frida e imposterà le impostazioni globali del proxy per catturare il traffico. Catturerà solo il traffico dall'applicazione testata.

Frida

Per impostazione predefinita, utilizzerà anche alcuni script di Frida per aggirare il pinning SSL, la rilevazione del root e la rilevazione del debugger e per monitorare le API interessanti.
MobSF può anche invocare attività esportate, acquisire screenshot di esse e salvarle per il report.

Per avviare il test dinamico, premi il pulsante verde: "Start Instrumentation". Premi "Frida Live Logs" per visualizzare i log generati dagli script di Frida e "Live API Monitor" per visualizzare tutte le invocazioni ai metodi hook, gli argomenti passati e i valori restituiti (questo apparirà dopo aver premuto "Start Instrumentation").
MobSF consente anche di caricare i propri script di Frida (per inviare i risultati dei tuoi script di Frida a MobSF utilizza la funzione send()). Ha anche diversi script predefiniti che è possibile caricare (è possibile aggiungerne altri 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:

  • Enumera le classi caricate: Stampa tutte le classi caricate
  • Cattura stringhe: Stampa tutte le stringhe catturate durante l'utilizzo dell'applicazione (molto rumoroso)
  • Cattura confronti di stringhe: Potrebbe essere molto utile. Mostra le 2 stringhe confrontate e se il risultato è stato True o False.
  • Enumera i 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
  • Traccia i 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 interessanti delle API Android.

Una volta selezionato il modulo ausiliario che desideri utilizzare, è necessario premere "Start Intrumentation" 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 viene catturato il traffico HTTP, è possibile visualizzare una vista poco attraente del traffico catturato nella sezione "HTTP(S) Traffic" in basso o una vista più piacevole nel pulsante verde "Start HTTPTools". Dalla seconda opzione, è possibile inviare le richieste catturate a proxy come Burp o Owasp ZAP.
Per farlo, accendere Burp --> disattivare l'intercettazione --> in MobSB HTTPTools selezionare la richiesta --> premere "Send to Fuzzer" --> selezionare l'indirizzo del proxy (http://127.0.0.1:8080\).

Una volta completata l'analisi dinamica con MobSF, è possibile premere su "Start Web API Fuzzer" per fuzzare le richieste HTTP e cercare vulnerabilità.

{% hint style="info" %} Dopo aver eseguito un'analisi dinamica con MobSF, le impostazioni del proxy potrebbero essere configurate in modo errato e non sarà possibile correggerle dall'interfaccia grafica. È possibile correggere le impostazioni del proxy eseguendo:

adb shell settings put global http_proxy :0

{% endhint %}

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.

Yaazhini

Questo è un ottimo strumento per eseguire un'analisi statica con una GUI

Qark

Questo strumento è progettato per cercare diverse vulnerabilità di sicurezza delle applicazioni Android, sia nel codice sorgente che negli APK confezionati. Lo strumento è inoltre in grado di creare un APK "Proof-of-Concept" deployable e comandi ADB, per sfruttare alcune delle vulnerabilità trovate (attività esposte, intenti, tapjacking...). Come Drozer, non è necessario eseguire 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 sul dispositivo
  • e altro ancora
reverse-apk relative/path/to/APP.apk

SUPER Android Analyzer

SUPER è un'applicazione da linea di comando che può essere utilizzata su Windows, MacOS X e Linux per analizzare i file .apk alla ricerca di vulnerabilità. Lo fa decomprimendo gli APK e applicando una serie di regole per rilevare tali vulnerabilità.

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

Scarica le ultime versioni binarie dalla pagina di download

super-analyzer {apk_file}

StaCoAn

StaCoAn è uno strumento crossplatform che aiuta sviluppatori, cacciatori di bug e hacker etici a eseguire l'analisi del codice statico sulle applicazioni mobili.

Il concetto è che trascini e rilasci il file dell'applicazione mobile (un file .apk o .ipa) sull'applicazione StaCoAn e genererà un rapporto visuale e portatile per te. Puoi personalizzare le impostazioni e le liste di parole per ottenere un'esperienza personalizzata.

Scarica l'ultima versione:

./stacoan

AndroBugs

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

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 potenziali comportamenti maligni sviluppati da un'applicazione Android.

La rilevazione viene effettuata tramite l'analisi statica del bytecode Dalvik dell'applicazione, rappresentato come Smali, con la libreria androguard.

Questo strumento cerca comportamenti comuni delle "cattive" applicazioni come: esfiltrazione di identificatori telefonici, 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

Framework MARA

MARA è un Framework di Reverse engineering e Analisi di Applicazioni Mobili. È uno strumento che riunisce strumenti comuni utilizzati per il reverse engineering e l'analisi di applicazioni mobili, al fine di testare le applicazioni mobili contro le minacce alla sicurezza mobile di OWASP. Il suo obiettivo è rendere questa attività più facile e amichevole per gli sviluppatori di applicazioni mobili e i professionisti della sicurezza.

È in grado di:

Koodous

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

Codice di obfuscamento/deobfuscamento

Si noti che a seconda del servizio e della configurazione utilizzati per obfuscare il codice, i segreti possono essere o meno obfuscati.

ProGuard

Da Wikipedia: ProGuard è uno strumento open source a riga di comando che riduce, ottimizza e obfusca il codice Java. È in grado di ottimizzare il bytecode e rilevare ed eliminare istruzioni inutilizzate. ProGuard è un software gratuito e viene distribuito con la licenza GNU General Public License, versione 2.

ProGuard viene distribuito come parte dell'Android SDK e viene eseguito durante la compilazione dell'applicazione in modalità di rilascio.

DexGuard

Trova una guida passo-passo per deobfuscare l'APK su https://blog.lexfo.fr/dexguard.html

(Da quella guida) L'ultima volta che abbiamo controllato, la modalità di funzionamento di Dexguard era:

  • caricare una risorsa come InputStream;
  • alimentare il risultato a una classe che eredita da FilterInputStream per decifrarlo;
  • fare qualche obfuscazione inutile per sprecare alcuni minuti di tempo a un reverser;
  • alimentare il risultato decifrato a un ZipInputStream per ottenere un file DEX;
  • infine caricare il DEX risultante come una risorsa utilizzando il metodo loadDex.

DeGuard

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

È possibile caricare un APK obfuscati sulla loro piattaforma.

Simplify

È un deobfuscator generico per Android. Simplify esegue virtualmente un'app per comprendere il suo comportamento e quindi cerca di ottimizzare il codice in modo che si comporti in modo identico ma sia più comprensibile per un essere umano. Ogni tipo di ottimizzazione è semplice e generico, quindi non importa quale tipo specifico di obfuscazione viene utilizzato.

APKiD

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

Manuale

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

Laboratori

Androl4b

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

Riferimenti

Ancora da provare

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

Hacking Insights
Interagisci con contenuti che approfondiscono l'emozione e le sfide dell'hacking

Notizie di Hacking in Tempo Reale
Resta aggiornato sul mondo dell'hacking frenetico attraverso notizie e approfondimenti in tempo reale

Ultime Novità
Rimani informato sul lancio delle ultime taglie di bug e sugli aggiornamenti cruciali della piattaforma

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

Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks: