首页
社区
课程
招聘
[讨论][讨论]记录Wannacry病毒的分析
发表于: 2022-1-8 15:27 12809

[讨论][讨论]记录Wannacry病毒的分析

2022-1-8 15:27
12809

样本信息:

文件: D:\Virus\样本\永恒之蓝WannaCry样本

PEID分析:

ResourceHacker查看样本资源:

发现资源中藏着一个PE文件,可能会释放文件,我们可以把它提取出来保存一份,根据微步云沙箱的检测这是一个EXE文件,所以这里我们把它保存为EXE文件:

行为信息:

释放PE文件到C:\Windows\taskse.exe

C:\ProgramData\znemvazsnwpqy217\taskse.exe

C:\ProgramData\znemvazsnwpqy217\@WanaDecryptor@.exe

启动C:\Windows\taskse.exe

自我复制

进程信息:

打开网络相关设备\Device\Afd\Device\Nsi

打开进程

创建进程C:\Windows\taskse.exe

跨进程写入数据

恢复目标进程线程

注册表信息:

文件信息:

打开大量的DLL文件

遍历目录寻找.pbk文件->没有找到

C:\Windows下创建了tasksche.exe文件并设置文件属性

C:\ProgramData\znemvazsnwpqy217下创建了tasksche.exe文件并设置文件属性

执行情况:

启动进程->样本本体

加载模块->C:\Windows\winsxs\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.7601.17514_none_41e6975e2bd6f2b2\comctl32.dll

启动进程->C:\Windows\tasksche.exe

退出进程->样本本体和C:\Windows\tasksche.exe

然后LordPE查看它的输入输出表,可以看到输出表就一个函数PlayGame,有点奇怪

sub_409160()

除了获取网卡信息以及IP地址列表、网关列表之外还有大量的数据计算,实在不好分析,这里就使用OD动态调试吧,看看到底有什么结果:

Sub_4076B0()

继续向下分析可见这个线程就是用来收发数据的

总结一下Sub_408000():

总结一下Sub_407BD0():

这个函数调用了两个函数,我们分别进入分析:

这个函数挺简单的,就是创建并开启了一个服务:

<mark>注意</mark>此时程序就是以附加参数的方式启动,下次检测的时候就会进入参数大于1的分支!

这个函数就是创建文件并执行exe的函数

还记得前面从样本提取出来的EXE文件吗?它就是R资源

小结一下Sub_407F20函数的功能

按照现有的分析可以梳理一下大致的流程:

首先,由于这个被释放出来的文件是没有加壳的,所以我们可以直接将它载入IDA定位到main查看其代码:

这个判断的条件有点多,我们一个一个去看:

所以这个函数就是尝试在C:\WINDOWS\ProgramDataC:\WINDOWS\IntelC:\WINDOWS或临时目录下创建服务并设置其属性为隐藏。

接着就来了三个函数:

如果有目标服务就直接开启了,没有的话以tasksche.exe所在的完整路径创建一个服务并运行

先关注一下这个函数有三个参数,第一个就是路径,后两个都是0

就是创建了一个隐藏的进程去运行程序

小结一下,sub_401F5D函数就是创建一个服务或进程来运行tasksche.exe

回到主函数,继续往下看:

如果参数是1,就设置当前路径为注册表值
如果是0,就获取注册表中病毒路径设置到当前目录中

这个Str的字符是这一串,然后我们点进去看看这个函数有什么操作:

一进来就寻找那个ZIP包的资源

猜测这个sub_4075AD就是用来解压的函数,我们可以验证一下,那个Str就是密码:

真的就成功解压缩了,把病毒资源释放出来了

注意:该函数调用的时候后三个参数都是0

应该是对t.wnry文件进行操作

到这里都是读取文件中的数据然后比较

进去临界区进行解密操作

这个函数非常复杂,里面涉及到了很多数据的计算,猜测是加密或者解密的操作,可以进OD调试,看看到了这个函数会发生什么:

第一个参数是Dest,数据窗口跟随查看有什么:

第二个是Src,一样的,查看有什么:

F8单步步过之后发现这两个空间的值并没有发生变化,只有EAX作为返回值得到了0xA

这个函数暂时不知道是干什么的,做个?标记一下继续往下看吧

这个函数点进去看也比较复杂,还是使用OD动态调试吧:

首先这个函数有5个参数,除去this指针,堆栈中有4个

可见Src就是刚刚从文件读取出来的数据,v16是申请出来的空间

v18是读文件的实际字节数,这里是0x10000,也就是要对这么多个字节进行操作。

这个函数调用过后,在申请的空间中出现了一个PE文件,所以这个函数就是对文件数据的一个解密操作。

