独家连载 | 零日漏洞:震网病毒全揭秘(55)
作者: 日期:2015年11月25日 阅:3,419

640.webp

遭到火焰攻击的,是Windows自动更新系统!微软要疯!卡巴斯基的研究员将这部分代码比作“上帝制作的漏洞利用程序”!火焰是如何做到的?……

第十五章 火焰(接上)

这天是美国阵亡将士纪念日的假期,当火焰病毒曝光的新闻出现时,位于华盛顿州雷德蒙德的微软公司总部根本没几个人上班。不过,公司应急响应团队一听说这场新攻击与震网和毒区来自同一批攻击者,立刻下载了火焰病毒的文件样本。他们想知道,这场新的攻击有没有像震网和毒区那样利用了Windows系统的零日漏洞。当他们仔细分析其中一个文件时,他们意识到,他们看到的,是比零日漏洞更为恐怖的东西——火焰攻击了微软的Windows自动更新系统,以实现其在局域网内传播的目的。

Windows自动更新系统,是微软用于向广大用户分发软件更新包和安全补丁的自动推送系统。要获得更新,需要用户计算机上的一个客户端工具与微软更新服务器进行联系,在可用更新出现时进行下载。

多年来,网络安全业界曾多次警告微软,要小心黑客攻击Windows自动更新系统,并用更新机制传播恶意代码,从而威胁亿万微软用户的安全。虽然火焰的攻击没完全实现警告中的预言,但形势同样凶险。它并未攻击微软向全体用户分发更新的Windows服务器,而是攻击了用户计算机上的“自动更新客户端工具”。这两者貌似区别不大,但这个区别非常重要。如果火焰攻击的对象是前者,就会在全球范围内造成广泛影响。但火焰采取的这种攻击方式意味着,它只会影响攻击者选定的那些小型目标网络,而不会危及目标网络以外的用户。

像Windows系统中的其他软件一样,微软也会对它的“自动更新客户端工具”进行更新。每当客户端工具成功安装到用户计算机上,都会立即向微软的服务器发送一个信标,看有没有新版本可供下载。微软则会通过一系列.CAB文件分发这些更新,并签上了微软公司的数字证书,以证明其合法性。

攻击者首先使用火焰病毒感染目标网络中的一台计算机,然后,当网络中其他计算机向微软服务器发送信标、检查客户端工具新版本时,已感染火焰的计算机就会对这个信标实施拦截,并将火焰的恶意文件打包为合法的微软.CAB文件,作为客户端工具的新版本发送给提出请求的计算机,从而实现火焰的传播。不过,这还不是攻击中最复杂的部分。为实现传播,攻击者为打包成.CAB文件的恶意代码签上了微软公司的数字证书,只不过把证书中的“公司名称”由“Microsoft Corporation”改成了“MS”。微软研究员很快注意到了这个细节。这个假冒数字证书由微软终端服务数字证书认证机构(Microsoft’s Terminal Services Licensing Certificate Authority)于2010年2月签发,但很明显,这不是一个由正规认证机构签发的合法证书。难道微软的服务器遭到了攻击,或者是数字签名的密钥被盗了?研究员必须在其他人成功模仿火焰攻击者的行为出现之前,抓紧时间分析出攻击者盗用数字证书的方法。因此,他们立即给处于休假状态的同事们打电话,把他们召回公司,组建了一个专项应急团队。

经过分析发现,攻击者用了一种名为“MD5哈希碰撞”的方式破解了微软数字证书。MD5哈希值是通过一种名为“MD5”的加密算法对数据加密后生成的一个值。由于每个数据用MD5算法运行之后都能得到一个唯一的值,因此人们普遍将这个值当作数据的“指纹”。然而,MD5算法已出现多年,而且存在一个致命的弱点——其他人可以用不同的数据,运行同样的算法,生成同样的MD5哈希值。这个过程就是哈希碰撞。基于此原因,很多公司都停用了MD5加密算法。但微软自从1999年构建终端服务认证机制至今,始终在使用MD5加密算法。

640.webp

哈希碰撞

终端服务认证(TS Licensing)是微软公司向用户提供的一个服务,用户可以在运行微软服务器版操作系统的计算机上使用这项服务。通过这项服务,用户可以让多个用户或多台计算机同时使用服务器端的软件。不过,用户需要向微软公司购买认证,比如购买100个用户的认证权限,然后向微软终端服务数字证书认证机构提交申请。该机构会生成一个标有用户姓名的数字证书,上面还附有签发时间戳和数字证书的序列号。

当微软发布该证书时,会将包括签发时间戳和证书序列号在内的所有数据,用MD5加密算法加密,生成一个哈希值,然后用这个哈希值作为数字证书的签名文件,将它们一并发给用户。这样,用户就可以使用这个数字证书来确保,只有经过认证的计算机或个人才能使用这个软件。但在火焰事件中,攻击者通过“哈希碰撞”,实现了“用与微软公司同样的哈希值,为它们伪造的数字证书以及伪造.CAB文件开路”的目的。

