据最近发表的一篇学术研究论文(通过ArsTechnica)透露,科学家发现了一种无法修补的漏洞,可以在特定条件下从苹果的M系列芯片中提取秘密加密密钥。
名为“GoFetch”的这种网络攻击类型涉及到依赖数据内存的预取器(DMPs),其试图预测计算机下一步可能需要的数据并在事先获取。这旨在加快处理速度,但它有时会无意中泄露有关计算机正在进行的信息。
研究论文发现,尤其是苹果处理器中的DMPs对常时间编程模型的安全性构成重大威胁。常时间编程模型用于编写程序,使得无论处理何种数据,程序运行的时间都相同。
常时间编程模型旨在防止侧信道攻击,即攻击者可以在未直接访问计算机系统的情况下(例如通过观察特定模式)获取敏感信息的攻击类型。其理念是,如果所有操作消耗相同的时间,攻击者能够观察和利用的内容更少。
然而,该论文发现,尤其是在苹果芯片中,DMPs甚至可以在程序设计中不泄露任何访问内存模式的情况下泄漏信息。最新研究发现,DMPs有时会混淆内存内容,导致将数据视为地址以执行内存访问,这与常时间模型背道而驰。
作者提出的GoFetch作为一种新型攻击,可以利用DMPs中的此漏洞来从安全软件中提取加密密钥。该攻击适用于一些被认为能够抵御侧信道攻击的流行加密算法,包括传统算法(例如OpenSSL Diffie-Hellman密钥交换、Go RSA解密)和后量子算法(例如CRYSTALS-Kyber和CRYSTALS-Dilithium)的密码方法。
在一封发给ArsTechnica的电子邮件中,作者解释道:
预取器通常会查看已访问数据的地址(忽略已访问数据的值),并尝试猜测可能有用的未来地址。DMP在这方面与众不同,因为除了地址,它还使用数据值来进行预测(预测要去和预取的地址)。具体来说,如果数据值“看起来”像一个指针,它将被视为一个“地址”(实际上事实并非如此!),并将该“地址”上的数据带入缓存。这个地址进入缓存时是可见的,通过缓存侧信道泄露。
我们的攻击就是利用了这一点。我们无法直接泄漏加密密钥,但我们可以通过针对输入的选择性攻击,操纵加密算法中的中间数据以使其看起来像一个指针。然后DMP会认为这个数据值“看起来”像一个地址,并将该“地址”的数据带入缓存,从而泄露了“地址”。我们并不关心预取的数据值,但是中间数据看起来像一个地址这个事实通过缓存信道是可见的,足以随时间揭示出秘密密钥。
总之,该论文表明苹果芯片中的DMP功能可能用于绕过密码软件中被认为可以保护免受此类泄漏的安全措施,从而可能使攻击者能够在某些情况下在不到一小时的时间内访问敏感信息,例如2048位RSA密钥。
根据作者的说法,无法直接修补苹果芯片中的漏洞。相反,攻击向量只能通过将防御措施构建到第三方加密软件中来减少,但这可能导致执行密码操作时性能极度下降,特别是在早期的M1和M2芯片上。最新芯片M3上的DMP具有一个特殊位,开发人员可以调用以禁用它,但研究人员尚不确定在关闭此性能优化时会出现什么样的代价。
正如ArsTechnica所指出的,这并不是研究人员首次在苹果DMP中发现威胁。2022年的研究记录发现了类似威胁,涉及到M1芯片和苹果的A14 Bionic芯片,这导致了“Augury”攻击。然而,当使用常时间实践时,此攻击最终未能提取敏感数据。
研究人员在其网站上表示:“GoFetch显示出DMP比以前认为的更加精准和因此构成了更大的安全风险。具体来说,我们发现从内存中加载的任何值都有可能被取消引用(实质上是的!)。这使我们能够规避许多Augury的限制,并对真实的常时代码进行端到端攻击。”
DMP风格的攻击并不常见,通常需要物理访问Mac。研究人员于2023年12月向苹果报告了此漏洞,建议关注GoFetch缓解更新,这些更新将在未来macOS更新中提供给已知存在漏洞的加密协议。当被问及该论文时,苹果代表拒绝发表评论。