
Härtung von Android-Mobilgeräten
Android Mobile Device Hardening, geschrieben mit Python3.
Die Android-Version, PObY-A (Privacy Owned by You - Android), mit Malware- und Einstellungs-Scans ist im Play Store verfügbar und der Quellcode kann HIER gefunden werden.
AMDH wurde entwickelt, um das Scannen installierter Anwendungen auf Android-Geräten zu automatisieren, einige bekannte Malware zu erkennen und auch die Privatsphäre zu schützen.
$ git clone https://github.com/SecTheTech/AMDH.git; cd AMDH
$ python3 -m venv amdh
$ source amdh/bin/activate
(amdh) $ pip install -r requirement.txt
Hinweis: Unter Windows müssen Sie den ADB-Pfad angeben oder die Variable "adb_windows_path" in "config/main.py" bearbeiten.
Warnung: Bei Verwendung des Arguments -l mit aktivierter Anwendung '-t e' werden System-Apps aufgelistet. Das Deinstallieren von System-Apps kann Ihr Android-System beschädigen. Für System-Apps wird die Verwendung von 'disable' anstelle von 'uninstall' empfohlen.
$ 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
optionale Argumente:
-h, --help zeigt diese Hilfemeldung und beendet das Programm
-d DEVICES, --devices DEVICES
Liste der Geräte, durch Komma getrennt, oder "ALL" für alle verbundenen Geräte
-sS Systemeinstellungen scannen
-sA Installierte Anwendungen scannen
-H Systemeinstellungen härten /!\ Entwickleroptionen und ADB werden deaktiviert /!\
-a ADB_PATH, --adb-path ADB_PATH
Pfad zur ADB-Binärdatei
-t {e,d,3,s} Typ der Anwendungen:
e: aktivierte Apps
d: deaktivierte Apps
3: Drittanbieter-Apps
s: System-Apps
-D APKS_DUMP_FOLDER, --dump-apks APKS_DUMP_FOLDER
APKs vom Gerät in das Verzeichnis APKS_DUMP_FOLDER dumpen
-rar Admin-Empfänger entfernen: Alle Admin-Empfänger entfernen, wenn die App keine System-App ist
Scan-Anwendungsoption "-sA" erforderlich
-R Für jede App alle gefährlichen Berechtigungen widerrufen
Scan-Anwendungsoption "-sA" erforderlich
-l Nummerierte Anwendungen auflisten, um sie zu deaktivieren, deinstallieren oder zu analysieren
-P Aktuelle Benutzerprozesse auflisten
-S SNAPSHOT_DIR, --snapshot SNAPSHOT_DIR
Momentaufnahme des aktuellen Telefonzustands in eine JSON-Datei und Backup der Anwendungen in SNAPSHOT_DIR
-cS SNAPSHOT_REPORT, --cmp-snapshot SNAPSHOT_REPORT
Vergleich von SNAPSHOT_REPORT mit dem aktuellen Telefonzustand
-rS SNAPSHOT_TO_RESTORE, --restore-snapshot SNAPSHOT_TO_RESTORE
Wiederherstellung von SNAPSHOT_TO_RESTORE
-o OUTPUT_DIR, --output-dir OUTPUT_DIR
Ausgabeverzeichnis für Berichte und Logs. Standard: out
Vergleiche die gewährten Berechtigungen mit den Berechtigungen, die in der Datei malware_perms.json beschrieben sind. Die Datei enthält drei Knoten:
Nur von Malware verwendete Berechtigungen sind solche, die nur von Malware genutzt werden. Die analysierte Malware stammt aus den Repositories:
Der Befehl "aapt" wurde zum Dumpen der Berechtigungen verwendet. Der zweite Schritt bestand darin, die Berechtigungen legitimer Apps (etwa 400 Apps) zu dumpen. Nur von Malware verwendete Berechtigungen sind solche, die von Malware genutzt werden und niemals in den analysierten legitimen Anwendungen vorkommen.
Alle Berechtigungen werden sowohl von Malware als auch von legitimen Anwendungen genutzt. Die Werte geben den prozentualen Anteil an, wie oft Malware diese Berechtigungen im Vergleich zu legitimen Apps verwendet hat.
Die Momentaufnahme kann helfen, den Systemzustand zu überwachen und die Telefondaten zu sichern:
Scannen
(amdh)$ python amdh.py -d SERIAL1,SERIAL2,SERIAL3 -sA -o reports
Für jedes Gerät werden zwei Dateien im Ordner "reports" erstellt:
{
"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": "Diese App kann Ihren Standort basierend auf GPS- oder Netzwerkquellen wie Mobilfunkmasten und WLAN-Netzen ermitteln. Diese Standortdienste müssen auf Ihrem Telefon eingeschaltet und verfügbar sein, damit die App sie nutzen kann. Dies kann den Akkuverbrauch erhöhen.",
"android.permission.READ_EXTERNAL_STORAGE": "Ermöglicht der App, den Inhalt Ihrer SD-Karte zu lesen.",
"android.permission.ACCESS_COARSE_LOCATION": "Diese App kann Ihren Standort basierend auf Netzwerkquellen wie Mobilfunkmasten und WLAN-Netzen ermitteln. Diese Standortdienste müssen auf Ihrem Telefon eingeschaltet und verfügbar sein.",
"android.permission.CAMERA": "Diese App kann jederzeit Fotos aufnehmen und Videos mit der Kamera aufzeichnen.",
"android.permission.WRITE_EXTERNAL_STORAGE": "Ermöglicht der App, auf die SD-Karte zu schreiben."
},
"is_device_admin": false,
}
}
}
(amdh)$ python amdh.py -sS
Es wird ein Bericht mit dem Namen "SERIAL_report_settings.json" im Ordner "out" (Standard-Ausgabeverzeichnis) erstellt.
Härten
(amdh)$ python amdh.py -sA -R -rar
Derselbe Bericht wie beim Scannen von Apps, jedoch mit zwei zusätzlichen Schlüsseln:
"is_device_admin_revoked": true,
"revoked_dangerous_pemissions": "succeeded"
Der Schlüssel
is_device_admin_revokederscheint nicht im Ergebnis, wenn die App kein Geräte-Admin ist.
(amdh)$ python amdh.py -sS -H -o reports
Im Verzeichnis "reports" werden ein Bericht und eine Logdatei erstellt.
Statische Analyse und Deinstallieren/Deaktivieren mehrerer Apps (interaktiv)
(amdh)$ python amdh.py -l
Aktuell laufende Benutzerprozesse auflisten
(amdh)$ python amdh.py -P -d SERIAL1,SERIAL2
Momentaufnahme
(amdh)$ python amdh.py -S out
[-] INFO: Start ...
Entsperren Sie Gerät SERIAL und drücken Sie die EINGABETASTE, um fortzufahren
[-] INFO: Fertig
Der Ordner "out" enthält einen Unterordner "SERIAL_DATUM-ZEIT". DATUM-ZEIT hat das Format "YYYY-MM-DD-hh:mm:ss".
Momentaufnahmen-Vergleich
(amdh)$ python amdh.py -cS out/report.json
[-] INFO: Start ...
[-] INFO: Installierte Apps nach der Momentaufnahme
{}
[-] INFO: In der Momentaufnahme vorhandene Apps
{
"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: Nach der Momentaufnahme deinstalliert
{
"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: Geänderte Einstellungen nach der Momentaufnahme
{
"global": [
"stay_on_while_plugged_in"
],
"secure": [],
"system": []
}
Momentaufnahme-Wiederherstellung: Apps
(amdh)$ python amdh.py -d SERIAL -rS out/report.json
[-] INFO: Start ...
Entsperren Sie Gerät SERIAL und drücken Sie die EINGABETASTE, um fortzufahren
[-] INFO: Wiederherstellung wird gestartet
[-] INFO: Wiederherstellung abgeschlossen
[-] INFO: Wiederherstellungsbericht
{
"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
Ausgabebinärdatei: dist/amdh.
Vielen Dank für Ihr Interesse an diesem Projekt! Wenn Sie Ideen zur Verbesserung dieses Tools haben, erstellen Sie bitte ein neues Issue oder senden Sie einen Pull-Request.