在攻击者向微软提交数字证书请求之前,它们制作了一个含有“微软真实证书应有内容”信息的虚假证书,并进行了一些细微的改动。经过反复改动和调试,终于得出了与微软某个数字证书相同的MD5哈希值。这说起来容易,但可不是谁都能做到的。在这个过程中,必须要用MD5算法对虚假证书数据进行成千上万次加密运算和修改,才可能得到一个与微软真实证书完全一致的哈希值。这对计算机的运算能力要求非常高。同时,要做到这一点,攻击者还需要对“微软为数字证书安排序列号的规则”和“微软认证服务器签发证书的精确时间”了如指掌,因为,这些数据要和微软证书一并作为运行MD5加密算法的明文。如果在签发时间上出现了毫秒级的偏差,两个哈希值就会不一致,攻击者通过“碰撞攻击”得到的哈希值就无法成功还原成虚假证书。也就是说,在发动攻击之前,攻击者必须对微软终端服务认证机制进行全面的研究,并对多个(可能上百个)微软数字证书进行测试,最终才能得到正确的签发时间和序列号。

然后,攻击者用同样的哈希值还原出虚假证书,再用假证书让系统认为“内藏火焰文件的.CAB文件就是更新客户端工具的新版安装包”。由于哈希值是真的,系统根本无从辨别。

这段针对Windows更新机制的攻击,可以称得上是一项具有开创意义的数学研究成果,其水准之高,只有世界级密码专家才能企及。卡巴斯基的研究员听说此事后,将其称为“上帝制作的漏洞利用程序”,因为它超越了一般黑客的技术层次,其传播效果也大大优越于利用零日漏洞编写的恶意程序。如果攻击者更进一步,直接攻破Windows更新补丁服务器,那就真可谓登峰造极了。

微软的研究员起初估计,其他有实力的黑客要想掌握微软证书认证和更新系统中的漏洞,并模仿火焰发动新攻击、传播新病毒,怎么也得用12天。但他们扮演模仿攻击者,一步一步实施攻击所需步骤并同步记录时间后发现,如果真的有人想跳过MD5碰撞的部分,发动一个没这么复杂的类似攻击,只需3天即可实现。

为防止类似攻击出现,微软方面争分夺秒,针对潜在攻击者可能利用的漏洞,紧急发布了一个临时补丁。作为应对最严重漏洞的后备手段,此前,微软仅在2011年发布过一个临时补丁。这也充分表明,对于火焰对自动更新系统发动的攻击,微软上下高度重视,如临大敌。

之前,毒区和震网的攻击者已经撼动了因特网赖以生存的可信体制的基石。先是盗取了几家台湾公司的数字证书,用在震网的假驱动上;后是直接把毒区潜入数字证书认证机构内,并大肆盗取数据。不过,火焰中的这个漏洞利用程序比前两者走得更远。它凭借一己之力,动摇了世界上最大的软件生产商和它亿万用户之间的信任。假设美国政府是火焰的幕后操盘者,那么,在实施攻击之前,他们是如何说明其行动的合法性,并得到法律批准的呢?很可能是这样的:他们声称,火焰攻击的对象只是目标网络中的Windows个人用户,而非真正的微软公司服务器,因而不会给所有微软用户带来风险。通过这种方式,他们可以只对少量外国目标“开枪”,而不会伤及国内用户。

然而,虽然攻击者没有直接攻击微软服务器,但仍然对广大微软用户造成了不可挽回的伤害。攻击更新客户端工具的行为,已经破坏了用户对微软自动更新服务体系的信任,并会促使用户放弃使用这个工具,以免收到对系统安全造成危害的(虚假)更新包。

那么,谁应该为破坏微软公司与用户之间的信任负责呢?在火焰曝光的新闻发布3周后,几位前美国政府官员发声了。他们告诉《华盛顿邮报》,火焰是国家安全局、中情局和以色列军方发起的联合作战行动。

这几位匿名人士指出,正如卡巴斯基的拉伊乌团队所推断,火焰的研发工作始于2007年的某个时点。它的目的是收集与伊朗官员有关,以及有助于掌握伊朗核设施中计算机网络拓扑结构的情报。他们还说,火焰只是一个早期的侦察工具,之后被其他工具取代了。

“火焰的出现,是为了给另一个秘密作战行动探路。”另一名前任美国情报官员说,对伊朗核设施的网络侦察“不过是顺手牵羊而已。”他说的“另一个秘密行动”,可能是指“国家安全局使用某种预埋后门,通过无线电波回传目标计算机数据”的网络侦察行动。(见第17章)

值得一提的是,他们还揭秘了当年早些时候发生在伊朗的“清除者”攻击事件。他们告诉报社记者说,不小心牵出火焰的那次针对伊朗石油部的攻击也是政府部门的杰作。但是,与震网和火焰不同的是,“清除者”攻击不是由美以两国联合发起,而是以色列单独实施的。他还说,就是因为这场攻击(被发现),才让美国方面猝不及防。(待续)

译者:李云凡

 

关键词:

申明:本文系厂商投稿收录,所涉观点不代表安全牛立场!


相关文章