美文网首页
第一章 早期预警

第一章 早期预警

作者: 万有引力万有 | 来源:发表于2018-12-19 22:09 被阅读7次

    舍基·乌尔森(Sergey Ulasen)一看就不是会被卷进国际大事漩涡的人。这位31岁的白俄罗斯人有一头金色短发和少年般瘦削的轮廓,不仅面善,而且性格和蔼友善,看上去是在生活中完全没有敌人甚至对手的那种宅男……他最爱的度假方式就是去明斯克郊外的奶奶家,在那里放下手机、离开网络,充分释放压力。就是这样一个人,在2010年6月,干了一件惊天大事,成为世界瞩目的焦点。

    舍基·乌尔森

    他是白俄罗斯一家小型反病毒公司VirusBlockAda反病毒部门负责人,和同事奥莱格·库普瑞(Oleg Kupreev)一起,在坐落于明斯克市中心、离斯维斯洛奇河不远的一座苏联时期建造的灰褐色大楼里办公。他们正在系统地梳理近期在伊朗计算机上发现的恶意文件,突然有什么东西让库普瑞激动了起来。他坐在椅子上,大声喊:舍基,快过来看呐。舍基把这段代码看了一遍又一遍,最终确信他所看到的东西就是这么不可思议。他激动得有些喘不过气来。这段代码他们已经研究好几天了,直到现在他们才发现,它绝非一种温和而有趣的普通病毒,而是一部如恶魔般可怕又冷静的顶级作品。

    它不仅有效利用了后门(rootkit)来躲过反病毒引擎的扫描,还利用了“零日漏洞”(zero-day)将其从一台计算机传播到另一台计算机,从而能突破Windows系统,让百万台计算机暴露于风险之下。

    漏洞利用程序(exploit)是黑客用于植入病毒的攻击代码,一般利用IE等浏览器或PDF阅读器等应用程序中的安全漏洞,把病毒代码植入进去。这需要受害者浏览或点击带毒链接或文件。当软件开发者意识到漏洞的存在后,会制作并发放补丁。

    “零日漏洞”利用程序(zero-day exploits),是黑客世界中最牛的东西。因为它利用的漏洞是软件开发者和反病毒公司尚未发现的——这意味着根本没有补丁。

    这种程序非常少见。这需要很多时间去发现无人发现的新漏洞,并研究、分析、并制作利用漏洞实现攻击的程序。因此多数黑客只是简单依赖已知漏洞和漏洞利用程序(exploit)来传播恶意代码。他们利用从漏洞补丁发布到用户安装补丁这个时间差,或者有些用户因为大意没有安装补丁的情况,来进行攻击。虽然每年有超过1200万种恶意代码出现,但“零日漏洞”大概只有10来个。这次的攻击者使用的正是这种价值很高的“零日漏洞”利用程序和高超的攻击技术。从乌尔森他们看来,伊朗设备上的这些病毒在漏洞利用(exploit)技术和后门(rootkit)运用技术方面的表现,是空前的。简直不能再牛了。

    早在一周前,这个神秘的病毒就已经引起了Ada公司的注意。Ada公司在伊朗的一家安全软件中间商发现,顾客的机器反复出现故障。计算机反复重启,Ada公司技术团队进行了远程扫描,寻找反病毒软件漏掉的恶意程序,但一无所获。因此后来他们找到了乌尔森。

    乌尔森自从读大学起就受雇于Ada公司。但公司规模很小,而乌尔森非常优秀,所以当他26岁时已经成为公司的技术大拿,负责开发维护反病毒引擎。他偶尔还与破解恶意代码的研究团队一起工作。尽管偶尔为之,但他非常喜欢从事反编译研究。因此,当技术支持团队找他解决伊朗客户的问题时,他欣然接受。

    乌尔森起初认为,问题出在软件配置错误,或是操作系统中不同软件无法兼容上。但之后他了解到,并不是一台机器出现问题,而是很多台,而且当重装系统后问题仍然存在。于是他推测,攻击者一定是将病毒潜伏在目标网络中,这样就可以反复感染被清理干净的计算机了。他还怀疑,攻击者利用后门逃过了反病毒软件的监测。乌尔森已经为公司编写反后门(anti-rootkit)代码很久了,因此他很有信心把它找到。

    当获准远程接入遭感染计算机后,乌尔森和库普瑞将目光锁定在6个可疑文件上,其中2个驱动程序文件,4个其他文件。他们认为这些文件就是问题的根源。然后,在同事的帮助下,他们花了几天时间对这些可以文件进行破译、努力解释令人惊异的复杂代码。由于他们只是一个服务于政府客户的小公司,所以并不擅长这种挑战。但他们经过持续努力,终于发现:其中一个驱动程序文件,扮演着“内核级”后门(kernel-level rootkit)的角色,这印证了乌尔森的怀疑。

    后门有很多变种,最难的是探测出那个能获得与反病毒软件一样的系统特权的“内核级”后门。如果把计算机系统结构想象成一个靶子,内核层就是靶心,就是操作系统让计算机运作起来的起点。多数黑客编写的漏洞利用程序(exploit)仅能获得用户级权限,这是比较容易做到的。但反病毒软件可以探测到这种“提权”。因此,真正高明的黑客将漏洞利用程序(exploit)瞄准系统内核级别,这样就能逃脱反病毒软件的扫描。在那里,漏洞利用程序与恶意代码“内外勾结”,为恶意代码大行其道提供运行接口,反病毒软件却无法扫描和跟踪。内核级后门绝非常见,制作它需要复杂的知识背景和高超的技巧。但乌尔森发现的这一个,是超赞的。

    库普瑞认为,这个后门是用来隐藏四个恶意的.lnk文件的。病毒看来是使用了由4个恶意文件构成的漏洞利用程序来通过USB设备传播自己,而通过后门可以做到让这些U盘上的恶意文件对用户“不可见”。就在这时,库普瑞找乌尔森过来,让他看看到底是什么情况。

    利用漏洞通过U盘传播病毒,不像通过互联网上的网站和邮件传播那样普遍,但也非闻所未闻。库普瑞和乌尔森之前所见过的所有U盘传播病毒,都是利用了Windows系统的自动运行功能,这样当U盘插入计算机时,U盘上的恶意代码就会立刻执行。但这个家伙更加聪明。

    在Windows系统中,.lnk文件负责渲染U盘或其他移动存储介质中的文件图标。当我们插入U盘时,资源管理器或类似工具就会自动扫描其中的.lnk文件,来显示各种格式的文件,如音乐文件、Word文档、其他程序等。在这个病毒中,攻击者精心设计了一个漏洞利用程序,并将其插入其中.lnk文件中。当Windows扫描时,它能执行这个漏洞利用程序,秘密地将U盘上的恶意文件“货物”运送到计算机上,就像军用运输机将伪装的伞兵投放到敌方领土上一样。

    乌尔森在想,利用漏洞通过.lnk文件攻击Windows系统如此基础的功能,为什么之前没有人想到过呢?这比利用“自动运行”功能要牛逼得多,因为后者可以通过关闭“自动运行”功能使攻击失效,很多网管都对这一点很了解。但并没有禁用自动扫描.lnk文件而不引发其他问题的办法。

    乌尔森搜索了漏洞利用程序的档案库,试图找到其他通过.lnk文件的类似病毒,但一无所获。此时,他开始怀疑,这是一个“零日漏洞”。

    乌尔森找到一个被感染的U盘,把它插入一台安装了Win7的测试机上。这台计算机安装了微软官方发布的所有补丁。如果微软已经发现这个漏洞,那么补丁程序将会阻止其向系统注入病毒。如果这是一个“零日漏洞”,则补丁将并无卵用。乌尔森等待了几分钟,然后检查计算机,没错,恶意文件进来了。(待续)

    注释 :rookit

    NSA安全和入侵检测术语字典(NSA Glossary of Terms Used in Security and Intrusion Detection)对rootkit的定义如下:

    A hacker security tool that captures passwords and message traffic to and from a computer. A collection of tools that allows a hacker to provide a backdoor into a system, collect information on other systems on the network, mask the fact that the system is compromised, and much more. Rootkit is a classic example of Trojan Horse software. Rootkit is available for a wide range of operating systems.

    很多人有一个误解,认为rootkit是用作获得系统root访问权限的工具。实际上,rootkit是攻击者用来隐藏自己的踪迹和保留root访问权限的工具。通常,攻击者通过远程攻击获得root访问权限,或者首先密码猜测或者密码强制破译的方式获得系统的访问权限。进入系统后,如果他还没有获得root权限,再通过某些安全漏洞获得系统的root权限。接着,攻击者会在侵入的主机中安装rootkit,然后他将经常通过rootkit的后门检查系统是否有其他的用户登录,如果只有自己,攻击者就开始着手清理日志中的有关信息。通过rootkit的嗅探器获得其它系统的用户和密码之后,攻击者就会利用这些信息侵入其它的系统。

    乌尔森还是无法置信。VirusBlockAda公司,一个籍籍无名的微型安全公司,刚刚作为病毒探测者发现了一个病毒界的“稀世珍奇”!而且,它不仅利用了一个“零日漏洞”,是4个,对应Win2000以来的4个不同操作系统。攻击者将其分别注入到4个.lnk文件中,确保攻击万无一失。

    乌尔森试图计算到底有多少台计算机遭受了它的感染。之后,又有一个问题困住了他。被注入到计算机上的两个驱动程序文件,已经在任何无弹窗提示的情况下,完成了自身的安装。要知道,Win7的安全特性要求“当没有安全证书的程序安装时,会弹出提示框”,但这两个文件在安装时并未遇到这个问题。乌尔森警觉的意识到,这是因为,这两个驱动已经获得了一家名为瑞昱半导体公司(RealTek Semiconductor,以生产声卡著称)的合法数字签名。

    数字签名(digital certificates),就是经过认证的安全文件,就像数字护照一样。软件开发者用数字签名为产品进行鉴定,有签名的产品就是公司的合法产品。微软和反病毒公司也会为自家程序和更新包加上数字签名。计算机会认为,具有数字签名的程序是可信的。但如果攻击者偷到微软公司数字签名以及它的加密密钥,并用在自己的程序上,就能轻松的骗过计算机,让计算机认为“这是微软家的代码”。

    此前,已有攻击者在数字签名上做过文章。但他们都是用假的、自己制作的签名文件冒充合法文件,或者通过注册一个“壳公司”欺骗认证方、让其误以为是合法公司的签名文件。但这两种方式下,计算机都可能将签名文件视为可疑对象,并拒绝相应文件。而在这件事中,攻击者使用的是瑞昱公司——一家著名台湾硬件厂商——的签名文件,因此计算机都会将其视为合法的。

    这种战术是乌尔森从未见过的,激起了他心中的一系列疑问。

    一种可能性是攻击者黑掉了瑞昱公司开发人员的计算机,然后使用开发人员的计算机及权限,秘密授予病毒文件数字签名。

    另一种可能性是攻击者偷到了认证密钥(signing key)和证书(certificate)。出于安全考虑,聪明的公司会把它们的密钥和证书保存在不联网的服务器上,或者保存到提供额外安全防护的硬件模块上。但并不是每个公司都会这样做。有线索证明,瑞昱公司的证书确实被人偷走了。两个恶意程序文件上,数字签名的时间戳均为“2010年1月25日”。而一个文件于2009年1月1日,即于加签名之前一年被编辑过,另一个文件于加签名之前6分钟时被编辑过。由此可以推断,攻击者手上可能确实有密钥和证书,可以很快对文件加数字签名。

    其影响之大,令人感到不安。将合法数字签名用在恶意程序文件上,颠覆了计算机世界对数字签名体系的信赖,让人对从此以后所有经过数字签名的程序都无法再信任了。其他黑客模仿这种偷盗数字签名的策略,也只是时间问题了。乌尔森必须将这件事公诸于众。

    负责任的漏洞报告程序是,漏洞发现者在发现问题后,应首先与软件开发方取得联系,待开发方做好补丁之后再向公众发布消息。因此,乌尔森立即向瑞昱公司和微软公司发送了电子邮件,把自己的所见告诉了他们。

    两周过去,两家公司没有任何回复。乌尔森和库普瑞决定,不再保持沉默。有义务让其他安全机构了解.lnk漏洞。随后,安装了Ada公司反病毒引擎的机构们发现,中东及附近地区的计算机中大量发现具有该特征的恶意程序。病毒正在肆虐,并且快速传播。这必须向媒体公开。

    7月12日,乌尔森在公司网站上发布了一条关于“零日漏洞”的简短声明,同时在一个英文安全论坛上也发布了一条消息,警告说可能将爆发大规模感染。他公开了利用漏洞攻击的几个细节,但不足以使其他具有模仿能力的黑客根据这些信息进行类似攻击。但论坛上的成员都是内行,很快意识到其中的价值,指出这个漏洞具有造成“大规模杀伤”的潜力。

    三天后,科技记者克雷布斯(Brian Krebs)发现了这条声明,并写了一篇博客,对当时还少为人知的漏洞进行了简介。这条新闻在安全社区中快速流转,让每个人都打起精神,来面对这种病毒以及可能出现的、跟风模仿者利用相同漏洞进行的其他攻击。同时,一家从事反病毒研究和测试的德国机构老大,向微软方面引荐了乌尔森,并督促微软开始研究补丁。根据已经公布的漏洞,微软决定向用户发布一个关于问题关键点的紧急报告,同时提供了如何减轻被感染风险的一点建议。但是,补丁的制作和分发可不是几个星期的事,解决问题仍然遥遥无期。

    安全业界迅速展开了对这个病毒的讨论。现在,微软给它起了一个新的名字:震网(Stuxnet),是将一个驱动文件(mrxnet.sys)的名字和其他部分代码的字母进行拼合而成。安全公司纷纷将其特征纳入反病毒引擎,随即数以万计的病毒开始显现。

    这时,又出事了。7月17日,斯洛伐克一家名叫ESET的安全公司发行了一个与震网有关联的另一种恶意驱动程序文件。这个文件也带有一家台湾公司的数字签名,但却并非瑞昱公司,而是生产电路板的台湾智微科技(JMicron Technology)。

    这次发现的驱动程序文件是独立的,不像震网有那么多文件。但是,所有人都认为它与震网有关,因为它和Ada公司发现的驱动程序高度相似。这个文件的编辑日期中,有引人注目之处。当黑客在编译器中运行源代码,然后将其翻译成计算机能够读取的二进制代码时,编译器一般会在二进制文件中留下一个时间戳。攻击者可以操纵这个时间戳,以摆脱反编译研究者的跟踪,但这个文件的时间戳似乎是正常的(没被篡改)。时间戳显示,该驱动程序文件于7月14日,也就是在Ada公司将震网的信息公布后两天后被人编辑过。是攻击者在非常清楚一家白俄罗斯公司已经揭开病毒面纱之后,又释放出新的驱动来进行攻击吗?或者是他们知道事情即将败露,希望赶在被处理掉之前将震网病毒传播到更多机器?有线索证明,在攻击者为驱动程序文件加上智微公司数字签名时,漏掉了几个小步骤,这说明攻击者急于推出这个新的驱动,让它赶紧“干活”。有一件事是很明确的:攻击者需要给他们的驱动文件加上一个新的数字签名,因为瑞昱公司的数字签名已经于6月12日过期了。数字签名都有生命期限,一旦瑞昱公司的数字签名过期,攻击者就不能再用这个签名来标记新文件了。当震网被曝光,认证机构也会取消对相应病毒文件数字签名的认可,Windows系统将自动拒绝使用该签名的文件。

    第二个签名文件的发现,让人们对于黑客如何获取相应安全文件有了更多的猜测。瑞昱和智微两家公司的总部都坐落于台湾新竹科技工业园,彼此相隔两个街区。考虑到地理位置接近,有人推测可能有人闯入了这两家公司,偷走了数字签名密钥和工具。还有人推测中国是震网幕后主使(躺枪),是中国方面黑了台湾公司、取得数字签名密钥和证书。

    不论怎样,这意味着攻击方的“军火库”里面,可能还有其他公司的证书。既然他们已经费了这么大的力气来确认这种攻击是有效的,那么这很可能意味着他们为达目的,有着严肃的目标和精心设计的手段。安全业界中很多人都感到心神不宁、不知所措。ESET公司研究员皮埃尔在网上说:“擦,从来没见过这么专业的坏蛋。”

    反病毒公司源源不断的检测着来自客户的震网病毒文件,令人吃惊的情况又出现了。根据文件的时间标记,震网病毒早在2009年6月就已经开始出现了,这比Ada公司发现它的时间要早一年还多。研究还显示,攻击者先后于2009年6月、2010年3-4月和2010年6月发起了三个波次的攻击,每一波攻击所用代码略有不同。

    然而,震网的意图到底是什么,仍然是个谜。研究者没有发现任何有关震网试图盗取银行账号等机密信息的行为,这一点与其他大多数恶意程序大相径庭。研究者也无法从代码中找到其他动机的信号。直到有一天,一名来自德国的研究者弗兰克(Frank Boldewin)找到了一个可能的线索。

    弗兰克Frank Boldewin

    当乌尔森第一次在论坛上谈起震网时,弗兰克就曾问过他:“哥们,有谁深入看过它的代码吗?”原来,弗兰克曾深入震网的内层代码,发现其中有一些不寻常的、对德国西门子公司所生产软件的说明文字。攻击者看上去是在寻找那些安装有SIMATIC Step 7或SIMATIC WINCC这两种西门子公司专有软件的计算机。这两种软件都是与西门子公司生产的可编程逻辑控制器(PLC)配套的工业控制系统的一部分,用于配置自动控制系统的软硬件参数。而PLC,一般有烤箱那么大,是广泛用于世界各地的小型工业计算机,用来控制机械臂、传送带或装配生产线等。

    西门子 SIMATIC 系列产品,硬件为PLC,软件为与之配套的软件,即震网的目标

    西门子SIMATIC Step 7操作界面

    弗兰克从未见过以工业控制系统为目标的恶意软件。因为,黑工业控制系统根本没什么利润回报,起码不是黑银行账户和信用卡系统那种赚快钱的方式。只有一种可能。他说,“看来,这个恶意程序是个间谍软件”。攻击者一定是想盗取竞争对手的工业设计或产品模板。

    客观的说,业界大多数人都太乐观了。震网似乎只以安装了西门子专用软件的计算机为攻击目标,这意味着没装西门子软件的计算机都是安全的,他们的机主也可安枕了。但乌尔森在伊朗发现的、反复重启的计算机并没有安装西门子软件,除了系统被破坏之外,震网并未引发持续性的伤害。这些都是为什么呢?

    在震网声名远扬之后仅仅一周之后,就渐渐走向了平息。微软还在为了修复.lnk漏洞而开发补丁,但在多数其他安全公司眼中,一旦把震网的特征码加入本公司产品病毒库,震网就和他们没有一毛钱关系了。

    世界上第一个数字武器的故事即将到此为止,但有几个业内研究者却认为其中有料,把震网揪住不放。(待续)

    注释:震网导致计算机反复重启的原因
    

    Stuxnet蠕虫被设计用来破坏伊朗核工厂铀浓缩离心机,但一个编程错误使蠕虫扩散到了 Windows 95和Windows 98等不支持的操作系统上,导致电脑蓝屏死机,从而引起了怀疑,使它曝光于世界。

    相关文章

      网友评论

          本文标题:第一章 早期预警

          本文链接:https://www.haomeiwen.com/subject/xwpskqtx.html