
Mariana Trench 是一个针对 Android 的专注于安全性的静态分析平台。
本指南将带你完成在机器上设置 Mariana Trench 的过程,并让你在一个小型示例应用中找到第一个远程代码执行漏洞。这些说明也可以在我们的网站上找到。
Mariana Trench 需要最新版本的 Python。在 MacOS 上,你可以通过 homebrew 获取当前版本:
$ brew install python3
在 Debian 风格的 Linux(Ubuntu、Mint、Debian)上,你可以使用 apt-get:
$ sudo apt-get install python3 python3-pip python3-venv
本指南还假设你已经安装了 Android SDK,并且环境变量 $ANDROID_SDK 指向 SDK 的位置。
在本指南的其余部分,我们假设你在一个虚拟环境中工作。你可以通过以下命令设置:
$ python3 -m venv ~/.venvs/mariana-trench
$ source ~/.venvs/mariana-trench/bin/activate
(mariana-trench)$
Shell 提示符前的虚拟环境名称表示虚拟环境已激活。
在你的虚拟环境中,安装 Mariana Trench 就像运行以下命令一样简单:
(mariana-trench)$ pip install mariana-trench
注意:目前 pip 安装不支持 Apple 芯片的 Mac,你可以按照开发者指南中的说明从源代码构建。
我们将使用一个作为文档一部分的小型应用。你可以通过以下命令获取它:
(mariana-trench)$ git clone https://github.com/facebook/mariana-trench
(mariana-trench)$ cd mariana-trench/
现在我们可以运行分析了:
(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!
# ...
分析在我们的示例应用中发现了 9 个问题。分析的输出是每个应用程序方法的一组规范。
这些规范本身并不适合人类阅读。我们需要额外的处理步骤来使结果更易呈现。我们通过已为我们安装的 PyPi 包 SAPP 来实现:
(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)
输出的最后一行告诉我们 SAPP 启动了一个本地 Web 服务器,让我们查看结果。打开链接,你将看到分析发现的 4 个问题。
让我们关注示例应用中发现的远程代码执行问题。你可以通过其问题代码 1(针对所有远程代码执行)和可调用项 void MainActivity.onCreate(Bundle) 来识别它。只有 4 个问题需要查看,手动识别问题很容易,但一旦运行更多规则,页面右上角的筛选功能就会派上用场。

该问题告诉你,Mariana Trench 在 MainActivity.onCreate 中发现了一个远程代码执行,数据来自 Activity.getIntent(相隔 1 个调用),并流入 ProcessBuilder 的构造函数(相隔 3 个调用)。点击问题右上角的 "Traces" 查看示例跟踪。
Mariana Trench 揭示的跟踪由三部分组成。
Source 跟踪 表示数据的来源。在我们的示例中,跟踪非常短:Activity.getIntent 直接在 MainActivity.onCreate 中被调用。

跟踪根 表示 source 跟踪与 sink 跟踪汇合的地方。在我们的示例中,这是活动的 onCreate 方法。

跟踪的最后一部分是 sink 跟踪:这是数据从 source 流向 sink 的地方。在我们的示例中,从 onCreate 到 onClick,再到 execute,最后进入 ProcessBuilder 的构造函数。

你可能会问自己:"这个工具如何知道什么是用户控制的数据,什么是 sink?" 本指南旨在让你快速上手一个小型应用。我们没有介绍如何配置 Mariana Trench。你可以在我们的网站上阅读配置了解更多信息。
要深入了解如何从源代码构建以及 Mariana Trench 的开发,请参见我们网站的开发者指南。
Mariana Trench 采用 MIT 许可。