Nattevak 发表于 2022-1-10 10:22

病毒分析之WannaCry勒索病毒

本帖最后由 Nattevak 于 2022-1-10 10:22 编辑

篇幅较长,谨慎食用{:301_1001:}
一、基本分析,并提取病毒样本,手工清理机器
摘自百度百科:WannaCry(又叫Wanna Decryptor),一种“蠕虫式”的勒索病毒软件,大小3.3MB,由不法分子利用NSA(National Security Agency,美国国家安全局)泄露的危险漏洞“EternalBlue”(永恒之蓝)进行传播。勒索病毒肆虐,俨然是一场全球性互联网灾难,给广大电脑用户造成了巨大损失。最新统计数据显示,100多个国家和地区超过10万台电脑遭到了勒索病毒攻击、感染。勒索病毒是自熊猫烧香以来影响力最大的病毒之一。
WannaCry勒索病毒全球大爆发,至少150个国家、30万名用户中招,造成损失达80亿美元,已经影响到金融,能源,医疗等众多行业,造成严重的危机管理问题。中国部分Windows操作系统用户遭受感染,校园网用户首当其冲,受害严重,大量实验室数据和毕业设计被锁定加密。部分大型企业的应用系统和数据库文件被加密后,无法正常工作,影响巨大。
攻击特点:WannaCry利用Windows操作系统445端口存在的漏洞进行传播,并具有自我复制、主动传播的特性。
被该勒索软件入侵后,用户主机系统内的照片、图片、文档、音频、视频等几乎所有类型的文件都将被加密,加密文件的后缀名被统一修改为.WNCRY,并会在桌面弹出勒索对话框,要求受害者支付价值数百美元的比特币到攻击者的比特币钱包,且赎金金额还会随着时间的推移而增加。


1.模拟真实场景,在虚拟机中运行样本




2.待病毒执行之后,观察可疑情况
使用PCHunter工具查看进程,定位到进程文件,再结束病毒进程
可疑进程判断依据:图标、文件名、文件路径




找到病毒所在位置,将其样本保存,再删除目录下的病毒程序


注:在病毒运行后,需观察病毒情况
首先查看可疑进程,进程部分上文已经写出
再查看启动项(注册表,计划任务等)
注册表启动项有可疑进程




查看驱动,服务等可疑项
未发现异常

查看其他杂项,网络连接
有可疑进程的网络连接,此处为未联网状态


连接网络后观察新的网络情况



3.提取样本
将路径下文件提取到本地,并修改名称为WannaCry
C:\ProgramData\znemvazsnwpqy217\@WanaDecryptor@.exe 改为 WannaCry

4.样本概况

文件: D:\Desktop\永恒之蓝WannaCry样本\WannaCry
大小: 3723264 bytes
文件版本:6.1.7601.17514 (win7sp1_rtm.101119-1850)
修改时间: 2017年5月13日, 13:55:05
MD5: DB349B97C37D22F5EA1D1841E3C89EB4
SHA1: E889544AFF85FFAF8B0D0DA705105DEE7C97FE26
CRC32: 9FBB1227

①获取WannaCry程序信息
使用PEID工具获取病毒信息,可以发现病毒程序未加壳,版本信息为VC++6.0



查看其目录信息,因为是exe程序所以没有导出表,所以重点观察一下导入表和资源表


先大致观察主要的DLL信息


其中KERNEL32.DLL中可以观察到对资源的相关操作,这也是病毒程序中比较关键的信息


使用ResourceHacker工具观察病毒资源信息,在资源中发现了PE文件,将其资源R保存一份,命名为WannaCry_R.exe


使用PEID工具的插件Krypto ANALyzer,检测病毒程序使用了哪些算法



点击每一行的数据即可查看相关的信息
算法信息:AES,微软加密API,ZLIB库



②获取WannaCry_R程序信息
简单观察一下刚才从资源信息中导出的WannaCry_R程序
可以看到这个程序中仍然有一些资源相关的操作,以及创建进程,服务、注册表相关的操作


同样使用ResourceHacker工具观察WannaCry_R资源信息,在资源中发现了PK文件,即压缩包,将其资源XIA保存一份,命名为WannaCry_XIA.zip


解压WannaCry_XIA.zip,发现文件都被加密了,需要密码



5.手工清理机器
①结束可疑进程
②删除可疑进程启动项
③删除病毒程序在C:\ProgramData目录下创建的文件夹
④删除病毒程序生成的@Please_Read_Me@.txt、@WanaDecryptor@.exe以及.WNCRY文件

