组件安全测试三板斧: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. 自动化检测流程(我的实战方案)

在实际项目中,我通常按这个流程走:

  1. 批量扫描:用QARK对所有APK做快速扫描,筛出高风险App
  2. 深度分析:把高风险App扔进MobSF,获取详细的组件暴露报告
  3. 漏洞验证:针对MobSF报告中的高风险项,用drozer做动态验证
  4. 修复跟进:将验证后的漏洞录入缺陷管理系统,推动开发修复
  5. 回归测试:修复后重新用三款工具扫描,确保漏洞已关闭

自动化脚本小提示:我写过一个Python脚本,把QARK和MobSF的扫描结果合并成一张Excel表。这样每次发版前跑一遍,就能快速知道组件暴露风险的变化趋势。如果你感兴趣,可以自己试试用subprocess调用这些工具的命令行接口。

6. 核心知识体系

下面这张图是我自己整理的组件安全测试知识体系,帮你快速理解三款工具的定位和关系:

Android组件安全测试知识体系 检测目标:组件暴露风险 drozer(动态验证) MobSF(全面审计) QARK(快速筛查) Activity劫持检测 Provider数据泄露检测 Service/Broadcast暴露 AndroidManifest分析 代码反编译与API检测 网络通信安全分析 漏洞链分析 代码片段定位 批量快速扫描 输出:漏洞报告 + 修复建议

我的建议:别指望一个工具解决所有问题。drozer、MobSF、QARK各有千秋,组合使用才能覆盖全面。刚开始可以先用QARK快速上手,再逐步深入MobSF和drozer。

好了,关于这三款工具的使用方法就聊到这里。记住,工具只是辅助,真正的安全能力在于你对组件风险的理解和判断。多动手、多验证,慢慢你就能形成自己的测试方法论。


公众号:蓝海资料掘金营,微信deep3321