摘要
- Flame 使用的伪造证书能够链接到 Microsoft 根,却没有恢复或窃取根私钥。攻击者利用 Terminal Server 许可服务中可预测的签发字段与 MD5 选择前缀碰撞,使 CA 对正常证书生成的签名也能验证另一份证书;后者删去了会阻止新版 Windows 接受代码签名的关键扩展。
- 真正的修复不是吊销一张证书,而是收回一组能力:Microsoft 将新旧许可 CA 层级整体列为不受信任,把替代层级迁到普通 Windows 客户端不信任的独立根,停止代码签名能力,加入许可专用 EKU,并同时加固更新通道与客户端拒绝名单的分发。
签名没有撒谎,但问题问得不够
2012 年 6 月,危险之处并不是 Flame 的组件没有签名,而是 Windows 可以把那份签名一路验证到 Microsoft 根。
这条链回答了一个有限问题:某个密钥是否签署了这组摘要,这个密钥是否位于本机接受的证书路径之下。它没有自动回答更关键的问题:一个为了远程桌面许可而存在的签发系统,是否有权代表 Windows 更新通道发言?
Microsoft 安全公告 2718704 报告,攻击者正在使用源自 Microsoft 证书机构的未授权证书。调查指向 Terminal Server Licensing Service。该服务的业务是让企业客户授权 Remote Desktop,却使用旧式签名算法,并能发出具备代码签名能力的证书。
因此,故障不能简化为“系统里还有 MD5”。一项狭窄的许可职能获得了通往广泛受信根的路径;同一家公司的组织归属,被证书架构默认为用途之间的技术授权。
根信任从来不是一种不可分割的许可。它只是验证计算的起点。签发策略、Key Usage、Extended Key Usage、关键扩展、应用规则和客户端本地拒绝状态共同决定最终能力。若许可层级能够让软件包获得更新身份,证书树就已经把组织邻近变成了越界权力。
可预测的签发流程成了在线预言机
Terminal Server 许可注册无需进入 Microsoft 内部 PKI。签发使用 md5RSA,有效期可知,序列号也能以很高概率预测。选择前缀碰撞正需要这种可预测性。
攻击者并不是拿到一张已经签发的证书后随意修改。它需要事先准备两份不同的结构前缀:一份是许可服务愿意签署的正常对象,另一份是攻击者真正想使用的证书。经过计算的后缀让两个完整对象产生相同 MD5 摘要。CA 只看到了前者并对其摘要签名;同一个签名随后也能验证后者。
实时签发流程贡献了私钥操作。可预测字段让攻击者能在签发前完成配对。MD5 的碰撞弱点让两个含义不同的对象共享摘要。广泛受信的根则赋予结果现实价值。
这些风险在传统清单中往往被拆开:算法一栏、模板一栏、注册端点一栏、根证书一栏。Flame 证明,领导层必须审核它们的乘积。一个看似低风险的遗留许可系统,只要它的输出能跨越接受边界,就可能成为高价值软件签发者。
任一边界更窄,攻击都会不同。抗碰撞算法不会让两份证书共享有效摘要;不可预测字段会破坏预计算;普通客户端不信任的许可根不会提供通用路径;由依赖方实际执行的专用用途约束会拒绝代码签名。
碰撞不是私钥失窃
CWI 密码分析师 Marc Stevens 检查伪造证书后认为,Flame 使用了一种此前未知的选择前缀碰撞变体。它并非简单复制 2009 年公开的方案,但早期研究已经展示了同一危险:商业 CA 签署一张正常 X.509 证书时,签名也可能验证攻击者控制的碰撞型 rogue CA 证书。
必须保留这个技术边界。现有来源没有证明 Microsoft 根私钥或中间 CA 私钥被提取。合法 CA 仍在受保护环境中完成正常签名。攻击者改变的是“签名唯一对应哪份消息”这一前提。
反过来,也不能因为密钥没有被盗就低估损害。私钥保管只是签名系统的一条防线。若 CA 用缺乏碰撞抗性的算法,对攻击者可塑造的结构化数据执行签名,权力可以离开预期边界,而密钥本身始终不离开硬件。
RFC 6151 在 2011 年 3 月已经明确指出:当数字签名需要碰撞抗性时,MD5 不再可接受。它同时区分了 HMAC-MD5。正确的风险问题并非“哪里出现 MD5”,而是“对手能控制哪部分消息、协议依赖 MD5 的什么性质、一次碰撞会继承什么权力”。
证书签名的目的,是把签发者的意图绑定到唯一一份经过审核的证书内容。若两份权限不同的内容共享同一摘要,签名便无法再唯一选择签发者的意图。
关键扩展是客户端执行的否决
Microsoft 发现,Flame 证书表面上缺少许可基础设施中应有的 CRL 分发点、Authority Information Access 与关键的 Microsoft Hydra 扩展。进一步分析又在过时的 Issuer Unique Identifier 字段里发现了结构化扩展数据。决定新版 Windows 行为的,是 Hydra 关键约束没有以正常方式出现。
X.509 中的“critical”不是严重程度标签,而是一条给依赖软件的命令:如果无法识别并处理该扩展,就必须拒绝证书。RFC 5280 规定了这种失败关闭行为,也说明 Key Usage 与 Extended Key Usage 同时存在时应共同限制用途。
Windows Vista 及后续版本执行了相关拒绝。正常许可证书不能直接用于 Flame 的代码签名目标。Microsoft 的分析指出,攻击者通过碰撞制造了另一份不含关键约束、却拥有相同已签摘要的证书。Vista 之前的系统无需碰撞也可能受攻击;这是具体 Windows 版本的验证差异,不能外推为所有 X.509 实现的共同性质。
“模板里有扩展”并不足以完成审计。组织必须证明扩展位于被签字节内,需要失败关闭时确实标为 critical,各类重要客户端能一致解析,任何签发变体都不能省略。Flame 没有说服客户端忽略规则,而是提交了一份规则已消失的对象。
证书还需要一条抵达目标的路
一张链接到 Microsoft 根的证书并不会自行把 Flame 送进设备。Microsoft 强调,伪装 Windows Update 还需要中间人位置,使自动更新程序收到攻击者签署的包。官方材料没有把事件描述为 Microsoft 中央 Windows Update 服务器被攻陷。
这里至少有三个相互独立的控制面。证书构造决定签名是否看似可接受;网络位置决定攻击者能否替换合法响应;更新代理与通道规则决定一份“由 Microsoft 链签署”的包是否足以获得安装资格。
攻击依赖这些控制的组合。没有交付位置,证书无法触达目标;没有可接受签名,中间人会撞上更新通道的拒绝;若应用还绑定产品、版本、发布通道和明确授权的签发者,来自错误权限域的企业证书依然可以被拒绝。
所以 Microsoft 同时加固 Windows Update、WSUS 与相关企业更新工具。教训不是用网络信任取代代码签名,而是要求多项边界清晰的事实同时成立:签发密钥明确属于这个通道,证书用途匹配,包的产品与版本元数据匹配,传输层无法把另一个权限域的“合法签名对象”偷换进来。
终止权力需要把“拒绝”送到每台机器
Microsoft 没有只处理已观察到的 Flame 证书。公告把三个许可中间 CA 加入 Windows 不受信任证书存储,技术说明则称新旧 Terminal Server 许可 CA 层级被整体无效化。大范围处置减少了未知同类证书与模仿攻击留下的空间。
但是,发布无效化决定不会改变已经分发的证书字节。拒绝只有在客户端收到新的信任状态、并于链验证时执行规则后才发生。2012 年 6 月的 Certificate Trust List 更新还为 Windows Vista 和 Windows 7 引入不受信证书自动更新机制,客户端可每日检查 Disallowed CTL。此前,把证书移入不受信存储需要单独的人工更新。
信任敏捷性必须是双向的。组织通常擅长部署新根与新密钥,却不一定知道能多快、覆盖多广地撤销一项能力。禁止名单是一套负向控制面;即使普通更新渠道本身处于事件范围内,它也必须能够安全分发和验证。
Heng Lu 关于 running code 的公开论述可作为披露后的分析框架,但不是事件史料。制度决定只有在系统执行时才改变现实:签发者宣布,平台分发,依赖客户端完成最后的“不”。
替代架构真正减少了能力
Microsoft 没有止步于更换摘要算法。新的 Terminal Server 许可层级不再链接到 Microsoft Root Authority,而是使用普通 Windows 客户端不信任的独立根。新层级停止签发代码签名证书,并用一个不能用于代码签名的专用 EKU 约束许可功能。
不同措施分别关闭不同边。更强算法修复摘要与签名的唯一绑定;独立根缩小再次失守时的影响半径;停止代码签名消除环境能力;EKU 把业务用途变成机器约束;旧层级拒绝终止已存在路径;更新通道加固则降低“任何 Microsoft 企业签名”被误认成更新授权的可能。
简单轮换证书可能只会用新密钥复制旧能力图。完整修复必须列出旧层级能让哪些系统作出哪些决定,哪些能力是许可业务真正需要的,哪些依赖方必须停止接受旧路径。
权力隔离产生了真实运营成本
现有 Terminal Server CAL 并未失效。但如果管理员需要新建或重新激活许可服务器,或者安装新的 CAL 包,就必须重新激活服务器,因为 Product Activation Clearinghouse 的证书已经改变。
这说明最小权限从来不是零成本。遗留流程常因隔离会带来麻烦而不断继承权力;当权力遭到利用,组织才在最差时间、最少信息下支付紧急分离费用。
危机前的清单应包括需要重新激活的许可服务器、无法及时获得拒绝状态的隔离网络、需要加固的 WSUS 实例、关键扩展处理不同的旧客户端,以及所有依赖即将终止的证书层级的业务操作。
维持合法业务连续性,不等于维持旧权力连续性。CAL 可以保留,许可管理可以在新证书下恢复,但远程桌面许可功能无需重新获得通用软件签名权。
证据边界
一手资料支持正在发生的滥用、许可路径、碰撞机制、Windows 版本差异与 Microsoft 的修复,但没有提供完整受害者数量,也没有给出本文可以验证的行为者归因。
碰撞没有泄露 Microsoft 私钥,也不意味着任意既有证书都能事后修改。它依赖对一次可影响且可预测的实时签发进行预先准备。伪装 Windows Update 还需中间人交付位置。
替代层级在 2012 年使用 SHA-1。后来对 SHA-1 的淘汰属于后续历史,不能倒推成与本次 MD5 利用完全相同。RFC 5280 与 RFC 6151 提供通用技术背景;Heng Lu 的文章是披露的分析框架。
可以确认的结论更精确:证书链是一张可执行能力图。安全取决于 CA 能签什么、对象写了什么用途、应用理解什么、客户端信任哪一个根,以及拒绝新规则能多快抵达并运行。
来源
会员简报
档案背景详情
使用相应会员等级登录,即可解锁完整简报与来源注释。
仅限 Strategic Circle
Strategic Circle
所有读者均可浏览。加入并登录后可解锁档案简报。
加入 Strategic Circle仅限 Leadership Alliance
Leadership Alliance
符合条件的 IP 资产所有者和管理层可登录查看 Leadership Alliance 简报。
加入 Leadership Alliance