二、行为分析,获取病毒行为
1.由于之前对病毒样本进行了一系列操作,所以将虚拟机还原快照,重新在虚拟机中运行病毒程序,使用火绒剑工具监控病毒样本的运行,待病毒执行一段时间后,分开查看病毒的行为。
分析监控到的日志,主要观察的点:
①文件操作,主要看文件创建、修改、删除等操作
②注册表操作,主要看注册表设置、创建等操作
③进程操作,主要看创建进程、写入内存等操作
④网络操作,主要看网络连接地址、IP等信息
⑤其他行为,以及观察病毒样本运行后的反应
分析样本的行为,尽可能发现恶意行为。

开启火绒剑监控样本运行


①观察文件操作,主要观察文件的写入操作,这个病毒程序由于对文件的操作较多,所以都观察一下,避免遗漏


②观察注册表操作,主要观察设置注册表的操作,这里勾选设置注册表项值


病毒程序自己创建了一些注册表项,并设置了一些信息



基本都是一些网络相关的设置操作



③观察进程操作
因为进程现在还不太好判断,所以进程相关的所有操作都先看一下



④观察网络操作,这里能监控的数据不多,有可能会有遗漏
可以发现网络连接的操作相当的多,且全都在连接445端口




⑤观察其他行为
行为监控属于火绒剑这个工具特色的一种功能,这里将常见的一些恶意代码行为进行了总结


执行监控可以观察病毒程序执行了哪些进程,加载了哪些模块的操作



分析情况总结:
分析监控的日志以及自行观察操作之后,可以分析出样本的恶意行为:
1.自我复制样本到C盘:C:\ProgramData目录下,启动C:\ProgramData\@WanaDecryptor@.exe(即病毒程序)
2.在程序目录下创建@Please_Read_Me@.txt、@WanaDecryptor@.exe以及
.WNCRY文件
3.在C:\ProgramData目录下创建xxx文件夹(文件名随机)
4.设置注册表启动项为"C:\ProgramData\znemvazsnwpqy217\tasksche.exe"
5.自己创建了一些注册表的项,在其中写入了很多信息
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Tracing\WannaCry_RASAPI32
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Tracing\WannaCry_RASMANCS
HKEY_USERS\.DEFAULT\Software\Microsoft\Windows NT\CurrentVersion\Network\Location Awareness
6.不断向445端口发起网络连接
三、详细分析病毒代码,获取行为的恶意代码
通过行为分析之后,可以知道恶意代码的一些恶意行为,想要获取更加详细的行为需要使用IDA或是OD分析样本。

使用IDA打开病毒主体程序进行分析
使用F5将其转换为伪代码,简单分析OEP处代码

OEP处代码




OEP代码分析过程:
判断参数是否大于1,若大于1则进入sub_407FA0函数,不大于1则进入sub_407F20函数
所以OEP处函数可以分为两部分:




首先分析不大于1(<2)的情况,则进入sub_407F20函数
sub_407F20函数分析



进入sub_407F20函数后内部拥有sub_407C40、sub_407CE0两个函数,自上而下进行分析


sub_407C40函数分析
函数功能为以服务的方式启动自身,且函数内部将参数变为3个,使得判断信息改变




sub_407CE0函数分析
其函数功能为在系统目录C:\WINDOWS\下创建tasksche.exe程序并启动,且将其移动到C:\WINDOWS\qeriuwjhrf,但第一次移动时由于程序还未创建,会导致移动失败



接下来分析大于1(>=2)的情况,遵循自上而下的原则,先进入sub_407FA0函数,此函数功能比较简单,就是更改服务的可选配置参数。




再分析服务的回调函数sub_408000,此函数是该病毒程序的关键函数
sub_408000函数分析
函数功能为实现病毒网络传播,其中主要利用445端口,获取局域网网IP地址,攻击局域网;构造随机的外网地址,测试是否能连接外网445端口,如果连接成功,则进行攻击。



sub_407BD0函数分析
此函数内拥有三个函数,sub_407B90函数功能为获取一个密钥容器 CSP,将PE文件加载到内存中;sub_407720函数为开启局域网漏洞攻击;sub_407840函数为随即攻击外网服务IP地址




sub_407B90函数分析
sub_407B90函数在初始化网络环境后会判断返回值,如果成功则返回0,关键的执行函数为sub_407620函数与sub_407A20函数




分别进入sub_407620函数与sub_407A20函数进行分析

sub_407620函数,其功能为获取一个密钥容器



sub_407A20函数其功能主要为将PE文件加载到内存中,此处将40B020、40F080两个位置的内容拷贝出来并保存





使用PEID观察刚我们导出的40B020.exe与40F080.exe两个程序
40B020程序分析:
可以发现40B020这个程序其实是一个DLL



大致观察一下导入导出表的信息即可


40F080程序无法打开,暂搁置

之后是一些获取文件大小、打开文件的操作


sub_407B90函数汇总



sub_407720函数分析
其功能为开启局域网漏洞攻击,主要的两个函数为sub_409160函数,通过网卡设备获取IP地址列表,以及sub_4076B0函数开启一个线程,连接测试这个IP的445端口。


