永恒之蓝
介绍
WannaCry勒索病毒 通过windows操作系统漏洞EternalBlue永恒之蓝 发起攻击。3月14 微软已经发布补丁,由于很多受害者没有及时安装补丁,导致被病毒攻击,计算机中的文件被加密。
断网分析
该病毒需要断网分析,分析时候,如果目标服务器存活,会进行网络通信,发送网络请求。这样做会导致,一方面攻击者知道你的出口ip,可以实施物理攻击!另外一方面,攻击者会关闭服务器或者其他操作;
危害
系统被该勒索软件入侵后,将弹出勒索对话框
加密系统中的照片、图片、文档、压缩包、音频、视频等几乎所有类型的文件,被加密的文件后缀名被统一修改为“.WNCRY”。
攻击者极其嚣张,号称“除攻击者外,就算老天爷来了也不能恢复这些文档”(该勒索软件提供免费解密数个加密文件的功能以证明攻击者可以解密加密文件,点击 <Decrypt>
按钮,就可以免费恢复一些文档。”该勒索软件作者在界面中发布的声明表示,“3 天内付款正常,三天后翻倍,一周后不提供恢复
该勒索软件会将@WanaDecryptor@.exe 复制到被加密文件的文件夹下,并衍生大量语言配置文件、具有加密功能的文件、窗体文件等。这个文件曾被认为是 U 盘传播的恶意代码,但实际上这个程序只是勒索程序的界面程序,并没有传播、加密
等恶意功能。
该病毒感染的计算机会产生大量 445 端口连接请求,包括内网 IP 和随机外网 IP 地址。
样本分析
本次事件的样本利用了“影子经纪人
”(Shadow Brokers)泄露的 NSA“永恒之蓝
”漏洞来进行传播,
病毒运行的过程分为三步:
- 主程序文件利用漏洞传播自身, 运行“WannaCry”勒索程序;
- “WannaCry”勒索程序加密文件;
- 勒索界面(@WanaDecryptor@.exe)显示勒索信息、解密示例文件。
主程序文件分析
样本主程序是该事件的主体传播程序,负责传播自身和释放运行“WannaCry”勒索程序,随后“Wann
aCry”执行加密用户文件和恶意行为, 样本具体运行流程参见下图
具体流程如下:
- 1.主程序运行后会首先连接一个“域名”,如果该域名可以访问,则退出,不触发任何恶意行为。如果该域名无法访问,则触发传播和勒索行为。当前域名已经被英国安全人士注册,可以正常访问。
- 2.读取资源文件释放至%windows%\tasksche.exe(WannaCry 勒索程序),并创建进程运行。
- 3.主程序样本首先会创建一个
mssecsvc2.0
的服务项,随后启动该服务(网络传播行为需要以服务启动才会触发)。
- 4.样本会首先判断是否处于内网环境,如果处于内网中则尝试对内网主机进行感染,进行判断
- 内网 IP 段分别是:
- 10.0.0.0~10.255.255.255
- 172.16.0.0~172.31.255.255
- 192.168.0.0~192.168.255.255
- 内网 IP 段分别是:
- 5.随后连续攻击外网地址。外网 IP 地址通过随机数生成算法,生成 4 个随机数拼接而成,生成随机数的部分:
- 6.拼接 IP 地址,创建漏洞利用线程。
- 7.模拟的 IP 生成算法如下:
IP 生成算法
from win32api import *
import random
import time
random.seed(GetCurrentThreadId() + time.time() + GetTickCount())
firstTick = GetTickCount()
while True:
ip_1, ip_2, ip_3, ip_4 = 128, None, None, None
flag1, flag2 = None, None
while ip_1 == 128 or ip_1 >= 224:
ip_1 = random.randint(0, 255)
ip_2 = random.randint(0, 255)
ip_3 = random.randint(0, 255)
ip_4 = random.randint(0, 255)
time.sleep(1)
while ip_4 <= 255:
print str(ip_1) + "." + str(ip_2) + "." + str(ip_3) + "." + str(ip_4)
ip_4 += 1
- 8.随后利用
MS17-010—SMB
漏洞进行网络传播。
- 9.样本在利用漏洞
MS-010
获取目标主机权限后,并不会直接发送自身(exe)到目标,而是发送一段经器中执行。Payload
由shellcode
+包含样本自身(在 dll资源中)的dll
组成。Payload
分为64
位与32
位。64 位的 Payload 由长度为0x1800 字节的 shellcode
与长度为0x50d800 字节
的 dll 组成,64 位的shellcode
部分截图如下:
- 10.
32
位的Payload
由长度为0x1305
字节的shellcode
与长度为0x506000 字节的 dll
组成.
32 位的shellcode 部分截图如下:
- 11.
dll
同样也分为 64 位与 32 位版本,由两部分组成,代码部分与样本自身。根据目标机器系统的不同,读取不同版本的代码部分,再获取样本自身进行拼接得到完整的 dll。
64 位的 dll 代码部分长度为 0xc8a4
字节,部分截图如下:
dll 具有一个导出函数 PlayGame
,功能比较简单,就是将自身的资源文件 W
(主程序)释放,保
存为 C:\WINDOWS\mssecsvc.exe
并执行。
- 13.漏洞利用成功之后,执行
shellcode
,使用 APC 注入,将生成的dll 注入到进程 lsass.exe
中,并调用 dll 导出函数PlayGame
,完成对主程序自身(mssecsvc.exe)
的释放并运行的操作。
WannaCry”勒索程序(tasksche.exe)分析
解压资源文件、动态加载 DLL
-
WannaCry
勒索程序内置 zip 加密的资源数据,样本运行时会使用“WNcry@2ol7
”密码解密后释放
到当前路径,这些数据为勒索文字提示、勒索背景桌面、勒索窗体语言配置、加密的 dll(动态加
载)和 key 等文件。
-
- WannaCry 文件包含一个加密的 dll 文件,
WannaCry
勒索程序会解密并动态加载调用其“TaskStart
”导出函数,相关的文件加密等恶意行为都是在该 dll 中实现的。
- WannaCry 文件包含一个加密的 dll 文件,
-
- 在加密用户文件时,会规避一些系统目录和自身文件,值得注意的一点是样本还会规避这个路径
的文件:“This folder protects against ransomware. Modifying it will reduce protection”。
-
- 该路径是
CybereasonRansomFree
防勒索软件的诱饵文件路径:
- 该路径是
加解密流程分析
样本自身存在一个主 RSA 公钥 1
,攻击者保留主 RSA 私钥 1
。在加密文件之前首先生成一对 RSA 子密钥对
,分别为子公钥
和子私钥
,随后样本对子私钥使用主 RSA 公钥 1
进行加密保存为“00000000.eky
”,然后将子公钥保存为“00000000.pky
”做后续使用。随后样本生成用于加密文件的 AES 密钥,对文件进行加密,加密后的文件内容为 M2,同时使用“00000000.pky”加密 AES 密钥并与文件大小等数据生成 M1,随后将
M1、M2 合并并添加“
WANACRY!”文件头保存文件加密文件。在解密文件时,攻击者将“
00000000.eky”解密,样本收到解密文件后将其保存为“
00000000.dky`”用于解密文件。样本自身还存在一对主 RSA公钥、私钥对,用于解密演示文件。具体加密解密流程图如下:
- 1.样本加密文件的算法是
AES
,而 AES 密钥被RSA 子公钥
加密,RSA 子私钥被 RSA 主公钥 1 加密,
下图为 RSA 主公钥 1:
- 2.生成的 RSA 子密钥对,公钥会保存在系统中,私钥会使用
RSA 主公钥 1 进行加密
,保存到本地为eky,在付款后回传给攻击者进行解密,样本收到后保存为 dky。
- 3.在对文件进行加密时,首先会生成新的 AES 密钥,使用 RSA 子公钥将生成的 AES 密钥进行加密,保存到要加密文件的开头部分,在标识符之后“
WANACRY!
”,随后使用 AES 密钥对文件进行加密。下图为被加密后的某文件。
每个被加密的文件均使用不同的 AES 密钥,若想对文件进行解密操作,需要先获取 RSA 子私钥
,将文件头部的 AES 密钥
进行解密操作,再使用 AES 密钥
,对文件体进行解密操作。如果没有 RSA 子私钥
,则AES 密钥
无法解密,文件也就无法解开
- 3.加解密时对文件的操作分析
- 样本在加密文件时会根据不同的目录和文件大小采取不同操作,桌面、文档、用户文件夹内的文件会被加密,且原始文件会在覆盖写入后删除,其他文件只会加密后将原始文件删除或移动到
%TEMP%
目录或回收站,然后定时清空%TEMP%
或回收站,因此这部分原文件只是被删除了,可以进行恢复,下面是对这部分操作的具体分析:-
1.读取原始文件,进行加密操作,生成新的加密后的文件,原始文件未处理。文件加密完成之后,原始文件与加密后的文件共同存在。
-
2.每隔一段时间,会将原始文件(未加密的文件)移动到
%TEMP%
目录下,并移动两次。 -
3.此时原始文件已经不存在了,但还执行删除和移动两个操作
-
4.样本创建一个线程,每隔 30s 调用一次
taskdl.exe
(主模块释放出来的),将%TEMP%
目录下的*.WNCRYT 进行删除。
根据上面的分析可知,部分文件只是被移动到%TEMP%
目录并删除,因此部分被删除的分析存在被恢复的可能,这也是使用相关数据恢复工具的可以恢复部分被删除文件的原因。
-
- 样本在加密文件时会根据不同的目录和文件大小采取不同操作,桌面、文档、用户文件夹内的文件会被加密,且原始文件会在覆盖写入后删除,其他文件只会加密后将原始文件删除或移动到
勒索界面、解密程序(@WanaDecryptor@.exe
)分析
“@WanaDecryptor@.exe
”是样本加密完用户数据显示的勒索界面程序,负责显示比特币钱包地址,演示部分解密文件,如果想要解密全部文件需要支付“赎金”。由于暗网(Tor)的原因,感染的用户多数显示的是默认的三个比特币钱包地址,这使得很多人认为攻击者无法辨别谁付了款,无法为指定用户解密文件。
经过分析,我们认为从代码设计上来看,存在攻击者识别付款用户的可能性,具体支付解密流程见下图
- 1.
@WanaDecryptor@.exe
程序首先带参数运行,程序运行后不显示页面,会启动暗网程序taskhsvc.exe
,从而使主机通过暗网连接攻击者的服务器。因此感染 WannaCry 勒索程序时会产生大量连接9001、9002、443
等端口的连接,这些端口都是暗网(Tor)节点连接地址。
- 2.在暗网(Tor)程序
taskhsvc.exe
中我们发现了 169 个暗网(Tor)节点 IP 地址。
- 3.``@WanaDecryptor@.exe
会创建一个“00000000.res”,内容为加密的文件数量、大小等信息(受害用户标示),随后
@WanaDecryptor@.exe` 样本将该文件内容回传到攻击者的暗网(Tor)服务器。
- 4.服务器收到用户的上传的“
00000000.res
”内容后会返回一个比特币钱包地址(推测该比特币钱包
地址可能与受害用户的“00000000.res
”一一对应),然后样本更新 c.wnry
配置文件中的比特币钱
包地址。随后样本再次以无参数运行,此时会读取该配置文件并显示新的比特币钱包地址。(因为
暗网(Tor)或其他网络原因,大部分连接失败,所以导致大部分被攻击用户显示的均为默认钱包地
址)。
- 5.收到新的比特币钱包地址后,样本会判断是
否在 30-50 的长度
之间。
- 6.当用户根据新的比特币钱包地址付款后,点击“Check Payment”后,会将本地的“00000000.res”
和“00000000.eky”回传到服务器,如果攻击者确认这个“00000000.res
”文件对应的比特币钱包
收到付款,则将“00000000.eky
”文件解密后返回给目标主机。
- 7.受害主机收到服务器解密“
00000000.eky
”内容保存为“00000000.dky
”,随后样本遍历磁盘文件,
排除设置好的自身文件和系统目录文件,使用收到的“00000000.dky
”密钥解密后缀为.WNCYR 或.WNCRY 的文件
。
通过我们的分析发现,样本会上传用户标示文件,并从暗网(Tor)服务器获取比特币钱包地址(从代码逻辑分析,并未连接成功接收到服务器的比特币钱包地址)。从这样的代码设计和逻辑来看,我们推测攻击者能够通过为每一个感染用户配置比特币钱包地址的方式识别付款用户,存在为付款用户解密文件的可能,
但是前提是用户感染“魔窟”(WannaCry)时可以成功的连接暗网网络,并显示出新的比特币钱包地址。
安天强烈建议每一个受害者都拒绝支付赎金,“对敲诈者的妥协,就是对犯罪的鼓励!”。目前安全厂商已经发布恢复和解密文件的方法和工具,可以恢复、解密大部分数据,具体详情可参见“4 文件恢复和解密工具”章节。
WannaCry2.0、WannaCry1.0、变种等问题的分析
魔窟”(WannaCry
)勒索软件爆发以来,出现过很多关于版本和变种的乌龙消息,相关消息给公众
和用户造成较大的恐慌。安天认为有必要再次对这个问题予以说明。实际上,该病毒确实有两个版本,其.0 版本最早于 3 月 29 日被安天捕获,其并无主动传播模块,是一个普通的勒索软件,但并非一个蠕虫,也不受“开关域名”的约束,而此时 NSA“永恒之蓝”相关漏洞利用工具也尚未泄露。其 2.0 版本就是在017 年 5 月 12 日大规模爆发并被各安全厂商所分析的版本。而网上所谓的变种等问题,也仅是被修改的样本及一些其他的勒索程序如“UIWIX
”,并非本次事件的变种病毒。
安天对以下两种说法给予明确解释
-
1.“发现新变种 2.0 样本”:该消息是由不了解该事件的厂商发出,将本事件主程序释放的
WannaCry2.0
勒索程序当作新发现的样本。事实上,WannaCry2.0
是单独的勒索程序,而本次事件的样本是一个具有传播、释放运行WannaCry2.0
功能的独立程序,具体可参见图 8-勒索软件“魔窟”(WannaCry)运行流程。 -
2.“发现新变种无‘域名开关’样本”,这个消息有两个版本:
-
1).有分析团队将样本主程序释放的勒索程序本身误解读为无“域名开关”的主程序样本,声称这就是该无“域名开关”版本。
-
2).5 月 14 日的确发现无“域名开关”样本和修改“域名开关”样本,有人称这些是变种样本,实际上这并不是病毒变种,仅仅是人为的将“魔窟”(WannaCry)样本中的几处二进制进行了修改,没有改变样本主体功能,因此并不能称之为新变种。
-
-
新增多国语言配置信息
-
内置暗网(Tor)程序
-
新增删除临时目录文件和关闭系统备份程序。
WannaCry1.0 运行后释放很多配置文件,其中“c.wry”存在邮箱地址 wanna18@hotmail[.]com,这个地址在 WannaCry2.0 配置文件中不存在。
通过分析确认该邮件地址是一个废弃的字段,在样本的绘制界面代码中,存在着用 mailto:%s(即 Email地址)来向该地址发送 Email 的选项。从顺序上来看,应该是 Contact Us 超链接的原型,但最终作者并没有使用此功能,而是新建了一个窗体来发送信息。在 2.0 版本中的配置文件中,直接从配置文件中删除了这一字段。1.0 版和 2.0 版代码结构几乎完全相同。
通过上述分析可以确定,WannaCry1.0 与 WannaCry2.0 存在版本演进关系,且均为单独的勒索程序,只是 WannaCry2.0 被本次事件使用,通过主程序自传播。目前尚不清楚 WannaCry1.0 作者与本次事件是否存在联系。WannaCry1.0 样本中的邮箱地址是用来联系作者的,与 Contact Us 功能类似,但该地址实际未被使用,不能确定是否与 WannaCry1.0 样本的使用者有关,也不能确定是否与本次事件有关。
文件恢复与解密工具
“魔窟”(WannaCry)事件爆发以来,大量用户十分关注能否还原被加密文件问题。经过我们的分析确认,在不支付赎金的情况下还原被加密文件主要有两种方法,一是使用数据恢复软件恢复临时文件夹下被删除的文件;二是在 XP/Win7 系统下感染“魔窟”(WannaCry)后未重新启动系统的情况下,加密密钥还存储在内存中,可利用相关密钥进行文件解密。
文件恢复
通过 3.2.3 的分析可以发现,样本对文件加密时会将文件首先移动到%TEMP%目录,因此部分数据可以恢复,我们尝试使用专业数据恢复工具进行深度扫描,对%TEMP%目录下的文件进行恢复操作,得到恢复后的文件,均为未加密的文件。恢复出的部分文件截图如下:
测试结果:
被加密的文件数量在 1600 左右,恢复出的文件数量在 900 左右,包含文本、图片、zip 等等。
样本的删除操作是将原始文件移动到系统盘%TEMP%目录下,命名为*.WNCRYT,然后再进行删除,该操作是分批进行的,写入一批,删除一批。而对于跨卷操作,对原始文件只是标记为删除,文件还寸在。
如:将 D 盘的文件,移动到 C 盘,而 D 盘没有写入新的文件,那么 D 盘的文件是可以使用数据恢复程序进行恢复的。
数据恢复操作:
对非系统盘,使用数据恢复软件进行恢复操作。
对系统盘中%TEMP%目录下的文件*.WNCRYT
进行恢复操作,通过文件头判断文件格式,修改后缀,即可得到正常文件。
解密工具
北京时间 2017 年 5 月 19 日晚,国外研究人员 Adrien Guinet 发现,对于感染了“魔窟”(WannaCry)的 Windows XP
和 Windows 7
两个操作系统,在没有重新启动的前提下,勒索软件的加密私钥仍可以在内存获取,从而实现解密文件。基于此研究成果,安天立即翻译了该外文文献并分享到各专业群,同时改进相关工程代码研发解密工具。
某安全公司根据 wanakiwi 项目的分析成果和工程代码,做了 BUG 调试,并提供本地化和易用性的修改。经测试确认,对于感染“魔窟”(WannaCry)勒索软件的 Windows XP&2003
系统在尚未重启的前提下,某安全公司文件解密工具可有效对被加密文件进行解密,在 Windows 7 环境下也有成功的案例。