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检查证书时,我们看到了不同的情况。
|
|
此证书有一个不寻常的字段——颁发者唯一标识符。该字段已过时,未被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日。