进入sub_409160函数大致分析后可以判断该函数的功能是获取网卡上的IP地址


使用OD动态调试,在IDA中创建map文件,使用插件LoadMapEx加载到OD中,Ctrl+A分析代码,找到Main函数并进入

来到连接服务的位置,因为我这里连接了网络,所以需要修改跳转让其继续运行


进入sub_408090函数后,运行步过GetModuleFileNameA函数,使其获取一下文件


之后直接跳转到sub_407720函数的位置,并设置其为新的EIP,单步运行,进入sub_409160函数


EDX中保存了我们的IP地址



EAX保存的是子网掩码


Win+R运行,打开cmd,输入ipconfig命令,查看本地连接状态


故由此可知inet_addr(v5 + 4)为IP,inet_addr(v5 + 20)为子网掩码


sub_407480函数功能为连接局域网IP 445端口


sub_407540函数,功能汇总为传播病毒,利用漏洞进行攻击
其中sub_401980函数为进行局域网的传播


sub_407720函数汇总


sub_407840函数分析
其函数功能为随机攻击外网服务IP地址


其中sub_407660函数的功能就是获取一个随机数


将随机数组合为IP后尝试连接,直至连接成功跳出循环,否则会一直尝试连接,直至成功。
之后会不断尝试修改IP子网段第四段的值,尝试连接,若连接失败后会跳转到LABLE_20

跳转到LABLE_20后又会跳转到LABLE_21,运行后又跳转回LABLE_23继续执行


sub_407840函数汇总


病毒程序主体汇总:


WannaCry_R.exe程序分析(tasksche.exe)
设置注册表,释放资源,将目录隐藏,从exe中找到密钥,对t.wnry文件进行解密,解密完成后返回一个PE文件, 这个PE文件是一个DLL文件,加载DLL文件,并申请空间,记录PE信息,遍历DLL的导出表,找到TaskStart这个函数,并调用



sub_401225函数 — Rand_Name,随机生成服务名


sub_401B5F函数 — Create_server_dir,创建服务目录


sub_401AF6函数 — create_dir主要就是为了创建目录


sub_401F5D函数,函数功能创建服务,启动程序;以服务的方式启动自身,直接运行程序两种方法,以达到启动程序的目的

sub_401CE8函数 — create_server,功能为创建服务


sub_401EFF函数 — create_mutex,功能为创建一个互斥体


sub_401064函数 — exec_shell,就是为执行命令


sub_4010FD函数 — reg_setOrget,根据a1传进来的值判断是获取注册表还是设置注册表


sub_401DAB函数 — unzip_src


sub_4075AD函数 — unzip,经分析后发现传进去的参数为WannaCry_XIA.zip的解压密码


sub_401E9E函数 —write_c_wnry,在c.wnry文件中写入比特币钱包地址


sub_401000函数 — c_wnry_readOrwrite,读取或者写入c.wnry文件


使用OD动态调试,同样在IDA中创建map文件,使用插件LoadMapEx加载到OD中,Ctrl+A分析代码,找到Main函数并进入




sub_40170A函数 — get_api,获取一些API


sub_4012FD函数为构造函数,进行初始化操作


构造函数和析构函数都是成对出现的,找到sub_40137A函数为析构函数

sub_401437函数 — gCryptImportKey,函数功能导入密钥,申请空间

sub_401861函数 — g_CryptImportKey,导入密钥


sub_4014A6函数,解密t.wnry文件内容,返回PE文件




将PE文件整个拷贝出来后粘贴到以010Editor打开的新文件中


sub_4021BD函数


sub_4021E9函数





返回值是v22,使用OD动态调式观察一下返回情况


PE头部信息,PE完整信息(0x10001000是代码段),导出表,个数


对照创建mystruct结构体


sub_402924函数,功能为遍历DLL的导出表TaskStart


使用OD动态调试进行验证




WannaCry_R.exe程序汇总(tasksche.exe)


Decode.dll文件分析(TaskStart)


进入TaskStart函数进行分析



sub_10004690函数 — single_process,创建互斥体,防多开


sub_10001000函数 — read_Or_WriteCwnry,读取c.wnry文件


sub_100012D0函数 — check_systemuser,检测是否是系统用户


sub_10003410函数 — get_api与内部函数sub_10004440功能都是动态获取API



sub_10004600函数 — createmutex内部含有sub_100013E0函数,其功能为创建互斥体,设置访问控制属性


sub_10004500函数 — check_crypt_file


sub_10003D10 — test_crypt函数


sub_10004990函数 — startskecandwana


sub_10004890函数 — start_decryptyexe


sub_100047F0函数 — createreg_run


sub_10003AC0函数 — createkey_file


create_eky函数,创建私钥00000000.eky文件,被加密


encrypt_RSA函数,加密RSA私钥


