Google Project Zero 详细介绍了如何使用 NSDictionary 序列化绕过 Apple 设备上的 ASLR
Google Project Zero 的一名研究人员详细介绍了一种远程泄露 Apple macOS 和 iOS 内存地址的新技术。 该方法可以绕过关键安全功能——地址空间布局随机化(ASLR),而无需依赖传统的内存损坏漏洞或基于时间的旁道攻击。
Google Project Zero 的一名研究人员详细介绍了一种远程泄露 Apple macOS 和 iOS 内存地址的新技术。
该方法可以绕过关键安全功能——地址空间布局随机化(ASLR),而无需依赖传统的内存损坏漏洞或基于时间的旁道攻击。
这项研究源于 2024 年 Project Zero 团队内部的一次讨论,主题是寻找在 Apple 设备上实现远程 ASLR 泄漏的新方法。
研究人员发现了一种适用于反序列化攻击者提供的数据、重新序列化结果对象,然后将数据发回的服务的技巧。
NSKeyedArchiver虽然没有发现任何具体的、现实世界的易受攻击面,但使用涉及macOS 上Apple 序列化框架的人工测试用例创建了概念验证。
研究人员负责任地向苹果公司披露了这一发现,苹果公司在 2025 年 3 月 31 日发布的安全更新中解决了这一潜在问题。
攻击机制
该技术取决于数据序列化的可预测行为和 AppleNSDictionary对象的内部运作,这些对象本质上是哈希表。
攻击的目标是泄露NSNull单例的内存地址,单例是一个唯一的、系统范围的对象,其内存地址用作其哈希值。
泄露此哈希值相当于泄露对象的地址,这会破坏其所在共享缓存的 ASLR。
攻击分为几个步骤展开:
- 攻击者首先构造一个序列化NSDictionary对象。该字典包含多个NSNumber键(这些键的哈希值可控)和一个NSNull键。
- 精心选择键NSNumber来占据哈希表中的特定“桶”,从而创建已知的已填充和空槽模式。
- 受害应用程序会反序列化该对象,并在内存中创建字典。当应用程序重新序列化该对象并将其发送回去时,它会以可预测的顺序遍历哈希表的存储桶。
- 返回数据中键的位置NSNull揭示了它被放置在哪个存储桶中。这会泄露有关其地址的部分信息,特别是地址模表大小的结果。
为了重建完整的 64 位地址,该技术采用了中国剩余定理。通过发送一系列大小各异的字典(每个字典的桶数不同),攻击者可以收集有关该地址的多条信息。
结合这些结果可以计算出NSNull单例的完整内存地址,从而有效地破坏该内存区域的 ASLR。
这项研究表明,如果序列化输出被暴露,使用原始对象指针作为数据结构中的哈希键可能会导致直接信息泄露。
与测量时间差异的经典侧信道攻击不同,该方法依赖于序列化过程的确定性输出。
研究人员建议,最有力的缓解措施是避免使用对象地址作为查找键,或者使用键控哈希函数对其进行哈希处理,以防止地址被暴露。
评论0次