
Indurimento dei Dispositivi Mobili Android
Android Mobile Device Hardening scritto con python3.
Versione Android, PObY-A (Privacy Owned by You - Android), con scansioni di malware e impostazioni, è disponibile sul Play Store e il codice sorgente si trova QUI
AMDH è stato creato per aiutare a automatizzare la scansione delle applicazioni installate sui dispositivi Android, rilevare alcuni malware noti e anche proteggere la privacy.
$ git clone https://github.com/SecTheTech/AMDH.git; cd AMDH
$ python3 -m venv amdh
$ source amdh/bin/activate
(amdh) $ pip install -r requirement.txt
Nota: Per Windows devi specificare il percorso di ADB o modificare la variabile "adb_windows_path" in "config/main.py".
Attenzione: quando si usa l'argomento -l con l'applicazione abilitata '-t e', le app di sistema verranno elencate. Disinstallare le app di sistema può rompere il tuo sistema Android. Si consiglia di usare 'disable' invece di 'uninstall' per le app di sistema.
$ python amdh.py -h
usage: amdh.py [-h] [-d DEVICES] [-sS] [-sA] [-H] [-a ADB_PATH] [-t {e,d,3,s}] [-D APKS_DUMP_FOLDER]
[-rar] [-R] [-l] [-P] [-S SNAPSHOT_DIR] [-cS SNAPSHOT_REPORT] [-rS SNAPSHOT_TO_RESTORE] [-o OUTPUT_DIR]
Android Mobile Device Hardening
optional arguments:
-h, --help mostra questo messaggio di aiuto e esci
-d DEVICES, --devices DEVICES
elenco dei dispositivi separato da virgola o "ALL" per tutti i dispositivi connessi
-sS Scansiona le impostazioni di sistema
-sA Scansiona le applicazioni installate
-H Indurisci le impostazioni di sistema /!\ Le Opzioni sviluppatore e ADB saranno disabilitati /!\
-a ADB_PATH, --adb-path ADB_PATH
Percorso del binario ADB
-t {e,d,3,s} Tipo di applicazioni:
e: App abilitate
d: App disabilitate
3: App di terze parti
s: App di sistema
-D APKS_DUMP_FOLDER, --dump-apks APKS_DUMP_FOLDER
Scarica gli APK dal dispositivo nella directory APKS_DUMP_FOLDER
-rar Rimuovi i ricevitori di amministrazione: Rimuovi tutti i ricevitori di amministrazione se l'app non è un'app di sistema
L'opzione di scansione applicazioni "-sA" è richiesta
-R Per ogni app revoca tutti i permessi pericolosi
L'opzione di scansione applicazioni "-sA" è richiesta
-l Elenca le applicazioni numerate per disabilitarle, disinstallarle o analizzarle
-P Elenca i processi utente correnti
-S SNAPSHOT_DIR, --snapshot SNAPSHOT_DIR
Fotografa lo stato corrente del telefono in un file json e esegui il backup delle applicazioni in SNAPSHOT_DIR
-cS SNAPSHOT_REPORT, --cmp-snapshot SNAPSHOT_REPORT
Confronta SNAPSHOT_REPORT con lo stato corrente del telefono
-rS SNAPSHOT_TO_RESTORE, --restore-snapshot SNAPSHOT_TO_RESTORE
Ripristina SNAPSHOT_TO_RESTORE
-o OUTPUT_DIR, --output-dir OUTPUT_DIR
Directory di output per report e log. Predefinito: out
Confronta i permessi concessi con i permessi descritti nel file malware_perms.json. Il file contiene tre nodi:
I permessi solo malware sono quelli utilizzati solo da malware. I malware analizzati provengono dai repository:
Il comando "aapt" è stato utilizzato per estrarre i permessi. La seconda parte è consistita nell'estrarre i permessi di app legittime (circa 400 app). I permessi solo malware sono quelli usati dai malware e mai apparsi nelle applicazioni legittime analizzate.
Tutti i permessi sono usati sia da malware che da applicazioni legittime. I valori sono percentuali di quanto i malware hanno utilizzato questi permessi rispetto alle app legittime.
Lo snapshot può aiutare a monitorare lo stato del sistema e fare il backup dei dati del telefono:
Scansione
(amdh)$ python amdh.py -d SERIAL1,SERIAL2,SERIAL3 -sA -o reports
Vengono generati due file per ogni dispositivo nella cartella "reports":
{
"com.package.name": {
"malware": true,
"permissions": {
"all_permissions": [
"com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE",
"com.google.android.c2dm.permission.RECEIVE",
"com.google.android.providers.gsf.permission.READ_GSERVICES",
"android.permission.WRITE_SYNC_SETTINGS",
"android.permission.RECEIVE_BOOT_COMPLETED",
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"dangerous_perms": {
"android.permission.ACCESS_FINE_LOCATION": "Questa app può ottenere la tua posizione basandosi su GPS o fonti di posizione di rete come torri cellulari e reti Wi-Fi. Questi servizi di localizzazione devono essere attivati e disponibili sul tuo telefono affinché l'app possa usarli. Questo potrebbe aumentare il consumo della batteria.",
"android.permission.READ_EXTERNAL_STORAGE": "Permette all'app di leggere il contenuto della tua scheda SD.",
"android.permission.ACCESS_COARSE_LOCATION": "Questa app può ottenere la tua posizione basandosi su fonti di rete come torri cellulari e reti Wi-Fi. Questi servizi di localizzazione devono essere attivati e disponibili sul tuo telefono affinché l'app possa usarli.",
"android.permission.CAMERA": "Questa app può scattare foto e registrare video usando la fotocamera in qualsiasi momento.",
"android.permission.WRITE_EXTERNAL_STORAGE": "Permette all'app di scrivere sulla scheda SD."
},
"is_device_admin": false,
}
}
}
(amdh)$ python amdh.py -sS
Viene generato un report con il nome "SERIAL_report_settings.json" nella cartella "out" (cartella di output predefinita).
Indurimento
(amdh)$ python amdh.py -sA -R -rar
Stesso report della scansione delle app con l'aggiunta di queste due chiavi:
"is_device_admin_revoked": true,
"revoked_dangerous_pemissions": "succeeded"
La chiave
is_device_admin_revokednon sarà nel risultato se l'app non è amministratore del dispositivo
(amdh)$ python amdh.py -sS -H -o reports
Vengono generati un report e un file di log nella directory "reports".
Analisi statica e disinstallazione/disabilitazione multipla di app (interattiva)
(amdh)$ python amdh.py -l
Elencare i processi utente in esecuzione
(amdh)$ python amdh.py -P -d SERIAL1,SERIAL2
Snapshot
(amdh)$ python amdh.py -S out
[-] INFO: Avvio ...
Sblocca il dispositivo SERIAL e premi INVIO per continuare
[-] INFO: Completato
La cartella "out" conterrà una sottocartella "SERIAL_DATE-TIME". Dove DATE-TIME è nel formato "YYYY-MM-DD-hh:mm:ss".
Confronto Snapshot
(amdh)$ python amdh.py -cS out/report.json
[-] INFO: Avvio ...
[-] INFO: App installate dopo lo snapshot
{}
[-] INFO: App presenti nello snapshot
{
"com.package.name1": {
"firstInstallTime": "2020-07-06 18:53:07",
"lastUpdateTime": "2020-07-06 18:53:07",
"grantedPermissions": [
"com.google.android.c2dm.permission.RECEIVE",
"android.permission.USE_CREDENTIALS",
"android.permission.MODIFY_AUDIO_SETTINGS",
"com.google.android.providers.gsf.permission.READ_GSERVICES",
"android.permission.MANAGE_ACCOUNTS",
"android.permission.NFC"
],
"deviceAdmin": false,
"apk": "com.package.name1.apk"
},
"com.package.name2": {
"firstInstallTime": "2020-07-10 23:57:53",
"lastUpdateTime": "2020-07-10 23:57:53",
"grantedPermissions": [
"android.permission.DOWNLOAD_WITHOUT_NOTIFICATION",
"com.google.android.c2dm.permission.RECEIVE",
"android.permission.USE_CREDENTIALS",
"android.permission.MODIFY_AUDIO_SETTINGS",
"org.thoughtcrime.securesms.ACCESS_SECRETS",
"android.permission.ACCESS_NOTIFICATION_POLICY",
"android.permission.CHANGE_NETWORK_STATE",
"android.permission.FOREGROUND_SERVICE",
"android.permission.WRITE_SYNC_SETTINGS"
],
"deviceAdmin": false,
"backup": "com.package.name2.ab",
"apk": "com.package.name2.apk"
}
}
[-] INFO: Disinstallate dopo lo snapshot
{
"com.package.name3": {
"firstInstallTime": "2020-07-18 07:56:44",
"lastUpdateTime": "2020-07-18 07:56:44",
"grantedPermissions": [
"android.permission.INTERNET",
"android.permission.ACCESS_NETWORK_STATE"
],
"deviceAdmin": false,
"backup": "com.package.name3.ab",
"apk": "com.package.name3.apk"
}
}
[-] INFO: Impostazioni modificate dopo lo snapshot
{
"global": [
"stay_on_while_plugged_in"
],
"secure": [],
"system": []
}
Ripristino Snapshot : App
(amdh)$ python amdh.py -d SERIAL -rS out/report.json
[-] INFO: Avvio ...
Sblocca il dispositivo SERIAL e premi INVIO per continuare
[-] INFO: Avvio ripristino
[-] INFO: Ripristino completato
[-] INFO: Report di ripristino
{
"apps": {
{
"com.package.name1": {
"install": "success",
"backup": "restored"
},
"com.package.name2": {
"install": "success",
"backup": "NOT FOUND"
},
"com.package.name3": {
"install": "success",
"backup": "restored"
}
}
}
}
(amdh) $ pip install pyinstaller
(amdh) $ pyinstaller --clean amdh.spec
Binario in output: dist/amdh.
Grazie per l'interesse in questo progetto! Se hai idee su come migliorare questo strumento, per favore crea un nuovo issue o invia una pull request.