Android Applications Pentesting

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

Altri modi per supportare HackTricks:

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 con il mondo dell'hacking in rapida evoluzione attraverso notizie e approfondimenti in tempo reale

Ultime Annunci Resta informato sui nuovi 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!

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:

pageAndroid 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 tramite Rete da un computer. Questa utility consente 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 Comandi ADB per imparare come utilizzare adb.

Smali

A volte è interessante modificare il codice dell'applicazione per accedere a informazioni nascoste (forse password ben oscurate o flag). 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
  • Unisci tutti gli split e gli apk di base con APKEditor:

mkdir splits
adb shell pm path com.android.insecurebankv2 | cut -d ':' -f 1 | 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 decompiler. Per favore, leggi qui per trovare informazioni sui diversi decompiler disponibili.

Alla ricerca di informazioni interessanti

Semplicemente guardando le 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 controlla se sono configurati male. Maggiori informazioni su cos'è 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 accessati utilizzando decompiler o rinominando l'estensione del file APK in .zip e quindi decomprimendolo.

Le vulnerabilità identificate dal Manifest.xml includono:

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

  • Impostazioni di backup: L'attributo android:allowBackup="false" dovrebbe essere esplicitamente impostato per le applicazioni che gestiscono informazioni sensibili per impedire il backup non autorizzato dei dati tramite adb, specialmente 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 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 manifesto può evidenziare componenti che potrebbero essere abusati. Un'ulteriore analisi durante i test dinamici può rivelare come sfruttare questi componenti.

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

  • Ricevitori di trasmissione e schemi di URL: Questi componenti potrebbero essere sfruttati per l'exploit, con particolare attenzione a come vengono gestiti gli schemi di URL 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, possono essere scoperte 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'applicazione vittima, la sua interfaccia utente è progettata in modo tale da ingannare l'utente affinché interagisca con essa, mentre passa l'interazione all'applicazione vittima. Di fatto, acceca l'utente dal sapere che sta effettivamente eseguendo azioni sull'applicazione vittima.

Trova ulteriori informazioni in:

pageTapjacking

Task Hijacking

Un'attività con il launchMode impostato su singleTask senza alcun taskAffinity definito è vulnerabile al Task Hijacking. Ciò significa che un'applicazione può essere installata e se avviata prima dell'applicazione reale potrebbe dirottare il task dell'applicazione reale (quindi l'utente interagirà con l'applicazione malintenzionata pensando di usare quella reale).

Ulteriori informazioni in:

pageAndroid Task Hijacking

Archiviazione dati non sicura

Archiviazione interna

In Android, i file archiviati nella memoria interna sono progettati per essere accessibili esclusivamente dall'app che li ha creati. Questa misura di sicurezza è imposta dal sistema operativo Android ed è generalmente sufficiente per le esigenze di sicurezza della maggior parte delle applicazioni. Tuttavia, a volte gli sviluppatori utilizzano modalità come MODE_WORLD_READABLE e MODE_WORLD_WRITABLE per consentire ai file di essere condivisi tra diverse applicazioni. Tuttavia, queste modalità non limitano l'accesso a questi file da parte di altre applicazioni, comprese potenzialmente quelle dannose.

  1. Analisi Statica:

  • Assicurarsi che l'uso di MODE_WORLD_READABLE e MODE_WORLD_WRITABLE sia scrutinato attentamente. Queste modalità potrebbero 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 globalmente. Ciò potrebbe 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.

Archiviazione esterna

Quando si tratta di file su memoria esterna, come le schede SD, dovrebbero essere prese alcune precauzioni:

  1. Accessibilità:

  • I file su memoria 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 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:

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

  • 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 delle directory che limita l'accesso da un'app alla directory specifica per quell'app. Ciò 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 permette a ogni applicazione di salvare facilmente file XML nel percorso /data/data/<nomepacchetto>/shared_prefs/ e talvolta è possibile trovare informazioni sensibili in chiaro in quella cartella.

  • Database: Android permette a ogni applicazione di salvare facilmente database sqlite nel percorso /data/data/<nomepacchetto>/databases/ e talvolta è possibile trovare informazioni sensibili in chiaro in quella cartella.