我们可以将这段数据保存出来,到一个文件中查看其信息:

ExeInfo查看其是一个无壳的DLL文件:

使用LordPE查看其导出表发现有一个导出函数:

那么回过头我们可以小结一下sub_4014A6()函数就是解密t.wnry文件

看到这里可以猜测一下这个函数就是载入刚刚释放的DLL文件,然后获取其函数用的。

下面还有很多函数,就不需要一一去分析了,我们直接跳到最后看一下返回值是什么:

这个v22就是保存PE文件和内存信息的结构体呀:

那么我们可以在OD里运行一下这个函数,看看它申请的60个字节的空间里装了什么:

第一个地址装了个DOS头

第二个地址是DLL的默认加载基址(0x10000000

第三个地址是导出表信息

第四个是导出函数个数(6)

最后5个是函数指针

所以小结一下sub_4021BD就是载入了刚刚释放的DLL文件。

继续往下看,发现了一个函数名TaskStart

这个不就是刚才那个DLL文件的导出函数嘛?

为了更方便分析,我们不妨新增一个自定义结构体,将每个字段都标记出来,这样v7的曹祖哟我们看起来就不会很陌生了。

其实看到这里就可以认为这个函数实在找目标函数TaskStart

当然也可以去OD验证一下:

运行过后得到了一个地址:10005AE0

我们可以查看刚刚得到的DLL文件的导出函数的地址:

证明这个函数就是找TaskStart函数,返回值就是该函数的地址。

那么最后,这个由主题程序释放出来的tasksche.exe的各个函数也分析的差不多了,可以大致梳理一下流程了:

病毒母体费好大劲释放了子程序,子程序又废了好大劲找到了这个函数要把它运行起来,那么我们就来看看这个函数具体做了那些事情:

看来要弄清的函数还不少:

这个函数之前也见到过,就是读取或写入c.wnry文件

如果a2是1就是读,是0的话就是写入

通过当前进程获取用户ID

小结一下:Sub__100012D0函数就是判断当前用户是否为系统用户

这里的文件名显示是我们调用的时候传入的参数

可是它在数据段,静态分析并不知道是个啥,所以还得用OD查看:

我们跟进查看一下:

找到了目标函数,然后F7跟进查看:

观察堆栈可以发现除了有个00000000.dky还有个00000000.pky文件。所以回过头来我们可以认定这个FileName就是00000000.pky

应该就是将pky文件读取到内存中

回到Sub_1003D10()中这有两个函数指针无法识别,而且在OD中也无法定位到这个地址

这显然不是个函数,所以我们只能进入sub_10003D10这个函数之后动态调试观察有什么用了。

这个时候出现了测试数据TESTDATA:

再次出现测试数据,应该跟拷贝有关了:

开始比较加密解密后的数据和原数据是否一致:

那么分析到这里我们就可以认为函数sub_10003D10是用来测试pkydky文件是否正常使用。结合之前使用到的加密函数和这个加密解密方式,有理由认为这是一个RSA的加密方式,所谓的pkydky就是公钥和私钥文件。

小结:Sub_10004500函数创建了互斥体设置其安全属性,然后使用测试数据来检测公钥私钥是否正常。

@WanaDecryptor@.exe就是勒索的弹窗程序,也是用来解密的:

这个函数就一个功能,向注册表中添加开机启动项:

该函数函数启动了弹窗勒索和taskse.exe程序并将其添加至开机启动项

注意栈区的参数,新增了一个eky文件

分别查看这几个函数的参数地址都指向了什么:

这些函数都和RSA加密有关,猜测这个函数就是用来加密的。

创建了00000000.eky文件并加密。

主要就是创建了pkyeky文件

这个函数没有参数,而且里面使用的变量也不知道是什么,老样子,上OD:

这一看就很清晰了,创建并读取了00000000.res文件

接下来是创建5个线程:

这个线程的工作很简单就是创建res文件并往其中写入数据。

检测是否有dky文件并测试加密函数。

这是用来移动文件的,把C:\Users\15PB\Desktop\说明.txt移动到系统临时目录下,并改名为1.WNCRYT

接着看这个do...while...大循环

发现每次拼接的文件名都不同都是x.WNCRYT文件,这个数字在递增。

而且被移动的目标文件也不同,最后还删了,所以这个大循环应该是遍历目录,将文件转移到临时文件夹并删除源文件。

这个函数就是将用户文件夹移动到系统临时文件夹并用f.wnry文件记录文件夹信息。

所以这个函数是检测如果磁盘为c盘就返回临时目录,如果是别的磁盘就在c盘下创建目录并设置隐藏。

一进来就看到了熟悉的找文件:

果然往下翻找到了另一个:

那么这个函数就是在遍历文件!!!

这个函数用来测试目标目录能否创建文件。

这里就是对文件的加密和数据构成了:

启动释放资源中的taskdl.exe文件

wannacry.exe 程序:

释放tasksche.exe 到系统路径,启动服务

利用漏洞攻击局域网和广域网的主机并传播

tasksche.exe 程序:

释放资源文件ZIP包=>WNcry@2ol7

c.wnry 保存比特币钱包,下载链接

t.wnry 隐藏加密的DLL核心文件,导出TaskStart函数

u.wnry 解密程序 @WanaDecryptor@.exe

r.wnry 勒索文档

msg 语言包

taskdl.exe 遍历磁盘删除.WNCRY文件

taskse.exe 提权程序

核心DLL文件:

创建00000000.pky00000000.eky文件

启动@WanaDecryptor@.exe

创建线程,监控磁盘,加密新加入的磁盘上的文件

启动taskdl.exetaskse.exe

将病毒加入开机自启

执行bat脚本

大小: 3723264 bytes
文件版本:6.1.7601.17514 (win7sp1_rtm.101119-1850)
修改时间: 2017513日, 135505
MD5: DB349B97C37D22F5EA1D1841E3C89EB4
SHA1: E889544AFF85FFAF8B0D0DA705105DEE7C97FE26
CRC32: 9FBB1227
大小: 3723264 bytes
文件版本:6.1.7601.17514 (win7sp1_rtm.101119-1850)
修改时间: 2017513日, 135505
MD5: DB349B97C37D22F5EA1D1841E3C89EB4
SHA1: E889544AFF85FFAF8B0D0DA705105DEE7C97FE26
CRC32: 9FBB1227
使用它的插件扫描一下使用了那些加密算法:
 
可以发现有一些加密解密、压缩解压缩的操作,用到了AES加密库、微软的加密库、ZIP2、ZLIB等API。        ![](upload/tmp/908631_GZGH294HSCSA35F.png)
使用它的插件扫描一下使用了那些加密算法:
 
可以发现有一些加密解密、压缩解压缩的操作,用到了AES加密库、微软的加密库、ZIP2、ZLIB等API。        ![](upload/tmp/908631_GZGH294HSCSA35F.png)
将刚刚我们提取出来的exe文件再次拖到Resource Hacker里查看一下其资源,发现了有一个`PK`开头的资源,这是一个ZIP格式的压缩文件,我们可以再次将它提取出来,保存为ZIP文件,当然微步云沙箱也能检测出这个文件的格式:
将刚刚我们提取出来的exe文件再次拖到Resource Hacker里查看一下其资源,发现了有一个`PK`开头的资源,这是一个ZIP格式的压缩文件,我们可以再次将它提取出来,保存为ZIP文件,当然微步云沙箱也能检测出这个文件的格式:
 
可以看出来这个压缩包里有很多文件,但都是经过加密的,无法直接解压缩和查看:
可以看出来这个压缩包里有很多文件,但都是经过加密的,无法直接解压缩和查看:
打开IDA载入样本文件,快速定位到`WinMain`函数并按`F5`进入查看伪代码:
打开IDA载入样本文件,快速定位到`WinMain`函数并按`F5`进入查看伪代码:
这里的检测参数个数其实就是检测是否由鼠标双击运行,因为双击运行的话程序的执行参数就只有一个了:
这里的检测参数个数其实就是检测是否由鼠标双击运行,因为双击运行的话程序的执行参数就只有一个了:
这里就是注册了一个服务然后设置了一下参数就开始执行Sub_407BD0这个函数,重点就是这个函数干了什么:_
这里就是注册了一个服务然后设置了一下参数就开始执行Sub_407BD0这个函数,重点就是这个函数干了什么:_
 
分析到这里其实我们可以用工具去直接找样本中的这两个地址和大小然后把文件提取出来看看这两个文件是干什么的,这里可以使用010 Editor,当然别的十六进制工具也行。
分析到这里其实我们可以用工具去直接找样本中的这两个地址和大小然后把文件提取出来看看这两个文件是干什么的,这里可以使用010 Editor,当然别的十六进制工具也行。
 
载入ExeInfo查看该文件信息,发现是一个DLL文件:
载入ExeInfo查看该文件信息,发现是一个DLL文件:
 
 
而这个文件无法通过ExeInfo识别:
而这个文件无法通过ExeInfo识别:

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 3
支持
分享
最新回复 (2)
雪    币: 38
活跃值: (1907)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
很详细的文章,感谢分享
2022-8-25 15:50
0
游客
登录 | 注册 方可回帖
返回
//