MobSF
Automatisierte Sicherheitsanalyse von Android-Apps
Lernziel
Nach dieser Seite kannst du MobSF über Docker starten, eine APK-Datei hochladen und die Analyseergebnisse auswerten. Du verstehst, welche Befunde MobSF automatisch findet (hardkodierte Schlüssel, unsichere Berechtigungen, exported Components) und wo du manuell nacharbeiten musst.
Was ist MobSF?
MobSF (Mobile Security Framework) ist ein Open-Source-Framework für automatisierte Sicherheitsanalysen von Android- und iOS-Apps. Es kombiniert statische Analyse (Code, Manifest, Ressourcen ohne App-Ausführung) und optionale dynamische Analyse (App läuft im Emulator) in einem web-basierten Dashboard.
MobSF erkennt automatisch bekannte Schwachstellenmuster: hardkodierte API-Keys und Passwörter, unsichere Cryptographic-API-Verwendung, zu weit gefasste Berechtigungen, exportierte Activities ohne Zugriffskontrolle und viele weitere. Als Ausgangspunkt für Phase 1 spart es erheblich Zeit — du weißt nach wenigen Minuten, wo es interessant wird.
Automatisierung mit Grenzen
MobSF findet bewährte Anti-Pattern schnell und zuverlässig. Es kann aber nicht verstehen, was eine App semantisch tut. Ob ein gefundener AES-Schlüssel tatsächlich für BLE-Kommunikation eingesetzt wird, musst du weiterhin manuell in JADX prüfen.
Installation
Docker (empfohlen)
Die einfachste Installationsmethode ist Docker — kein Python-Setup, keine Abhängigkeitskonflikte:
# MobSF-Image herunterladen und starten (Port 8000)
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latestNach dem Start ist MobSF unter http://localhost:8000 erreichbar. Die Web-Oberfläche benötigt keinen Login. Den API-Key für die REST-API findest du auf der Startseite.
Docker-Speicher
MobSF analysiert große APKs und legt temporäre Dateien an. Weise Docker mindestens 4 GB RAM zu (Docker Desktop: Settings → Resources → Memory). Bei weniger RAM bricht die Analyse großer Apps (>50 MB) mit einem OOM-Fehler ab.
Lokale Installation (ohne Docker)
# Python 3.10–3.12 erforderlich
git clone https://github.com/MobSF/Mobile-Security-Framework-MobSF.git
cd Mobile-Security-Framework-MobSF
# Setup-Script installiert Abhängigkeiten und initialisiert die Datenbank
./setup.sh
# Server starten
./run.sh 0.0.0.0:8000Installation prüfen
# Docker-Container läuft?
docker ps | grep mobsf
# Ausgabe: ... opensecurity/mobile-security-framework-mobsf:latest ...
# Web-UI erreichbar?
curl -s http://localhost:8000 | grep -o "MobSF"
# Ausgabe: MobSFBLE-Beispiel: LED-Strip APK analysieren
Die LED-Strip-App enthält mehrere Schwachstellen, die MobSF automatisch aufdeckt. So läuft eine typische Analyse ab.
Schritt 1: APK hochladen
- Browser öffnen:
http://localhost:8000 - APK-Datei per Drag & Drop auf das Upload-Feld ziehen (oder "Upload & Analyze" klicken)
- MobSF startet die Analyse automatisch — dauert 30–120 Sekunden je nach APK-Größe
Alternativ per cURL (API-Key steht auf der MobSF-Startseite unter "API Key"):
curl -F "file=@ledstrip.apk" http://localhost:8000/api/v1/upload \
-H "X-Mobsf-Api-Key: DEIN_API_KEY"Schritt 2: Analysebefunde auswerten
Nach Abschluss der Analyse zeigt das Dashboard folgende Sektionen:
Hardkodierte Schlüssel und Secrets:
MobSF sucht nach Regex-Mustern für API-Keys, kryptographische Schlüssel, Passwörter und Tokens direkt im dekompilierten Code. Für die LED-Strip-App findet es:
HIGH Hardcoded Encryption Key detected
File: wl/smartled/EncryptUtil.java
Match: byte[] key = {89, 76, 90, 75, 53, 41, 33, 41, ...}
Dieselben XOR-Schlüsselbytes, die du auch in JADX findest. MobSF sagt dir wo der Schlüssel steht, JADX zeigt dir, wie er verwendet wird und warum das iterative XOR zu einem einzigen effektiven Byte kollabiert.
Unsichere Berechtigungen:
MEDIUM ACCESS_FINE_LOCATION declared but not justified
HIGH BLUETOOTH_ADMIN without user consent flow
Android benötigt ACCESS_FINE_LOCATION für BLE-Scans bis Android 11. Viele Apps deklarieren es, ohne den Nutzer zu erklären, warum.
Exported Components:
HIGH Activity exported without permission: wl.smartled.ControlActivity
Intent filter: action=android.intent.action.VIEW
Eine exportierte Activity ohne android:permission-Attribut kann von anderen Apps ohne Berechtigung gestartet werden — unbeabsichtigte Angriffsfläche.
Befunde nach Schweregrad sortieren
Im MobSF-Dashboard kannst du Befunde nach Schweregrad filtern (HIGH, MEDIUM, INFO). Beginne immer mit HIGH-Befunden — dort sind die ausnutzbaren Schwachstellen. MEDIUM und INFO sind Hinweise für spätere Tiefenanalyse.
Features im Überblick
| Feature | Beschreibung |
|---|---|
| Statisches Analyse-Dashboard | Übersicht aller Befunde nach Schweregrad kategorisiert |
| Berechtigungsanalyse | Welche Berechtigungen deklariert, welche tatsächlich genutzt? |
| Code-Analyse | Automatische Erkennung unsicherer API-Aufrufe und Patterns |
| Manifest-Review | AndroidManifest.xml Schwachstellen (exported, debuggable, backup) |
| API-Key-Erkennung | Regex-Suche nach bekannten Secret-Formaten |
| Zertifikat-Analyse | App-Signaturstärke und Ablaufdatum prüfen |
| NIAP-Compliance | Prüfung gegen NIAP Mobile Application Security Requirements |
Fortgeschrittene Anwendungen
REST-API für CI/CD-Integration
MobSF hat eine vollständige REST-API, mit der du Scans automatisiert aus CI/CD-Pipelines starten kannst:
# API-Key von der MobSF-Startseite oder aus ~/.MobSF/secret
API_KEY="DEIN_API_KEY"
# 1. APK hochladen
HASH=$(curl -s -F "file=@app.apk" http://localhost:8000/api/v1/upload \
-H "X-Mobsf-Api-Key: $API_KEY" | python3 -c \
'import sys,json; print(json.load(sys.stdin)["hash"])')
# 2. Analyse starten
curl -s -X POST http://localhost:8000/api/v1/scan \
-H "X-Mobsf-Api-Key: $API_KEY" \
-d "scan_type=apk&file_name=app.apk&hash=$HASH"
# 3. Ergebnisse als JSON abrufen
curl -s -X POST http://localhost:8000/api/v1/report_json \
-H "X-Mobsf-Api-Key: $API_KEY" \
-d "hash=$HASH" > results.jsonDas JSON-Ergebnis enthält alle Befunde maschinenlesbar — ideal für automatisierte Bewertungen mehrerer APKs.
Mehrere APKs in Batch scannen
Wenn du mehrere Apps einer Geräteserie analysieren willst (z. B. verschiedene Firmware-Versionen derselben App):
import requests
from pathlib import Path
BASE_URL = "http://localhost:8000/api/v1"
AUTH_HEADER = {"X-Mobsf-Api-Key": "DEIN_API_KEY"} # Von der MobSF-Startseite
def scan_apk(apk_path: str) -> dict:
"""APK hochladen, analysieren und Ergebnisse zurückgeben."""
with open(apk_path, "rb") as f:
upload_resp = requests.post(
f"{BASE_URL}/upload",
files={"file": (Path(apk_path).name, f, "application/octet-stream")},
headers=AUTH_HEADER,
)
file_hash = upload_resp.json()["hash"]
requests.post(
f"{BASE_URL}/scan",
data={"scan_type": "apk", "file_name": Path(apk_path).name, "hash": file_hash},
headers=AUTH_HEADER,
)
report = requests.get(
f"{BASE_URL}/report_json?hash={file_hash}",
headers=AUTH_HEADER,
)
return report.json()
# Alle APKs im aktuellen Verzeichnis scannen
for apk_file in Path(".").glob("*.apk"):
print(f"Scanne: {apk_file.name}")
result = scan_apk(str(apk_file))
high_count = len([f for f in result.get("findings", []) if f.get("severity") == "high"])
print(f" HIGH-Befunde: {high_count}")Dynamische Analyse mit Emulator
MobSF unterstützt auch dynamische Analyse — die App läuft in einem Android-Emulator und MobSF überwacht alle System-Calls, Netzwerkzugriffe und Datei-Operationen in Echtzeit.
Voraussetzung: Android-x86-Emulator (Genymotion oder Android Studio AVD) läuft auf Port 5554.
# Emulator starten und mit ADB verbinden
adb connect 127.0.0.1:5555
# In MobSF: Dynamic Analyzer → Start Dynamic Analysis
# App wird automatisch installiert und gestartetDynamische Analyse und BLE
BLE-Hardware ist im Emulator nicht verfügbar. Die dynamische Analyse eignet sich für HTTP-Requests, Datenbankzugriffe und UI-Verhalten — nicht für die BLE-Kommunikation selbst. Für BLE bleibt Phase 2 mit dem nRF-Dongle die zuverlässige Methode.
Häufige Probleme
| Problem | Ursache | Lösung |
|---|---|---|
| Docker startet nicht / OOM | Zu wenig RAM zugewiesen | Docker-RAM auf 4+ GB erhöhen (Docker Desktop → Settings → Resources) |
| Upload-Timeout bei großen APKs | Nginx-Timeout zu kurz | docker run -e TIMEOUT=600 ... für größere Apps |
| Analyse hängt bei 0% | Docker-CPU-Limit | CPU-Limit in Docker Desktop auf mindestens 2 CPUs setzen |
| False Positives bei Crypto | Drittbibliothek geflagged | Befund-Pfad prüfen: Ist es eigener Code oder eine bekannte Lib? |
Kein Zugriff auf localhost:8000 | Falsche Port-Bindung | docker ps prüfen — Port muss als 0.0.0.0:8000->8000/tcp gelistet sein |
MobSF-Ergebnisse mit JADX kombinieren
MobSF gibt dir schnell die Koordinaten: Datei, Zeile, Muster. JADX gibt dir den vollständigen Kontext: Was macht die Funktion, wie wird der Schlüssel übergeben, wo wird er aufgerufen? Nutze MobSF als Einstiegspunkt und JADX zur Tiefenanalyse der gefundenen Stellen.
Zusammenfassung
- MobSF über Docker starten:
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest - APK hochladen → Dashboard zeigt HIGH/MEDIUM/INFO-Befunde nach Schweregrad sortiert
- Typische Befunde bei BLE-IoT-Apps: hardkodierte Krypto-Schlüssel, zu breite Berechtigungen, exportierte Components ohne Permission
- REST-API ermöglicht automatisierte Batch-Scans und CI/CD-Integration
- Dynamische Analyse funktioniert für App-Verhalten, nicht für BLE-Kommunikation (kein BLE im Emulator)
- MobSF ist Einstiegspunkt, kein Ersatz für manuelle JADX-Analyse