garvittkohli/android-pentest-playbook
GitHub: garvittkohli/android-pentest-playbook
一套结构化的 Android 应用安全评估方法论框架,集成 Frida 插桩脚本、MASVS 2.1 检查清单和 Python 报告生成器,并以 OVAA 完整评估实例演示全流程。
Stars: 0 | Forks: 0
# android-pentest-playbook

结构化的 Android 应用安全评估方法论,包含自定义 Frida 插桩、MASVS 2.1 检查清单,以及一个能够根据结构化发现数据生成专业 HTML 渗透测试报告的报告工具。
`/assessments/OVAA` 目录包含了对 Oversecured Vulnerable Android App 的完整评估实例——记录了 10 个发现,附带 CVSS 3.1 评分、MITRE ATT&CK Mobile 映射、证据和修复建议。它的目的是展示从头到尾完整应用这套方法论,而不仅仅是口头描述。
## 背景
我在专业从事针对 Android 应用运行 Frida 和 Burp 的相关工作一段时间后,构建了这个项目,因为我意识到大多数公开的 Android 安全资源要么是一长串缺乏解释每个命令重要性的命令列表,要么是遇到问题就戛然而止的 InsecureBankv2 演练。当你遇到一个行为出乎意料的应用时,这两种情况都帮不上忙。
这里的 Frida 脚本旨在解释它们所 hook 的 Android 内部机制——不仅说明它们有效,还解释为什么那个特定的 hook 点是正确的选择。MASVS 2.1 检查清单是围绕测试步骤而不是漏洞类别构建的,因此你可以在评估过程中实际使用它们,而无需不断交叉参考 OWASP 文档。报告生成器接收一个 JSON 发现文件,并生成你可以直接交给开发团队的结果。
OVAA 之所以作为评估目标,是因为它测试的是现代 Android 问题——intent 重定向、FileProvider 路径遍历、PendingIntent 滥用——而不是 InsecureBankv2 所围绕的 2014 年时代的明文 HTTP 和硬编码 DES。
## 结构
```
android-pentest-playbook/
├── methodology/ Assessment phases, in order
│ ├── 00-overview.md
│ ├── 01-environment-setup.md
│ ├── 02-static-analysis.md
│ ├── 03-dynamic-analysis.md
│ ├── 04-network-interception.md
│ ├── 05-reverse-engineering.md
│ └── 06-reporting.md
│
├── frida-scripts/ Instrumentation scripts with architectural notes
│ ├── network/ SSL pinning bypass (OkHttp3, TrustKit, native BoringSSL)
│ ├── detection-evasion/ Root check enumeration then targeted bypass
│ ├── data-capture/ Keystore intercept, cipher logging, intent monitor
│ └── ipc/ Content provider query/write tracer
│
├── assessments/
│ └── OVAA/
│ ├── README.md Methodology narrative — what I ran and why
│ ├── findings.json 10 structured findings, drives the HTML report
│ └── report.html Generated output (open in browser)
│
├── reporting/
│ ├── report_generator.py findings.json → HTML + JSON summary
│ └── tests/ 28 tests, all passing
│
└── checklists/ MASVS 2.1 domains — usable during live assessment
├── MASVS-STORAGE.md
├── MASVS-CRYPTO.md
├── MASVS-AUTH.md
├── MASVS-NETWORK.md
├── MASVS-PLATFORM.md
├── MASVS-CODE.md
└── MASVS-RESILIENCE.md
```
## Frida 脚本 — 快速参考
| 脚本 | Hook 点 | 适用场景 |
|--------|-----------|----------------------|
| `network/okhttp3-pinning-bypass.js` | `CertificatePinner.check()` + `NetworkSecurityTrustManager` | 应用通过 Burp 断开连接;在 jadx 中可见 OkHttp |
| `network/trustkit-bypass.js` | `TSKPinningValidator` | jadx 依赖项中存在 `com.datatheorem.android.trustkit` |
| `network/native-ssl-bypass.js` | `SSL_CTX_set_verify` (BoringSSL/Cronet) | Java 层 hook 无法阻止连接断开;APK 中存在 `libssl.so` |
| `detection-evasion/enumerate-root-checks.js` | `File.exists()`、`Runtime.exec()`、`PackageManager`、RootBeer | **首先运行此脚本** — 映射出应用实际检查的内容 |
| `detection-evasion/multi-bypass.js` | 所有常见的 Java 层 root 检查 | 在枚举识别出活动的检查项之后使用 |
| `data-capture/keystore-intercept.js` | 针对 Keystore 支持的密钥的 `Cipher.init()` + `doFinal()` | 密钥由硬件支持 — 改为拦截解密后的输出 |
| `data-capture/cipher-intercept.js` | 所有 `Cipher` 操作,包括密钥材料 | 软件加密 — 同时记录密钥和明文 |
| `data-capture/intent-monitor.js` | `startActivity`、`sendBroadcast`、`bindService` | 在攻击单个组件之前映射 IPC 攻击面 |
| `ipc/content-provider-tracer.js` | `ContentResolver` CRUD + `openInputStream` | 导出的 provider — 追踪 URI 和 selection 参数 |
## OVAA 评估 — 发现摘要
| ID | 标题 | 严重程度 | MASVS |
|----|-------|----------|-------|
| OVAA-01 | 通过导出 Activity 进行的 Intent 重定向 | CRITICAL | MASVS-PLATFORM-1 |
| OVAA-02 | 通过 ContentProvider 路径遍历进行任意文件写入 | CRITICAL | MASVS-STORAGE-1 |
| OVAA-03 | 通过 Deep Link 进行的 JavaScript 注入 — WebView 中未验证的 URL | HIGH | MASVS-PLATFORM-5 |
| OVAA-04 | WebView 中禁用了 SSL 证书验证 | HIGH | MASVS-NETWORK-3 |
| OVAA-05 | 凭据存储在明文 SharedPreferences 中 | HIGH | MASVS-STORAGE-1 |
| OVAA-06 | 访问令牌在没有 Receiver 权限的情况下广播 | HIGH | MASVS-PLATFORM-2 |
| OVAA-07 | Authorization Header 被记录到 Logcat | MEDIUM | MASVS-STORAGE-3 |
| OVAA-08 | 没有身份验证检查的导出 Activity | MEDIUM | MASVS-PLATFORM-1 |
| OVAA-09 | 启用了 ADB 备份 — 整个应用沙盒可被提取 | MEDIUM | MASVS-STORAGE-8 |
| OVAA-10 | 没有权限限制的导出 BroadcastReceiver | LOW | MASVS-PLATFORM-1 |
完整的证据、CVSS 向量、PoC 命令和修复建议位于 `assessments/OVAA/findings.json` 中。在浏览器中打开 `assessments/OVAA/report.html` 即可查看格式化后的版本。
## 生成报告
```
cd reporting
pip install -r requirements.txt
python report_generator.py \
--findings ../assessments/OVAA/findings.json \
--output ../assessments/OVAA/report.html
```
对于你自己的评估目标:复制 OVAA 目录结构,用你的发现填写 `findings.json`,然后运行生成器。其 schema 记录在 `methodology/06-reporting.md` 中。
## 检查清单的结构
每个文件都映射到一个 MASVS 2.1 域,并围绕测试步骤而不是漏洞类别进行组织。其目的是让你在处理应用的 manifest 时可以打开 `MASVS-PLATFORM.md` 并按顺序执行——每个复选框都提供了需要检查的实际命令或代码模式,而不仅仅是描述要寻找什么。
2023 年的 MASVS 2.0 重构将旧的 V1–V8 编号重新组织为 MASVS-STORAGE、MASVS-CRYPTO、MASVS-AUTH、MASVS-NETWORK、MASVS-PLATFORM、MASVS-CODE、MASVS-RESILIENCE。如果你参考的旧检查清单仍在使用 V 数字格式,说明它是 2023 年之前的。
## 与现有工具的对比
| | MobSF | Drozer | Objection | APKDeepLens | 本仓库 |
|--|-------|--------|-----------|-------------|-----------|
| 方法论文档 | — | — | — | — | ✓ |
| MASVS 2.1 检查清单 | 部分 | — | — | 部分 | ✓ |
| 带有架构说明的 Frida 脚本 | — | — | 部分 | — | ✓ |
| Root 检查枚举(不仅仅是绕过) | — | — | 部分 | — | ✓ |
| 硬件支持的 Keystore 拦截 | — | — | — | — | ✓ |
| MITRE ATT&CK Mobile 映射 | — | — | — | — | ✓ |
| 专业 HTML 报告生成 | ✓ | — | — | ✓ | ✓ |
这些都是我会与本项目配合使用的工具。Drozer 仍然是大规模测试导出组件的最快方法。Objection 对于快速的交互式探索非常有用。MobSF 是人工审核前进行初步检查的好帮手。本项目填补的空白是方法论层以及将各个发现串联成完整评估的文档。
## 法律声明
仅对你拥有或获得明确书面授权测试的应用使用。OVAA 评估针对的是为安全研究而刻意构建的含漏洞应用。这些内容均不得用于对生产应用进行未经授权的测试。
## 参考
- [OWASP MASTG](https://mas.owasp.org/MASTG/) — 权威的移动端测试指南
- [OWASP MASVS 2.1](https://mas.owasp.org/MASVS/) — 本检查清单所基于的验证标准
- [MITRE ATT&CK for Mobile](https://attack.mitre.org/matrices/mobile/) — 发现中使用的映射技术
- [OVAA](https://github.com/oversecured/ovaa) — Oversecured 刻意构建的含漏洞 Android 应用,即评估目标
- [Oversecured 博客](https://oversecured.com/blog/) — 关于 Android 安全研究的优秀技术文章
标签:AES-256, Android安全, Docker支持, Frida, MASVS, 多模态安全, 报告生成器, 数据可视化, 漏洞评估, 自定义脚本, 逆向工具