病毒概述
WannaCry勒索病毒是在2017年肆虐全球的勒索之王,其利用了高危漏洞“永恒之蓝”,作为一个无冕之王,WannaCry经常会被面试官问到是否分析过,所以乘着冠状病毒肆虐的这段时间我也来对其进行分析分析,增长一点经验
样本信息
- 我所使用的分析样本信息如下:
文件: C:\vir\wcry.exe
大小: 3514368 bytes
文件版本:6.1.7601.17514 (win7sp1_rtm.101119-1850)
修改时间: 2017年5月13日, 2:21:23
MD5: 84C82835A5D21BBCF75A61706D8AB549
SHA1: 5FF465AFAABCBF0150D1A3AB2C2E74F3A4426467
CRC32: 4022FCAA
- 病毒分析环境:
分析环境:win7 32虚拟机
分析工具:OllyDbg、IDA Pro、Hash、PEID、010Editor、火绒剑、PcHunter等
- 使用PEiD查壳,病毒为VC++ 6.0编写,无壳
病毒行为分析
静态分析
静态分析主要是通过查看样本导入表中的敏感函数,资源等进行病毒行为的预先分析
使用LoadPE进行分析
发现有对文件操作的函数,当然勒索病毒肯定是要对文件加密
对资源进行操作,猜测会释放资源,如图片、加解密文件、一些进程文件等
时间转换函数,刚好可以对应病毒的时间功能
对注册表进行各种操作的函数,病毒必备
资源查看
这部分资源PK开头,可以初步判断为zip格式压缩文件,可以提取文件以作分析
上图就是提取出的资源,这些资源会被用于后续病毒的操作
动态分析
开启火绒剑监控,然后运行病毒样本,待病毒样本运行的差不多之后,分析监控到的日志,主要观察如下的几部分行为:
- 进程操作:查看病毒相关的进程
- 注册表操作:查看是否有注册表设置、创建等操作
- 文件操作:查看是否有文件的创建、修改、删除等操作
- 网络操作:查看有无网络通信等操作
- 行为监控:查看病毒行为
可视行为
- 运行病毒,在样本所在目录下创建了如下的一些文件,具体每个是什么作用,之后进行分析:
不过大致可以看出msg目录中是语言包资源
- 运行后弹出一个名为Wana Decrypt0r 2.0的勒索界面,同时替换了桌面背景,在桌面新建了一部分文件:
进程查看
- 使用火绒剑和Process Explorer进行进程查看,发现病毒进程会定时创建这么几种进程:
如上述图可知,病毒创建了这么几个进程:taskdl.exe
、@WanaDecryptor@.exe
、taskse.exe
和一个不在进程树中但路径为病毒路径的进程taskhsvc.exe
,另外通过火绒剑过滤到的信息来看,病毒还创建了一个cmd.exe
进程
过滤进程进行查看,可以看到很多的进程创建、打开进程、
注册表操作
火绒剑进行过滤分析,查看对于注册表创建和设置的所有项
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1yMZukVn-1582536970282)(E:\病毒漏洞分析\病毒分析报告\永恒之蓝WannaCry分析报告\WannaCry勒索病毒分析.assets\1582376983497.png)]
病毒样本程序在SOFTWARE中添加了一个新的键并把当前的病毒样本路径设置上去
释放后的病毒程序@WanaDecryptor@.exe进行了和IE浏览器相关的一些键值的修改
文件操作
通过分析病毒显示的信息可以看出其对于一些重要文件做了加密操作,具体加密算法和解密的分析待会再做
然后通过火绒剑过滤分析,可以查看到如下的一些结果:
- 首先在每个目录下创建了两个文件
@WanaDecryptor@.exe
和@Please_Read_Me@.txt
,其中一个为病毒程序,一个为提示信息(告诉怎么解密和付钱)
- 在病毒样本所在目录下生成了一堆文件,也就是前面研究过的资源文件,并启动其中的一部分程序,如
taskdl.exe
、taskse.exe
、u.wnry
等
网络监控
查看网络监控,发现病毒会对两个端口进行监听,同时进行了一部分网络的链接操作,初步判断是进行局域网内的一些ip地址进行蠕虫攻击
详细分析
接下来使用OD和IDA对病毒进行详细的分析,彻底剖析其行为
wcry.exe样本程序分析
通过IDA找到WinMain函数地址,同时在OD中找到WinMain函数,接下来进行正式分析:
WinMain函数
首先是WinMain函数,分析如下:
在WinMain函数中完成了对病毒的准备工作,是WannaCry勒索病毒的大致主体代码,下面将一些重要的函数的细节分析贴出来:
SetRegedit
首先进行了注册表操作,病毒在\HKEY_LOCAL_MACHINE\SOFTWARE\
下创建了一个注册表项WanaCrypt@,并将当前程序所在目录的路径添加到这个项下
FreeResourceFile
函数用来在当前目录下释放所有的资源,资源中的文件在之前已经见到过
WriteFileCwnry
函数向文件c.wncry
中写入了比特币账户信息,具体分析如下:
这里的比特币账户信息刚好会出现在勒索软件界面上的支付账户框中,会被用于支付比特币
StartCommand
函数用来运行cmd命令,在上述代码中进行了两次命令行操作:
- 使用了命令
attrib +h .
进行了目录隐藏,但是在我的电脑上似乎没起到隐藏的作用,后面分析发现在这句命令后面多了一个.
,所以隐藏失败了 - 使用命令
icacls . /grant Everyone:F /T /C /Q
来给系统添加一个叫Everyone的用户,且给与这个用户所有的权限
GetApi
函数对于一些需要的API地址进行了获取
CInitSection
函数初始化了两个临界区对象
KeyImportAndMemAlloc
函数用于导入RSA的私钥,用于后面的解密文件,同时申请了两块大小为0x100000的内存空间
DecryptFile
函数大致内容如下:
实现的功能是对释放出的t.wnry
文件进行解密,解密后的文件其实是一个PE结构的文件,在OD中运行函数执行完毕后查看eax中的内存空间中存储的内容如下:
可以看出这是一个PE格式的文件,将其提取出来(提取0x10000字节,OD使用Ctrl+Shift+X复制,010使用Ctrl+Shift+V粘贴)使用010保存为exe文件然后使用PEiD查看,发现解密后其实是一个dll文件,并且从后面的分析中可以知道这个模块中进行了病毒的一些重要操作,可以说是病毒的核心模块,后面需要具体分析
GetFunAddr
此函数解析了之前解密后的PE数据,从导出表中找到了函数TaskStart
的地址,这个地址就用于之后的调用,可以认为它是t_wnry.dll
的一个接口,通过这个函数就开始运行病毒的主要功能
FF,t_70)
t_wnry.dll模块分析
这个模块是病毒做坏事的核心部分,主要进行了包括加密文件、显示勒索册程序、蠕虫传播等一些列操作
首先开始是TaskStart
函数,使用IDA加载t_wnry.dll
模块进行分析,从Export导出表中找到TaskStart
函数进入分析
TaskStart
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200224174420336.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM1MTU2NTk2,size_16,color_FFFF
下面详细叙述一些没被IDA分析出来的一些重要函数:
CanCreateMutex
创建一个指定名称的互斥体,用来判断是否多开
一些前面分析过的基础函数
- ReadFileCwnry:
函数用来读取c.wnry
文件中的内容,这里面存储的是密钥,这个函数前面分析过
2. CheckKey:
函数用来检查读取到的密钥
- GetApi:
函数用来读取一些需要的API
CreateMutexAndCheck
函数打开前面创建的互斥体,不能打开就新建一个新的互斥体
CheckFileExist
函数用来检查00000000.dky
是否存在,第一次没有释放,所以是不存在的
CreateKeyFile
几个回调函数分析
ProcCreateResFile
函数用于创建一个00000000.res
文件,并向其中写入数据,写入的数据是一串大小为0x8个字节的随机数和大小为0小字节的时间数据
ProcCheckDkyFile
函数用来一直检测00000000.dky
文件是否存在
ProcCheckNewDisc
函数用来检测是否有新的磁盘产生,若有就对其文件进行加密操作,加密函数稍后进行分析
ProcRunTaskdl
以隐藏的方式运行taskdl.exe
程序,这个程序被每个三秒启动一次,绝对有特殊作用,待会进行分析
ProcRunExeAndSetRegedit
函数用来运行两个程序taskse.exe
和@WanaDecryptor@.exe
,运行程序函数较为简单不再分析,同时也设置了一个注册表启动项
SetExeRunRegedit
通过命令行的形式设置注册表启动项,命令行格式为:
'reg add %s /v "%s" /t REG_SZ /d "\"%s\"" /f'
加密算法分析
老实说这个加密函数的分析是在是折磨人,东西多而且复杂,在这里参考了部分其它大佬的分析过程,万望勿怪。
函数太多,以下只详细贴一些比较重要的函数分析。
EncodeFirst
首先就是EncodeFirst函数分析,这是总体加密过程的入口函数,也可以称为是第一层函数,函数进入后是一串特别特别长的代码,具体多复杂就像图示一样:
函数具体分析如下:
MakeKeyFile
函数在内部进行判断@WanaDecryptor@.exe
文件是否存在,不存在就创建并拷贝u.wnry
中的内容到其中,同时也会创建一个@WanaDecryptor@.exe.ink
快捷方式,这个程序和快捷方式就是桌面上的那个,他就是勒索程序的主界面
CreateReadMe
函数创建了@Please_Read_Me@.txt
提示文件,文件中具体内容如下所示:
主要就是提醒用户,你被加密了,你该交钱了,不交钱没得搞哦
EncodeSecond
加密函数的第二层,经过分析发现内部实现了对桌面和文档中的文件进行加密,然后有查找了其他用户,也对其中的文件进行了加密操作
EncodeThread
加密函数第三层,进行了申请空间和一系列初始化操作,然后调用加密函数第四层进行了加密的开始
EncodeFourth
函数内部进行了递归遍历,在遍历的过程中分析文件后缀是否为需要的,是的话就进行加密操作