组件安全测试三板斧:drozer、MobSF、QARK
做Android安全测试这些年,我试过不少工具。有的花里胡哨但不顶用,有的看着简陋却一针见血。今天聊的三款——drozer、MobSF、QARK,是我个人最常用的组合。它们各有侧重,配合起来基本能覆盖组件暴露风险的方方面面。
你可能会问:为什么要用三个工具?一个不够吗?嗯,我刚开始也有这个疑问。后来踩过坑才发现,每个工具都有自己的盲区。就像修车,你不能只靠一把扳手搞定所有螺丝。
核心思路:静态分析找漏洞线索,动态分析验证漏洞是否真实存在,自动化扫描做批量检查。三管齐下,才能把风险兜住。
1. drozer:动态测试的瑞士军刀
drozer是我最早接触的Android安全工具。说实话,第一次用的时候我被它的交互式设计惊艳到了。你想想看,直接在命令行里跟App的组件对话,这感觉太直接了。
它的核心能力是模拟攻击者视角。比如你想知道某个Activity能不能被外部启动,drozer可以帮你验证。
安装与启动:
# 安装drozer
pip install drozer
# 启动代理(需要在手机上安装agent.apk)
adb install drozer-agent.apk
adb forward tcp:31415 tcp:31415
drozer console connect
常用模块一览:
| 模块 | 功能 | 我常用的场景 |
|---|---|---|
| app.activity.info | 列出所有可导出的Activity | 检查登录页是否被绕过 |
| app.provider.info | 列出Content Provider | 查找数据库泄露风险 |
| app.provider.query | 直接查询Provider数据 | 验证敏感信息是否可读 |
| app.service.info | 列出Service信息 | 检查后台服务暴露情况 |
| app.broadcast.info | 列出Broadcast Receiver | 检测动态广播劫持风险 |
实战案例:
我记得有一次测试一个银行App,用drozer扫描后发现一个Content Provider没有设置权限保护。我直接执行了查询:
dz> run app.provider.query content://com.example.bank.provider/user_info
| id | name | phone | balance |
| 1 | 张三 | 138****1234 | 50000 |
| 2 | 李四 | 139****5678 | 120000 |
看到这个结果的时候,我后背一凉。所有用户的手机号和余额都暴露了。这就是典型的Provider数据泄露。
我的小技巧:drozer的扫描结果会列出所有exported=true的组件。但别全信,有些组件虽然标记了exported=false,但通过intent-filter隐式调用仍然能被外部访问。我习惯手动再验证一遍。
2. MobSF:一站式静态分析平台
MobSF(Mobile Security Framework)是我做自动化分析的首选。它把静态分析、动态分析、API检测都整合到了一个Web界面里。说白了,你上传一个APK,它就能吐出一份完整的报告。
部署方式:
# 使用Docker一键部署(我最推荐的方式)
docker pull opensecurity/mobile-security-framework-mobsf
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf
# 访问 http://localhost:8000 即可使用
MobSF能检测什么?
- AndroidManifest.xml分析:自动解析所有组件声明,标记exported属性
- 代码反编译:使用jadx或dex2jar反编译,查找敏感API调用
- 硬编码检测:API密钥、数据库密码、加密密钥等
- 网络通信分析:检测HTTPS配置、证书固定、WebView漏洞
- 组件暴露评分:给每个组件打风险分,方便优先处理高风险项
我个人的使用习惯:
先把APK扔进MobSF跑一轮,拿到报告后重点关注"Component Exposure"部分。这里会列出所有可导出的组件,并给出风险等级。然后我再针对高风险组件,用drozer做动态验证。
注意:MobSF的静态分析结果不一定100%准确。比如它可能把通过反射调用的组件漏掉,或者误报某些受保护的组件。我建议把它当作"筛选器",而不是"判决书"。
3. QARK:快速扫描的轻量级选手
QARK(Quick Android Review Kit)是LinkedIn开源的工具。它的特点是轻量、快速、专注于组件安全。如果你只想快速检查一个App的组件暴露情况,QARK是个不错的选择。
安装与使用:
# 安装
git clone https://github.com/linkedin/qark.git
cd qark
pip install -r requirements.txt
# 扫描APK
python qark.py --apk /path/to/app.apk
# 或者扫描源码
python qark.py --source /path/to/source
QARK的独特优势:
- 漏洞链分析:不只看单个组件,还分析组件之间的交互风险
- 导出报告:生成HTML/PDF格式的详细报告,方便团队沟通
- 代码片段展示:直接定位到有问题的代码行,省去翻源码的时间
我曾经踩过的坑:
有一次用QARK扫描一个大型App,它报告了20多个Activity暴露风险。我一个个去验证,结果发现有一半是第三方SDK里的组件,跟业务代码无关。从那以后,我学会了先过滤掉第三方库的组件,再聚焦到自家代码上。
4. 三款工具对比与选择
| 维度 | drozer | MobSF | QARK |
|---|---|---|---|
| 分析类型 | 动态分析 | 静态+动态 | 静态分析 |
| 上手难度 | 中等(需要配置agent) | 简单(Web界面) | 简单(命令行) |
| 检测深度 | 深(可交互验证) | 中(自动化扫描) | 浅(快速筛查) |
| 报告质量 | 命令行输出 | HTML报告,可视化好 | HTML/PDF,带代码定位 |
| 最佳场景 | 漏洞验证 | 全面审计 | 快速排查 |
5. 自动化检测流程(我的实战方案)
在实际项目中,我通常按这个流程走:
- 批量扫描:用QARK对所有APK做快速扫描,筛出高风险App
- 深度分析:把高风险App扔进MobSF,获取详细的组件暴露报告
- 漏洞验证:针对MobSF报告中的高风险项,用drozer做动态验证
- 修复跟进:将验证后的漏洞录入缺陷管理系统,推动开发修复
- 回归测试:修复后重新用三款工具扫描,确保漏洞已关闭
自动化脚本小提示:我写过一个Python脚本,把QARK和MobSF的扫描结果合并成一张Excel表。这样每次发版前跑一遍,就能快速知道组件暴露风险的变化趋势。如果你感兴趣,可以自己试试用subprocess调用这些工具的命令行接口。
6. 核心知识体系
下面这张图是我自己整理的组件安全测试知识体系,帮你快速理解三款工具的定位和关系:
我的建议:别指望一个工具解决所有问题。drozer、MobSF、QARK各有千秋,组合使用才能覆盖全面。刚开始可以先用QARK快速上手,再逐步深入MobSF和drozer。
好了,关于这三款工具的使用方法就聊到这里。记住,工具只是辅助,真正的安全能力在于你对组件风险的理解和判断。多动手、多验证,慢慢你就能形成自己的测试方法论。
公众号:蓝海资料掘金营,微信deep3321