ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

MASTG 指南:iOS App Groups 共享容器机制解析与安全测试要点

MASTG 指南:iOS App Groups 共享容器机制解析与安全测试要点 文档教程网络安全【免费下载链接】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点击查看免费下载App Groups 是 iOS 上基于 Entitlement授权的跨进程数据共享机制它让同一开发者团队旗下的多个 App 及其扩展共享同一个文件容器、UserDefaults或 SQLite 数据库。本文以 OWASP MASTG 知识库文档 MASTG-KNOW-0125 为主体结合仓库中的安全测试用例与最佳实践系统讲解 App Groups 的配置方式、共享存储 API、安全边界以及如何从渗透测试视角核查共享容器中的数据保护。读完本文你将掌握 App Groups 的完整配置链路、共享容器的取证与检测方法以及避免敏感数据泄漏的落地做法。App GroupsEntitlement 驱动的共享机制App Groups 是一种基于 Entitlement 的机制允许来自同一开发者团队的 App 和扩展共享一个公共文件容器、共享偏好设置shared preferences或 SQLite 数据库等文件。它是 iOS 平台层MASVS-PLATFORM下一种典型的跨应用数据通道与 Keychain Access Group、File Coordination 等机制共同构成了 iOS 的共享与协作体系。参与共享的 EntitlementApp 通过启用App Groups 能力Xcode 的 App Groups capability并添加com.apple.security.application-groupsEntitlement 来加入某个 App Group。该 Entitlement 的生效还需要满足以下条件App ID 与描述文件provisioning profile必须允许同一个 group identifierGroup identifier 遵循group.reverse-DNS-string格式例如group.com.example.myappGroup identifier 与开发者团队developer team绑定。所有声明了相同 group identifier 的 App 与扩展都可以访问该组共享的资源而不同开发者团队无法使用同一个 App Group——这是团队命名空间隔离的核心约束。从代码签名角度看Entitlement 是嵌入二进制代码签名中的键值对签名后无法修改。相关背景可参阅 MASTG-KNOW-0077App Permissions中对 Entitlement 分层模型的说明Capability 是 Xcode 界面层的开关概念Entitlement 是最终被签名进二进制的键值对审查 IPA 时你看到的永远是 Entitlement而非 Xcode 中的 Capability。在 Xcode 中的启用流程在 Xcode 的Signing Capabilities选项卡中为 App 与每个扩展目标分别添加App Groups能力并勾选同一个 group identifier。Xcode 会据此生成/更新appname.entitlements文件把该 group 写入com.apple.security.application-groups数组。一个典型的 Entitlements 文件片段如下结构见 MASTG-KNOW-0077?xml version1.0 encodingUTF-8? !DOCTYPE plist PUBLIC -//Apple//DTD PLIST 1.0//EN http://www.apple.com/DTDs/PropertyList-1.0.dtd plist version1.0 dict keycom.apple.security.application-groups/key array stringgroup.com.example.myapp/string /array /dict /plist注意com.apple.security.application-groups的值是字符串数组一个 App 可以同时属于多个 App Group。该 Entitlement 不需要用户额外授权它属于“安装时静默生效”的开发者侧配置但它扩大了应用在沙箱外的跨应用数据共享面因此安全审查时应逐一核对其必要性见后文“MASTG 测试视角”。共享存储容器路径与常用 APIApp Group 的共享容器是文件系统上的一个目录位于/private/var/mobile/Containers/Shared/AppGroup/UUID/可通过FileManager的containerURL(forSecurityApplicationGroupIdentifier:)获取FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: group.com.example.myapp)共享容器中常见的存放内容共享UserDefaults通过UserDefaults(suiteName: group.com.example.myapp)创建主 App 与扩展如 Widget、Share Extension可读写同一份偏好设置SQLite 数据库、Core Data 存储多个进程共享的数据库文件例如配置了 App Group 容器的NSPersistentContainer共享偏好文件或配置数据。此外当扩展使用NSURLSession进行后台上传或下载时必须配置共享容器以便扩展与其所属 App 都能访问传输的数据该要求见 MASTG-KNOW-0082 中 “Sharing Data via App Groups” 一节。与 Pasteboard 的对比若只是同团队 App 之间传递小数据也可以考虑使用自定义NamedPasteboard但 Apple 自 iOS 10 起不鼓励持久化自定义 Pasteboard并明确推荐使用 App Groups作为同开发者 App 之间的数据共享方式见 MASTG-KNOW-0083。相比系统级剪贴板App Group 容器是受 Entitlement 与代码签名约束的、团队命名空间内的私有通道不会暴露给无关 App。范围与约束安全边界MASTG 文档明确给出了 App Groups 的能力边界这些约束直接决定安全评估结论共享容器对该组内所有 App 与扩展开放只要它们运行在同一台设备上App Groups 不提供跨团队共享不同开发者团队的 App 无法共用同一个 App GroupApp Groups 不增加额外的加密层共享容器中的文件依赖 iOS 标准的文件系统保护以及施加在每个文件上的 Data Protection class数据保护等级Widget、通知内容扩展等 App 扩展普遍通过 App Groups 读取其所属 App 共享的数据组内任何 App 或扩展都能读取或修改共享数据容器成员之间没有逐条目的访问控制no per-item access control因此敏感数据应最小化存放访问控制必须在应用层实现。关于 Data Protection 的细节写入共享容器的文件与写入 App 私有容器的文件一样受 Data Protection 保护默认类是NSFileProtectionCompleteUntilFirstUserAuthenticationNSFileProtectionComplete则保证设备锁定时文件内容保持加密。这与 App 私有存储的处理方式完全一致参见测试 MASTG-TEST-0299 对私有存储与共享容器 Data Protection class 的统一核查方法。与其他机制的关联App Groups 不是孤立机制它与其他 iOS 平台能力紧密配合App Extensions最主要的消费方App 扩展从 iOS 8 引入扩展与其所属 App 默认拥有独立容器、互相读不到对方数据因此App Groups 是扩展与所属 App 之间共享数据的主要通道详见 MASTG-KNOW-0082。访问共享容器的门槛是 Entitlement 与代码签名双重校验每个成员所属 App 与扩展必须声明相同的com.apple.security.application-groupsgroup identifier例如group.org.owasp.mastestappApp Group identifier 以开发者团队的 Apple Developer Team 为命名空间由描述文件与代码签名强制执行只有同一团队签名且被该组授权的二进制才能加入容器。Keychain Access Groups秘密数据的正确通道对凭据等敏感数据Apple 与 MASTG 都推荐走Keychain Access Groupkeychain-access-groupsEntitlement而非共享文件容器——前者提供专门的、带访问控制的密钥存储拥有独立于 App Group 容器的 accessibility 控制见 MASTG-KNOW-0126。File Coordination并发访问协调当多个进程主 App 与扩展并发读写共享容器中的同一文件时MASTG 建议使用File Coordination APINSFileCoordinator/NSFilePresenter协调并发访问见 MASTG-KNOW-0127let coordinator NSFileCoordinator(filePresenter: nil) coordinator.coordinate(writingItemAt: fileURL, options: .forReplacing, error: nil) { url in // Write to the file at url }该机制只对“配合使用协调 API 的进程”有意义未协调的直接读写会绕过协调机制扩展使用NSFilePresenter时必须在转入后台前移除注册。MASTG 测试视角如何核查 App Groups 的安全性静态检测从二进制提取 Entitlement审查 App Groups 配置的最可靠途径是从 App 二进制的代码签名中提取 Entitlement技术 MASTG-TECH-0111配合解包技术 MASTG-TECH-0058因为签名 Entitlement 无论构建/签名方式如何都存在而embedded.mobileprovision仅在包含描述文件的包中出现开发、ad-hoc、企业或 App Store 提交前构建模拟器构建、App Store 分发构建及ldid伪签名构建中都不存在。对主 App 与每个.appex扩展二进制分别检查com.apple.security.application-groups支撑共享容器的 App Group 标识keychain-access-groups用于共享 Keychain 条目的访问组。主 App 与扩展之间匹配的标识即表明两者之间配置了数据共享通道。扩展枚举与配置检查的完整流程见技术文档 MASTG-TECH-0170。测试用例MASTG-TEST-0388 / 0299 / 0362仓库中三个相关测试从不同角度覆盖 App Groups 的风险面MASTG-TEST-0388敏感数据未受保护地存放在共享 App Group 容器中检查 App 或任一扩展是否把凭据、令牌等敏感数据写入共享UserDefaults或共享文件容器而非使用共享 Keychain。评估要点包括定位UserDefaults(suiteName:)、FileManager.containerURL(forSecurityApplicationGroupIdentifier:)以及配置了 App Group 存储的NSPersistentContainer判断写入值是否敏感、写入前是否加密、文件是否以NSFileProtectionComplete写入判断该秘密是否本应存放在共享 Keychainkeychain-access-groups中。MASTG-TEST-0299私有存储文件的 Data Protection class动态核查 App 私有沙箱/var/mobile/Containers/Data/Application/UUID/与 App Group 共享容器/private/var/mobile/Containers/Shared/AppGroup/UUID/中文件的数据保护等级若含敏感数据的文件被设为NSFileProtectionNone则判失败。MASTG-TEST-0362无正当理由的能力暴露从com.apple.security.application-groups出发核查 Entitlement 是否与用户可见功能存在合理关联若 App 不需要跨 App/扩展共享却仍声明了 App Group则评估为扩大了数据共享面可改用本地 App 存储作为更窄的替代方案。动态核查共享容器取证在越狱设备或模拟器上通过 SSH 或 objection 定位 App 容器与共享容器目录列出共享容器内的文件并读取其 Data Protection class。触发典型业务流程登录、资料加载、消息、缓存、离线使用、加密操作后再次核查确保共享容器内没有遗留敏感数据。安全最佳实践共享容器中的数据保护综合 MASTG-BEST-0068Secure Data Sharing Between App Extensions and Containing Apps与相关测试落地时遵循三条原则秘密数据优先使用共享 KeychainApp 与扩展共用的凭据、令牌、密钥存放在共享 Keychain Access Group 中并设置合适的 accessibility 属性如kSecAttrAccessibleWhenUnlockedThisDeviceOnly而非共享UserDefaults或共享文件容器。必须放共享容器的敏感文件要施加 Data Protection以NSFileProtectionComplete类写入保证设备锁定时内容加密try data.write(to: sharedContainerURL, options: .completeFileProtection)最小化共享面共享容器只放各扩展确实需要的数据避免把整套数据集或秘密放进去每个扩展只授予其功能所需的 App Group 标识。小结App Groups 是 iOS 同团队多应用与扩展共享数据的标准机制其安全性取决于三层Entitlement/代码签名强制团队命名空间隔离、Data Protection 文件级加密设备锁定保护、以及应用层访问控制组内无逐条目隔离。MASTG 的建议非常明确——秘密走共享 Keychain文件容器只放必要且受保护的数据。测试人员应优先从二进制签名提取 Entitlement 核查 App Group 声明再结合共享容器取证与 Data Protection class 检查完整评估该机制引入的数据共享风险面。延伸阅读仓库内知识条目MASTG-KNOW-0082 App Extensions、MASTG-KNOW-0126 Keychain Access Groups、MASTG-KNOW-0127 File Coordination APIs、MASTG-KNOW-0077 App Permissions测试用例MASTG-TEST-0388、MASTG-TEST-0299、MASTG-TEST-0362技术与最佳实践MASTG-TECH-0170、MASTG-TECH-0111、MASTG-TECH-0058、MASTG-BEST-0068赞分享文档教程网络安全【免费下载链接】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点击查看免费下载相关推荐OptiScaler 使用指南3 分钟让 DLSS、FSR、XeSS 在你这张显卡上自由切换OptiScaler 使用指南3 分钟让 DLSS、FSR、XeSS 在你这张显卡上自由切换 OptiScaler 是一款免费开源的图形中间件它拦截游戏里的文档教程网络安全OWASP MASTG 最佳实践iOS App 扩展与宿主应用之间的安全数据共享App Group 容器与共享 KeychainOWASP MASTG 最佳实践iOS App 扩展与宿主应用之间的安全数据共享App Group 容器与共享 Keychain 导读 本文围绕 OWAS文档教程网络安全OWASP MASTG 实战iOS Keychain Access Groups 深度解析——同开发者团队多 App 安全共享密钥链条目OWASP MASTG 实战iOS Keychain Access Groups 深度解析——同开发者团队多 App 安全共享密钥链条目 导读 本文围绕 O文档教程网络安全上一篇解决配置管理痛点python-dotenv多环境配置与变量优先级实战指南下一篇如何快速入门RAGall-rag-techniques基础教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表