sub_100046D0函数 — open_res,第一次打开时文件不存在,所以打开会失败


创建了五个线程,分别进行分析
sub_10004790函数 — res_create


sub_100045C0函数 — checkdky


sub_10005730函数 — encryptfile


sub_10005680函数


sub_10001830函数 — movtotemp


又创建了个线程,进入简单看一下


sub_10005540函数 — encrypt



sub_10005060函数 — gettmp


sub_10001910函数 — getpath


sub_100027F0函数 — encrypt_dir,主要函数为sub_10002300 — enum_dir,其功能为加密该目录下的文件




sub_10002F70函数 — test_iscreatefile, 测试这个目录是否可以创建文件


sub_100032C0函数 — filter_dir,过滤特殊目录


sub_10002D60函数 — check_file_type,获取文件类型



encrypt_file函数


sub_10002200函数 — encryptf


sub_10001960函数 — encrypt_data




这里可以使用OD动态调试,观察加密过程


sub_10005300函数 — starttaskdl


sub_100057C0函数 — batoperator,病毒从此处开始发作



sub_10004CD0函数 — runbat,运行批处理文件,u.wnry 变为解密文件 @WanaDecryptor@.exe
单独运行u.wnry->程序,仅会解密(勒索弹窗、修改桌面等),并不会感染病毒


sub_10001140函数 — delete_self_bat


sub_10004DF0函数 — create_rwnry,从r.wnry创建勒索文档


sub_10005480函数 — encrypt_file_,加密文件


filldisk函数,填充C盘,直到无法写入文件


sub_10005120函数 — delete_hibsys_WNCRYT,删除hibsys.WNCRYT这个文件


Decode.dll文件汇总(TaskStart)



四、提取病毒特征,完成查杀,编写文档报告及专杀工具
1.病毒特征
MD5特征: DB349B97C37D22F5EA1D1841E3C89EB4
SHA1值: E889544AFF85FFAF8B0D0DA705105DEE7C97FE26
CRC32: 9FBB1227
病毒特征:WANACRY!

2.病毒程序流程图


3.解决方案
①病毒程序自身创建了互斥体,用于防止多开,利用这个互斥体可以防止病毒运行
②病毒利用445端口进行局域网、广域网传播,如果没有使用445端口,那么就可以关闭
③及时给系统打补丁
在本地创建00000000.pky和00000000.eky(加密)密钥文件,病毒作者使用自己的公钥对本地的私钥00000000.eky进行RSA加密。加密文件前生成一个16位的随机key,使用本地公钥00000000.pky对随机生成的key进行RSA加密,然后再保存到加密文件的头部,且每一个文件的加密key都是随机生成的,每一次加密都会重新生成key,所以就算是同一个文件,加密后的密文也不相同。之后再使用随机生成的key对文件内容进行AES对称加密。
如果想要解密则需要获取这个随机生产的key,key保存在加密的文件头部的位置,可以直接获取,但获取的这个key是通过加密后保存在头部的,如果能对加密的key进行解密就能完成加密文件的解密工作。我们分析的时候已经看到使用的是本地公钥00000000.pky对随机生成的key进行RSA加密,而公钥是无法对密文进行解密的,所以我们需要获得解密的私钥,但是这个私钥00000000.eky也被加密了,需要获得作者自己的公钥才能解密,而作者的公钥显然只能通过打钱获得,所以如果电脑中的文件不重要就重装系统,不然就打钱。
④无法解密,建议重装


WannaCry病毒样本:https://wwz.lanzouo.com/iR6E8yl1yuf

幸运合成器 发表于 2022-1-18 00:19

看到最后一句还是很伤的啊。{:1_923:}
我的电脑也中过别的勒索,中完之后没钱支付也没工具解密,只能先把硬盘封存了,期待有能解开的一天。

说一下我中勒索的可能原因:win10,开3389远程,没设密码,用的免费的Sakurafrp内网穿透。

康铎严 发表于 2022-1-10 10:27

沙发,学习了,感谢楼主分享!

ricroon 发表于 2022-1-10 10:27

图文并茂,非常详细,感谢大佬

kissboss 发表于 2022-1-10 10:43

④无法解密,建议重装

看到最后 死心了
服务器中过两次勒索病毒 最后全部重装系统了

xiaolong23330 发表于 2022-1-10 10:45

我看完了,看到这些图,我就很佩服,分析和写作的水准都很厉害

癫疯灬博 发表于 2022-1-10 11:57

学习了,感谢分享

DongQi 发表于 2022-1-10 12:59

学习了,感谢分享

keyyan 发表于 2022-1-10 18:47

大佬就是大佬,佩服的五体投地

fengbolee 发表于 2022-1-10 20:33

逻辑清晰,过程详尽。

C2021 发表于 2022-1-10 21:11

感谢分享
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 病毒分析之WannaCry勒索病毒