)
文档教程网络安全【免费下载链接】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 MASTG 仓库中的演示样例 MASTG-DEMO-0035 为主体讲解如何在 Android 应用中通过backup_rules.xml将敏感文件从系统备份中排除并使用adb backup完整验证排除规则是否真正生效。读者读完本文后将掌握android:fullBackupContent/android:dataExtractionRules的配置方法、backup.ab备份文件的提取与分析流程以及一套可直接复用的备份敏感数据泄露检测与加固实战方案。为什么应用备份会成为敏感数据泄露的入口Android 系统为应用提供了多种备份机制原生 Android 自带的 USB 备份adb backup、Google Back Up My Data 云备份、Android 6.0API 23引入的 Auto Backup for Apps以及 OEM 厂商的私有备份方案。这些备份通常会把应用的数据与设置全部打包一旦其中包含明文敏感信息口令、Token、密钥等攻击者通过提取并解包备份文件即可直接读取这些数据。相关背景知识详见 MASTG-KNOW-0050Backups。MASTG 仓库针对这一问题定义了动态测试用例 MASTG-TEST-0216Sensitive Data Not Excluded From Backup它通过实际执行一次备份—卸载—恢复流程检查哪些文件会被系统还原从而验证应用是否正确地将敏感文件排除在备份之外该用例对应 MASWE-0006 弱点并取代了旧的 MASTG-TEST-0009Testing Backups for Sensitive Data后者已标记为 deprecated。演示样例 MASTG-DEMO-0035 正是这一测试的配套实验环境它用 Kotlin 构造了包含敏感文件的样本应用并借助backup_rules.xml的exclude规则尝试排除其中一个文件最终用adb backup验证排除是否成功。演示样例概览样本复用与目录结构MASTG-DEMO-0035 本身没有重复编写业务代码而是直接复用 MASTG-DEMO-0020 的样本文件仅更换了提取方式与验证手段MASTG-DEMO-0020 使用Backup Managerbmgr走备份→卸载→恢复流程观察恢复后文件是否回归MASTG-DEMO-0035 改用adb backup直接拉取备份包观察敏感文件是否被包含在备份归档中。两者的目标一致验证backup_rules.xml中的exclude规则是否真正生效。样例目录demos/android/MASVS-STORAGE/MASTG-DEMO-0035/包含以下关键文件文件作用MastgTest.kt创建两个文件的 Kotlin 代码AndroidManifest.xml声明allowBackup、fullBackupContent、dataExtractionRules属性backup_rules.xmlAndroid 11 及以下的备份包含/排除规则data_extraction_rules.xmlAndroid 12 及以上的云备份与设备迁移规则run.sh一键执行备份提取与结果整理output.txt备份文件中实际包含的文件清单apps/org.owasp.mastestapp/f/解包后的filesDir目录副本样本源码解析MastgTest.kt 如何构造敏感数据MastgTest.kt是整条测试链的起点它在应用内部存储目录context.filesDir中写入两个内容相同的文件模拟敏感数据未加密落盘的典型场景package org.owasp.mastestapp import android.content.Context import android.util.Log import java.io.File import java.io.FileOutputStream import java.io.IOException class MastgTest (private val context: Context){ fun mastgTest(): String { val internalStorageDir context.filesDir val fileName File(internalStorageDir, secret.txt) val fileNameOfBackupExcludedFile File(internalStorageDir, backup_excluded_secret.txt) val fileContent secr3tPa\$\$W0rd\n try { FileOutputStream(fileName).use { output - output.write(fileContent.toByteArray()) Log.d(WriteInternalStorage, File written to internal storage successfully.) } FileOutputStream(fileNameOfBackupExcludedFile).use { output - output.write(fileContent.toByteArray()) Log.d(WriteInternalStorage, File written to internal storage successfully.) } } catch (e: IOException) { Log.e(WriteInternalStorage, Error writing file to internal storage, e) return ERROR!!\n\nError writing file to internal storage } return SUCCESS!!\n\nFiles saved to $internalStorageDir } }这段代码的关键设计在于对比组secret.txt—— 代表敏感但未做任何保护的文件预期会出现在备份中backup_excluded_secret.txt—— 内容同为敏感口令secr3tPa$$W0rd但在backup_rules.xml中被标记为exclude预期被排除在备份之外。filesDir对应设备上的/data/user/0/org.owasp.mastestapp/files/等价于/data/data/org.owasp.mastestapp/files/这是应用内部存储的路径普通用户无法直接访问但通过备份机制却可以被完整打包带走——这正是本演示要揭示的风险。配置解析AndroidManifest.xml 中的备份三要素AndroidManifest.xml中的application节点配置了与备份相关的三个属性application android:allowBackuptrue android:dataExtractionRulesxml/data_extraction_rules android:fullBackupContentxml/backup_rules android:iconmipmap/ic_launcher android:labelstring/app_name android:roundIconmipmap/ic_launcher_round android:supportsRtltrue android:themestyle/Theme.MASTestApp tools:targetApi31逐个说明其含义android:allowBackuptrue允许系统备份应用数据。这是备份功能的总开关——当该属性为true时设备允许用户通过adb backup等方式备份应用数据相关机制见 MASTG-KNOW-0050。若该属性缺省allowBackup默认即为开启必须显式关闭android:fullBackupContentxml/backup_rules指向backup_rules.xml用于Android 11API 30及更低版本的 Auto Backup 包含/排除配置元素类型为full-backup-contentandroid:dataExtractionRulesxml/data_extraction_rules指向data_extraction_rules.xml用于Android 12API 31及以上版本的备份配置元素类型为data-extraction-rules涵盖云备份cloud-backup与设备迁移device-transfer两种场景tools:targetApi31标注该清单按 API 31 解析允许 IDE 正确识别dataExtractionRules等新属性。backup_rules.xml旧版系统的排除规则backup_rules.xml内容如下?xml version1.0 encodingutf-8? full-backup-content include domainfile path. requireFlagsclientSideEncryption / exclude domainfile pathbackup_excluded_secret.txt / /full-backup-content配置要点include domainfile path. requireFlagsclientSideEncryption /默认包含file域即filesDir下的全部内容。requireFlagsclientSideEncryption表示该包含规则仅在设备支持客户端侧加密能力时才生效属于条件性包含exclude domainfile pathbackup_excluded_secret.txt /在file域中按相对路径精确排除backup_excluded_secret.txt这就是演示中该文件不出现在备份里的直接原因。data_extraction_rules.xmlAndroid 12 的双通道规则data_extraction_rules.xml针对新版系统把备份拆分为两条独立通道分别配置?xml version1.0 encodingutf-8? data-extraction-rules cloud-backup disableIfNoEncryptionCapabilitiestrue exclude domainfile pathbackup_excluded_secret.txt / /cloud-backup device-transfer disableIfNoEncryptionCapabilitiestrue exclude domainfile pathbackup_excluded_secret.txt / /device-transfer /data-extraction-rules规则要点cloud-backup控制备份到云端如 Google Drive时的文件范围device-transfer控制设备到设备迁移换机克隆时的文件范围两处均排除backup_excluded_secret.txt并设置disableIfNoEncryptionCapabilitiestrue当设备不具备加密能力时禁用备份。正如 MASTG-BEST-0004Exclude Sensitive Data from Backups 所强调的云备份与设备迁移两条通道都必须同时配置排除规则只配其一属于常见疏漏。实战步骤从安装应用到拉取备份演示文档给出的操作流程只有三步但每一步都对应明确的验证意图安装目标应用到设备可通过 MASTG-TECH-0005 介绍的方式安装打开应用并交互操作触发mastgTest()执行文件写入确保secret.txt与backup_excluded_secret.txt都已落盘执行run.sh自动完成adb backup拉取、解包与结果整理。run.sh一键化执行脚本run.sh内容如下#!/bin/bash package_nameorg.owasp.mastestapp ../../../../utils/mastg-android-backup-adb.sh $package_name ls -l1 apps/org.owasp.mastestapp/f output.txt # Cleanup rm backup.ab backup.tar find apps/org.owasp.mastestapp/ -mindepth 1 -maxdepth 1 ! -name f* -exec rm -rf {} 脚本逻辑拆解首先调用 MASTG 仓库的通用备份脚本 utils/mastg-android-backup-adb.sh对包名org.owasp.mastestapp执行adb backup并解包随后执行ls -l1 apps/org.owasp.mastestapp/f output.txt只列出解包结果中f/目录即filesDir下的文件名写入output.txt——这是整个演示观察环节的核心产物最后清理backup.ab、backup.tar等中间文件并删除apps/中除f*外的目录保持工作目录整洁。需要说明的是adb backup自Android 12 起受到限制且要求应用的android:debuggabletrue见 MASTG-KNOW-0050 与 MASTG-TECH-0128因此本演示适用于可调试应用或 Android 12 之前的环境模拟器与真机的行为也可能存在差异。底层原理mastg-android-backup-adb.sh 如何解包 backup.abutils/mastg-android-backup-adb.sh是 MASTG 仓库中与adb backup相关的通用工具脚本完整内容如下#!/bin/bash # Default package name if [ -z $1 ]; then echo No package name provided. Usage: $0 package_name exit 1 else package_name$1 fi adb backup -apk -nosystem $package_name tail -c 25 backup.ab | python3 -c import zlib,sys;sys.stdout.buffer.write(zlib.decompress(sys.stdin.buffer.read())) backup.tar tar xvf backup.tar echo Done, extracted as apps/ to current directory其内部对应了 MASTG-TEST-0009 中描述的经典三步解包流程adb backup -apk -nosystem package_name请求系统生成备份文件backup.ab。执行时设备端会弹出备份我的数据确认提示密码为可选项不填亦可-apk将 APK 一并打入归档-nosystem排除系统应用。若 adb 版本低于 1.0.31可能需将参数整体加引号传递剥离 24 字节文件头并解压Android 备份文件backup.ab以约 24 字节的 ASCII 头开始tail -c 25跳过该头部后剩余数据为 zlib 压缩流通过python3调用zlib.decompress还原为 tar 归档backup.tar。这也是 MASTG-TEST-0009 中openssl zlib -d与 Android Backup Extractorabe.jar unpack等替代方案的等价实现tar xvf backup.tar解包得到apps/目录其结构为apps/package_name/其中f子目录即应用的filesDir另有db、sp、r等子目录对应数据库、SharedPreferences 与 raw 文件。补充若走 Backup Manager 路线可改用仓库中的 utils/mastg-android-backup-bmgr.sh它通过adb shell bmgr配合本地传输器LocalTransport执行backupnow再卸载重装触发恢复从而验证恢复后的数据状态两种工具脚本的完整用法见 MASTG-TECH-0128。观察结果备份归档里到底有什么执行run.sh后工作目录下会出现两类产物output.txt备份中实际包含的文件清单apps/org.owasp.mastestapp/f/备份文件解包后的filesDir目录副本。本演示生成的output.txt内容如下profileInstalled secret.txt对应的目录副本apps/org.owasp.mastestapp/f/中同样只含profileInstalled与secret.txt两个文件。将这份清单与源码中写入的两个文件secret.txt、backup_excluded_secret.txt对比结论一目了然secret.txt出现在备份中backup_excluded_secret.txt没有出现在备份中exclude规则成功生效。评估测试为什么失败查看备份中保留下来的secret.txt其内容为明文口令secr3tPa$$W0rd依据 MASTG-TEST-0216 的评估标准只要备份/恢复出的文件中存在任何敏感内容测试即判定失败FAIL。本演示中secret.txt未在backup_rules.xml中标记排除明文口令随之进入备份包因此测试失败而backup_excluded_secret.txt因被exclude标记而未进入备份属于符合预期的对照表现。这一结果精准复现了 MASWE-0006 所描述的弱点开发者可能只保护了部分文件却遗漏了其他同样敏感的数据——防御必须做到完整覆盖而不能只针对已知文件逐个打补丁。与 MASTG-DEMO-0020 的对比两种验证路径的取舍MASTG-DEMO-0035 与源样本 MASTG-DEMO-0020 共享同一套MastgTest.kt、AndroidManifest.xml与backup_rules.xml但验证路径不同维度MASTG-DEMO-0020MASTG-DEMO-0035备份工具Backup Managerbmgradb backup核心流程备份 → 卸载 → 重装 → 恢复直接拉取备份包并解包观察对象恢复后设备上的文件restored_files/、output_after.txt备份归档内的文件apps/.../f/、output.txt侧重点排除规则对恢复的影响排除规则对归档内容的影响MASTG-DEMO-0020 的run.sh会先快照备份前文件output_before.txt恢复后再快照output_after.txt并断言backup_excluded_secret.txt不会在恢复后回归。相比之下MASTG-DEMO-0035 更直接解包即见分晓适合快速核查备份包是否干净。两者共同构成对同一配置backup_rules.xml的双角度验证。加固建议如何让备份彻底告别敏感数据结合 MASTG-BEST-0004Exclude Sensitive Data from Backups修复本演示暴露的问题可遵循以下步骤盘点敏感文件对照应用内所有写入内部存储、SharedPreferences、数据库的数据标记其中属于口令、Token、密钥、个人信息等敏感类别者配置排除规则使用 Auto Backup 的应用在backup_rules.xmlAndroid 11 及以下通过android:fullBackupContent声明中对每个敏感文件/目录添加exclude domainfile path... /面向 Android 12 及以上的应用同时在data_extraction_rules.xml通过android:dataExtractionRules声明的cloud-backup与device-transfer两个通道中各自排除二者缺一不可从根上减少明文落盘备份排除属于缓解措施而非根治——敏感数据在落盘前就应加密存储使即使被备份也不会直接泄露回归验证每次改动配置后重复本演示的adb backup解包流程或 MASTG-TECH-0128 的bmgr恢复流程确认备份归档中不再出现任何敏感文件。小结MASTG-DEMO-0035 用最小的样本规模完整展示了备份敏感数据泄露从构造、触发、观察到评估的闭环MastgTest.kt负责制造明文敏感文件backup_rules.xml/data_extraction_rules.xml负责演示排除机制run.sh与 utils/mastg-android-backup-adb.sh 则提供了可复用的adb backup解包提取手段。最终结论验证了 MASTG-TEST-0216 的判定逻辑只要secret.txt这类敏感文件仍在备份归档中测试即失败同时exclude规则确实能让backup_excluded_secret.txt从备份中消失——这也提示开发者排除规则必须逐一覆盖所有敏感路径并且新旧系统版本fullBackupContent与dataExtractionRules需要同时配置才能真正堵住备份这条数据泄露通道。赞分享文档教程网络安全【免费下载链接】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 MASTG 实战利用 backup_rules.xml 验证 Android 应用备份中的数据排除MASTG-DEMO-0020OWASP MASTG 实战利用 backup_rules.xml 验证 Android 应用备份中的数据排除MASTG DEMO 0020 导读 本篇文文档教程网络安全从备份中排除敏感数据Android Auto Backup 与 Key-value Backup 配置实战MASTG-BEST-0004从备份中排除敏感数据Android Auto Backup 与 Key value Backup 配置实战MASTG BEST 0004 本篇基于 OWA文档教程网络安全Android 应用备份安全测试指南adb backup、Auto Backup 与敏感数据防护实战基于 OWASP MASTGAndroid 应用备份安全测试指南adb backup、Auto Backup 与敏感数据防护实战基于 OWASP MASTG 本文以 OWASP Mo文档教程网络安全创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考