独家连载 | 零日漏洞:震网病毒全揭秘(16)
作者:星期三, 十月 7, 20150

640.webp

震网中有4个零日漏洞,令人印象深刻,但这还不是故事的结尾。在钱哥和莫楚周末的“代码分析马拉松”中,他们还发现,震网除了利用零日漏洞进行传播之外,还有一共8种不同的感染方法。震网的代码简直堪称一套专门用来侵入系统并实现传播的“瑞士军刀”……

第六章 寻找零日漏洞

8月一个周五的夜晚,莫楚(Liam O’Murchu)正在加州威尼斯一个时尚的楼顶酒吧里,为自己的33岁庆生。他租下了欧文酒店顶楼一处可以看海的露天U形酒吧卡座,正在开心的跟女朋友、爱尔兰来的表兄妹和一大帮朋友一起,一杯接一杯的喝着酒。就在他们旁边,一名真人秀节目记者正在拍摄坐在一起的一对男女,不放过这场“私人约会”中任何一个会让观众捧腹的尴尬举动。耶,这就是传说中的度假天堂——南加州。

640.webp (24)

欧文酒店

640.webp (25)

楼顶的酒吧卡座

钱哥9点钟露面时,莫楚他们已经玩了3个小时了。但钱哥的心思根本不在Party上。他特别想给朋友和同事们看个邮件,告诉他们当天早些时候突然出现的一个重大新闻。但他又怕莫楚一看到这个,就没心思想别的事了。结果,他还是没忍住。“我告诉你一件事,”钱哥跟莫楚说,“但你得答应我今天晚上不要谈论它。”莫楚点点头。

钱哥掏出黑莓手机,打开了邮件。邮件是另一家反病毒公司的研究员发来的,内容是提示他们,震网中可能还利用了另外一个零日漏洞。莫楚瞪大了双眼,盯着钱哥。他们已经花了几周时间,对震网的各个组件进行逆向工程,也的确发现过暗示存在其他零日漏洞的线索,但却没有足够的时间去进一步挖掘。漏洞的线索藏在实现传播病毒的“导弹”部分代码中,但他们一直在聚焦于感染西门子软件和PLC的“载荷”部分代码。

邮件没讲多少细节,而且也看不出这位研究员到底是已经找出了新的零日漏洞,还是跟他们一样只看到了线索。不管是什么情况,莫楚的斗志再次被点燃了。“就这样,”莫楚说,“今天晚上我不会再喝了。”第二天,周六一早,莫楚就来到办公室,一头扎进代码里。

周六的办公室空空荡荡,真是专心做事的好地方。在转向载荷部分之前,公司研究团队已经完成震网导弹部分中多数代码的功能标注工作,那么现在要做的,就是结合这些标注,把整个导弹部分代码仔细梳理一遍,以寻找漏洞利用程序的踪迹。当然,这事可不像说起来这么容易。必须跟踪代码与操作系统和其他应用程序之间的每一个动作,并观察代码与系统和程序间相互作用的方式,看其中是否存在疑点。比如,它是否强制某个应用程序执行了一个本不应执行的动作?是否越过了安全边界?是否绕过了系统权限?经过逆向工程之后的导弹部分,共有数千行代码,必须要对每一行进行认真检查。

震网的结构是非线性的,所以要对其行为进行追踪倍加困难。命令跳转来跳转去,莫楚只好一行代码一行代码的抠、一个步骤一个步骤的看。

1小时后,他非常确信,自己发现了第二个漏洞利用程序。他立刻搜索了漏洞利用程序的档案库,看看这个漏洞是否曾被人利用过,结果是“没有记录”。之后,他又用一台安装Windows最新版本和升级补丁的计算机对这个漏洞利用程序进行测试,结果仍然符合预期。零日漏洞的身份得到了确认。这一次,震网利用一个Windows键盘文件中的零日漏洞,实现了对系统的提权。(非法获得System权限)

作为黑市商品,零日漏洞是很值钱的。莫楚认为,在一次攻击中,冒着被发现的风险同时使用两个零日漏洞,似乎是种不可理喻的资源浪费。但他没有停下来。他把刚才的发现记录下来,回过头去继续分析代码。