TLS non sicuro

Accetta 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);

Crittografia danneggiata

Processi di gestione delle chiavi scadenti

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

Utilizzo di algoritmi insicuri 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 vengono utilizzati hash per memorizzare le password ad esempio, 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 è stato sradicato 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 eseguirla per controllare se è stata modificata.

  • Utilizzare APKiD per verificare quale compilatore/packer/obfuscator è stato utilizzato per compilare l'APK

Applicazione React Native

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

pageReact Native Application

Applicazioni Xamarin

Leggi la seguente pagina per imparare come accedere facilmente al codice C# delle applicazioni Xamarin:

pageXamarin Apps

Applicazioni Superpacked

Secondo questo post sul blog superpacked è un algoritmo Meta che comprime il contenuto di un'applicazione in un unico file. Il blog parla della possibilità di creare un'applicazione che decomprime questo tipo di app... e un modo più veloce che coinvolge eseguire l'applicazione e raccogliere i file decompressi dal filesystem.

Analisi statica automatizzata del codice

Lo strumento mariana-trench è in grado di individuare vulnerabilità esaminando 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), sorgenti (che indicano allo strumento i luoghi pericolosi in cui un input utente malintenzionato potrebbe causare danni) e regole. Queste regole indicano la combinazione di sorgenti-sorgenti che indica una vulnerabilità.

Con questa conoscenza, mariana-trench esaminerà il codice e individuerà possibili vulnerabilità al suo interno.

Segreti rivelati

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

Bypass dell'autenticazione biometrica

pageBypass Biometric Authentication (Android)

Altre funzioni interessanti

Altri trucchi

pagecontent:// protocol

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

Approfondimenti sull'hacking Coinvolgiti con contenuti che esplorano l'emozione e le sfide dell'hacking

Notizie sull'hacking in tempo reale Resta aggiornato con il mondo dell'hacking ad alta velocità attraverso notizie e approfondimenti in tempo reale

Ultime notizie Rimani informato sui nuovi bug bounty in arrivo e sugli aggiornamenti cruciali della piattaforma

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


Analisi dinamica

Prima di tutto, è 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 radicato (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 necessità di un lento emulatore ARM).

  • Impara a configurarlo in questa pagina:

pageAVD - Android Virtual Device
  • Genymotion (Versione gratuita: Personal Edition, è necessario creare un account. Si consiglia di scaricare la versione CON VirtualBox per evitare potenziali errori.)

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

Quando crei un nuovo emulatore su qualsiasi piattaforma, ricorda che maggiore è la dimensione dello schermo, più lento sarà l'emulatore. Quindi seleziona schermi piccoli se possibile.

Per installare i servizi Google (come AppStore) in Genymotion devi fare clic sul pulsante evidenziato di 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 un'altra VM con gli strumenti).

Utilizzare un dispositivo fisico

È necessario attivare le opzioni di debugging e sarebbe utile se potessi eseguire il root:

  1. Impostazioni.

  2. (Da Android 8.0) Seleziona Sistema.

  3. Seleziona Informazioni sul telefono.

  4. Premi 7 volte su Numero build.

  5. 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 effettuare questa analisi dinamica iniziale utilizzando l'analisi dinamica di MobSF + pidcat, in modo da poter imparare come funziona l'applicazione mentre MobSF cattura molti dati interessanti che potrai rivedere in seguito.

Perdita involontaria di dati

Registrazione

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

Nota che a partire da versioni più recenti di 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.

Cache del buffer di copia/incolla

Il framework basato sulla clipboard di Android abilita la funzionalità di copia/incolla nelle app, ma rappresenta 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 della carta di credito, per prevenire perdite di dati.

Log dei crash

Se un'applicazione va in crash e salva i log, questi log possono aiutare gli attaccanti, specialmente 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 siano inviati tramite un canale SSL per la sicurezza.

Come pentester, prova a dare un'occhiata a questi log.

