资讯详情

资讯详情

MASTG-TEST-0226:检测 AndroidManifest 中 `android:debuggable` 标志及其风险与修复

文档教程网络安全【免费下载链接】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-0226讲解如何在 Android 应用静态分析中检查AndroidManifest.xml的android:debuggable标志如何提取并解码清单文件、用什么命令读取该标志、如何判定true/false/缺省三种状态以及命中后的修复建议和加固边界。读完本文你可以独立对任意 APK 完成这项 RESILIENCE 类别MASWE-0063的合规检查。为什么检查debuggable标志测试用例 MASTG-TEST-0226 的目标是检查应用是否将android:debuggable标志设为true。当该标志开启时应用允许被附加调试器攻击者因此可以检查应用内部状态变量、内存、运行时行为绕过安全控制如断点绕过反调试逻辑操纵运行时行为如改写关键返回值。需要强调的是按用例原文的界定debuggable为true本身不被视为直接漏洞但它显著扩大了攻击面——它让攻击者获得了对应用数据与资源的非授权访问在生产环境中尤其危险。从 MASTG-KNOW-0007 的知识条目看调试机制的底层依据是每个开启了调试的进程都会额外运行一个处理JDWPJava Debug Wire Protocol协议报文的线程而该线程只在 Android Manifest 的Application元素带有android:debuggabletrue属性的应用中启动。也就是说这个标志直接决定了进程是否向 JDWP 调试器敞开大门。前置步骤一提取并解码 AndroidManifest.xml测试步骤第 1 条要求使用技术 MASTG-TECH-0117从 AndroidManifest 获取信息。由于AndroidManifest.xml在 APK 中以二进制 XML格式存储直接解压 APK 拿不到可读内容必须先解码。该技术文档给出了三种主流工具的做法1. 使用 jadx用--no-src参数只提取资源而不反编译全部源码jadx --no-src -d out_dir MASTG-DEMO-0001.apkjadx 会将完整的清单输出到out_dir/resources/AndroidManifest.xml并且包含uses-sdk元素这是它区别于 apktool 的特点?xml version1.0 encodingutf-8? manifest xmlns:androidhttp://schemas.android.com/apk/res/android ... uses-sdk android:minSdkVersion29 android:targetSdkVersion35 /2. 使用 apktoolapktool d -s -f -o output_dir MASTG-DEMO-0001.apk-s跳过 dex 文件的 baksmali 反汇编速度更快。解码后的清单位于output_dir/AndroidManifest.xml。一个容易困惑的细节用 apktool 解码后解码出的AndroidManifest.xml中可能看不到uses-sdk元素。这是预期行为——apktool 会把minSdkVersion、targetSdkVersion移到单独的apktool.yml文件中sdkInfo: minSdkVersion: 29 targetSdkVersion: 353. 使用 aapt2只关心个别取值时aapt2 d badging MASTG-DEMO-0001.apk注意aapt2 的输出不是 XML 文件而是自定义的解码格式例如package: nameorg.owasp.mastestapp versionCode1 versionName1.0 ... sdkVersion:29 targetSdkVersion:35 uses-permission: nameandroid.permission.INTERNET前置步骤二读取debuggable标志测试步骤第 2 条要求使用技术 MASTG-TECH-0150分析 AndroidManifest来定位该标志。这里有一个关键点不同提取工具的输出格式不同直接影响检索写法jadx、apktool 输出标准 XML属性带android:命名空间前缀如android:debuggabletrueaapt2 输出自定义解码格式非 XML命名约定不同如application-debuggable。方法 1grep 检索 XML 输出对 jadx/apktool 解码出的 XML 清单执行grep -i android:debuggable output_dir/AndroidManifest.xml当标志被显式设置时输出形如android:debuggabletrue如果该属性不存在则标志在 release 构建中默认为false。方法 2aapt2 直接查询无需先解包清单aapt2 d badging app.apk | grep -i debuggable标志被设置时的示例输出application-debuggable如果该行为空缺失说明标志未设置默认为false。方法 3xmlstarlet / xmllint 做结构化查询对提取出的 XML 清单进行结构化属性查询xmlstarlet sel -t -v //application/android:debuggable -n output_dir/AndroidManifest.xml观察与判定准则Observation / Evaluation用例对结果的观察与判定标准如下务必逐条对照观察Observation输出应明确显示debuggable标志是否被设置true或false。如果标志未指定release 构建下按false处理。判定Evaluation当且仅当debuggable标志被显式设置为true时该测试用例失败——这表明应用被配置为允许调试在生产环境中是不合适的。整理成决策表清单中的状态aapt2 输出判定android:debuggabletrueapplication-debuggable失败生产环境不应可调试android:debuggablefalse无该行通过属性缺省无该行通过release 构建默认false规则化的自动化检测仓库中的 Semgrep 规则 mastg-android-debuggable-flag.yml 将上述检查固化为可重复执行的静态检测它针对 XML 语言匹配如下模式命中即报 WARNING 级别告警rules: - id: mastg-android-debuggable-flag severity: WARNING languages: - xml metadata: summary: This rule inspects the AndroidManifest.xml for the debuggable flag. message: [MASVS-RESILIENCE-4] debuggable detected as $ARG. patterns: - pattern: android:debuggable$ARG该规则会把实际取值$ARG带入告警信息正好对应用例中输出应明确显示标志取值的观察要求可以在 CI 流水线中对清单文件做回归检测。修复建议与加固边界直接修复release 构建必须禁用对应最佳实践 MASTG-BEST-0007alias:debuggable-flag-disabled所有 release 构建必须将AndroidManifest.xml中的debuggable标志设为false。常规做法是在 Gradle 构建类型中显式关闭release类型不继承debug的debuggable true并确保 CI 不会误用 debug 构建产物发布。加固边界标志不是终局防线MASTG-BEST-0007 特别指出一个容易被忽视的边界通过debuggable标志禁用调试是重要的第一步但不能完全保护应用免受高级攻击。有经验的攻击者可以通过多种手段实现调试能力例如二进制补丁binary patching参见 MASTG-TECH-0038来允许附加调试器使用二进制插桩工具如 Frida达到类似能力。对安全等级要求更高的应用应考虑把反调试技术作为额外的防御层并参考 MASWE-0064 获取详细指导。换句话说debuggablefalse消除的是最低成本的调试入口但进程级的 JDWP 附加能力仍可能被离线补丁等手段恢复因此它应视为纵深防御的第一层而非唯一一层。与相邻测试用例的区分检查调试面时容易把两个独立的机制混淆MASTG 将其拆分为相邻用例本用例MASTG-TEST-0226Manifest 中的android:debuggable对应ApplicationInfo.FLAG_DEBUGGABLE控制整个进程是否可被附加调试器MASTG-TEST-0227代码中的WebView.setWebContentsDebuggingEnabled(true)控制 WebView 的远程调试。该 API独立于debuggable属性生效——即使应用未标记为可调试只要代码调用了该 APIWebView 仍可被 PC 端调试、抓包与修改通信内容因此需要单独做代码层检索。两者的关联文档同属 tests-beta/android/MASVS-RESILIENCE 目录且都映射到 MASWE-0063建议在评估中一起执行避免只查 Manifest 而漏掉 WebView 调试入口。小结MASTG-TEST-0226 是一条典型的静态清单检查用 jadx/apktool/aapt2 任一工具取得可读的AndroidManifest.xmlMASTG-TECH-0117用 grep/aapt2/xmlstarlet 提取debuggable取值MASTG-TECH-0150按显式true即失败、缺省视为false判定命中后按 MASTG-BEST-0007 在 release 构建中禁用调试并理解这只是纵深防御的第一层——补丁与插桩仍可恢复调试能力更高安全等级需要叠加反调试措施。赞分享文档教程网络安全【免费下载链接】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 静态测试详解检测 WebView 中 Content Provider 访问风险MASTG-TEST-0250MASTG Android 静态测试详解检测 WebView 中 Content Provider 访问风险MASTG TEST 0250 本篇指南基于文档教程网络安全使用 semgrep 检测 AndroidManifest 中的 debuggable 标志MASTG-DEMO-0040 实战解析使用 semgrep 检测 AndroidManifest 中的 debuggable 标志MASTG DEMO 0040 实战解析 本篇文章以 OWASP文档教程网络安全OWASP MASTG 实战使用 semgrep 静态检测 AndroidManifest 中的危险权限MASTG-DEMO-0033OWASP MASTG 实战使用 semgrep 静态检测 AndroidManifest 中的危险权限MASTG DEMO 0033 本文围绕 OWAS文档教程网络安全上一篇终极指南如何使用WorkshopDL免费下载Steam创意工坊模组下一篇Steam创意工坊下载终极指南免账号获取海量游戏模组创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →