
Uma ferramenta de análise estática focada em segurança para aplicações Android e Java.

Mariana Trench é uma plataforma de análise estática focada em segurança para Android.
Este guia vai orientá-lo na configuração do Mariana Trench na sua máquina e ajudá-lo a encontrar sua primeira vulnerabilidade de execução remota de código em um aplicativo de exemplo. Essas instruções também estão disponíveis no nosso site.
O Mariana Trench requer uma versão recente do Python. No MacOS, você pode obter uma versão atual através do homebrew:
$ brew install python3
Em um Linux baseado em Debian (Ubuntu, Mint, Debian), você pode usar o apt-get:
$ sudo apt-get install python3 python3-pip python3-venv
Este guia também assume que você tem o Android SDK instalado e uma variável de ambiente $ANDROID_SDK apontando para o local do SDK.
Para o restante deste guia, assumimos que você está trabalhando dentro de um ambiente virtual. Você pode configurá-lo com:
$ python3 -m venv ~/.venvs/mariana-trench
$ source ~/.venvs/mariana-trench/bin/activate
(mariana-trench)$
O nome do ambiente virtual na frente do prompt do shell indica que o ambiente virtual está ativo.
Dentro do seu ambiente virtual, instalar o Mariana Trench é tão simples quanto executar:
(mariana-trench)$ pip install mariana-trench
Nota: pip install não é suportado atualmente para Macs com chip Apple Silicon. Você pode compilar a partir do código-fonte usando as instruções do Guia do Desenvolvedor.
Vamos usar um pequeno aplicativo que faz parte da nossa documentação. Você pode obtê-lo executando:
(mariana-trench)$ git clone https://github.com/facebook/mariana-trench
(mariana-trench)$ cd mariana-trench/
Agora estamos prontos para executar a análise:
(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 Analisados 68937 modelos em 7.47s. Encontrados 9 problemas!
# ...
A análise encontrou 9 problemas no nosso aplicativo de exemplo. A saída da análise é um conjunto de especificações para cada método do aplicativo.
As especificações em si não foram feitas para serem lidas por humanos. Precisamos de uma etapa de processamento adicional para tornar os resultados mais apresentáveis. Fazemos isso com o SAPP já instalado via 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)
A última linha da saída nos diz que o SAPP iniciou um servidor web local que permite visualizar os resultados. Abra o link e você verá os 4 problemas encontrados pela análise.
Vamos focar no problema de execução remota de código encontrado no aplicativo de exemplo. Você pode identificá-lo pelo código de problema 1 (para todas as execuções remotas de código) e pelo método void MainActivity.onCreate(Bundle). Com apenas 4 problemas para ver, é fácil identificá-lo manualmente, mas quando mais regras forem executadas, a funcionalidade de filtro no canto superior direito da página será útil.

O problema informa que o Mariana Trench encontrou uma execução remota de código em MainActivity.onCreate, onde os dados vêm de Activity.getIntent a uma chamada de distância, e fluem para o construtor de ProcessBuilder a três chamadas de distância. Clique em "Traces" no canto superior direito do problema para ver um exemplo de rastreamento.
O rastreamento exibido pelo Mariana Trench consiste em três partes.
O rastreamento de origem representa de onde os dados vêm. No nosso exemplo, o rastreamento é muito curto: Activity.getIntent é chamado diretamente em MainActivity.onCreate.

O rastreamento raiz representa onde o rastreamento de origem encontra o rastreamento de destino. No nosso exemplo, este é o método onCreate da activity.

A parte final do rastreamento é o rastreamento de destino: é onde os dados da origem fluem para um destino. No nosso exemplo, de onCreate, para onClick, para execute, e finalmente para o construtor de ProcessBuilder.

Você pode estar se perguntando: "como a ferramenta sabe o que são dados controlados pelo usuário e o que é um destino?" Este guia foi feito para você começar rapidamente em um aplicativo pequeno. Não cobrimos como configurar o Mariana Trench. Você pode ler mais sobre isso no nosso site em Configuração.
Para um guia detalhado sobre compilação a partir do código-fonte e desenvolvimento no Mariana Trench, consulte o Guia do Desenvolvedor no nosso site.
O Mariana Trench é licenciado sob a licença MIT.