Dati di analisi inviati a terze parti

Le applicazioni spesso integrano servizi come Google Adsense, che possono involontariamente leakare dati sensibili 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 vengono inviate informazioni sensibili a servizi di terze parti.

Database SQLite

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/nome.pacchetto/databases come /data/data/com.mwr.example.sieve/databases

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

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

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

Da Documenti di Drozer: Drozer ti permette 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 tra Processi di Android (IPC) e interagire con il sistema operativo sottostante. Drozer è uno strumento utile per sfruttare attività esportate, servizi esportati e Provider di contenuti come imparerai nelle sezioni seguenti.

Sfruttare attività esportate

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

Bypass di autorizzazione

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

Scopri come sfruttare le attività esportate con Drozer.

Puoi anche avviare un'attività esportata da adb:

  • Il nome del pacchetto è com.example.demo

  • Il nome dell'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 questo è pericoloso solo su vecchie versioni (versioni API < 21).

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

Fuga 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 fuga di informazioni sensibili.

Tapjacking

Se il tapjacking non è impedito, potresti abusare dell'attività esportata per fare sì che l'utente compia azioni inaspettate. 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 sia un Content Provider. I content provider sono fondamentalmente utilizzati 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 percorsi in quanto potrebbero essere vulnerabili.

Scopri come sfruttare i Content Providers con Drozer.

Sfruttare i Servizi

Leggi questo se vuoi rinfrescare cosa sia 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, aggirare misure di autenticazione... Scopri come sfruttare i Servizi con Drozer.

Sfruttare i Ricevitori di Broadcast

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

Un ricevitore di broadcast 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 Broadcast con Drozer.

Puoi cercare manualmente deep links, utilizzando strumenti come MobSF o script come questo. Puoi aprire uno schema dichiarato utilizzando 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 cellulare 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, poiché qualsiasi altra applicazione potrebbe impersonare il deep link e rubare quei dati!

Parametri nel percorso

Devi controllare anche se un deep link sta utilizzando un parametro all'interno del percorso dell'URL come: https://api.example.com/v1/users/{username}, in tal caso puoi forzare una traversata 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 Reindirizzamento Aperto (se parte del percorso viene utilizzata come nome di dominio), acquisizione dell'account (se puoi modificare i dettagli degli utenti senza token CSRF e l'endpoint vulnerabile ha utilizzato il metodo corretto) e qualsiasi altra vulnerabilità. Maggiori informazioni qui.

Altri esempi

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

Ispezioni e Fallimenti di Verifica del Livello di Trasporto

  • Le certificazioni non vengono sempre ispezionate correttamente dalle applicazioni Android. È comune che queste applicazioni trascurino gli avvisi e accettino certificati auto-firmati o, in alcuni casi, tornino a utilizzare connessioni HTTP.

  • Le negoziazioni durante l'handshake SSL/TLS sono a volte deboli, impiegando 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 perdita di informazioni private è un rischio quando le applicazioni si autenticano utilizzando canali sicuri ma comunicano poi tramite 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à malintenzionate.

Verifica del Certificato

Ci concentreremo sulla verifica del certificato. È fondamentale verificare l'integrità del certificato del server per migliorare la sicurezza. Questo è cruciale perché configurazioni TLS non sicure 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 gestione delle vulnerabilità, questa risorsa fornisce una guida completa.

SSL Pinning

Lo SSL Pinning è una misura di sicurezza in cui l'applicazione verifica il certificato del server rispetto a una copia conosciuta memorizzata all'interno dell'applicazione stessa. Questo metodo è essenziale per prevenire attacchi MITM. L'implementazione dello SSL Pinning è fortemente raccomandata per le applicazioni che gestiscono informazioni sensibili.

Ispezione del Traffico

Per ispezionare il traffico HTTP, è necessario installare il certificato dello strumento 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 Livello 24 e superiore richiedono modifiche alla Configurazione della Sicurezza di Rete per accettare il certificato CA del proxy. Questo passaggio è fondamentale per ispezionare il traffico crittografato. Per istruzioni sulla modifica della Configurazione della Sicurezza di Rete, consulta questo tutorial.

