ARTICLE DETAIL

资讯详情

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

OWASP MASTG 最佳实践:iOS App 扩展与宿主应用之间的安全数据共享(App Group 容器与共享 Keychain)

OWASP MASTG 最佳实践:iOS App 扩展与宿主应用之间的安全数据共享(App Group 容器与共享 Keychain) 文档教程网络安全【免费下载链接】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 Mobile Application Security Testing GuideMASTG最佳实践条目 MASTG-BEST-0068Secure Data Sharing Between App Extensions and Containing Apps系统讲解 iOS 中宿主应用与 App 扩展Widget、Share Extension、Notification Content Extension 等通过 App Group 共享数据时的安全设计原则。读完本文你将掌握三条可落地的防护策略用共享 Keychain 存放机密、为共享容器中的敏感文件启用 Data Protection 加密、以及最小化共享数据面从而避免因 App Group 容器组内成员无逐项访问控制的特性导致敏感信息泄露。App Group 共享容器的安全边界先认清威胁模型在讨论如何安全共享之前必须理解底层机制的真实边界。根据 MASTG 的 IPC 知识条目MASTG-KNOW-0078iOS 并不提供第三方应用之间通用的直接通信机制应用与扩展之间的受控交互App Extensions即 MASTG-KNOW-0082属于受 Entitlement 约束的通道——扩展与其宿主应用主要通过 App Group 共享数据。App Group详见 MASTG-KNOW-0125是一个基于 Entitlement 的机制允许来自同一开发者团队的多个应用与扩展共享一个公共文件容器、共享偏好设置UserDefaults或 SQLite 数据库等文件。其核心安全属性有两个组内无逐项访问控制所有加入同一 App Group 的应用和扩展对共享容器内的每个文件/偏好项都拥有同等读写权限。任何成员都可以读取或修改组内数据。不提供额外加密层App Group 不增加任何额外加密共享容器中的文件只依赖标准 iOS 文件系统保护与每个文件自身的 Data Protection 类。用一句话概括 MASTG-BEST-0068 的结论共享通道本身不做权限隔离安全必须靠选对通道 自己加密/加锁 少放数据来实现。从源码结构看MASTG 对这条最佳实践的约束在测试侧有对应验证MASTG-TEST-0299Data Protection Classes for Files in Private Storage明确把 App Group 共享容器/private/var/mobile/Containers/Shared/AppGroup/UUID/与应用私有沙盒目录/var/mobile/Containers/Data/Application/UUID/并列检查——凡是包含敏感数据的文件其 Data Protection 类被设置为NSFileProtectionNone即判定测试失败。这印证了共享容器与私有存储适用同一套加密要求的立场。策略一机密数据优先放入共享 Keychain当应用与扩展需要共享凭据、令牌、密钥这类高敏数据时MASTG-BEST-0068 给出的第一原则是不要放进共享UserDefaults或共享文件容器而是使用共享 Keychain Access Group即keychain-access-groupsentitlement。理由是 Keychain 提供专门、受访问控制保护的密钥存储并带有独立的 accessibility class可访问性级别。声明共享访问组根据 MASTG-KNOW-0126应用通过keychain-access-groupsentitlement 声明其键区访问组该 entitlement 是一个数组每一项以应用的 App ID 前缀通常是 Team ID开头例如TeamID.com.example.shared。Xcode 默认会自动添加应用的默认访问组通常是TeamID.bundleID额外的共享组需要通过 Keychain Sharing capability 显式声明。写入共享访问组存储条目时在查询字典中加入kSecAttrAccessGroup键即可把条目写入指定共享组宿主应用与扩展使用同一组 ID 即可互相访问let query: [String: Any] [ kSecClass as String: kSecClassGenericPassword, kSecAttrAccessGroup as String: TeamID.com.example.shared, kSecAttrAccount as String: username, kSecValueData as String: passwordData ] SecItemAdd(query as CFDictionary, nil)注意省略kSecAttrAccessGroup时条目会落入应用默认访问组扩展将无法读取。同时共享 Keychain 条目同样受 Keychain 自身的 Data Protection 类kSecAttrAccessible*保护与访问组无关。设置合适的可访问性级别MASTG-BEST-0068 特别建议为共享条目设置合适的安全属性例如kSecAttrAccessibleWhenUnlockedThisDeviceOnly——设备解锁时可访问且不会随备份迁移到其他设备。在 iOS 上这通常比默认选项更严格尤其适合存放仅当前设备需要的刷新令牌或会话密钥let query: [String: Any] [ kSecClass as String: kSecClassGenericPassword, kSecAttrAccessGroup as String: TeamID.com.example.shared, kSecAttrAccessible as String: kSecAttrAccessibleWhenUnlockedThisDeviceOnly, kSecAttrAccount as String: sessionToken, kSecValueData as String: tokenData ] SecItemAdd(query as CFDictionary, nil)选择可访问性级别的实践要点WhenUnlocked*系列设备锁定时不可读适合绝大多数凭据类数据AfterFirstUnlock*系列设备首次解锁后持续可读适合后台扩展如 Widget 刷新、通知扩展需要在锁屏后读取的场景*ThisDeviceOnly后缀限制条目不随 iCloud/备份迁移防跨设备泄露应避免使用宽松级别存放共享机密并在创建条目时一次性指定因为访问组在条目创建时确定。策略二必须放共享容器的敏感文件启用 Data Protection并非所有共享数据都适合进 Keychain例如扩展需要的大体积文件、SQLite 库、缓存。当敏感数据必须存放在共享文件容器中时MASTG-BEST-0068 要求为文件应用 Data Protection使设备锁定时内容保持加密。写入时直接指定保护类最简洁的做法是在写入时直接指定.completeFileProtection对应NSFileProtectionComplete类try data.write(to: sharedContainerURL, options: .completeFileProtection)获取共享容器 URL共享容器路径通过containerURL(forSecurityApplicationGroupIdentifier:)获取组 ID 格式为group.reverse-DNS-string例如group.com.example.myapp并绑定开发者团队let sharedContainerURL FileManager.default .containerURL(forSecurityApplicationGroupIdentifier: group.com.example.myapp)!如果使用共享偏好设置而非文件注意UserDefaults(suiteName: group.com.example.myapp)写入的数据同样位于共享容器不会自动获得 Data Protection——这正是不建议用共享 UserDefaults 存机密的原因之一。保护类覆盖所有共享存储MASTG-BEST-0068 强调这一要求适用于所有共享存储与应用自身私有存储的要求一致参见 MASTG-TEST-0299即 MASTG-TEST-0299。实际测试时动态取证步骤会同时检索私有沙盒与 App Group 共享容器中每个文件的数据保护类通过 MASTG-TECH-0056 安装应用全面触发应用流程认证、资料加载、消息收发、缓存、离线使用、加解密操作并尽可能录入敏感数据通过 MASTG-TECH-0059 检索两棵目录树下的文件及保护类。判定标准包含敏感数据的文件若保护类为NSFileProtectionNone即未通过。这也意味着如果你在写入共享容器时省略保护类参数文件默认继承容器的宽松保护极有可能在锁屏状态下被读出。补充并发读写场景如果多个进程主应用与多个扩展同时读写共享容器中的同一文件MASTG 的 IPC 知识MASTG-KNOW-0125建议配合 file coordination APIMASTG-KNOW-0127协调并发访问。文件协调本身不是数据交换通道但它能避免共享文件在并发场景下的损坏与竞态——这是安全共享在正确性维度上的另一半。策略三最小化共享面Minimize What You Share第三条原则与数据保护同等重要把共享容器限制在扩展真正需要的数据上。具体做法避免整体数据集进共享容器如果扩展只需要某个子集例如 Widget 只需要最近三条状态就不要把完整数据库或全部记录放进 App Group避免把密钥/完整凭据放进共享文件这类数据应走策略一的 Keychain按需授予 App Group只为每个扩展授予其功能所需的 App Group 标识符而不是给所有扩展统一开全部组。从 MASTG-KNOW-0125 的约束可知任何组内成员都可读改共享数据因此数据面越小攻击面越小额外的访问控制只能靠应用层逻辑自行实现而不能依赖容器本身。决策速查三类数据该走哪条通道数据类型推荐通道关键控制点凭据、令牌、密钥共享 Keychainkeychain-access-groupskSecAttrAccessGroupkSecAttrAccessibleWhenUnlockedThisDeviceOnly大体积/结构化敏感文件共享容器 Data Protection.completeFileProtection写入NSFileProtectionNone即失败见 MASTG-TEST-0299扩展仅需的子集数据按需最小化后入共享容器只授所需 App Group ID应用层自实现访问控制非敏感配置/偏好共享UserDefaults或容器仍应避免放置任何机密小结App Group 是一个强大但无内部隔离的共享通道组内任何成员都能读写共享容器中的全部内容且容器不提供额外加密。因此 MASTG-BEST-0068 的安全模型可以浓缩为三条可执行规则机密走 Keychain通过keychain-access-groups共享并配合kSecAttrAccessibleWhenUnlockedThisDeviceOnly等严格可访问性级别文件走 Data Protection共享容器中的敏感文件一律以.completeFileProtection写入与私有沙盒同等对待MASTG-TEST-0299 会验证这一点最小化共享面只共享扩展真正需要的子集只授予功能必需的 App Group 标识符。这三条原则的组合使宿主应用与扩展之间既能保持功能所需的实时数据互通又不会把 App Group 的组内无差别读写缺陷放大为数据泄露入口。在 MASTG 的测试框架中它们分别由 Keychain 访问组知识MASTG-KNOW-0126、App Group 知识MASTG-KNOW-0125以及 Data Protection 测试MASTG-TEST-0299提供闭环验证可作为你编写 iOS 应用安全设计与测试用例时的直接参考。赞分享文档教程网络安全【免费下载链接】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点击查看免费下载相关推荐Clipper2社区贡献指南如何参与开源项目开发与维护Clipper2社区贡献指南如何参与开源项目开发与维护 Clipper2是一个强大的开源项目专注于多边形裁剪、偏移和三角化支持C、C 和Delphi多图形学科学计算micro-app状态管理终极指南跨应用数据共享最佳实践micro app状态管理终极指南跨应用数据共享最佳实践 微前端架构在现代Web开发中越来越受欢迎而 micro app 作为一款简约、高效、功能强大的微前Analog日历彻底改变你管理时间的开源智能日历平台Analog日历彻底改变你管理时间的开源智能日历平台 Analog日历是一款基于Next.js、TypeScript和现代Web技术构建的开源日历应用它集成上一篇StyleGAN2-ADA完整入门指南10分钟快速上手AI图像生成下一篇MegaBasterd 开源项目教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表