Flame恶意软件碰撞攻击技术解析

本文详细分析了Flame恶意软件如何利用MD5碰撞攻击伪造数字证书,绕过Windows Vista及更高版本的安全验证,并探讨了微软采取的应对措施和终端服务证书基础设施的加固方案。

Flame恶意软件碰撞攻击详解

自我们上一篇MSRC博客文章发布以来,我们收到了关于在复杂、定向的恶意软件Flame中观察到的密码学攻击性质的疑问。本博客总结了我们的研究结果,以及为什么我们在太平洋时间周日晚上决定发布安全公告2718704。简而言之,默认情况下,攻击者的证书在Windows Vista或更高版本的Windows上无法工作。他们必须执行碰撞攻击来伪造一个在Windows Vista或更高版本Windows上有效的代码签名证书。在早于Windows Vista的系统上,无需MD5哈希碰撞即可进行攻击。该证书以及相关证书颁发机构的所有证书已在安全公告2718704中失效。我们继续鼓励所有未自动安装更新的客户立即执行更新。

神秘缺失的扩展

当我们首次检查Flame恶意软件时,我们看到了一个具有有效数字签名的文件,该签名链到Microsoft根证书颁发机构。在审查此证书时,我们注意到几个异常之处。首先,它没有X.509扩展字段,这与我们从终端服务器许可基础设施颁发的证书不一致。我们期望找到一个证书吊销列表(CRL)分发点(CDP)扩展、一个授权信息访问(AIA)扩展以及一个“Microsoft Hydra”关键扩展。所有这些都缺失了。

当我们使用Windows实用程序certutil.exe检查证书时,我们看到了不同的情况。

1
2
> certutil.exe -dump MS.cer
...

此证书有一个不寻常的字段——颁发者唯一标识符。该字段已过时,未被Microsoft软件或基础设施使用。当我们详细检查此字段时,我们意识到它不包含随机数据,而是具有结构。它包含一个正确编码的X.509V3扩展字段,起始于颁发者唯一标识符字段的字节偏移0x119处。以下是我们从中提取的一些“缺失”扩展:

偏移量 字段 数据
0x161 CDP(CRL分发点) http://tkxpasrv36.partners.extranet.microsoft.com/CertEnroll/Microsoft%20LSRA%20PA.crl
0x226 授权信息访问 http://tkxpasrv36.partners.extranet.microsoft.com/CertEnroll/tkxpasrv36.partners.extranet.microsoft.com_Microsoft%20LSRA%20PA.crt
0x35b Microsoft Hydra扩展[1] 对象标识符1.3.6.1.4.1.311.18,值为“TLS~BASIC”,并标记为关键

“关键”链接

Microsoft Hydra扩展被标记为“关键”,这是攻击者需要执行碰撞攻击的关键原因。在X.509术语中,如果扩展对证书链的正确验证至关重要,则必须标记为关键。加密库在遇到标记为关键但不理解的扩展时的行为是使验证失败。Windows Vista及更高版本Windows中的Crypto API以这种方式行为,证书在这些平台上验证失败。因此,如果攻击者想要一个在所有Windows版本上都有效的证书,他们需要移除这个字段。

碰撞的情况

为了移除关键扩展,攻击者利用了许多情况来执行碰撞攻击:

  • 攻击者利用了终端服务许可系统的证书注册过程,该过程链到Microsoft根证书颁发机构,不需要内部访问Microsoft PKI。
  • 此证书上的签名算法是md5RSA。
  • 颁发证书颁发机构使用了已知的有效期和证书序列号,这些可以高概率预测。

执行碰撞攻击的一个关键部分是攻击者需要能够完全预测将由CA签名的证书内容。由于可预测的序列号,攻击者可以执行一系列证书注册,以在它们执行碰撞攻击时揭示可能的序列号。这也称为“选择前缀碰撞攻击”[2]。攻击者然后可以应用Sotirov等人记录的碰撞算法[3]来创建一个伪造的证书,该证书移除关键的Microsoft Hydra扩展,并且仍然匹配由CA签名的合法证书的MD5哈希。

快速响应以扑灭Flame和模仿者

如果没有这种碰撞攻击,签名代码可能在早于Windows Vista的系统上验证,但该签名代码将在Windows Vista及更高版本上验证失败。在此攻击之后,攻击者拥有了一个可用于签名代码的证书,该证书链到Microsoft根证书颁发机构,并在所有Windows版本上工作。考虑到在早于Windows Vista的系统上模仿攻击的风险,无需碰撞攻击的复杂性,我们采取了行动发布带外更新。

终端服务器许可证书基础设施的加固

我们还对终端服务器许可基础设施进行了多项更改,以最小化未来风险:

  • 我们不仅使已知被Flame恶意软件使用的证书失效,而且使与终端服务器许可相关的整个证书颁发机构层次结构失效,包括当前和过去的。这是一个广泛的行动,是保护最多客户的最快方式。这些证书在安全公告2718704的更新中失效。现有的终端服务器客户端访问许可证(CAL)不受影响,您可以在终端服务器博客文章中阅读更多信息。
  • 引入了一个新的证书链,不再链到Microsoft根证书颁发机构。它有一个独立的独立根,不被Windows客户端信任,以最小化未来风险。证书在签名中使用SHA1。
  • 我们还停止为此新层次结构颁发代码签名证书。此外,其证书受新的增强密钥用法约束,不用于代码签名。这有效地将证书的功能限制为仅终端服务器许可。

Microsoft认真对待其客户的安全;因此,我们采取了最快的行动,首先保护最多的客户。我们将继续采取必要行动帮助保护我们的客户。

致谢

感谢John Lambert、Magnus Nystrom、David Molnar,特别感谢Tolga Acar对此调查的贡献。

  • Jonathan Ness, MSRC Engineering

参考文献

[1] Microsoft, “与Microsoft加密相关的对象ID”, http://support.microsoft.com/kb/287547/pt-b, 2007年3月1日。 [2] M. Stevens和A. Lenstra和B. de Weger. “MD5的选择前缀碰撞和不同身份的碰撞X.509证书”, http://www.win.tue.nl/hashclash/EC07v2.0.pdf, http://www.win.tue.nl/hashclash/ChosenPrefixCollisions/, 2009年6月16日。 [3] A.Sotirov, M.Stevens, J.Applebaum, A.Lenstra, D.Molnar, D.A. Osvik, B. de Weger, “MD5今日被认为有害”, http://www.win.tue.nl/hashclash/rogue-ca/, 2008年12月30日。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计