
Uno strumento di analisi statica focalizzato sulla sicurezza per applicazioni Android e Java.

Mariana Trench è una piattaforma di analisi statica orientata alla sicurezza, focalizzata su Android.
Questa guida ti accompagnerà nella configurazione di Mariana Trench sul tuo computer e ti porterà a trovare la tua prima vulnerabilità di esecuzione remota di codice in una piccola app di esempio. Queste istruzioni sono disponibili anche sul nostro sito web.
Mariana Trench richiede una versione recente di Python. Su MacOS puoi ottenere una versione aggiornata tramite homebrew:
$ brew install python3
Su un sistema Linux basato su Debian (Ubuntu, Mint, Debian), puoi usare apt-get:
$ sudo apt-get install python3 python3-pip python3-venv
Questa guida presuppone anche che tu abbia installato Android SDK e che la variabile d'ambiente $ANDROID_SDK punti alla posizione dell'SDK.
Per il resto di questa guida, supponiamo che tu stia lavorando all'interno di un ambiente virtuale. Puoi configurarlo con:
$ python3 -m venv ~/.venvs/mariana-trench
$ source ~/.venvs/mariana-trench/bin/activate
(mariana-trench)$
Il nome dell'ambiente virtuale davanti al prompt del terminale indica che l'ambiente virtuale è attivo.
All'interno del tuo ambiente virtuale, installare Mariana Trench è semplice come eseguire:
(mariana-trench)$ pip install mariana-trench
Nota: pip install al momento non è supportato per Mac con Apple Silicon; puoi compilare dai sorgenti seguendo le istruzioni nella Guida per sviluppatori.
Utilizzeremo una piccola app che fa parte della nostra documentazione. Puoi ottenerla eseguendo:
(mariana-trench)$ git clone https://github.com/facebook/mariana-trench
(mariana-trench)$ cd mariana-trench/
Siamo ora pronti per eseguire l'analisi:
(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!
# ...
L'analisi ha trovato 9 problemi nella nostra app di esempio. L'output dell'analisi è un insieme di specifiche per ciascun metodo dell'applicazione.
Le specifiche stesse non sono pensate per essere lette dagli esseri umani. Abbiamo bisogno di un passaggio di elaborazione aggiuntivo per rendere i risultati più presentabili. Lo facciamo con SAPP, già installato per noi tramite PyPi:
(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)
L'ultima riga dell'output ci dice che SAPP ha avviato un server web locale che ci permette di visualizzare i risultati. Apri il link e vedrai i 4 problemi trovati dall'analisi.
Concentriamoci sul problema di esecuzione remota di codice trovato nell'app di esempio. Puoi identificarlo dal codice problema 1 (per tutte le esecuzioni remote di codice) e dal callable void MainActivity.onCreate(Bundle). Con solo 4 problemi da vedere, è facile identificare il problema manualmente, ma quando vengono eseguite più regole, la funzionalità di filtro in alto a destra della pagina torna utile.

Il problema ti dice che Mariana Trench ha trovato un'esecuzione remota di codice in MainActivity.onCreate dove i dati provengono da Activity.getIntent a una chiamata di distanza e fluiscono nel costruttore di ProcessBuilder a 3 chiamate di distanza. Clicca su "Traces" nell'angolo in alto a destra del problema per vedere una traccia di esempio.
La traccia evidenziata da Mariana Trench è composta da tre parti.
La traccia sorgente rappresenta da dove provengono i dati. Nel nostro esempio, la traccia è molto breve: Activity.getIntent viene chiamato direttamente in MainActivity.onCreate.

La traccia radice rappresenta il punto in cui la traccia sorgente incontra la traccia sink. Nel nostro esempio, questo è il metodo onCreate dell'activity.

La parte finale della traccia è la traccia sink: qui i dati dalla sorgente fluiscono in un sink. Nel nostro esempio, da onCreate, a onClick, a execute, e infine nel costruttore di ProcessBuilder.

Potresti chiederti: "come fa lo strumento a sapere cosa sono i dati controllati dall'utente e cosa è un sink?". Questa guida è pensata per iniziare rapidamente con una piccola app. Non abbiamo coperto come configurare Mariana Trench. Puoi leggere di più a riguardo sul nostro sito web nella sezione Configurazione.
Per una guida approfondita sulla compilazione dai sorgenti e lo sviluppo su Mariana Trench, consulta la Guida per sviluppatori sul nostro sito web.
Mariana Trench è concesso in licenza sotto la licenza MIT.