mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/mobile-pentesting/android-app-pentesting/README.md', 's
This commit is contained in:
parent
9ff1d83e7b
commit
84400949da
@ -337,6 +337,7 @@
|
||||
- [Manual DeObfuscation](mobile-pentesting/android-app-pentesting/manual-deobfuscation.md)
|
||||
- [React Native Application](mobile-pentesting/android-app-pentesting/react-native-application.md)
|
||||
- [Reversing Native Libraries](mobile-pentesting/android-app-pentesting/reversing-native-libraries.md)
|
||||
- [Shizuku Privileged Api](mobile-pentesting/android-app-pentesting/shizuku-privileged-api.md)
|
||||
- [Smali - Decompiling, Modifying, Compiling](mobile-pentesting/android-app-pentesting/smali-changes.md)
|
||||
- [Spoofing your location in Play Store](mobile-pentesting/android-app-pentesting/spoofing-your-location-in-play-store.md)
|
||||
- [Tapjacking](mobile-pentesting/android-app-pentesting/tapjacking.md)
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Nozioni di base sulle Applicazioni Android
|
||||
## Nozioni di Base sulle 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**:
|
||||
|
||||
@ -13,7 +13,7 @@ android-applications-basics.md
|
||||
## 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 **rete** da un computer. Questa utility abilita la **copia** di file in entrambe le direzioni, **installazione** e **disinstallazione** di app, **esecuzione** di comandi shell, **backup** di dati, **lettura** di log, tra le altre funzioni.
|
||||
**ADB** consente di controllare i dispositivi sia tramite **USB** che tramite **rete** da un computer. Questa utility permette 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**](adb-commands.md) per imparare come utilizzare adb.
|
||||
|
||||
@ -25,6 +25,7 @@ A volte è interessante **modificare il codice dell'applicazione** per accedere
|
||||
## Altri trucchi interessanti
|
||||
|
||||
- [Falsificare la tua posizione nel Play Store](spoofing-your-location-in-play-store.md)
|
||||
- [API Privilegiata Shizuku (accesso privilegiato non root basato su ADB)](shizuku-privileged-api.md)
|
||||
- **Scarica APK**: [https://apps.evozi.com/apk-downloader/](https://apps.evozi.com/apk-downloader/), [https://apkpure.com/es/](https://apkpure.com/es/), [https://www.apkmirror.com/](https://www.apkmirror.com), [https://apkcombo.com/es-es/apk-downloader/](https://apkcombo.com/es-es/apk-downloader/), [https://github.com/kiber-io/apkd](https://github.com/kiber-io/apkd)
|
||||
- Estrai APK dal dispositivo:
|
||||
```bash
|
||||
@ -60,15 +61,15 @@ Presta particolare attenzione agli **URL di firebase** e controlla se è configu
|
||||
|
||||
### 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 decompilatori o rinominando l'estensione del file APK in .zip e poi decomprimendolo.
|
||||
L'**esame dei file _Manifest.xml_ e _strings.xml_ di un'applicazione può rivelare potenziali vulnerabilità di sicurezza**. Questi file possono essere accessibili utilizzando decompilatori o rinominando l'estensione del file APK in .zip e poi decomprimendolo.
|
||||
|
||||
**Vulnerabilità** identificate dal **Manifest.xml** includono:
|
||||
Le **vulnerabilità** identificate dal **Manifest.xml** includono:
|
||||
|
||||
- **Applicazioni Debuggable**: Le applicazioni impostate come debuggable (`debuggable="true"`) nel file _Manifest.xml_ rappresentano un rischio poiché consentono connessioni che possono portare a sfruttamenti. Per ulteriori informazioni su come sfruttare le applicazioni debuggable, fai riferimento a un tutorial su come trovare e sfruttare applicazioni debuggable su un dispositivo.
|
||||
- **Impostazioni di Backup**: L'attributo `android:allowBackup="false"` dovrebbe essere esplicitamente impostato per le applicazioni che gestiscono informazioni sensibili per prevenire backup non autorizzati dei dati tramite adb, specialmente quando il debug USB è abilitato.
|
||||
- **Sicurezza della Rete**: Configurazioni di sicurezza della rete personalizzate (`android:networkSecurityConfig="@xml/network_security_config"`) in _res/xml/_ possono specificare dettagli di sicurezza come pin di certificato e impostazioni del traffico HTTP. Un esempio è consentire il traffico HTTP per domini specifici.
|
||||
- **Impostazioni di Backup**: L'attributo `android:allowBackup="false"` dovrebbe essere impostato esplicitamente per le applicazioni che gestiscono informazioni sensibili per prevenire backup non autorizzati dei dati tramite adb, specialmente quando il debug USB è abilitato.
|
||||
- **Sicurezza della Rete**: Le configurazioni di sicurezza della rete personalizzate (`android:networkSecurityConfig="@xml/network_security_config"`) in _res/xml/_ possono specificare dettagli di sicurezza come i pin dei certificati e le impostazioni del traffico HTTP. Un esempio è consentire il traffico HTTP per domini specifici.
|
||||
- **Attività e Servizi Esportati**: Identificare attività e servizi esportati nel manifest può evidenziare componenti che potrebbero essere abusati. Ulteriori analisi durante i test dinamici possono rivelare come sfruttare questi componenti.
|
||||
- **Content Providers e FileProviders**: I content provider esposti potrebbero consentire accessi o modifiche non autorizzate ai dati. La configurazione dei FileProviders dovrebbe essere esaminata con attenzione.
|
||||
- **Content Providers e FileProviders**: I content provider esposti potrebbero consentire accessi o modifiche non autorizzate ai dati. Anche la configurazione dei FileProviders dovrebbe essere esaminata.
|
||||
- **Broadcast Receivers e URL Schemes**: Questi componenti potrebbero essere sfruttati per sfruttamenti, prestando particolare attenzione a come vengono gestiti gli URL schemes per vulnerabilità di input.
|
||||
- **Versioni SDK**: Gli attributi `minSdkVersion`, `targetSDKVersion` e `maxSdkVersion` indicano le versioni Android supportate, evidenziando l'importanza di non supportare versioni Android obsolete e vulnerabili per motivi di sicurezza.
|
||||
|
||||
@ -76,8 +77,8 @@ Dal file **strings.xml**, informazioni sensibili come chiavi API, schemi persona
|
||||
|
||||
### Tapjacking
|
||||
|
||||
**Tapjacking** è un attacco in cui un **applicazione** **maligna** viene lanciata e **si posiziona sopra un'applicazione vittima**. Una volta che oscura visibilmente l'app vittima, la sua interfaccia utente è progettata in modo da ingannare l'utente a interagire con essa, mentre passa l'interazione all'app vittima.\
|
||||
In effetti, sta **accecando l'utente dal sapere che sta effettivamente eseguendo azioni sull'app vittima**.
|
||||
Il **Tapjacking** è un attacco in cui un'**applicazione** **maligna** viene lanciata e **si posiziona sopra un'applicazione vittima**. Una volta che oscura visibilmente l'app vittima, la sua interfaccia utente è progettata in modo da ingannare l'utente a interagire con essa, mentre passa l'interazione all'app vittima.\
|
||||
In effetti, sta **ciecando l'utente dal sapere che sta effettivamente eseguendo azioni sull'app vittima**.
|
||||
|
||||
Trova maggiori informazioni in:
|
||||
|
||||
@ -87,7 +88,7 @@ tapjacking.md
|
||||
|
||||
### Task Hijacking
|
||||
|
||||
Un'**attività** con il **`launchMode`** impostato su **`singleTask` senza alcun `taskAffinity`** definito è vulnerabile al task hijacking. Questo significa che un'**applicazione** può essere installata e, se lanciata prima dell'applicazione reale, potrebbe **dirottare il task dell'applicazione reale** (quindi l'utente interagirà con l'**applicazione maligna pensando di utilizzare quella reale**).
|
||||
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 lanciata prima dell'applicazione reale, potrebbe **dirottare il task dell'applicazione reale** (quindi l'utente interagirà con l'**applicazione maligna pensando di utilizzare quella reale**).
|
||||
|
||||
Maggiore info in:
|
||||
|
||||
@ -102,16 +103,16 @@ android-task-hijacking.md
|
||||
In Android, i file **memorizzati** 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 adeguata per le esigenze di sicurezza della maggior parte delle applicazioni. Tuttavia, gli sviluppatori a volte utilizzano modalità come `MODE_WORLD_READABLE` e `MODE_WORLD_WRITABLE` per **consentire** la condivisione di file tra diverse applicazioni. Tuttavia, queste modalità **non limitano l'accesso** a questi file da parte di altre applicazioni, comprese quelle potenzialmente dannose.
|
||||
|
||||
1. **Analisi Statica:**
|
||||
- **Assicurati** che l'uso di `MODE_WORLD_READABLE` e `MODE_WORLD_WRITABLE` sia **scrutinato con attenzione**. Queste modalità **possono potenzialmente esporre** file a **accessi non intenzionati o non autorizzati**.
|
||||
- **Assicurati** che l'uso di `MODE_WORLD_READABLE` e `MODE_WORLD_WRITABLE` sia **scrutinato attentamente**. Queste modalità **possono potenzialmente esporre** file a **accessi non intenzionati o non autorizzati**.
|
||||
2. **Analisi Dinamica:**
|
||||
- **Verifica** i **permessi** impostati sui file creati dall'app. In particolare, **controlla** se ci sono file **impostati per essere leggibili o scrivibili a livello globale**. Questo può rappresentare un rischio significativo per la sicurezza, poiché consentirebbe a **qualsiasi applicazione** installata sul dispositivo, indipendentemente dalla sua origine o intento, di **leggere o modificare** questi file.
|
||||
- **Verifica** le **permissive** impostate sui file creati dall'app. In particolare, **controlla** se ci sono file **impostati per essere leggibili o scrivibili a livello globale**. Questo può rappresentare un rischio significativo per la sicurezza, poiché consentirebbe a **qualsiasi applicazione** installata sul dispositivo, indipendentemente dalla sua origine o intento, di **leggere o modificare** questi file.
|
||||
|
||||
**Memoria Esterna**
|
||||
|
||||
Quando si trattano file su **memoria esterna**, come schede SD, dovrebbero essere adottate alcune precauzioni:
|
||||
|
||||
1. **Accessibilità**:
|
||||
- I file sulla memoria esterna sono **globalmente leggibili e scrivibili**. Questo significa che qualsiasi applicazione o utente può accedere a questi file.
|
||||
- I file sulla memoria esterna sono **globalmente leggibili e scrivibili**. Ciò significa che qualsiasi applicazione o utente può accedere a questi file.
|
||||
2. **Preoccupazioni di Sicurezza**:
|
||||
- Data la facilità di accesso, è consigliato **non memorizzare informazioni sensibili** sulla memoria esterna.
|
||||
- La memoria esterna può essere rimossa o accessibile da qualsiasi applicazione, rendendola meno sicura.
|
||||
@ -122,7 +123,7 @@ Quando si trattano file su **memoria esterna**, come schede SD, dovrebbero esser
|
||||
|
||||
La memoria esterna può essere **accessibile** in `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard`
|
||||
|
||||
> [!NOTE]
|
||||
> [!TIP]
|
||||
> A partire da Android 4.4 (**API 17**), la scheda SD ha una struttura di directory che **limita l'accesso da un'app alla directory specificamente per quell'app**. Questo impedisce a un'applicazione malevola di ottenere accesso in lettura o scrittura ai file di un'altra app.
|
||||
|
||||
**Dati sensibili memorizzati in chiaro**
|
||||
@ -149,12 +150,12 @@ Alcuni sviluppatori salvano dati sensibili nello storage locale e li crittografa
|
||||
|
||||
**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 i **hash** vengono utilizzati per memorizzare le password, ad esempio, dovrebbero essere utilizzati hash resistenti a brute-force con sale.
|
||||
Gli sviluppatori non dovrebbero utilizzare **algoritmi deprecati** per eseguire **controlli di autorizzazione**, **memorizzare** o **inviare** dati. Alcuni di questi algoritmi sono: RC4, MD4, MD5, SHA1... Se i **hash** vengono utilizzati per memorizzare le password, ad esempio, dovrebbero essere utilizzati hash resistenti alla forza bruta con sale.
|
||||
|
||||
### Altri controlli
|
||||
|
||||
- È consigliato **offuscare l'APK** per rendere più difficile il lavoro di reverse engineering per gli attaccanti.
|
||||
- Se l'app è sensibile (come le app bancarie), dovrebbe eseguire i **propri controlli per vedere se il mobile è rootato** e agire di conseguenza.
|
||||
- Se l'app è sensibile (come le app bancarie), dovrebbe eseguire i propri **controlli per vedere se il mobile è rootato** e agire di conseguenza.
|
||||
- Se l'app è sensibile (come le app bancarie), dovrebbe controllare se viene utilizzato un **emulatore**.
|
||||
- Se l'app è sensibile (come le app bancarie), dovrebbe **controllare la propria integrità prima di eseguire** per verificare se è stata modificata.
|
||||
- Usa [**APKiD**](https://github.com/rednaga/APKiD) per controllare quale compilatore/pacchetto/offuscatore è stato utilizzato per costruire l'APK.
|
||||
@ -177,7 +178,7 @@ Leggi la seguente pagina per imparare come accedere facilmente al codice C# dell
|
||||
|
||||
### Applicazioni Superpacked
|
||||
|
||||
Secondo questo [**post del blog**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/), 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 di un modo più veloce che implica **eseguire l'applicazione e raccogliere i file decompressi dal filesystem.**
|
||||
Secondo questo [**post del blog**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/), superpacked è un algoritmo Meta che comprime il contenuto di un'applicazione in un unico file. Il blog parla della possibilità di creare un'app che decomprime questo tipo di app... e di un modo più veloce che implica **eseguire l'applicazione e raccogliere i file decompressi dal filesystem.**
|
||||
|
||||
### Analisi statica automatizzata del codice
|
||||
|
||||
@ -230,24 +231,24 @@ Grazie alla connessione ADB puoi utilizzare **Drozer** e **Frida** all'interno d
|
||||
|
||||
#### Utilizzando un emulatore
|
||||
|
||||
- [**Android Studio**](https://developer.android.com/studio) (Puoi creare dispositivi **x86** e **arm**, e secondo [**questo**](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**ultimi x86** le versioni **supportano le librerie ARM** senza necessità di un emulatore arm lento).
|
||||
- [**Android Studio**](https://developer.android.com/studio) (Puoi creare dispositivi **x86** e **arm**, e secondo [**questo**](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html) **ultimi versioni x86** supportano le librerie ARM senza necessità di un emulatore arm lento).
|
||||
- Impara a configurarlo in questa pagina:
|
||||
|
||||
{{#ref}}
|
||||
avd-android-virtual-device.md
|
||||
{{#endref}}
|
||||
|
||||
- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Versione gratuita:** Edizione personale, devi creare un account. _È consigliato **scaricare** la versione **CON**_ _**VirtualBox** per evitare potenziali errori._)
|
||||
- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Versione gratuita:** Edizione personale, devi creare un account. _È consigliato **scaricare** la versione **CON** _**VirtualBox** per evitare potenziali errori._)
|
||||
- [**Nox**](https://es.bignox.com) (Gratuito, ma non supporta Frida o Drozer).
|
||||
|
||||
> [!NOTE]
|
||||
> [!TIP]
|
||||
> Quando crei un nuovo emulatore su qualsiasi piattaforma ricorda che più grande è lo schermo, più lento sarà l'emulatore. Quindi seleziona schermi piccoli se possibile.
|
||||
|
||||
Per **installare i servizi Google** (come AppStore) in Genymotion devi cliccare sul pulsante contrassegnato in rosso nell'immagine seguente:
|
||||
|
||||
.png>)
|
||||
|
||||
Inoltre, nota che nella **configurazione della VM Android in Genymotion** puoi selezionare **Modalità di rete Bridge** (questo sarà utile se ti connetterai alla VM Android da una VM diversa con gli strumenti).
|
||||
Inoltre, nota che nella **configurazione della VM Android in Genymotion** puoi selezionare **Modalità rete Bridge** (questo sarà utile se ti connetterai alla VM Android da una VM diversa con gli strumenti).
|
||||
|
||||
#### Usa un dispositivo fisico
|
||||
|
||||
@ -284,7 +285,7 @@ Come pentester, **cerca di dare un'occhiata a questi log**.
|
||||
|
||||
**Dati di analisi inviati a terzi**
|
||||
|
||||
Le applicazioni integrano spesso servizi come Google Adsense, che possono involontariamente **far trapelare 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 eventuali informazioni sensibili inviate a servizi di terze parti.
|
||||
Le applicazioni spesso integrano servizi come Google Adsense, che possono involontariamente **trapelare 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 eventuali informazioni sensibili inviate a servizi di terze parti.
|
||||
|
||||
### DB SQLite
|
||||
|
||||
@ -307,7 +308,7 @@ Ricorda anche che il codice di un'attività inizia nel metodo **`onCreate`**.
|
||||
|
||||
**Bypass dell'autorizzazione**
|
||||
|
||||
Quando un'Activity è 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**.
|
||||
Quando un'Activity è esportata, puoi invocare il suo schermo da un'app esterna. Pertanto, se un'attività con **informazioni sensibili** è **esportata**, potresti **bypassare** i meccanismi di **autenticazione** **per accedervi.**
|
||||
|
||||
[**Scopri come sfruttare le attività esportate con Drozer.**](drozer-tutorial/index.html#activities)
|
||||
|
||||
@ -320,7 +321,7 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity
|
||||
```
|
||||
**NOTA**: MobSF rileverà come malevolo l'uso di _**singleTask/singleInstance**_ come `android:launchMode` in un'attività, ma a causa di [questo](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750), apparentemente questo è pericoloso solo su versioni obsolete (versioni API < 21).
|
||||
|
||||
> [!NOTE]
|
||||
> [!TIP]
|
||||
> Nota che un bypass di autorizzazione non è sempre una vulnerabilità, dipenderebbe da come funziona il bypass e quali informazioni vengono esposte.
|
||||
|
||||
**Perdita di informazioni sensibili**
|
||||
@ -329,7 +330,7 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity
|
||||
|
||||
#### Tapjacking
|
||||
|
||||
Se il tapjacking non è prevenuto, potresti abusare dell'attività esportata per far **eseguire azioni inaspettate** all'utente. Per ulteriori informazioni su [**cosa è il Tapjacking segui il link**](#tapjacking).
|
||||
Se il tapjacking non viene prevenuto, potresti abusare dell'attività esportata per far **eseguire azioni inaspettate all'utente**. Per ulteriori informazioni su [**cos'è il Tapjacking segui il link**](#tapjacking).
|
||||
|
||||
### Sfruttare i Content Providers - Accesso e manipolazione di informazioni sensibili
|
||||
|
||||
@ -343,7 +344,7 @@ I content provider sono fondamentalmente utilizzati per **condividere dati**. Se
|
||||
[**Leggi questo se vuoi rinfrescare cosa è un Servizio.**](android-applications-basics.md#services)\
|
||||
Ricorda che le azioni di un Servizio iniziano nel metodo `onStartCommand`.
|
||||
|
||||
Un servizio è fondamentalmente qualcosa che **può ricevere dati**, **elaborarli** e **restituire** (o meno) una risposta. Quindi, se un'applicazione sta esportando alcuni servizi, dovresti **controllare** il **codice** per capire cosa sta facendo e **testarlo** **dinamicamente** per estrarre informazioni riservate, bypassare misure di autenticazione...\
|
||||
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 riservate, bypassare misure di autenticazione...\
|
||||
[**Scopri come sfruttare i Servizi con Drozer.**](drozer-tutorial/index.html#services)
|
||||
|
||||
### **Sfruttare i Broadcast Receivers**
|
||||
@ -380,7 +381,7 @@ Ogni volta che trovi un deep link, controlla che **non stia ricevendo dati sensi
|
||||
|
||||
**Parametri nel percorso**
|
||||
|
||||
Devi **controllare anche se qualche deep link sta usando un parametro all'interno del percorso** dell'URL come: `https://api.example.com/v1/users/{username}`, in tal caso puoi forzare un percorso di traversamento accedendo a qualcosa come: `example://app/users?username=../../unwanted-endpoint%3fparam=value`.\
|
||||
Devi **controllare anche se qualche deep link sta usando un parametro all'interno del percorso** dell'URL come: `https://api.example.com/v1/users/{username}`, in tal caso puoi forzare un traversamento del percorso accedendo a qualcosa come: `example://app/users?username=../../unwanted-endpoint%3fparam=value`.\
|
||||
Nota che se trovi i corretti endpoint all'interno dell'applicazione potresti essere in grado di causare un **Open Redirect** (se parte del percorso è usata come nome di dominio), **account takeover** (se puoi modificare i dettagli degli utenti senza token CSRF e l'endpoint vulnerabile usava il metodo corretto) e qualsiasi altra vulnerabilità. Maggiori [info su questo qui](http://dphoeniixx.com/2020/12/13-2/).
|
||||
|
||||
**Altri esempi**
|
||||
@ -403,9 +404,11 @@ SSL Pinning è una misura di sicurezza in cui l'applicazione verifica il certifi
|
||||
|
||||
#### Ispezione del traffico
|
||||
|
||||
Per ispezionare il traffico HTTP, è necessario **installare il certificato dello strumento proxy** (ad es., Burp). Senza installare questo certificato, il traffico crittografato potrebbe non essere visibile attraverso il proxy. Per una guida sull'installazione di un certificato CA personalizzato, [**clicca qui**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine).
|
||||
Per ispezionare il traffico HTTP, è necessario **installare il certificato dello strumento proxy** (ad es. Burp). Senza installare questo certificato, il traffico crittografato potrebbe non essere visibile attraverso il proxy. Per una guida sull'installazione di un certificato CA personalizzato, [**clicca qui**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine).
|
||||
|
||||
Le applicazioni destinate a **API Level 24 e superiori** richiedono modifiche alla Configurazione della Sicurezza di Rete per accettare il certificato CA del proxy. Questo passaggio è critico per ispezionare il traffico crittografato. Per istruzioni su come modificare la Configurazione della Sicurezza di Rete, [**fai riferimento a questo tutorial**](make-apk-accept-ca-certificate.md).
|
||||
Le applicazioni destinate a **API Level 24 e superiori** richiedono modifiche alla Configurazione della Sicurezza di Rete per accettare il certificato CA del proxy. Questo passaggio è fondamentale per ispezionare il traffico crittografato. Per istruzioni su come modificare la Configurazione della Sicurezza di Rete, [**fai riferimento a questo tutorial**](make-apk-accept-ca-certificate.md).
|
||||
|
||||
Se **Flutter** viene utilizzato, devi seguire le istruzioni in [**questa pagina**](flutter.md). Questo perché, aggiungere semplicemente il certificato nel negozio non funzionerà poiché Flutter ha la propria lista di CA valide.
|
||||
|
||||
#### Bypassare SSL Pinning
|
||||
|
||||
@ -454,7 +457,7 @@ strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a
|
||||
|
||||
In Android, il Keystore è il miglior posto per memorizzare dati sensibili, tuttavia, con privilegi sufficienti è ancora **possibile accedervi**. Poiché le applicazioni tendono a memorizzare qui **dati sensibili in chiaro**, i pentest dovrebbero controllare per questo come utente root o qualcuno con accesso fisico al dispositivo potrebbe essere in grado di rubare questi dati.
|
||||
|
||||
Anche se un'app memorizza dati nel keystore, i dati dovrebbero essere crittografati.
|
||||
Anche se un'app ha memorizzato dati nel keystore, i dati dovrebbero essere crittografati.
|
||||
|
||||
Per accedere ai dati all'interno del keystore, puoi utilizzare questo script Frida: [https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js](https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js)
|
||||
```bash
|
||||
@ -462,13 +465,13 @@ frida -U -f com.example.app -l frida-scripts/tracer-cipher.js
|
||||
```
|
||||
### **Fingerprint/Biometrics Bypass**
|
||||
|
||||
Utilizzando il seguente script Frida, potrebbe essere possibile **bypassare l'autenticazione tramite impronta digitale** che le applicazioni Android potrebbero eseguire per **proteggere determinate aree sensibili:**
|
||||
Utilizzando il seguente script Frida potrebbe essere possibile **bypassare l'autenticazione tramite impronta digitale** che le applicazioni Android potrebbero eseguire per **proteggere determinate aree sensibili:**
|
||||
```bash
|
||||
frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app.package>
|
||||
```
|
||||
### **Immagini di Sfondo**
|
||||
|
||||
Quando metti un'applicazione in background, Android memorizza un **istantanea dell'applicazione** in modo che quando viene ripristinata in primo piano inizi a caricare l'immagine prima dell'app, quindi sembra che l'app sia stata caricata più velocemente.
|
||||
Quando metti un'applicazione in background, Android memorizza un **istantanea dell'applicazione** in modo che, quando viene ripristinata in primo piano, inizi a caricare l'immagine prima dell'app, quindi sembra che l'app sia stata caricata più velocemente.
|
||||
|
||||
Tuttavia, se questa istantanea contiene **informazioni sensibili**, qualcuno con accesso all'istantanea potrebbe **rubare quelle informazioni** (nota che è necessario avere i permessi di root per accedervi).
|
||||
|
||||
@ -500,8 +503,8 @@ Il pericolo risiede nel consentire agli attaccanti di attivare componenti dell'a
|
||||
Probabilmente conosci questo tipo di vulnerabilità dal Web. Devi essere particolarmente attento a queste vulnerabilità in un'applicazione Android:
|
||||
|
||||
- **Iniezione SQL:** Quando gestisci query dinamiche o Content-Providers assicurati di utilizzare query parametrizzate.
|
||||
- **Iniezione JavaScript (XSS):** Verifica che il supporto per JavaScript e Plugin sia disabilitato per qualsiasi WebView (disabilitato per impostazione predefinita). [Maggiori informazioni qui](webview-attacks.md#javascript-enabled).
|
||||
- **Inclusione di File Locali:** Le WebView dovrebbero avere l'accesso al file system disabilitato (abilitato per impostazione predefinita) - `(webview.getSettings().setAllowFileAccess(false);)`. [Maggiori informazioni qui](webview-attacks.md#javascript-enabled).
|
||||
- **Iniezione JavaScript (XSS):** Verifica che il supporto per JavaScript e Plugin sia disabilitato per qualsiasi WebView (disabilitato per impostazione predefinita). [Ulteriori informazioni qui](webview-attacks.md#javascript-enabled).
|
||||
- **Inclusione di File Locali:** Le WebView dovrebbero avere l'accesso al file system disabilitato (abilitato per impostazione predefinita) - `(webview.getSettings().setAllowFileAccess(false);)`. [Ulteriori informazioni qui](webview-attacks.md#javascript-enabled).
|
||||
- **Cookie Eterni**: In diversi casi, quando l'applicazione android termina la sessione, il cookie non viene revocato o potrebbe essere persino salvato su disco.
|
||||
- [**Flag Sicuro** nei cookie](../../pentesting-web/hacking-with-cookies/index.html#cookies-flags)
|
||||
|
||||
@ -534,7 +537,7 @@ L'**analizzatore dinamico MobSF** può:
|
||||
- Catturare il **traffico HTTPS**
|
||||
- Usare **Frida** per ottenere **informazioni** **runtime**
|
||||
|
||||
Dalla versione **android > 5**, avvierà **automaticamente Frida** e imposterà le impostazioni globali del **proxy** per **catturare** il traffico. Catturerà solo il traffico dall'applicazione testata.
|
||||
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**
|
||||
|
||||
@ -542,14 +545,14 @@ Per impostazione predefinita, utilizzerà anche alcuni script Frida per **bypass
|
||||
MobSF può anche **invocare attività esportate**, acquisire **screenshot** di esse e **salvarle** per il rapporto.
|
||||
|
||||
Per **iniziare** il test dinamico premi il pulsante verde: "**Start Instrumentation**". Premi "**Frida Live Logs**" per vedere i log generati dagli script Frida e "**Live API Monitor**" per vedere tutte le invocazioni ai metodi hookati, gli argomenti passati e i valori restituiti (questo apparirà dopo aver premuto "Start Instrumentation").\
|
||||
MobSF consente anche di caricare i propri **script Frida** (per inviare i risultati dei tuoi script di venerdì a MobSF usa la funzione `send()`). Ha anche **diversi script pre-scritti** che puoi caricare (puoi aggiungerne di più in `MobSF/DynamicAnalyzer/tools/frida_scripts/others/`), basta **selezionarli**, premere "**Load**" e premere "**Start Instrumentation**" (sarai in grado di vedere i log di quegli script all'interno di "**Frida Live Logs**").
|
||||
MobSF consente anche di caricare i propri **script Frida** (per inviare i risultati dei tuoi script Frida a MobSF usa la funzione `send()`). Ha anche **diversi script pre-scritti** che puoi caricare (puoi aggiungerne di più in `MobSF/DynamicAnalyzer/tools/frida_scripts/others/`), basta **selezionarli**, premere "**Load**" e premere "**Start Instrumentation**" (sarai in grado di vedere i log di quegli script all'interno di "**Frida Live Logs**").
|
||||
|
||||
.png>)
|
||||
|
||||
Inoltre, hai alcune funzionalità ausiliarie di Frida:
|
||||
|
||||
- **Enumerare Classi Caricate**: Stampa tutte le classi caricate
|
||||
- **Catturare Stringhe**: Stampa tutte le stringhe catturate mentre utilizzi l'applicazione (super rumoroso)
|
||||
- **Catturare Stringhe**: Stampa tutte le stringhe catturate mentre usi l'applicazione (super rumoroso)
|
||||
- **Catturare Confronti di Stringhe**: Potrebbe essere molto utile. Mostrerà **le 2 stringhe confrontate** e se il risultato è stato Vero o Falso.
|
||||
- **Enumerare Metodi di Classe**: Inserisci il nome della classe (come "java.io.File") e stamperà tutti i metodi della classe.
|
||||
- **Cerca Modello di Classe**: Cerca classi per modello
|
||||
@ -570,12 +573,12 @@ receivers
|
||||
```
|
||||
**Strumenti HTTP**
|
||||
|
||||
Quando il traffico http viene catturato, puoi vedere una vista brutta del traffico catturato in "**HTTP(S) Traffic**" in basso o una vista più bella nel pulsante verde "**Start HTTPTools**". Dalla seconda opzione, puoi **inviare** le **richieste catturate** a **proxies** come Burp o Owasp ZAP.\
|
||||
Quando il traffico http viene catturato, puoi vedere una vista brutta del traffico catturato in "**HTTP(S) Traffic**" in basso o una vista più gradevole nel pulsante verde "**Start HTTPTools**". Dalla seconda opzione, puoi **inviare** le **richieste catturate** a **proxy** come Burp o Owasp ZAP.\
|
||||
Per farlo, _accendi Burp -->_ _disattiva Intercept --> in MobSB HTTPTools seleziona la richiesta_ --> premi "**Send to Fuzzer**" --> _seleziona l'indirizzo del proxy_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080)).
|
||||
|
||||
Una volta terminata l'analisi dinamica con MobSF, puoi premere su "**Start Web API Fuzzer**" per **fuzzare le richieste http** e cercare vulnerabilità.
|
||||
|
||||
> [!NOTE]
|
||||
> [!TIP]
|
||||
> Dopo aver eseguito un'analisi dinamica con MobSF, le impostazioni del proxy potrebbero essere mal configurate e non sarai in grado di correggerle dalla GUI. Puoi correggere le impostazioni del proxy eseguendo:
|
||||
>
|
||||
> ```
|
||||
@ -629,7 +632,7 @@ super-analyzer {apk_file}
|
||||
|
||||
StaCoAn è uno strumento **crossplatform** che aiuta sviluppatori, cacciatori di bug e hacker etici a eseguire [static code analysis](https://en.wikipedia.org/wiki/Static_program_analysis) su applicazioni mobili.
|
||||
|
||||
Il concetto è che puoi trascinare e rilasciare il file della tua applicazione mobile (un file .apk o .ipa) sull'applicazione StaCoAn e genererà un report visivo e portatile per te. Puoi modificare le impostazioni e le liste di parole per ottenere un'esperienza personalizzata.
|
||||
Il concetto è che puoi trascinare e rilasciare il file della tua applicazione mobile (un file .apk o .ipa) sull'applicazione StaCoAn e genererà un report visivo e portatile per te. Puoi modificare le impostazioni e le wordlist per ottenere un'esperienza personalizzata.
|
||||
|
||||
Scarica[ latest release](https://github.com/vincentcox/StaCoAn/releases):
|
||||
```
|
||||
@ -647,7 +650,7 @@ androbugs.exe -f [APK file]
|
||||
|
||||
**Androwarn** è uno strumento il cui obiettivo principale è rilevare e avvisare l'utente riguardo a potenziali comportamenti malevoli sviluppati da un'applicazione Android.
|
||||
|
||||
Il rilevamento viene eseguito con l'**analisi statica** del bytecode Dalvik dell'applicazione, rappresentato come **Smali**, con la libreria [`androguard`](https://github.com/androguard/androguard).
|
||||
Il rilevamento viene effettuato con l'**analisi statica** del bytecode Dalvik dell'applicazione, rappresentato come **Smali**, con la libreria [`androguard`](https://github.com/androguard/androguard).
|
||||
|
||||
Questo strumento cerca **comportamenti comuni di applicazioni "cattive"** come: esfiltrazione di identificatori di telefonia, intercettazione di flussi audio/video, modifica dei dati PIM, esecuzione di codice arbitrario...
|
||||
```
|
||||
@ -674,7 +677,7 @@ Utile per rilevare malware: [https://koodous.com/](https://koodous.com)
|
||||
|
||||
## Offuscare/Deoffuscare codice
|
||||
|
||||
Nota che a seconda del servizio e della configurazione che utilizzi per offuscare il codice. I segreti possono o meno risultare offuscati.
|
||||
Nota che a seconda del servizio e della configurazione che utilizzi per offuscare il codice. I segreti potrebbero essere o meno offuscati.
|
||||
|
||||
### [ProGuard](<https://en.wikipedia.org/wiki/ProGuard_(software)>)
|
||||
|
||||
@ -700,7 +703,7 @@ Trova una guida passo-passo per deoffuscare l'apk in [https://blog.lexfo.fr/dexg
|
||||
|
||||
Puoi caricare un APK offuscato sulla loro piattaforma.
|
||||
|
||||
### [Deobfuscate android App]https://github.com/In3tinct/deobfuscate-android-app
|
||||
### [Deobfuscate android App](https://github.com/In3tinct/deobfuscate-android-app)
|
||||
|
||||
Questo è uno strumento LLM per trovare potenziali vulnerabilità di sicurezza nelle app Android e deoffuscare il codice delle app Android. Utilizza l'API pubblica di Google Gemini.
|
||||
|
||||
@ -714,7 +717,7 @@ APKiD ti fornisce informazioni su **come è stato creato un APK**. Identifica mo
|
||||
|
||||
### Manuale
|
||||
|
||||
[Leggi questo tutorial per apprendere alcuni trucchi su **come fare reverse engineering di offuscazioni personalizzate**](manual-deobfuscation.md)
|
||||
[Leggi questo tutorial per imparare alcuni trucchi su **come fare reverse engineering di offuscazioni personalizzate**](manual-deobfuscation.md)
|
||||
|
||||
## Laboratori
|
||||
|
||||
|
@ -0,0 +1,123 @@
|
||||
# Shizuku Privileged API
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
Shizuku è un servizio open-source che **crea un processo Java privilegiato utilizzando `app_process`** ed espone selezionate **API di sistema Android tramite Binder**. Poiché il processo viene avviato con le stesse **capacità UID `shell` che utilizza ADB**, qualsiasi applicazione (o terminale) che si collega all'interfaccia AIDL esportata può eseguire molte azioni che normalmente richiedono **`WRITE_SECURE_SETTINGS`, `INSTALL_PACKAGES`, operazioni di file I/O all'interno di `/data`,** ecc. – **senza rootare il dispositivo**.
|
||||
|
||||
Casi d'uso tipici:
|
||||
* Audit di sicurezza da un dispositivo non rootato
|
||||
* Rimozione di bloatware / debloating delle app di sistema
|
||||
* Raccolta di log, chiavi Wi-Fi, informazioni su processi e socket per blue-team/DFIR
|
||||
* Automazione della configurazione del dispositivo da app personalizzate o script shell
|
||||
|
||||
---
|
||||
## 1. Avvio del servizio privilegiato
|
||||
|
||||
`moe.shizuku.privileged.api` può essere avviato in tre modi diversi – il servizio Binder risultante si comporta allo stesso modo in tutti e tre.
|
||||
|
||||
### 1.1 ADB wireless (Android 11+)
|
||||
1. Abilitare **Opzioni sviluppatore ➜ Debugging wireless** e accoppiare il dispositivo.
|
||||
2. All'interno dell'app Shizuku selezionare **“Avvia tramite debugging wireless”** e copiare il codice di accoppiamento.
|
||||
3. Il servizio sopravvive fino al successivo riavvio (le sessioni di debugging wireless vengono cancellate al boot).
|
||||
|
||||
### 1.2 USB / ADB locale one-liner
|
||||
```bash
|
||||
adb push start.sh \
|
||||
/storage/emulated/0/Android/data/moe.shizuku.privileged.api/
|
||||
|
||||
# spawn the privileged process
|
||||
adb shell sh /storage/emulated/0/Android/data/moe.shizuku.privileged.api/start.sh
|
||||
```
|
||||
Lo stesso script può essere eseguito su una connessione **network ADB** (`adb connect <IP>:5555`).
|
||||
|
||||
### 1.3 Dispositivi rootati
|
||||
Se il dispositivo è già rootato, eseguire:
|
||||
```bash
|
||||
su -c sh /data/adb/shizuku/start.sh
|
||||
```
|
||||
### 1.4 Verificare che sia in esecuzione
|
||||
```bash
|
||||
adb shell dumpsys activity service moe.shizuku.privileged.api | head
|
||||
```
|
||||
Un avvio riuscito restituisce `Running services (1)` insieme al PID del processo privilegiato.
|
||||
|
||||
---
|
||||
## 2. Binding da un'applicazione
|
||||
Le app di terze parti hanno bisogno solo del seguente all'interno del loro `AndroidManifest.xml`:
|
||||
```xml
|
||||
<uses-permission android:name="moe.shizuku.manager.permission.API"/>
|
||||
```
|
||||
A runtime ottengono il binder:
|
||||
```java
|
||||
IBinder binder = ShizukuProvider.getBinder();
|
||||
IPackageManager pm = IPackageManager.Stub.asInterface(binder);
|
||||
```
|
||||
Da questo momento l'app può invocare qualsiasi metodo che l'utente **`shell`** può chiamare – per esempio :
|
||||
```java
|
||||
pm.installPackage(new Uri("file:///sdcard/app.apk"), null, 0, null);
|
||||
Settings.Global.putInt(resolver, Settings.Global.ADB_ENABLED, 1);
|
||||
```
|
||||
Una lista curata di oltre **170 app abilitate per Shizuku** è mantenuta su [awesome-shizuku](https://github.com/timschneeb/awesome-shizuku).
|
||||
|
||||
---
|
||||
## 3. Rish – shell elevata all'interno di Termux
|
||||
La schermata delle impostazioni di Shizuku espone **“Usa Shizuku nelle app terminali”**. Abilitandola, viene scaricato *rish* (`/data/local/tmp/rish`).
|
||||
```bash
|
||||
pkg install wget
|
||||
wget https://rikka.app/rish/latest -O rish && chmod +x rish
|
||||
|
||||
# start elevated shell (inherits the binder connection)
|
||||
./rish
|
||||
whoami # ➜ shell
|
||||
id # uid=2000(shell) gid=2000(shell) groups=... context=u:r:shell:s0
|
||||
```
|
||||
### 3.1 Comandi utili dalla shell rish
|
||||
* Elenca i processi in esecuzione di un dato pacchetto:
|
||||
```bash
|
||||
ps -A | grep com.facebook.katana
|
||||
```
|
||||
* Enumera i socket in ascolto e mappali ai pacchetti (ad es. **CVE-2019-6447 ES File Explorer**):
|
||||
```bash
|
||||
netstat -tuln
|
||||
for pid in $(lsof -nP -iTCP -sTCP:LISTEN -t); do
|
||||
printf "%s -> %s\n" "$pid" "$(cat /proc/$pid/cmdline)";
|
||||
done
|
||||
```
|
||||
* Dump dei log di ogni applicazione:
|
||||
```bash
|
||||
logcat -d | grep -iE "(error|exception)"
|
||||
```
|
||||
* Leggi le credenziali Wi-Fi memorizzate (Android 11 +):
|
||||
```bash
|
||||
cat /data/misc/wifi/WifiConfigStore.xml | grep -i "<ConfigKey>"
|
||||
```
|
||||
* Debloat di massa (esempio):
|
||||
```bash
|
||||
pm uninstall --user 0 com.miui.weather2
|
||||
```
|
||||
|
||||
---
|
||||
## 4. Considerazioni sulla sicurezza / rilevamento
|
||||
1. Shizuku ha bisogno di privilegi di **debugging ADB**, quindi _Opzioni sviluppatore → Debugging USB/Wireless_ deve essere **abilitato**.
|
||||
Le organizzazioni possono bloccare questo tramite un MDM o tramite `settings put global development_settings_enabled 0`.
|
||||
2. Il servizio si registra con il nome `moe.shizuku.privileged.api`.
|
||||
Un semplice `adb shell service list | grep shizuku` (o regola di sicurezza dell'endpoint) ne rileva la presenza.
|
||||
3. Le capacità sono limitate a ciò che l'utente `shell` può già fare – **non è root**.
|
||||
Le API sensibili che richiedono l'utente `system` o `root` sono ancora inaccessibili.
|
||||
4. Le sessioni **non sopravvivono a un riavvio** a meno che il dispositivo non sia rootato e Shizuku sia configurato come daemon di avvio.
|
||||
|
||||
---
|
||||
## 5. Mitigazione
|
||||
* Disabilita il debugging USB/Wireless sui dispositivi di produzione.
|
||||
* Monitora i servizi Binder che espongono `moe.shizuku.privileged.api`.
|
||||
* Usa le politiche SELinux (Android enterprise) per bloccare l'interfaccia AIDL da applicazioni non gestite.
|
||||
|
||||
---
|
||||
## Riferimenti
|
||||
|
||||
- [Blog – Shizuku: Sbloccare capacità avanzate di Android senza root](https://www.mobile-hacker.com/2025/07/14/shizuku-unlocking-advanced-android-capabilities-without-root/)
|
||||
- [Documentazione ufficiale di Shizuku](https://shizuku.rikka.app/)
|
||||
- [awesome-shizuku – elenco delle app supportate](https://github.com/timschneeb/awesome-shizuku)
|
||||
- [shell rish (shell reverse-adb privilegiata)](https://github.com/RikkaApps/Shizuku/blob/master/RISH.md)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
Loading…
x
Reference in New Issue
Block a user