Mariana Trench 踩坑记录
date
Oct 7, 2021
URL
slug
mariana-trench
status
Published
tags
工具学习
summary
test
type
Post
前言
前几天老师发给我了一篇介绍这个工具的文章,看了看是一个刚刚开源的、facebook团队用来检测安卓应用安全的SAST。
看了一下介绍感觉跟codeql、joern这类工具很像,都是通过将代码结构进行剖析,将数据流跟控制流的路径数据化,塞入图形数据库,然后通过构造已知漏洞的相应查询规则,去查找具有相应特征的路径,分析source和sink是否可控,找到漏洞。
此类工具基本上都要依赖成熟的开源社区提供大量优秀自定义规则,仅靠小部分开发者很难展现该类工具的全部性能。CodeQL应该是社区做的最大的,背靠github拥有大量开源项目及无数开发者提供规则,但其必须需要编译才能进行分析也算增大了自动化难度。
安装&分析demo
安装过程就参考官方文档
详细过程参考文档即可。
记录一下我遇到的问题。
1.首先需要配置Android sdk
This guide also assumes you have the Android SDK installed and an environment variable $ANDROID_SDK pointed to the location of the SDK.
我最开始安装的时候没看到这句话,还在想难道这个pip包还自带java环境的么。。
安到后面才注意到要你本身就有Android sdk,配置环境变量$ANDROID_SDK 为sdk路径。
2.需要配置Android platform
在跑官方demo的时候,它有个配置是
--system-jar-configuration-path=$ANDROID_SDK/platforms/android-30/android.jar
我还看了一下我找个目录里面没有这个android-30,emmm还是要去手动装一个。
图省事,直接装个Android Studio
![notion image](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fa55df1b6-e029-4782-b5b4-68422c9b2525%2FUntitled.png?table=block&id=d65a565e-9a2a-4a40-a92d-6f7f270fbd16&cache=v2)
点个√就装上了。
3.这个可能是我自己的问题。
zsh: exec format error: ./mariana-trench-binary
pip install mariana-trench 安装成功后,执行的时候这个二进制文件不可执行
那就应该是pip的问题,那就uninstall 重新install了一遍就解决了
然后继续跟着教程
(mariana-trench)$ git clone https://github.com/facebook/mariana-trench
(mariana-trench)$ cd mariana-trench/documentation/sample-app
(mariana-trench)$ mariana-trench \
--system-jar-configuration-path=$ANDROID_SDK/platforms/android-30/android.jar
--apk-path=sample-app-debug.apk \
--source-root-directory=app/src/main/java
然后就顺利启动
INFO Analyzed 68886 models in 4.18s. Found 6 issues!
INFO Augmenting positions...
INFO Augmented positions in 0.02s.
INFO Writing models to `/Users/somet1mes/gitrepo/mariana-trench/documentation/sample-app/`.
INFO Wrote models to 7 shards.
INFO Wrote models in 0.45s.
INFO Writing metadata to `/Users/somet1mes/gitrepo/mariana-trench/documentation/sample-app/metadata.json`.
Found 6 issues,官方才发现4个。。没事没事。能用就行。
这时候可以发现在目录中生成了好多个json文件,过会分析一下他的运行流程。
在上面的过程中,代码分析已经是完成了的,接下来进行后期处理。
这个过程就是把分析结果组装成数据库(说明分析结果就已经在json文件中了),然后通过它的sapp去加载数据库生成相应的web界面。(大厂的前端果然做的好好看。)
(mariana-trench)$ sapp --tool=mariana-trench analyze .
(mariana-trench)$ sapp --database-name=sapp.db server --source-directory=app/src/main/java
![notion image](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F50037b19-47ca-47f3-ab78-6a70b51a1b29%2FUntitled.png?table=block&id=9770548f-34ea-497d-95b9-29ad8e9f0037&cache=v2)
其中好多个model开头的json文件中内容如图所示
![notion image](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Febc1110e-d8db-4894-88bf-c1e19bfcb5bf%2FUntitled.png?table=block&id=4b14d32a-e502-4acd-b12f-d04eb0652f21&cache=v2)
这种结构就是静态代码分析中最常见的结构,抽象语法树
将所有的方法都展开成这种树状结构,找到输入输出,确定程序执行时的数据流向定义为路径,利用图形数据库遍历的高效性来进行模式匹配找到与已定义规则相符的路径,分析路径中途径的sanitizer是否有效过滤,从而确定该路径是否能够触发漏洞。
![notion image](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fb3a4d9a2-0144-42dd-98f1-976aa2409cbb%2F1633596503754.png?table=block&id=5e53131d-6efa-48be-a603-e6b7d2fbd310&cache=v2)
它高亮了颜色表明了代码中该数据流传递关系,
![notion image](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F311a88bb-a8a9-462c-8748-f5bc62f44b31%2FUntitled.png?table=block&id=67272297-6a1c-4078-baf7-00b4511a7391&cache=v2)
在CodeQL中也可以做到这点,而且CodeQL更清晰
![notion image](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F37459e18-bca6-400e-a68c-814945aadf09%2FUntitled.png?table=block&id=5458cd6b-9b5e-4f1b-99ea-ab69659a7fa2&cache=v2)
但是好像他的优点是快。我看了眼源码发现是用c写的,那怪不得。。