一、事件概述
1. 攻击爆发与范围
-
时间:2017 年 5 月 12 日,黑客利用美国国家安全局(NSA)泄露的 “永恒之蓝”(EternalBlue)漏洞发动攻击,迅速波及全球。
-
规模:超过 150 个国家、30 多万台设备被感染,包括英国 NHS 医院、中国高校、俄罗斯电信公司等关键基础设施。
-
行业影响:医疗系统瘫痪导致手术延误,教育机构数据丢失影响毕业季,物流企业供应链中断,全球经济损失估算达40 亿至 500 亿美元。

被入侵的公安网


2. 传播与加密机制
-
蠕虫式传播:病毒通过扫描开放 445 端口(SMB 协议)的 Windows 设备,利用 “永恒之蓝” 漏洞自动植入恶意代码,无需用户交互即可横向扩散。
-
文件加密:感染设备后,病毒使用AES-256 对称加密和RSA-1024 非对称加密组合,将文档、照片、数据库等文件后缀改为
.wncry,并在桌面显示勒索弹窗。 -
赎金要求:索要 300-600 美元比特币,付款后承诺提供解密密钥,但实际仅有少数受害者成功恢复数据。

3. 关键转折点
-
Kill Switch(自毁开关):病毒代码中隐藏了一个检测特定域名(
iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea.com)是否存在的机制。英国安全研究员马库斯・哈钦斯(Marcus Hutchins)以 8 英镑注册该域名,意外触发病毒自毁,阻止了约 10 万台设备感染。
当时媒体对马库斯・哈钦斯的报道 -
变种威胁:5 月 14 日出现的 WannaCry 2.0 移除了 Kill Switch,传播速度更快,但未造成大规模二次爆发。
二、病毒原理简单解析
1. 漏洞利用:永恒之蓝(MS17-010)
- 漏洞背景:该漏洞存在于 Windows SMBv1 协议实现中,攻击者通过发送特制数据包触发内存错误,实现远程代码执行(RCE)。
- 攻击流程:
- 扫描阶段:病毒通过 445 端口向目标主机发送 SMB 请求,探测是否存在漏洞。
- 漏洞触发:构造包含恶意指令的数据包,利用 SMB 协议中的缓冲区溢出漏洞,覆盖内存中的返回地址。
- 代码执行:强制目标系统执行病毒 Payload,下载并运行 WannaCry 本体。
2. 加密流程
- 密钥生成:每台感染设备生成唯一的 AES-256 密钥用于文件加密,该密钥再通过攻击者的 RSA 公钥加密后上传至控制服务器。
- 文件锁定:病毒遍历系统磁盘,对文档(.doc/.xls)、媒体(.mp4/.jpg)、数据库(.mdb/.sql)等 70 余种格式文件进行加密,同时删除原始文件备份。
3. 传播扩散
- 横向移动:成功感染一台设备后,病毒通过以下方式继续传播:
- 漏洞复用:利用相同的永恒之蓝漏洞攻击局域网内其他未打补丁的设备。
- 共享渗透:扫描网络共享目录,尝试弱密码登录并植入病毒。
- 传播速度:由于许多企业未及时更新系统(如 Windows XP、Server 2003),病毒在数小时内形成全球扩散。
三、样本深度分析
该病毒分为两个部分:
-
蠕虫部分,用于病毒传播,并释放出勒索病毒。
-
勒索病毒部分,加密用户文件索要赎金。
1. 蠕虫部分详细分析:
1.蠕虫代码运行后先会连接域名:http://www.iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea.com 如果该域名可以成功连接,则直接退出。

关于这个“Kill Switch”的存在网络上众说纷纭,我们认为相对可靠的解释是:开关的存在是为了检测安全软件沙箱。这种手法多见于恶意代码混淆器,但是除了看到几个人为修改“Kill Switch”的样本外,该病毒并没有批量生成、混淆的迹象。另外,如果真是为了对抗安全软件沙箱,和以往对抗沙箱的样本比起来,这段代码过于简单,而且出现的位置也过于明显。所以,放置这样一个“低级”的“Kill Switch”具体出于何种原因,恐怕只有恶意代码作者能够解释了。
2. 如果上述域名无法访问,则会安装病毒服务,服务的二进制文件路径为当前进程文件路径,参数为:-m security,并启动服务。

3. 释放资源到C:WINDOWS目录下的tasksche.exe(该程序是勒索病毒),并将其启动。

4. 蠕虫病毒服务启动后,会利用MS17-010漏洞传播。传播分为两种渠道,一种是局域网传播,另一种是公网传播。如下图所示:

局域网传播主要代码如下图:

病毒会根据用户计算机内网IP,生成覆盖整个局域网网段表,然后循环依次尝试攻击。相关代码如下:

公网传播主要代码如下图,病毒会随机生成IP地址,尝试发送攻击代码。

SMB漏洞攻击数据包数据,如下图所示:

Worm病毒的PE文件中包含有两个动态库文件,是攻击模块的Payload,分别是:x86版本的payload,大小0x4060和x64版本的payload,大小0xc8a4。
两个Payload都是只有资源目录结构没有具体资源的无效PE动态库文件。病毒在攻击前,会构造两块内存,在内存中分别组合Payload和打开Worm病毒自身,凑成有效攻击Payload,代码如下图所示:

有效攻击Payload模型如下:

完整的攻击Payload的资源如下图,资源中的第一个DWORD是病毒大小,之后就是病毒本身。

然后使用MS17-010漏洞,通过APC方式注入动态库到被攻击计算机的Lsass.exe,并执行Payload动态库的导出函数PlayGame,该函数非常简单,功能就是释放资源“W”到被攻击计算机“C:Windowsmssecsvc.exe”,并执行,如下图所示:

火绒剑监控被攻击计算机的如下:

被攻击的计算机包含病毒的完整功能,除了会被勒索,还会继续使用MS17-010漏洞进行传播,这种传播呈几何级向外扩张,这也是该病毒短时间内大规模爆发的主要原因。如下图:

目前,攻击内网IP需要用户计算机直接暴露在公网且没有安装相应操作系统补丁的计算机才会受到影响,因此那些通过路由拨号的个人用户,并不会直接通过公网被攻击。如果企业网络也是通过总路由出口访问公网的,那么企业网络中的电脑也不会受到来自公网的直接攻击。但是,现实中一些机构的网络存在直接连接公网的电脑,且内部网络又类似一个大局域网,因此一旦暴露在公网上的电脑被攻破,就会导致整个局域网存在被感染的风险。
2. 勒索病毒部分详细分析:
1. 该程序资源中包含带有密码的压缩文件,使用密码“WNcry@2ol7”解压之后释放出一组文件:
a) taskdl.exe,删除临时目录下的所有“*.WNCRYT”扩展名的临时文件。
b) taskse.exe,以任意session运行指定程序。

c) u.wnry,解密程序,释放后名为@[email protected]。

d) b.wnry勒索图片资源。

e) s.wnry,包含洋葱路由器组件的压缩包。病毒作者将勒索服务器搭建在”暗网”,需要通过tor.exe和服务器进行通信。

f) c.wnry,洋葱路由器地址信息。

g) t.wnry,解密后得到加密文件主要逻辑代码。
h) r.wnry,勒索Q&A。

2. 通过命令行修改所有文件的权限为完全访问权限。命令行如下:
icacls . /grant Everyone:F /T /C /Q
3. 解密t.wnry文件数据得到含有主要加密逻辑代码的动态库,通过其模拟的LoadLibrary和GetProcAddress函数调用该动态库中的导出函数执行其加密逻辑。
调用勒索动态库代码,如下图所示:

勒索主逻辑执行,先会导入一个存放在镜像中的RSA公钥,之后调用CryptGenKey生成一组RSA算法的Session key。之后将这组Key的公钥通过CryptExportKey导出,再写入到00000000.pky文件中。将Session key中的私钥用刚导入RSA公钥进行加密,存放在00000000.eky如下图所示:

如果遍历到的文件扩展名在欲加密的文件扩展名列表中,如下图所示:


对于每个需要加密的文件,都会调用CryptGenRadom随机生成AES密钥,之后使用Session Key中的RSA公钥对AES密钥进行加密,存放在加密后的数据文件头中,之后将原始文件数据用该AES密钥进行加密。如下图所示:

整体加密流程,如下图所示:

因为病毒是生成加密过的用户文件后再删除原始文件,所以存在通过文件恢复类工具恢复原始未加密文件的可能。但是因为病毒对文件系统的修改操作过于频繁,导致被删除的原始文件数据块被覆盖,致使实际恢复效果有限。且随着系统持续运行,恢复类工具恢复数据的可能性会显著降低。
四、 关于“WannaCry”新变种的说明
早期版本的“WannaCry”病毒存在“Kill Switch”开关,也就是病毒中检测“http://www.iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea.com”这个网址是否可以访问的代码片段,如果可以访问则不会利用“永恒之蓝”漏洞继续传播。
现在这个域名已经被注册,这个版本“WannaCry”传播功能等于已经关闭,因为这段代码本身没有加密,所以很可能会被得到改病毒样本的“骇客”修改,放开开关,使病毒继续传播。
截止到今日,收集到的所谓“WannaCry”最新版本的“变种”,正如我们推测的一样,网上两个“热炒"变种, SHA256分别为:
32f24601153be0885f11d62e0a8a2f0280a2034fc981d8184180c5d3b1b9e8cf
c8d816410ebfb134ee14d287a34cea9d34d627a2c5e16234ab726cf9fde47ec6
和早期的“WannaCry”相比
SHA256:24d004a104d4d54034dbcffc2a4b19a11f39008a575aa614ea04703480b1022c
有明显人为修改痕迹,如下图所示:

这个样本仅仅是16进制修改了两个字节,让"Kill Switch"失效,这个修改不会影响检测。
另外一个样本除了修改了"Kill Switch"域名,还修改了病毒携带勒索模块。经过测试勒索代码已经被修改坏了,无法运行。如下图:

除了以上两个样本,火绒还截获另一个人为修改的” WannaCry “样本,同样被修改的不能运行
SHA256如下:
99c0d50b088df94cb0b150a203de6433cb97d4f8fd3b106ce442757c5faa35c4