Bypass dello SSL Pinning

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

  • Modificare automaticamente l'apk per bypassare lo SSL Pinning con apk-mitm. Il principale vantaggio di questa opzione è che non sarà necessario il root per bypassare lo SSL Pinning, ma sarà necessario eliminare l'applicazione e reinstallare la nuova, e ciò non funzionerà sempre.

  • È possibile 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 lo SSL Pinning utilizzando objection: objection --gadget com.package.app explore --startup-command "android sslpinning disable"

  • Puoi anche provare a bypassare automaticamente lo 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à vanno oltre il campo 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 reale per cambiare il comportamento, i valori, estrarre valori, eseguire codice diverso... Se vuoi fare pentesting delle 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 mnemonici.

Utilizzando Fridump3 puoi eseguire il dump della memoria dell'applicazione con:

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

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

Questo dumpa la memoria nella cartella ./dump e da lì puoi fare grep con qualcosa del genere:

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 dove memorizzare dati sensibili, tuttavia, con abbastanza privilegi è ancora possibile accedervi. Poiché le applicazioni tendono a memorizzare qui dati sensibili in chiaro, i test di penetrazione dovrebbero controllare questo aspetto poiché un utente root o qualcuno con accesso fisico al dispositivo potrebbe essere in grado di rubare tali dati.

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

Per accedere ai dati all'interno del keystore potresti 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

Bypass delle impronte digitali/biometrici

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

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

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 inizi 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 avere i permessi di root per accedervi).

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

Android fornisce un modo per prevenire la cattura dello screenshot impostando il FLAG_SECURE come parametro di layout. Utilizzando questa flag, i contenuti della finestra sono trattati come sicuri, impedendo che compaiano negli screenshot o che siano visualizzati 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 esportate 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 in Intent di WebView può facilitare azioni non intenzionali.

Iniezioni Lato Client Android e altri

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

  • SQL Injection: Quando si gestiscono query dinamiche o Content-Providers, assicurati di utilizzare query parametriche.

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

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

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


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

Approfondimenti sull'Hacking Interagisci con contenuti che esplorano 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 Comunicazioni Rimani informato sui nuovi bug bounty in arrivo e sugli aggiornamenti cruciali della piattaforma

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

Analisi Automatica

Analisi statica

Valutazione delle vulnerabilità dell'applicazione utilizzando un'interfaccia web front-end. È 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 si crea un file ZIP con il codice sorgente di un'applicazione Android o IOS (andare alla cartella principale dell'applicazione, selezionare tutto e creare un file ZIP), sarà in grado di analizzarlo anche.

MobSF consente anche di diff/Confrontare l'analisi e di integrare VirusTotal (è necessario impostare la propria 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 in Android, ma in questo caso sarà necessario installare MobSF e genymotion nel proprio host (una VM o Docker non funzioneranno). Nota: È necessario avviare prima una VM in genymotion e poi MobSF. Il analizzatore dinamico di MobSF può:

  • Estrarre dati dell'applicazione (URL, log, appunti, screenshot realizzati da te, screenshot realizzati da "Exported Activity Tester", email, database SQLite, file XML e altri file creati). Tutto ciò viene fatto automaticamente tranne i screenshot, è necessario premere quando si desidera uno screenshot o è necessario 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

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 bypassare il pinning SSL, rilevare il root e rilevare il debugger e per monitorare API interessanti. MobSF può anche invocare attività esportate, acquisire screenshot di esse e salvarli per il report.

