Drozer è un framework sviluppato dai laboratori MWR, utilizzato per testare e rilevare vulnerabilità in un applicazione o dispositivo mobile. Esso è uno dei software più utilizzati per analisi dinamiche, exploits remoti o locali e per uno dei suoi punti chiave, ossia l’utilizzo dei meccanismi IPC che interagiscono con il sistema operativo.
Dopo aver scaricato la versione del software compatibile con il vostro computer e l'app di testing, avviate il vostro smartphone virtuale e, con adb, installate l’applicazione di prova
Una volta installata, bisogna eseguirla e attivarla direttamente nello smartphone
Dopo averlo avviata, i comandi da eseguire nel terminale sono
./adb forward tcp:31415 tcp:31415
il quale permette l’ascolto al server di Drozer e
drozer console connect
che avvierà direttamente Drozer
[Nota: per questo articolo utilizzerò InsecureBank, app apposita per imparare il pentesting di applicazioni mobile]
Come molti altri framework, Drozer ha decine di diversi moduli utilizzabili per l’analisi di applicazioni. Per vederli, basta digitare list
dz> list
app.activity.forintent Find activities that can handle the given intent
app.activity.info Gets information about exported activities.
app.activity.start Start an Activity
app.broadcast.info Get information about broadcast receivers
app.broadcast.send Send broadcast using an intent
app.broadcast.sniff Register a broadcast receiver that can sniff particular intents
app.package.attacksurface Get attack surface of package
app.package.backup Lists packages that use the backup API (returns true on FLAG_ALLOW_BACKUP)
app.package.debuggable Find debuggable packages
app.package.info Get information about installed packages
app.package.launchintent Get launch intent of package
app.package.list List Packages
............
Il modulo “padre” delle informazioni sui pacchetti è app.package.*. Esso ha al suo interno diversi altri moduli, come list, _manifest _o info.
Per cercare se un’applicazione è installata basta digitare run app.package.list seguito dal comando di ricerca
dz> run app.package.list -f bank
com.android.insecurebankv2 (InsecureBankv2)
Una volta trovato il nome dell’applicazione, controllo i permessi
Come già detto nel precedente articolo, se non si capisse cosa fa un determinato permesso, è possibile cercarlo in questa lista.
Per una visione più chiara dei permessi è anche possibile eseguire il comando manifest, il quale visualizza il file AndroidManifest.xml dell’applicazione selezionata
dz> run app.package.manifest com.android.insecurebankv2
Per identificare i processi da attaccare bisogna prima di tutto capire quali sono e in che componenti l’applicazione può essere scomposta. Per fare ciò, digitiamo il comando
dz> run app.package.attacksurface com.android.insecurebankv2
Attack Surface:
5 activities exported
1 broadcast receivers exported
1 content providers exported
0 services exported
Come si può vedere, Drozer ha esportato cinque attività, un broadcast receiver e un content provider. Un’applicazione “esporta” una serie di attività per renderle disponibili al sistema, all’utente o ad altre applicazioni. Ora possiamo vedere quali sono queste attività esportate con il comando
dz> run app.activity.info -a com.android.insecurebankv2
Package: com.android.insecurebankv2
com.android.insecurebankv2.LoginActivity
Permission: null
com.android.insecurebankv2.PostLogin
Permission: null
com.android.insecurebankv2.DoTransfer
Permission: null
com.android.insecurebankv2.ViewStatement
Permission: null
com.android.insecurebankv2.ChangePassword
Permission: null
Avviando una delle attività con il comando
dz> run app.activity.start --component com.android.insecurebankv2 com.android.insecurebankv2.PostLogin
possiamo eseguire una singola attività senza passare dalle altre. Un applicazione con i dovuti controlli darà probabilmente la possibilità di accedere all’attività prescelta, ma eseguendo altri comandi è probabile che crashi.
Oltre alle attività, vengono esportati, se presenti, anche i contenuti locali dell’applicazione. Per poterli leggere, il comando è
dz> run app.provider.info -a com.android.insecurebankv2
Package: com.android.insecurebankv2
Authority: com.android.insecurebankv2.TrackUserContentProvider
Read Permission: null
Write Permission: null
Content Provider: com.android.insecurebankv2.TrackUserContentProvider
Multiprocess Allowed: False
Grant Uri Permissions: False
Come si può notare, nessun permesso è richiesto per leggere i contenuti, quindi nel caso di dati salvati in locale (come i dati di accesso) sarà possibile leggerli senza nessun problema. Un altro comando permette di verificare ciò, stampando anche le cartelle che possono essere lette o no
Nel caso fossero accessibili, possiamo provare a leggere questi dati sempre tramite Drozer. Il comando è
dz> run app.provider.query content://com.android.insecurebankv2.TrackUserContentProvider/trackerusers/
| id | name |
Ovviamente in questo caso l’applicazione testata è vuota, ma se avvesse degli account, avremmo già avuto i dati di autenticazione.
Per chi conoscesse Metasploit, avrà già notato molte somiglianze. Drozer funziona in modo molto simile, e, anche se non ha centinaia di moduli, è utilissimo per analisi dinamiche preliminari, e per trovare vulnerabilità che saltano all’occhio. Per chi vuole approfondire, la guida è ottima, con esempio compiuti su un’applicazione di testing.