joemunene-by/ghostmobile

GitHub: joemunene-by/ghostmobile

一款轻量级的移动应用纯静态安全分析器,通过解包检查 Android APK 和 iOS IPA 的 manifest、配置与资源,报告安全问题并给出严重程度和修复建议。

Stars: 0 | Forks: 0

ghostmobile logo

ghostmobile

License: MIT Python 3.10+ Part of GhostSuite

Android APK 和 iOS IPA 包的静态安全分析器。它会解压程序包(一个 zip 归档文件),检查其 manifest、配置和元数据,并报告安全问题及其严重程度和修复指南。可以把它看作是大型移动安全套件的一个轻量级、低依赖、纯静态的辅助工具。 ## 纯静态 ghostmobile 从不执行应用程序。它只读取归档条目,解码 manifest,并对资源和二进制字符串进行模式匹配。没有模拟器,没有插桩,没有网络调用。它对程序包所做的最“过分”的操作仅仅是读取。 ## 仅限授权使用 请仅在你拥有或被明确授权审查的程序包上使用 ghostmobile。对第三方应用程序进行静态分析可能受到法律或应用程序条款的限制。你有责任确保自己有权分析任何你所指向的程序包。 ## 安装 需要 Python 3.11 或更高版本。 ``` git clone https://github.com/joemunene-by/ghostmobile.git cd ghostmobile python -m venv .venv && source .venv/bin/activate pip install -e ".[dev]" ``` ## 快速开始 分析一个程序包(平台会根据文件扩展名或归档内容自动检测): ``` ghostmobile analyze app.apk ghostmobile analyze app.ipa --format json ghostmobile analyze app.apk --format sarif --output app.sarif ghostmobile analyze app.apk --min-severity high --fail-on high ghostmobile checks ghostmobile version ``` 在一个特制的、无害的 APK 固定测试数据(即测试套件构建的那种,绝不是真正的专有应用)上的示例输出: ``` ghostmobile 0.1.0 target=vuln.apk platform=android package: com.ghostmobile.vuln Findings (9) Severity ID Title Location High GM-AND-001 Application is debuggable AndroidManifest.xml (application) High GM-AND-004 Exported provider without permission AndroidManifest.xml (provider) High GM-AND-008 Possible hardcoded secret: AWS key res/values/strings.xml Medium GM-AND-002 Application allows backup AndroidManifest.xml (application) Medium GM-AND-003 Cleartext network traffic permitted AndroidManifest.xml (application) Medium GM-AND-006 Weak custom permission AndroidManifest.xml (permission) Low GM-AND-005 Dangerous permissions requested AndroidManifest.xml (uses-permission) ``` ## CLI | 标志 | 用途 | | --- | --- | | `--format {console,json,sarif}` | 输出格式。JSON 和 SARIF 会原样输出到 stdout。 | | `--min-severity {info,low,medium,high,critical}` | 隐藏低于此严重程度的发现。 | | `--fail-on {info,low,medium,high,critical}` | 如果有任何发现达到或超过此严重程度,则以非零状态码退出。 | | `--output PATH` | 将报告写入文件,而不是 stdout。 | | `--verbose` | 输出详细的日志到 stderr。 | 退出代码:`0` 成功,`1` 发现的问题达到了 `--fail-on` 阈值,`2` 无法分析该程序包(文件缺失、不是程序包、归档损坏)。 ## 支持的检查项 ### Android (APK) | ID | 严重程度 | 检查项 | | --- | --- | --- | | GM-AND-001 | 高 | 应用程序可调试 (android:debuggable=true)。 | | GM-AND-002 | 中 | 应用程序允许备份 (android:allowBackup=true)。 | | GM-AND-003 | 中 | 允许明文网络流量。 | | GM-AND-004 | 中/高 | 没有权限的导出组件(显式或隐式)。 | | GM-AND-005 | 低 | 请求了危险的 runtime 权限。 | | GM-AND-006 | 中 | 保护级别较弱的自定义权限。 | | GM-AND-007 | 高 | APK 未签名或缺少可识别的 v1/v2 签名。 | | GM-AND-008 | 高 | 在捆绑的资源或 assets 中硬编码了密钥。 | ### iOS (IPA) | ID | 严重程度 | 检查项 | | --- | --- | --- | | GM-IOS-001 | 高 | 禁用了 App Transport Security (NSAllowsArbitraryLoads)。 | | GM-IOS-002 | 中 | ATS 例外域允许不安全的 HTTP 加载。 | | GM-IOS-003 | 低 | 注册了自定义 URL scheme(deep-link 攻击面)。 | | GM-IOS-004 | 低 | 请求了隐私敏感的权限能力。 | | GM-IOS-005 | 中/高 | 存在风险的 entitlement(get-task-allow,通配符 App ID)。 | | GM-IOS-006 | 高 | 在应用二进制文件或 bundle 中硬编码了密钥。 | ## AXML 解码器的工作原理 Android 不会以纯文本形式提供 `AndroidManifest.xml`。它以 Android 二进制 XML (AXML) 格式存储,这是一种由 aapt 生成的分块二进制格式。为了保持轻量级依赖,ghostmobile 内置了一个紧凑、独立的 AXML 解码器 (`ghostmobile/axml.py`),而不需要强制依赖 androguard。 该解码器会遍历 chunk 流: 1. 解析头部并定位字符串池 chunk,解码带有长度前缀 varint 的 UTF-8 或 UTF-16 字符串。 2. 读取可选的 resource-id 映射 chunk(属性名到框架资源 ID 的映射)。 3. 遍历 namespace 和开始/结束元素 chunk,将元素名称、属性及其类型化值(字符串、布尔值、整数、引用)重构成一棵元素树。 随后,元素访问器(`element.attr(...)`, `element.findall(...`) 会将恢复的结构公开给 manifest 模型和检查项。该包还内置了一个匹配的编码器(`ghostmobile/axml_encode.py`),以便测试套件可以构建特制的、无害的二进制 manifest,而无需分发任何真实应用。 如果 `androguard` 可导入,它可能会被用作替代方案,但默认使用内置解码器,以保持工具及其测试的低依赖性。 ## 限制 - 仅支持静态分析。Runtime 行为、动态类加载和网络流量不在范围内。 - 密钥检测基于正则表达式并针对精确度进行了调优,因此它可能会遗漏混淆或编码过的密钥,并且不能替代对源代码的密钥扫描。 - provisioning-profile 解析器会尽最大努力提取内嵌的 plist,但不会验证 CMS 签名。 - v2/v3 APK 签名检测是一个轻量级的存在性检查,而不是完整的签名验证。 - 资源字符串扫描不会解码已编译的 `resources.arsc` 二进制表;它只扫描类似文本的条目。 ## 路线图 - 解码 `resources.arsc` 以解析 `@string` 引用并扫描已编译的资源值。 - 解析 `network_security_config.xml` 以检查明文和信任锚点问题。 - Smali/dex 字符串提取,用于更深度的 Android 密钥和 API 分析。 - 在 feature flag 的控制下,提供可选的由 androguard 支持的分析路径。 - 支持基线/抑制文件,用于处理 CI 中已分诊的发现结果。 ## 开发 ``` ruff check . pytest ``` CI 会在 Python 3.11 和 3.12 上运行 `ruff check` 和测试套件。 ## 许可证 MIT。详见 [许可证](LICENSE)。 ghostsuite 的一部分:十一款开源安全工具,一个幽灵。
标签:Android, DSL, Homebrew安装, iOS, Python, 云安全监控, 无后门, 目录枚举, 移动安全, 逆向工具, 静态分析