Android Debug Bridge ADB
adb è un CLI che permette di comunicare in maniera semplice con il dispositivo. Senza entrare nel dettaglio del funzionamento, quello che segue è un cheatsheet con i comandi utili:
Connessione: adb connect IP_DEVICE:5555
Lista dispositivi: adb devics -l
Shell: adb shell
Installa app: adb install file.apk
Upload file sul device: adb push /path/file/locale /path/device
Download dal device: adb pull /path/file/dir/device /path/locale
Port forward: adb forward tcp:6100
[host] tcp:7100[device]
Molteplici dispositivi: adb -s SERIAL shell
Screenshot: adb exec-out screencap -p > screen.png
Backup tutto: adb backup -all -noshared -noapk -nosystem
Backup app: adb backup -f nomedelbackup.ab pacchetto.di.cui.fare.il.backup
Backup shared: adb backup –apk –shared com.android.insecurebankv2
Extract backup: cat backup.ab | (dd bs=24 count=0 skip=1; cat) | zlib-flate -uncompress > backup.tar
Log Android: adb logcat | grep "$(adb shell ps | grep <package-name> | awk '{print $2}')"
Info sui processi: adb shell dumpsys meminfo
Info sui processi: adb shell dumpsys meminfo nome.del.pacchetto
Send broadcast: am broadcast -a theBroadcast -n nome.del.pacchetto/.MyBroadCastReceiver -e phone 1234 -e data abcdef
Query provider: content query --uri content://com.android.insecurebankv2.TrackUserContentProvider/trackerusers
Dump memoria: fridump.py -s -u -o /path/dump PID
Rimuovere lockscreen: adb shell locksettings clear --old xxxx
[xxxx=pattern]
Cattura clipboard:
$ su u0_a88
$ service call clipboard 2 s16 jakhar.aseem.diva
Debug con Jdwp
È possibile specificare attraverso il file manifest se un’applicazione può essere debuggabile oppure no. Se nel manifest c’è android:debuggable=”true” allora l’applicazione è debuggabile con jdwp.
Dal momento che gli emulatori sono device con accesso root occorre fare attenzione, perché anche se un’app è configurata per non essere debuggabile è possibile farlo. Questo può trarre in inganno nel momento in cui l’attributo android:debuggable non sia presente all’interno del manifest. Il valore di default è false.
Avviare l’applicazione.
JDWP Cheatsheet
Mostra processi debuggabili: adb jdwp
Cerca il processo da debuggare: adb shell ps aux |grep nome.pacchetto.app
Verificare che il processo sia tra quelli listati con il primo comando ed utilizzarlo nel comando seguente.
Port forward: adb forward tcp:qualsiasiporta jdwp:process_id
Aggancia debugger: jdb -attach localhost:quasiasiporta_impostata_prima
Frida
Frida è un tool di instrumentation che permette di interagire attraverso l’utilizzo di JavaScript con il codice nativo delle applicazioni.
Durante le attività viene utilizzato principalmente per bypassare i controlli di root e di SSL pinning, ma è possibile fare molto di più. Per avere un’idea delle potenzialità di frida basta dare un’occhiata al repository ufficiale codeshare: https://codeshare.frida.re/
Python Template per agganciarsi a un’app
import frida, sys
js = """
Java.perform(function () {
// declare classes that are going to be used
const System = Java.use('java.lang.System');
const Log = Java.use("android.util.Log");
const Exception = Java.use("java.lang.Exception");
System.exit.implementation = function() {
// console.log(Log.getStackTraceString(Exception.$new()));
};
});
"""
device = frida.get_device_manager().enumerate_devices()[-1]
session = device.attach("com.example.test")
script = session.create_script(js)
script.load()
sys.stdin.read()
Python Template per spawner un’app
import frida, sys
js = """
Java.perform(function () {
// declare classes that are going to be used
const System = Java.use('java.lang.System');
const Log = Java.use("android.util.Log");
const Exception = Java.use("java.lang.Exception");
System.exit.implementation = function() {
// console.log(Log.getStackTraceString(Exception.$new()));
};
});
"""
device = frida.get_usb_device()
pid = device.spawn(["com.example.test"])
session = device.attach(pid)
script = session.create_script(js)
script.load()
device.resume(pid)
sys.stdin.read()
Trace della funzione strcmp su chrome: frida-trace -U -i strcmp -f com.android.chrome
Spawn app con file .js: frida -U -l root_bypass.js -f nome.del.pacchetto.app
Attach to app con file .js: frida -U -l multiple_unpinning.js nome.del.pacchetto.app
frida -U --codeshare akabe1/frida-multiple-unpinning -f nome.del.pacchetto
Drozer
Drozer è un framework per l’analisi della sicurezza di app Android che consente di assumere il ruolo di un’app e di interagire con le altre app. Può fare tutto ciò che può fare un’applicazione installata, ad esempio utilizzare il meccanismo IPC di Android e interagire con il sistema operativo.
Drozer permette anche di exploitare i device da remoto creando file o pagine Web dannose che sfruttano vulnerabilità note. Il payload utilizzato in questi exploit è un agente drozer che è essenzialmente uno strumento di amministrazione remota. A seconda delle autorizzazioni concesse all’app vulnerabile, drozer può installare un agente completo o iniettare un agente limitato all’interno del processo.
Manuale: https://labs.f-secure.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf
Drozer cheatsheet
General
run app.package.list
run app.package.attacksurface org.owasp.goatdroid.fourgoats
run app.package.info –a nome.del.pacchetto
Activity
run app.activity.info -a nome.del.pacchetto
run app.activity.start --component nome.del.pacchetto nome.del.pacchetto.activities.Main
run app.activity.start --component com.example.android.notepad com.example.android.notepad.NoteEditor --action android.intent.action.EDIT --data-uri content://com.google.provider.NotePad/notes/1
Services
run app.service.info -a org.owasp.goatdroid.fourgoats
run app.service.start --component com.elearnsecurity.sillyservice com.elearnsecurity.sillyservice.SillyService --extra string COMMAND "find /data/data/com.elearnsecurity.sillyservice/files; echo 'ciccio bello' > /data/data/com.elearnsecurity.sillyservice/files/ste.txt"
Providers
run app.provider.info -a org.owasp.goatdroid.fourgoats
run scanner.provider.finduris -a org.owasp.goatdroid.fourgoats
run app.provider.query content://com.elearnsecurity.injectme.provider.CredentialProvider/credentials/ --vertical
run app.provider.read content://com.els.filebrowser/../../../../../../etc/hosts
run scanner.provider.injection -a org.owasp.goatdroid.fourgoats
Broadcast
run app.broadcast.info --package org.owasp.goatdroid.fourgoats -i
run app.broadcast.send --action org.owasp.goatdroid.fourgoats.SOCIAL_SMS --component org.owasp.goatdroid.fourgoats org.owasp.goatdroid.fourgoats.broadcastreceivers.SendSMSNowReceiver --extra string phoneNumber 11111111 --extra string message "ciccio"