WannaCrypt0r分析报告

 

病毒分析报告

 

样本名

WannaCrypt0r

版本

原版

时间

2018-05-08

平台

Windows 7-32位

 

目录

1.样本概况... 3

1.1 样本信息... 3

1.2 测试环境及工具... 3

1.3 分析目标... 3

1.4 样本行为分析... 3

1.4.1查壳... 3

1.4.2 原样本分析... 4

1.4.3 tasksche.exe分析... 6

1.4.3 crypt.dll分析... 12

2,感谢... 17

 

1.样本概况

1.1 样本信息

病毒名称:  永恒之蓝

所属家族:  勒索性病毒/蠕虫病毒(Worm) 

大小:       3723264 bytes

MD5值:     DB349B97C37D22F5EA1D1841E3C89EB4

SHA1值:    E889544AFF85FFAF8B0D0DA705105DEE7C97FE26

CRC32:     9FBB1227

 

1.2 测试环境及工具

Win7 32位、OD/IDA/x64DBG/火绒剑/ExeiofoPE/

1.3 分析目标

分析病毒利用漏洞方式,网络连接,病毒的恶意行为

1.4 样本行为分析

1.4.1查壳

 

Exeinfo 可查是该程序无壳,使用的是vc++/MFC 程序编写

1.4.2 原样本分析

进入WinMain后,可以发现入口处程序会尝试连接一个域名:

http://www.iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea.com

 

成功连接则程序不展开相关行为;否则执行sub_408090;

 

在sub_408090函数内部,分为两个模块:

 

在第一轮程序执行的是条件为false的模块,其功能主要是创建服务,释放并执行一个tasksche.exe /i。

创建服务:

创建是一个名为mssecsvc2.0,服务说明为“Microsoft Security Center (2.0) Service”的是服务:

 

原始样本会从资源中加载,释放一个名为tasksche.exe的文件,并且以tasksche.exe/i的方式启动:

 

接着分析tasksche.exe;

1.4.3 tasksche.exe分析

tasksche.exe启动后,首先,会将自身拷贝到C:intellgxbrzjmuzoytl531

 

检查命令行参数中是否有/i这个参数:

 

sub_401B5F中:检查并尝试在ProgramData目录 或 Intel目录 或 Temp系统临时目录 下创建前面以计算机名算出的标识的目录:

 

将创建的目录设置为6即为隐藏和系统:(FILE_ATTRIBUTE_HIDDEN 和 FILE_ATTRIBUTE_SYSTEM )

 

复制自己并重命名为tasksche.exe:

 

将taskche.exe以服务方式启动,如果失败就以普通方式(/i)启动,这样启动的入口点不一样了,内部实现的逻辑就不一样了:

 

互斥体检测启动是否成功:

 

上面几项都成功完成后才能继续,否则退出

创建注册表项HKEY_CURRENT_USERSoftwareWanaCrypt0rwd,写入当前路径值:

 

然后就从资源中释放加密过的taskdlexe、taskse.exe,有比较复杂的解密函数,key为Wncry@2ol7:

 

在当前目录下读取c.wnry文件:

 

如果读取到了c.wnry文件,就会把13AM4VW2dhxYgXeQepoHkHSQuy6NgaEb94通过随机数加密后写入c.wnry,而这串数字就是比特币的地址,也就是说c.wnry文件中保存着加密后的比特币地址:

 

下图是c.wnry的加密算法:

 

执行这两句命令:

attrib +h .

icacls . /grant Everyone:F /T /C /Q

attrib命令:将DisplayName工作目录设置为隐藏

icacls命令:开放目录的用户权限

 

接着,会读取前期释放的一个名为t.wnry的文件,并对其中的内容进行解密,解密后的内容为一个dll文件,但是该dll文件并不会写入磁盘,而是在内存中直接执行:

 

将该文件从内存中dump 出来,重命名为crypt.dll,再次分析

1.4.3 crypt.dll分析

Crypt.dll仅有一个自定义的导出函数,这个导出函数是其行为展开的入口:

 

先加载了kernel32.dll,动态获取后续需要的API:

 

创建互斥体,用于判断自身重入问题:

 

然后创建了四个线程:

 

分析后作用分别是:

1.将tasksc.exe加入到HKCUSOFTWAREMicrosoftWindowsCurrentVersionRun项,用于开机自启动

2.遍历驱动器,并检查是否有U盘等移动存储插入

3.循环调用taskdl.exe

4.写入并执行vbs脚本

遍历文件并加密文件:

 

所加密的文件类型约有两百多种:

罗列出部分加密文件的后缀名:

 

加密方法:

1,遍历到要感染的文件,被AES加密,AES加密使用的KEY,是根据每个文件随机生成的。随机生成的Key,之后会被下一步的RSA 2048加密。

2,样本在针对每一台机器上,会随机生成一对RSA 2048密钥,其中公钥保存在00000000.pky中,用于加密上一步的AES KEY,私钥将被加密后存在文件00000000.eky中

3,上一步的RSA私钥,会被另一个RSA 2048公钥加密,该加密后的私钥仅勒索者本人知道。、

 

文件加密以WANACRY为特征头:

 

知道以上思路后,就比较容易理解该样本的加密流程了:

1,新建文件,新文件名为原始文件名.WANACRYT(T表示临时文件,用于临时处理文件加密)

2,在新的文件头部写入8字节的WANACRY!加密标志

3,写入4字节的长度标识,表示后面紧跟的加密后的文件加密密钥的长度

4,写入256字节长度的加密后的文件加密密钥(该密钥解密后为16字节长度的字符串,使用该字符串AES加密文件)

5,写入4字节长度的 勒索者作者定义的类型,不为4的文件类型记录到f.wnry文件中,用于后期免费解密。

6,写入8字节长度的原始文件长度

7,使用随机生成的16位字节的密钥利用AES加密算法进行加密,并写到上述内容之后。

8,修改新文件的文件时间为源文件的时间。

9,删除原文件,并将新文件重命名为WANACRY。

10,     若文件为可免费恢复的文件,则将文件名记录到f.wnry文件中。

 

至此,分析基本结束。

上次有人问我,如果针对永恒之蓝该怎么做到抑制它,而不专杀掉:

抑制构思如下,

1,微软补丁

2,它有检测互斥体的位置,可以从这里入手,Hook 或者注入

3,它利用的CVE-2017-0143------CVE-2017-0148漏洞传播自身,而此漏洞需要使用445端口传播,在组策略中关闭此端口

2,感谢

Freebuff的epsky: http://www.freebuf.com/vuls/134602.html

看雪的白小菜:    https://bbs.pediy.com/thread-217636.htm

原文地址:https://www.cnblogs.com/by-clark/p/9126911.html