【今天,我一不小心阻止了全球性病毒的蔓延...】
昨天,你们的杰克船长被“绑架”了,赎金居然是巨额比特币!听起来不可思议吧?但却有其事,不仅是迪士尼未上映的电影《加勒比海盗5》中枪,就连美国快递巨头FedEx、英国医疗系统到中国的大学、铁道、电表(误)等,无一例外都受到了威胁,而始作俑者居然是一款名为 WannaCrypt 的勒索病毒,据悉全球有150个国家、超过20万受害者在本次勒索病毒袭击中被黑......
对于这场病毒袭击,各国网民各有办法:有升级系统补丁的,有查找系统漏洞的,还有向黑客哭穷的(我国台湾出现和黑客讨价还价的案例,最后居然杀价成功orz.......),还有请神父给内部服务器开光的(你没看错,是俄罗斯.......)。其实网上已经有很多防范办法了,优达菌就不再班门弄斧了......
But!今天的重点不是这个,这次的勒索病毒到今天已经差不多接近尾声了(暂时,难说之后不会有反扑),主要的灭毒功臣,是来自英国的马库斯·哈钦斯 Marcus Hutchins(网络化名 MalwareTech ),今年居然只有22岁,就职于安全公司 Kryptos Logic,目前FIB和英国国家网络安全局都对他伸出橄榄枝了,争抢这位一夜爆红的电脑奇才。
MalwareTech 本尊,童颜不惧发际高。图片来源:media4.s-nbcnews.com
起先是 MalwareTech 分析病毒代码,发现一个特殊的域名地址。而这个域名,看起来像是病毒作者给自己留的一个紧急停止开关......听起来很像好莱坞大片的展开对吧,不过事情还就真的这样开始的!多亏了 MalwareTech 大神(当然也要归功于智商在线的网友们),据说目前为止 WannaCrypt 才勒索不到7万美元,雷声大雨点小,简直是奇耻大辱,拉低了黑客的智商......
全世界人民理应感谢 MalwareTech 的正义行为,但他对此事却轻描淡写地说“这只是一不小心的结果”,想必很多人对此事还不甚了解,到底是命运的作弄,还是努力的结果?来看看 MalwareTech 对此事来龙去脉的自述吧~
(头像是猫,头像是猫,头像是猫!!!重要事情说三遍!)
今天,我一不小心阻止了全球性病毒的蔓延
作者:MalwareTech
原文链接:www.malwaretech.com/2017/05/how-to-accidentally-stop-a-global-cyber-attacks.html
译者:欧剃
编辑:蛋饼
(友情提示:读完全文需要10分钟)
我终于从各种电邮和 Skype 中抽出点时间来,能好好讲讲从上周五到现在发生的这次疯狂事件。这本该是我的休假时间 ( 4天的假期废了 )。你可能已从各大媒体上知道了 WannaCrypt的大灾难了吧,不过我觉得仍有必要,该把我做的事跟大家分享下。
我大概在早上10点醒来(5月13日),习惯性检查了下英国网络威胁共享平台,我通常是在那追踪一个叫Emotet 网银恶意软件的传播情况。但那时站上只有几个很普通的帖子,个别的几个机构报告说中了勒索病毒什么的,看起来没啥大不了的......吧。于是我和朋友吃了个午饭,就在这时, WannaCrypt 勒索软件发起了全面进攻。
下午2:30,我回到家时,平台上已经充斥着洪水一般的报告,全国范围内数个不同的医疗卫生机构的系统都受到了攻击,这让我意识到这次的严重性不同于往日。虽然针对公共设施的计算机系统的网络攻击,已经不是什么新闻了,但全国范围内同时遭到攻击可不是一件小事。(和公众认为的相反,大部分国家医疗卫生机构的员工并不会真的打开钓鱼邮件,所以如此范围之广的攻击一定有其他传播方式) 。之后,我的一个安全领域的同事 @Kafeine 发给我一份恶意软件样本。我在分析环境中运行这个样本时,立马发现它在运行时,会请求一个未注册域名,于是我顺手就把这个域名注册了。
使用思科 Umbrella 产品,可以明确看到在我注册之前,该域名收到的请求数量,这显示出此次大规模攻击是在 UTC 时间早上8点左右开始发动的。
这个域名生效还要一段时间,这时,我又在虚拟环境中运行一次样本,弹出了 WannaCrypt 的勒索页面;不过更有趣的是,当样本加密完我留在里面作为测试的虚假文件后,它开始访问随机 IP 地址的 445 端口( 该端口被 SMB 服务使用 )。这种行为让我立刻想到了漏洞扫描,再加上它扫描 SMB 端口的做法,我不由得回头查了一下 “ 影子中间人 ” ( Shadow Brokers ) 在近期放出的 NSA 武器库...果然,有一个 SMB 的漏洞攻击工具。显然我还没有任何证据能证明这个样本肯定是在扫描 SMB 主机,更没法证明它用的就是泄漏出来的 NSA 攻击工具,所以我把这个发现发推特上,然后处理已生效的域名。
在这我要强调一下,去注册那域名并非心血来潮。我的工作就是找出各种办法,去追踪,如果可能的话,停止那些僵尸网络 ( 或者任何其他类型的恶意软件 ) ,所以我一直保持习惯,随时控制那些未被注册的恶意软件主控服务器 ( C2 ) 域名。事实上,过去一年里我注册过好几千个这类域名。
我们的标准流程差不多是这样走的:
1. 找到依然活跃的僵尸网络使用的C2域名,控制住未被注册或已过期的那些,并指向我们的sinkhole 服务器( “sinkhole” 是一种服务器,专门设计为捕捉所有恶意流量,并阻止攻击者控制被感染的计算机)。
2. 收集恶意软件感染情况的地理分布和感染比例等信息(包括 IP 地址)。我们可以利用这些信息,通知受害者他们的系统已经遭到入侵,并协助执法机构。
3. 对恶意软件进行反向工程,查看代码中是否存在任何漏洞,以便我们可以通过注册的域名对这些恶意软件/僵尸网络进行接管,避免它们继续散布或被恶意使用。
在 WannaCrypt 这个例子中,1、2、3这三个步骤其实是一样的,只是我当时还没发觉。
就在域名生效后几秒钟,我收到了Talos 安全团队的一名分析师的推特私信,问我要那个“会扫描SMB主机的恶意软件样本”,于是我就发给他了。搞笑的是,在这时候我们已经无意中阻止了这个恶意软件的运行,所以当他运行跟我手头一模一样的样本时,却发现并不能获得任何结果——这倒给我们带来许多困惑。虽然我那时充满了好奇,可完全没有足够的时间来仔细调查,因为那时我的 sinkhole 服务器已经严重逼近负载极限了。
我进行了一些操作,确保 sinkhole 服务器稳定运行,并能从我们目前注册的这个域名获取相应的信息 ( 在那时我们还是对刚注册的这个域名是做什么用的一无所知,只不过每一个被这个恶意软件所感染的设备都会访问一下这个域名。当然这让我们有了追踪感染散布情况的能力 )。整理 sinkhole 服务器的过程比我预计得要久,因为前一周我们引入服务器的一个非常巨大的僵尸网络,基本上吃光了服务器带宽。不过很快我就能建起一张实时追踪地图,公布在推特上。
大约在英国夏令时 (BST) 的晚上 6:23,我请一名员工查看蠕虫代码,并确认我们注册的这个域名没有被改变 ( 有的恶意软件会用算法定期改变域名,所以我们需要获知有没有新的域名出现,以便及时注册掉 ),当时我正在实时追踪地图上进行了一些更新,以便能处理大量新联入的访问请求。
大概5分钟后,我的员工给我带来了最新的情况:注册这个域名之后,勒索软件被激活,并加密了所有人的文件 ( 别担心,后来我们发现这并不属实,不过当时确实引起了相当的恐慌 )。对此我联系了 @Kafeine ,他发了如下这条最新情况的推文给我。这个发现是来自网络安全公司 Proofpoint 的研究者达里恩·赫斯(Darien Huss)在分析代码时得出的结论,他的观点和我的员工刚好相反:我们注册这个域名,事实上停止了勒索软件的运行,阻止了它的进一步扩散。
听到这些互相矛盾的结论,我焦急地重新载入我的分析环境,再一次运行了样本......结果什么都没有发生。接下来我修改了本地host文件,使对该域名的连接无法建立,然后再运行一次......勒索软件启动了!
哎,你估计无法想象一个成年男子,在触发了一个病毒后,激动地满房间蹦来跳去的样子, 但我当时确实就是那样。头一次执行勒索软件不启动,而第二次正常工作了,这意味着我们事实上已经阻止了这个恶意软件的扩散,从注册那个域名开始就阻止了它再次劫持新的计算机。 (我开头还保持沉默,忙着自己逆向工程一遍那些代码,再三检查确认,确定情况属实,但到如今达里恩的观点已经获得了许多支持。)
那么,为什么我们的 sinkhole 服务器能阻止一场全球性的勒索软件瘟疫呢?
Talos 安全团队发布了一篇宏文,从代码角度解释了 这个问题 ,在此我也以达里恩的截图为例详细说明一下。
这段代码就是尝试连接我们注册的那个域名,如果连接不成功,则启动劫持程序,如果成功连接则软件退出。(一开始看这个截图的时候我也弄得不是很清楚,因为我缺乏上下文,不知道这段的父函数对这个返回值是怎么处理的。)
之前推测的认为,这个域名是攻击者设置的一个“锁死开关”(kill switch),以防有什么地方出错,但我现在认为,这只是一个处理得很差的防沙盒机制。
在某些沙盒环境下,进出的流量都被拦截并指向沙盒内的一个IP地址,而不是该网址指向的真实IP地址,这产生的一个副作用是,在沙盒内尝试访问一些不存在的域名时,都会得到成功连接的返回值 (而这种情况在正常情况下应该永远不会出现) 。
我认为他们是尝试请求一个故意设置的未注册域名,而在某种沙盒环境中这个域名会看起来是有效的。那么,当程序收到正常的返回值时,他们就认为程序是在一个沙盒中运行,因此就自动退出以避免被分析。这种做法并不是第一次出现了,实际上之前Necurs 木马就用过这招 ( 这个木马会查询5个随机域名,如果都返回同一个IP地址,则退出程序 );然而,由于 WannaCrypt 只用了一个硬编码在代码中的域名,我注册了这个域名就使得全球的 WannaCrypt 程序都以为自己是在沙盒中工作然后退出...从而一开始就无意中阻止了它的扩散 ,并防止这个恶意软件劫持已被感染的计算机。既然现在已经发现了这个情况,我们会继续维持这个域名,以防未来这个样本继续扩散。
但不容忽视的是,我们的sinkhole服务器只是阻止了这一个样本,这无法防止攻击者去除域名检测后卷土重来。因此,非常非常重要的是,任何未打补丁的系统必须尽快打上补丁,修复这个漏洞。
截至目前WannaCrypt的感染情况:
除了本文中提到的名字及公司外,我还要给下面这些机构一个大大的赞:
英国国家网络安全中心 (NCSC UK) – 他们的网络威胁信息共享计划给我们提供了宝贵的数据,也使得在攻击开始后第一时间对恶意软件类型进行识别。他们同时也协助确保我们 sinkhole 服务器不被别人当作攻击者控制的设备,使我们得以获取足够的信息反馈给他们, 以便能及时通知英国国内的受害者。
FBI 和 ShadowServer – 他们在很短的时间内提供了很大帮助,将感染情况通知非英国受害者——虽然这意味着我要彻夜不眠跟他们保持联系。
2sec4u– 今天给我减少了许多工作量,还时不时吓我一下让我提提神...(注:2sec4u是一个推特上的科技自媒体)
微软 (Microsoft) – 他们为已经不再支持的操作系统 (比如 Windows XP 和 Server 2003 ) 提供了一堆补丁,人们现在可以打补丁,而不是被迫升级成更新的系统以应对这个蠕虫病毒。
如果你还有没打的补丁,快装上。如果你需要任何指导,这里有一篇持续更新的指南:https://www.ncsc.gov.uk/guidance/protecting-your-organisation-ransomware
现在我终于能睡上一会了。
(END)