前言
WannaCry(又叫Wanna Decryptor),一种“蠕虫式”的勒索病毒软件,大小3.3MB,由不法分子利用NSA(National Security Agency,美国国家安全局)泄露的危险漏洞“EternalBlue”(永恒之蓝)进行网络端口扫描攻击,目标机器被成功攻陷后会从攻击机下载WannaCry木马进行感染,并作为攻击机再次扫描互联网和局域网其他机器,行成蠕虫感染大范围超快速扩散。木马母体为mssecsvc.exe,运行后会扫描随机ip的互联网机器,尝试感染,也会扫描局域网相同网段的机器进行感染传播,此外会释放敲诈者程序tasksche.exe,对磁盘文件进行加密勒索。木马加密使用AES加密文件,并使用非对称加密算法RSA 2048加密随机密钥,每个文件使用一个随机密钥,理论上不可逆向破解。
一:目录
- 1.目录
- 2.样本信息
- 3.行为分析
- 4.样本分析
- 5.技术总结
二:样本信息
- 1.样本名称:mssecsvc.exe
- 2.样本md5:db349b97c37d22f5ea1d1841e3c89eb4
- 3.是否加壳:无壳
- 4.编译语言:vc++
- 5.样本来源:来自于网络收集
三:行为分析
- 行为分析:

四 样本分析
mssecsvc.exe(母本文件)
- 存在一个switch,如果联网访问该网址
http://www.iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea.com,恶意代码不会执行

根据启动参数判断,是否第一次感染,如果第一次感染,创建服务,然后释放恶意代码到C://windows/tasksche.exe,并以/i参数执行恶意程序tasksche.exe。


如果不是第一次被感染,则使得服务的ServiceMain函数连接到服务控制管理器上,成为服务控制调度程序线程。

- ServiceMian函数作用:利用MS17_010漏洞漏,先读取自身的存在的payload的利用代码,根据系统不同需要读入两套不同的payload。



- 利用多线程,分别对内网和外网扫描。对于公网,病毒首先产生随机IP,然后连接到445端口,进行传播。


- 对于内网,选取同一网段的所有IP,然后利用445端口,进行传播。


tasksche.exe(释放模块)
- 判断传入参数是否是/i。

- 向c://intel//xxxxx//中释放同一个恶意文件,实现多备份。

- 利用cmd.exe /c以不显示的方式执行tasksche.exe。之后创建服务。并启动服务



- 创建互斥体,然后创建tasksche.exe创建服务。

- 创建注册表,然后利用WNcry@2ol7参数,释放多个文件。
- taskse.exe:
将权限提升至SeTcbPrivilege权限

- taskd.exe:
删除.WnCy文件

- b.wnry:
图片bmp
- c.wncy:
洋葱浏览器地址和洋葱路由信息,黑客团伙利用比特币转账,减少被抓获的风险
- r.wncy:
问答信息
- s.wncy:
洋葱路由器安装包和数据.rar
- t.wncy:
后期恶意dll的加密版本 - u.wncy:
文件感染后的提示界面
- taskse.exe:
- 向c.wncy中写入比特币钱包地址,利用暗网进行交易

- 调用attrib.exe +h来设置文件隐藏属性

- 调用icacls.exe来设置所有用户具有完全控制权限

- 读取t.wncy文件到内存,解密出其中的一部分信息,寻找文件头,然后复制节区信息,形成完整的PE文件。




- 创建刚刚复制到内存中的dll文件的导入函数。然后调用导入函数。操作在内存中进行,文件不落地,有效规避了杀毒软件的查杀。


Inject.dll(感染模块)
- 此部分由tasksche.exe由t.wncy进过解密拷贝到内存,分析的时候把内存数据dump到内存,操作如下:首先定位到内存空间,od显示的内存段是整个DLL驻留的地方,不需要考虑其大小。将所有的hex选中后,然后右键
复制到二进制,粘贴就可以了。 - 感染模块首先初始化一些操作,例如创建互斥体,获取函数地址,初始化加密模块。

- 然后创建5个线程:
- 第一个线程:写入文件数据。

- 第二个线程:读取解密文件数据

- 第三个线程:遍历和加密文件

- 第四个进程:间隔特定时间创建taskdl.exe进程,然后终止。

- 第五个线程:写入自启动项run,实现自启动。

- 第一个线程:写入文件数据。
- 复制解密程序,提取洋葱浏览器

- 利用kill命令杀死指定进程,防止加密的时候文件占用


- 只加密本地硬盘的文件。


排除以下文件路径和释放出来的文档说明


12345678910\ProgramData\Intel\WINDOWS\Program Files\Program Files (x86)\AppData\Local\Temp\Local Settings\Temp@WanaDecryptor@.bmp@WanaDecryptor@.exe.lnk@Please_Read_Me@.txt移动三个说明文件。

- 重新创建文件,用来加密原始文件,加密完毕后将原始文件删除。



五 技术总结
1 如何转储shellcode
- OD,和其他dump软件可能没有对该段具有读写权限,导致dump失败
- 首先定位到内存空间,od显示的内存段是整个DLL驻留的地方,不需要考虑其大小。
- 将所有的hex选中。
- 然后右键
复制二进制,粘贴就可以了。
2 传播技术
- 微软关于MS17-010的介绍:https://docs.microsoft.com/zh-cn/security-updates/Securitybulletins/2017/ms17-010
- github上,病毒使用的利用恶意代码:https://github.com/rapid7/metasploit-framework
3 加密流程
- 最开始,只是分析出来了函数是一个加密函数,并没有分析出加密流程,通过查看各个厂商的安全分析报告,将加密流程补上。

- 首先利用CryptGenRandom产生AES随机秘钥。因为AES加密是对称的,也就是说如果知道了加密秘钥的话,很容易得到原始数据,通常会利用RSA对AES秘钥进行加密。

接着,在将进过RSA加密的秘钥写入文件中,利用AES对源文件进行加密,

密码学参考自:
分析报告参考自: