病毒分析报告
样本名 |
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