MASTG 实战:检测 Android 应用是否仅使用不安全的 v1 APK 签名方案(MASTG-TEST-0224) 文档教程网络安全【免费下载链接】mastgThe OWASP Mobile Application Security Testing Guide (MASTG) is a comprehensive manual for mobile app security testing and reverse engineering. It describes technical processes for verifying the OWASP Mobile Security Weakness Enumeration (MASWE) weaknesses, which are in alignment with the OWASP MASVS.项目地址https://gitcode.com/gh_mirrors/ow/mastg点击查看免费下载本文基于 OWASP MASTGMobile Application Security Testing Guide测试用例 MASTG-TEST-0224讲解如何检测 Android 应用是否仅启用了已不安全的 v1JAR签名方案。通过minSdkVersion与签名方案的双重判定你可以识别出容易被 Janus 漏洞CVE-2017-13156一类攻击篡改的应用并掌握apksigner、jadx/apktool等工具的完整实操流程最终给出符合 MASTG-BEST-0006 最佳实践的签名配置修复方案。测试目标为什么仅 v1 签名是一个安全问题该测试对应 MASTG 测试项 MASTG-TEST-0224元数据中声明了如下关键信息平台android类型[static, code]静态/代码分析类测试无需动态调试关联弱点MASWE-0056关联最佳实践MASTG-BEST-0006关联知识MASTG-KNOW-0003不采用较新的 APK 签名方案意味着应用缺少更强签名机制提供的完整性保护。v1 签名方案JAR 签名存在已知缺陷它不覆盖 APK 的所有部分攻击者有可能在不使签名失效的情况下修改 APK 的某些部分——这正是 Janus 漏洞CVE-2017-13156利用的原理。因此仅依赖 v1 签名会显著提高应用被篡改的风险。各签名方案的安全定位结合 Android 平台概述 中APK Signing Schemes一节的说明Android 支持的签名方案可归纳如下方案支持版本特点安全性JAR 签名v1Android 7.0API 24以下唯一方案按 JAR 条目逐项签名不覆盖 ZIP 元数据等部分不安全受 CVE-2017-13156 影响APK Signature Scheme v2Android 7.0API 24及以上对整个 APK 文件做哈希并签名插入 APK Signing Block更全面、更快APK Signature Scheme v3Android 9API 28及以上同 v2 格式额外增加支持的 SDK 版本信息与 proof-of-rotation 结构支持密钥轮换推荐APK Signature Scheme v4Android 11API 30及以上基于 fs-verity 的块级哈希支持更快增量更新本身不提供独立安全保护需配合 v2/v3其中 v3 方案的 proof-of-rotation 结构是一个单链表每个节点包含此前版本应用所使用的签名证书旧证书对新证书链进行签名从而在密钥泄露更换后仍能保持向后兼容与信任。需要注意旧平台会忽略 v2/v3 签名、只校验 v1因此 APK 通常用多种方案同时签名以兼顾新旧设备。而知识条目 MASTG-KNOW-0003 进一步强调对每一种签名方案发布构建都应同时用其所有前代方案签名这是兼容性的基础——但该测试判定的是仅 v1 生效这一更糟的情况。操作步骤三步完成签名方案审计MASTG-TEST-0224 的标准步骤引用了三个 MASTG 技术Technique下面逐一展开并给出可直接执行的命令。步骤 1获取 AndroidManifest.xmlMASTG-TECH-0117参见 MASTG-TECH-0117。AndroidManifest 以二进制 XML 格式存储不能直接解包查看必须解码使用 jadxMASTG-TOOL-0018jadx --no-src -d out_dir app.apk输出到out_dir/resources/AndroidManifest.xml。jadx 会保留uses-sdk元素直接包含minSdkVersion。使用 apktoolMASTG-TOOL-0011apktool d -s -f -o output_dir app.apk。注意 apktool 解码后的 AndroidManifest.xml 中没有uses-sdk元素它被移到了apktool.ymlsdkInfo: minSdkVersion: 29 targetSdkVersion: 35使用 aapt2MASTG-TOOL-0124aapt2 d badging app.apk输出非 XML 格式可直接看到sdkVersion:29一行。步骤 2读取 minSdkVersionMASTG-TECH-0150参见 MASTG-TECH-0150。从提取出的 AndroidManifest.xml 中定位minSdkVersion。不同工具的输出格式不同jadx/apktool 输出标准 XML属性带android:命名空间前缀aapt2 输出自定义解码格式。可用的检索命令# jadx 输出的标准 XML grep -i minSdkVersion out_dir/resources/AndroidManifest.xml # apktool 场景值在 apktool.yml 中 grep -i minSdkVersion output_dir/apktool.yml # aapt2 场景 aapt2 d badging app.apk | grep -i sdkVersion步骤 3列出所有启用的签名方案MASTG-TECH-0116参见 MASTG-TECH-0116使用 apksignerMASTG-TOOL-0123验证签名$ apksigner verify --verbose example.apk Verifies Verified using v1 scheme (JAR signing): false Verified using v2 scheme (APK Signature Scheme v2): true Verified using v3 scheme (APK Signature Scheme v3): true Verified using v3.1 scheme (APK Signature Scheme v3.1): false Verified using v4 scheme (APK Signature Scheme v4): false Verified for SourceStamp: false Number of signers: 1若需进一步核对签名证书与密钥信息用于报告溯源可追加--print-certs$ apksigner verify --print-certs --verbose example.apk Signer #1 certificate DN: CNExample Developers, OUAndroid, OExample Signer #1 certificate SHA-256 digest: 1fc4de52d0daa33a9c0e3d67217a77c895b46266ef020fad0d48216a6ad6cb70 Signer #1 key algorithm: RSA Signer #1 key size (bits): 2048观察与判定什么样的结果算测试失败观察Observation测试的输出应包含两部分minSdkVersion属性值各签名方案的启用状态例如Verified using v3 scheme (APK Signature Scheme v3): true。判定规则Evaluation当minSdkVersion属性为 24 及以上、且只有 v1 签名方案启用时测试用例判定为失败。这一判定逻辑是合理的minSdkVersion 24意味着应用可以安装在 Android 7.0 及以上设备上而这些设备完全支持 v2 方案对整包签名、防 Janus 类攻击此时却只提供了 v1 签名等于主动放弃了平台已提供的更强完整性保护。反之若minSdkVersion低于 24v1 是兼容旧设备的必要组成部分通常需与 v2 并存此时仅 v1的风险评估需结合发布渠道与目标用户群综合判断——这正是该测试用例把 minSdkVersion 作为前置条件的意义所在。修复建议启用 v2/v3可选 v4签名方案遵循最佳实践 MASTG-BEST-0006确保应用至少使用 v2 或 v3 APK 签名方案签名以获得覆盖整个 APK 的完整性检查并防篡改推荐启用 v3它还支持密钥轮换可选地在 Android 11 及以上设备上加入 v4 以加快增量更新但 v4 单独不提供安全保护必须与 v2 或 v3 一起使用。签名配置可通过 Android Studio 或build.gradle/build.gradle.kts中的signingConfigs段管理。同时启用 v3 与 v4 方案的配置示例摘自 MASTG-BEST-0006 原文// build.gradle android { ... signingConfigs { config { ... enableV3Signing true enableV4Signing true } } }修复后重新构建 APK再用apksigner verify --verbose复核确认Verified using v2 scheme或Verified using v3 scheme为true即可使 MASTG-TEST-0224 转为通过。小结与延伸阅读本文测试项定义tests-beta/android/MASVS-RESILIENCE/MASTG-TEST-0224.md同弱点MASWE-0056的姊妹测试MASTG-TEST-0225 也属于 Android 签名相关审计范畴可与本项搭配使用形成完整的签名方案检查。签名机制背景Document/0x05a-Platform-Overview.md 的 Signing Process 与 APK Signing Schemes 小节含 v2/v3 校验流程插图知识条目knowledge/android/MASVS-RESILIENCE/MASTG-KNOW-0003.mdApp Signing 概述与应同时用前代方案签名的兼容性原则。整体工作流可概括为一句话用 TECH-0117/0150 读出 minSdkVersion用 TECH-0116apksigner读出签名方案集合若 minSdkVersion ≥ 24 且仅 v1 为 true则判定失败并按 MASTG-BEST-0006 开启 v3及可选 v4签名重新发布。赞分享文档教程网络安全【免费下载链接】mastgThe OWASP Mobile Application Security Testing Guide (MASTG) is a comprehensive manual for mobile app security testing and reverse engineering. It describes technical processes for verifying the OWASP Mobile Security Weakness Enumeration (MASWE) weaknesses, which are in alignment with the OWASP MASVS.项目地址https://gitcode.com/gh_mirrors/ow/mastg点击查看免费下载相关推荐MASTG Android 安全测试检测 HostnameVerifier 不安全实现MASTG-TEST-0283MASTG Android 安全测试检测 HostnameVerifier 不安全实现MASTG TEST 0283 本篇基于 OWASP MASTGM文档教程网络安全OWASP MASTG 实战检测 Android 应用中的密钥长度不足MASTG-TEST-0208OWASP MASTG 实战检测 Android 应用中的密钥长度不足MASTG TEST 0208 导读 本篇文章围绕 OWASP Mobile App文档教程网络安全MASTG-TEST-0381MASTG 中 Android PendingIntent 不安全创建的静态检测实战MASTG TEST 0381MASTG 中 Android PendingIntent 不安全创建的静态检测实战 本文基于 OWASP MASTGMobi文档教程网络安全上一篇biencoder-camembert-base-mmarcoFR完全指南法国语义搜索的终极解决方案下一篇3步打造专属游戏体验Degrees of Lewdity整合包全攻略创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考