Per avviare il test dinamico premere il pulsante verde: "Start Instrumentation". Premere "Frida Live Logs" per visualizzare i log generati dagli script di Frida e "Live API Monitor" per visualizzare 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 di Frida (per inviare i risultati dei tuoi script di Frida a MobSF utilizzare la funzione send()). Ha anche diversi script pre-scritti che è possibile caricare (è possibile aggiungerne altri in MobSF/DynamicAnalyzer/tools/frida_scripts/others/), basta selezionarli, premere "Load" e premere "Start Instrumentation" (sarà possibile vedere i log di quegli script all'interno di "Frida Live Logs").

Inoltre, sono disponibili alcune funzionalità ausiliarie di Frida:

  • Enumerate Loaded Classes: Stampa tutte le classi caricate

  • Capture Strings: Stampa tutte le stringhe catturate durante l'uso dell'applicazione (molto rumoroso)

  • Capture String Comparisons: Potrebbe essere molto utile. Mostrerà le 2 stringhe confrontate e se il risultato è stato Vero o Falso.

  • Enumerate Class Methods: Inserire il nome della classe (come "java.io.File") e verranno stampati tutti i metodi della classe.

  • Search Class Pattern: Cerca classi per modello

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

Una volta selezionato il modulo ausiliario che si desidera utilizzare, è necessario premere "Start Intrumentation" e si vedranno 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, è 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'Intercept --> nella sezione 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à.

Dopo aver eseguito un'analisi dinamica con MobSF, le impostazioni del proxy potrebbero essere configurate in modo errato e potresti non essere in grado di correggerle dall'interfaccia grafica. È possibile correggere le impostazioni del proxy eseguendo:

adb shell settings put global http_proxy :0

Analisi dinamica assistita con Inspeckage

È possibile ottenere lo strumento da Inspeckage. Questo strumento utilizzerà alcuni Hooks per farti sapere cosa sta succedendo nell'applicazione mentre esegui un'analisi dinamica.

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

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 deployable come "Proof-of-Concept" e comandi ADB, per sfruttare alcune delle vulnerabilità trovate (attività esposte, intent, 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

  • 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

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

SUPER è un'applicazione da riga di comando che può essere utilizzata su Windows, MacOS X e Linux, che analizza i file .apk alla ricerca di vulnerabilità. Fa ciò 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 potrebbe creare le proprie regole per analizzare ciò di cui hanno bisogno.

Scarica le ultime versioni eseguibili dalla pagina di download

super-analyzer {apk_file}

StaCoAn è uno strumento multi-piattaforma che aiuta sviluppatori, cacciatori di bug e hacker etici a eseguire l'analisi statica del codice su 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 gli elenchi di parole per ottenere un'esperienza personalizzata.

Scarica l'ultima versione:

./stacoan

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

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

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

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

Questo strumento cerca comportamenti comuni delle applicazioni "cattive" 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

MARA è un Framework di Reverse engineering e Analisi di Applicazioni Mobili. È uno strumento che riunisce strumenti comunemente utilizzati per il reverse engineering e l'analisi di applicazioni mobili, per assistere nel test delle applicazioni mobili contro le minacce alla sicurezza mobile di OWASP. Il suo obiettivo è rendere più facile e amichevole questo compito 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

Nota che a seconda del servizio e della configurazione che si utilizza per obfuscare il codice, i segreti possono o meno essere obfuscati.

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

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

Trova una guida passo-passo per deobfuscare l'APK in 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 un InputStream;

  • alimentare il risultato a una classe che eredita da FilterInputStream per decifrarlo;

  • fare un'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 inverte il processo di obfuscazione eseguito dagli strumenti di obfuscazione Android. Questo consente numerose analisi di sicurezza, inclusa l'ispezione del codice e la previsione delle librerie.

È possibile caricare un APK obfuscati sulla loro piattaforma.

È 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ù facile da capire per un essere umano. Ogni tipo di ottimizzazione è semplice e generico, quindi non importa quale tipo specifico di obfuscazione venga utilizzato.

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 è 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 di malware.

Riferimenti

Ancora da provare

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

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

Notizie sull'Hacking in Tempo Reale Resta aggiornato con il mondo dell'hacking ad alta velocità attraverso notizie e approfondimenti in tempo reale

Ultime Novità Rimani informato sui nuovi bug bounty in arrivo e sugli aggiornamenti cruciali della piattaforma

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

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

Altri modi per supportare HackTricks:

Last updated