几个小时后,他觉得自己好像又发现了一个漏洞利用程序——有迹象显示,震网正在利用Windows打印缓冲功能中的一个漏洞,实现病毒在共享打印机的各台计算机之间的传播。他再次用另一台装好最新补丁的计算机进行了测试、再次搜索漏洞利用程序档案库,再次发现没有历史记录。几周前那种令人“头发倒竖”的兴奋感再次来袭。他再次将其记录,又一头扎进代码。

到了下午三四点钟,钱哥过来看莫楚,发现他睡眼惺忪,已经累到不行了。他把分析结果交给了钱哥。钱哥拿过接力棒,然后一直干到深夜。周日继续加班一天。到周末过完的时候,他们已经发现了3个零日漏洞!!!加上之前在.lnk文件中发现的那一个,他们一共从震网这一个病毒中找到了4个零日漏洞。

他们觉得这实在太疯狂了。一次攻击中能利用一个零日漏洞已经够厉害了。两个都是浪费。4个?是谁干的?为什么这样做?你们这是在暴殄天物好不好!一个顶级的零日漏洞连同相应的漏洞利用程序,可以在黑市上卖到5万美元以上,在以政府的网络部队和间谍机构为卖家的内部灰色市场上甚至能卖到10万。要么攻击者手上拥有N多零日漏洞、根本不在乎用掉几个,要么攻击者就是孤注一掷、而且确实有足够的理由赋予病毒顶级的传播能力、确保命中最终目标。钱哥和莫楚觉得,这两种推测都有理。

钱哥向微软报告了他们新发现的几个零日漏洞利用程序,但很遗憾,俄罗斯的卡巴斯基实验室已经捷足先登了。震网的新闻甫一面世,卡巴斯基就组织了一个10人团队,开始对导弹部分代码进行分析。几天之后,他们找到了第2个病毒利用程序,几周后又找到了第3个和第4个。微软接到他们的报告后,已经开始了制作补丁的工作。但是,遵循“负责任的漏洞发布规则”,任何一方都不会在微软发布补丁之前,把这件事公开。

震网中有4个零日漏洞,令人印象深刻,但这还不是故事的结尾。在钱哥和莫楚周末的“代码分析马拉松”中,他们还发现,震网除了利用零日漏洞进行传播之外,还有一共8种不同的感染方法。震网的代码简直堪称一套专门用来侵入系统并实现传播的“瑞士军刀”。

最重要的一个发现,是它能够感染Step 7的项目文件。这些文件,是程序员用来给PLC编程的。而且,它还破掉了西门子公司“固化”(hard-code,硬编码)在Step 7软件中的用户名winccconnect和密码2WSXcder。这组用户名和密码是Step 7用来连接后台数据库的。把它破掉,就意味着可以攻击者可以把病毒注入后台数据库所在的计算机。同时,这个数据库由所有使用Step 7的程序员共享,这样病毒又可以感染所有登录数据库的Step 7程序员。这两个传播大招,极大增加了利用“程序员在染毒后,使用(带毒)笔记本或U盘连接PLC并对其编程”的机会,和最终成功“伞降”PLC的可能性。攻击者利用了Step 7系统某个模糊特征中的漏洞,感染了它的项目文件,这表明攻击者掌握着少为人知的Step 7系统相关的专业知识。这一点,是本次攻击“开挂”的另一个信号。

与传播机制并行,震网还拥有自动寻找新版本、更新旧版本的点对点传输功能。这使得震网可以通过不直接连接因特网的内网计算机,完成对自身的远程更新。为此,震网在每台被感染计算机上都安装了文件共享服务端和客户端,这样处于同一局域网的计算机就可以相互通信、并比较各自的病毒版本。只要有一台计算机上出现更高版本,就会立刻自动更新网内所有低版本的病毒。也就是说,只要将新版本病毒引进来,就能迅速实现局域网内全部病毒的更新。(待续)

译者:李云凡

 

关键词:

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