
Ein sicherheitsorientiertes statisches Analysetool für Android- und Java-Anwendungen.

Mariana Trench ist eine auf Sicherheit ausgerichtete statische Analyseplattform für Android.
Diese Anleitung führt Sie durch die Einrichtung von Mariana Trench auf Ihrem Rechner und hilft Ihnen, Ihre erste Schwachstelle für die Ausführung von remote code in einer kleinen Beispiel-App zu finden. Diese Anweisungen sind auch auf unserer Website verfügbar.
Mariana Trench erfordert eine aktuelle Version von Python. Auf MacOS erhalten Sie eine aktuelle Version über homebrew:
$ brew install python3
Auf einem Debian-basierten Linux (Ubuntu, Mint, Debian) können Sie apt-get verwenden:
$ sudo apt-get install python3 python3-pip python3-venv
Diese Anleitung setzt außerdem voraus, dass Sie das Android SDK installiert haben und eine Umgebungsvariable $ANDROID_SDK auf den Speicherort des SDK zeigt.
Für den Rest dieser Anleitung gehen wir davon aus, dass Sie in einer virtuellen Umgebung arbeiten. Sie können diese wie folgt einrichten:
$ python3 -m venv ~/.venvs/mariana-trench
$ source ~/.venvs/mariana-trench/bin/activate
(mariana-trench)$
Der Name der virtuellen Umgebung vor Ihrer Shell-Eingabeaufforderung zeigt an, dass die virtuelle Umgebung aktiv ist.
In Ihrer virtuellen Umgebung ist die Installation von Mariana Trench so einfach wie die Ausführung von
(mariana-trench)$ pip install mariana-trench
Hinweis: pip install wird derzeit nicht für Apple Silicon Macs unterstützt. Sie können aus dem Quellcode erstellen, indem Sie die Anweisungen im Entwicklerhandbuch befolgen.
Wir verwenden eine kleine App, die Teil unserer Dokumentation ist. Sie erhalten sie durch Ausführen von
(mariana-trench)$ git clone https://github.com/facebook/mariana-trench
(mariana-trench)$ cd mariana-trench/
Wir sind nun bereit, die Analyse auszuführen
(mariana-trench)$ mariana-trench \
--system-jar-configuration-path=configuration/default_system_jar_paths.json \
--model-generator-configuration-paths=configuration/default_generator_config.json \
--lifecycles-paths=configuration/lifecycles.json \
--rules-paths=configuration/rules.json \
--apk-path=documentation/sample-app/app/build/outputs/apk/debug/app-debug.apk \
--source-root-directory=documentation/sample-app/app/src/main/java \
--model-generator-search-paths=configuration/model-generators/
# ...
INFO Analyzed 68937 models in 7.47s. Found 9 issues!
# ...
Die Analyse hat 9 Probleme in unserer Beispiel-App gefunden. Die Ausgabe der Analyse ist eine Reihe von Spezifikationen für jede Methode der Anwendung.
Die Spezifikationen selbst sind nicht für Menschen lesbar. Wir benötigen einen zusätzlichen Verarbeitungsschritt, um die Ergebnisse besser darstellbar zu machen. Dies erledigen wir mit SAPP, das für uns per PyPi installiert wurde:
(mariana-trench)$ sapp --tool=mariana-trench analyze .
(mariana-trench)$ sapp --database-name=sapp.db server --source-directory=documentation/sample-app/app/src/main/java
# ...
2021-05-12 12:27:22,867 [INFO] * Running on http://localhost:13337/ (Press CTRL+C to quit)
Die letzte Zeile der Ausgabe teilt uns mit, dass SAPP einen lokalen Webserver gestartet hat, über den wir die Ergebnisse betrachten können. Öffnen Sie den Link, und Sie sehen die 4 von der Analyse gefundenen Probleme.
Konzentrieren wir uns auf das Problem der Remote-Code-Ausführung in der Beispiel-App. Sie erkennen es an seinem Problemcode 1 (für alle Remote-Code-Ausführungen) und dem aufrufbaren Element void MainActivity.onCreate(Bundle). Bei nur 4 Problemen ist es einfach, das Problem manuell zu identifizieren, aber sobald mehr Regeln ausgeführt werden, ist die Filterfunktion oben rechts auf der Seite nützlich.

Das Problem teilt Ihnen mit, dass Mariana Trench eine Remote-Code-Ausführung in MainActivity.onCreate gefunden hat, bei der die Daten von Activity.getIntent einen Aufruf entfernt stammen und in den Konstruktor von ProcessBuilder drei Aufrufe entfernt fließen. Klicken Sie oben rechts im Problem auf "Traces", um ein Beispiel-Trace zu sehen.
Der von Mariana Trench aufgedeckte Trace besteht aus drei Teilen.
Der source trace stellt dar, woher die Daten stammen. In unserem Beispiel ist der Trace sehr kurz: Activity.getIntent wird direkt in MainActivity.onCreate aufgerufen.

Der trace root stellt dar, wo der source trace auf den sink trace trifft. In unserem Beispiel ist dies die onCreate-Methode der Aktivität.

Der letzte Teil des Traces ist der sink trace: Hier fließen die Daten von der Quelle in eine Senke. In unserem Beispiel von onCreate, zu onClick, zu execute und schließlich in den Konstruktor von ProcessBuilder.

Sie fragen sich vielleicht: "Woher weiß das Tool, was benutzergesteuerte Daten sind und was eine Senke ist?". Diese Anleitung soll Ihnen einen schnellen Einstieg in eine kleine App ermöglichen. Wir haben nicht behandelt, wie man Mariana Trench konfiguriert. Mehr dazu erfahren Sie auf unserer Website unter Konfiguration.
Eine ausführliche Anleitung zum Erstellen aus dem Quellcode und zur Entwicklung von Mariana Trench finden Sie im Entwicklerhandbuch auf unserer Website.
Mariana Trench ist unter der MIT-Lizenz lizenziert.