Wannacry病毒分析

更新时间:2024-11-06 13:27:25 阅读: 评论:0


2023年5月23日发(作者:赖水强)

Wannacry病毒分析

Wannacry病毒分析

在活了,之前有幸听过奇安信的招聘会,⼤佬说,Wannacry病毒现在还在某些地⽅流⾏着,是经典的病毒。这让我觉得分析这个病

毒是刷经验的好机会,所以就在决定分析⼀下这个在2017年的纵横江湖⽆敌⼿的之王,由于是新⼿⼊坑,不对之处还请多多指教

(●ˇˇ●)

病毒简介: 该病毒亦称 “永恒之蓝”,它利⽤Windows系统的SMB漏洞可以获取系统最⾼权限。骇客通过改造“永恒之蓝”制作了

wannacry病毒,英国、俄罗斯、整个欧洲以及中国国内多个⾼校校内⽹、⼤型企业内⽹和政府机构专⽹中招,被⽀付⾼额赎⾦才

能解密恢复⽂件。

⽽该病毒分为蠕⾍传播部分和病毒部分,在这我只分析了病毒Wannacry部分,由于是⾃⼰分析学习,所以我就尽量解释详细⼀

点。下⾯开始分析样本。

分析平台:win7虚拟机

分析⼯具:OD、IDA

辅助⼯具:LordPE、PEID、010Editor、⽕绒剑、ResHacker、Hash等

1. 样本概况

⾸先获取到病毒样本然后解压

使⽤Hash⼯具查看基本信息01

2. 具体⾏为分析

2.1 主要⾏为流程图

2.2 病毒对⽤户造成的危害

加密了常⽤的⼤多数格式(约100多种)的⽂件,加密成后缀是.WCRY⽂件,不花钱基本⽆法解密。

2.3 病毒⾏为分析

2.3.1 ⾸先使⽤PEID观察是什么语⾔、编译器、壳

结论是c/c++语⾔编译器是C++6.0写的程序,⽆壳。

2.3.2 LordPE观察导⼊表

1. ⾸先观察到有加载锁定资源和打开互斥体相关API,猜测有可能是释放资源操作,还有创建互斥体运⾏单⼀实例的常见病毒⾏为操作。

2. 然后还观察到操作服务和注册表相关的API,猜测修改注册表,这基本是病毒必备的了。

2.3.3 使⽤⽕绒剑观察⾏为

1. ⾸先查看执⾏监控,执⾏了隐藏程序、还有cmd和⼀些病毒⾃⼰释放的程序。

2. 查看注册表监控,发现设置了注册表

3. 查看⽂件监控,基本没有⽂件操作,病毒怎么可能没⽂件操作!猜测加密操作应该是在释放的资源中完成的。

4. 查看⾏为监控,⾸先看到释放很多⽂件

还有启动⾃释放的⽂件

修改注册表⾃启动项

5. 查看⽹络监控,发现监听了2个端⼝,和连接⼀些随机的IP地址可能是蠕⾍传播⾏为。

3. 详细分析

详细分析主要⽤到OD的动态分析和IDA的静态分析,只有动静结合才能更好更快更轻松的分析病毒。

3.1 程序分析

到WinMain函数后分析出了最后的⼀览图如下:

从上图中可知有⼏个⽐较关键的函数下⾯将⼀⼀分析他们。

1. ModifyRegedit函数修改了注册表

注册了⼀个名称为wd数据是当前⽬录的项

2. FreeRsrcFile释放资源函数

知道了有释放资源的相关操作,⾸先⽤ResHacker资源编辑⼯具查看的资源,发现⼀个资源类型为XIA,名称为2058的资源数

据,可以看到16进制是 50 4B开头说明这个⼀个ZIP压缩包。

⽽该函数中FindResourceA,LoadResource,LockResource,SizeofResource这⼏个函数组合就是明显的要利⽤资源了,接下来的

代码就是解压ZIP包释放出⾥⾯每个数据到当前⽬录。

3. AddWrite_cwnry函数写⼊⽐特币账户信息

此函数⾸先会从3个⽐特币账户中伪随机抽取出⼀个(不同的电脑抽取到的账户不同),然后把改账户写⼊到⽂件中,我的电脑写⼊

的是"13AM4VW2dhxYgXeQepoHkHSQuy6gaEb94",从⽽得出结论⽂件存储的是⽐特币账户信息,可能被⽤于解密器读

取。

运⾏病毒后可查看到解密器右下⾓有该账户信息

4. HideAndCreate函数是以命令⾏和不显⽰GUI窗⼝的⽅式启动程序

第⼀次传⼊的命令⾏参数是"attrib +h .",该参数意为隐藏属性,运⾏过后发现病毒所在的当前⽬录不见了,在⽂件夹选项中点击显⽰

隐藏⽂件后,可看见该⽬录被隐藏了!

第⼆次运⾏它命令⾏参数是"icacls . /grant Everyone:F /T /C /Q",意为创建⼀个名为Everyone的账户,授予/T /C /Q的访问权

限。

5. GetSomeAPI函数

该函数就是获取⼀些加密解密和⽂件操作的API地址

6. InitCriticalSec函数

该函数⽤于初始化临界区,⽤于线程同步。此病毒之后会分析到有5个线程,对于多线程的程序,临界区的使⽤很有必要。它能做到多个线

程对同⼀段代码的访问时,我正⽤着这个资源呢,不希望别的线程使⽤它。

7. KeyAndMem函数

主要是分配了2块全局堆内存

8. DecryptPeData解密函数

⾸先此函数会读取⽂件进⾏⼀系列简单的操作之后,把⽂件⾥的内容进⾏解密,然后得到⼀个⼤⼩为0x10000字节数据,可

以观察内存有0x5A4D 和0x4550所以确定这是⼀个PE⽂件。

以观察内存有0x5A4D 和0x4550所以确定这是⼀个PE⽂件。

提取该PE⽂件,直接复制该0x10000字节的⼆进制内存数据,然后在010Editor中Crtl+Shift+V粘贴后保存为EXE⽂件,再⽤PEID查

看,实际上他是个DLL动态库⽂件。

把它保存为⽂件,那么就知道了⽂件保存的是加密后的数据,从之后的分析中会知道这个模块才是wannacry病

毒的核⼼模块,关键的功能都在这个模块中实现的。

9. PeToMem加载DLL函数

这个函数⽐较复杂,总结起来也很简单,就是申请了⼀块虚拟内存存放的内容,把改虚拟内存中T头和DOS头的地址存放进堆空

间中。

从下图可以看出堆内存中第⼀个地址中是T地址,第⼆个地址保存的是DOS头地址。

10. GetFunAddr函数

它遍历的导出表,最终到并返回了TaskStart函数的地址

11. 调⽤TaskStart函数

这个函数才是真正的核⼼函数,病毒功能都在这⾥⾯实现。

12. FreeData函数收尾释放数据

3.2 TaskStart函数分析

模块中TaskStart函数才是真正的加密函数,亦可称之为加密器,wannacry的核⼼功能都在这⾥⾯实现,这个函数就是⽔磨

⼯夫,分析过程中很有很多函数没⽤过,就查MSD和百度, ⽐较耗时,但是静下⼼来还是能勉强理解它的,坚持就是胜利。

TaskStart函数在模块中,分析时打开它g到0x10005AE0 地址反编译为伪C代码后⼀览图

接下来逐⼀分析:

1. SingleRun单⼀运⾏函数

可以看到它创建了名为MsWinZonesCacheCounterMutexA的互斥体,⽤于防多开,确保单⼀实例运⾏,套路!

2. 之后进⾏了⼀些操作,读取⽂件,对⽐密钥不等,获取⼀些API地址这些⽐较简单的操作。

3. oDoubleOpen函数

这个函数,检测⼀个互斥体,第⼀次没有所以它再次创建了⼀个名称是"GlobalMsWinZonesCacheCounterMutexA0"的互斥体。

4. CheckFileExist函数

它检测⼀个的⽂件,由于第⼀次没有,不理睬,继续跟踪。

5. CreatePubPriFile函数

这个函数总结后就是在当前⽬录创建⽂件保存公钥,创建保存加密后的私钥。在OD中分析⼯程中能

看到RAS和AES等字符串,说明此病毒采⽤的是RAS和AES双重加密。

WritePubKeyToFile写⼊公钥⽂件函数

WritePriKeyToFile写⼊私钥⽂件函数

6. 然后调⽤了⼏个不怎么重要的函数,接下来就是创建5个线程

7. 第⼀个线程回调函数CreateResFile1

此函数就是创建⽂件写⼊时间信息

CreateResFile函数填充了8个字节随机数和4字节时间信息的内容,在之后这个.res还会保存更多的时间信息,所以得出结论.res⽂件

是⽤来保存时间信息的。

8. 第⼆个线程回调函数CheckDkyFile

每隔5秒检测⽂件对其处理。

9. 第三个线程回调函数CheckewDisk

它的功能就是每3秒检测是否有新的磁盘,有就对其⽂件加密,我的虚拟机没有新磁盘,所以就略过。

10. 第四个线程回调函数RunTaskdl1

每隔30秒运⾏⼀次程序。

11. 第五个线程回调函数RunExeAndSetReg

每隔30秒就运⾏和@WanaDecryptor@.exe这两个程序和设置注册表启动项。

RunTwoExe函数功能是运⾏和@WanaDecryptor@.exe程序

SetRegeditRun函数

把"C:"设置为⾃启动项

12. 加密关键函数

(1.0) EnOne_100057C0加密函数第⼀层

这个函数很长,很多,函数嵌套复杂,所以先分析第⼀层的前半段,前⾯⼀些函数条件不满⾜的就不管它了,从CopyUwnryFile开始

分析

CopyUwnryFile函数

此函数⾸先检测@WanaDecryptor@.exe⽂件是否存在,没有就拷贝的内容创建为新未见@WanaDecryptor@.exe。并且在之

后创建了⼀个@WanaDecryptor@.⽂件也就是@WanaDecryptor@.exe⽂件的快捷⽅式。

可以双击@WanaDecryptor@.exe程序发现这个就是解密器程序,它会显⽰出窗⼝和桌⾯背景。

可以得出结论⽂件保存就是解密器内容的数据。

CreateReadingFile函数

这个函数拷贝⾥的内容⽣成⼀个阅读⽂件@Please_Read_Me@.txt。

打开@Please_Read_Me@.txt⼀⼤堆英⽂,提醒⽤户:你该交钱解密了…

(2) EnTwo_10005480加密函数第⼆层

这个函数获取了桌⾯路径和⽂档路径,并对其下的⽂件进⾏加密,然后再查其他所有⽤户,对其他⽤户的⽂件进⾏加密。

(3) EnThree_100027F0加密函数第三层

这个函数就是过渡的作⽤,主要还是看第四层⾥的内容。

(4) EnThree_100027F0加密函数第四层

⾸先获取桌⾯路径

然后遍历⽂件,挑选出需要加密的⽂件保存其信息到⼀个数据结构中

其中SelectEncryptFile函数辨别出哪些是需要加密的⽂件,从下⾯的图中可知这个病毒丧⼼病狂,居然要加密100多种格式的⽂件,

基本包含了我们常⽤的所有⽂件。

回到第四层继续,之后就进⼊了⼀个循环中,每次在数据结构中取出⼀个信息,调⽤第五层加密函数加密对应的⽂件。然后判断⽬录层

级是否⼩于等于6是就拷贝@Please_Read_Me@.txt⽂件和@WanaDecryptor@.exe到当前⽬录。

(5) EnFive_10002940加密函数第五层

第五层⽐较简单,⾸先判断⽂件是那种类型(病毒作者⾃定义的类型),然后根据类型的不同决定是否加密。

(6) EnSix_10002200加密函数第六层

第六层也⽐较简单,⾸先获取原⽂件全路径,对⽐该⽂件是否是.WCRY格式,不是就在其⽂件名后追加.WCRY,然后经过第7层加

密的问价就以其命名!

(7) EnSeven_10001960加密函数第七层

⾸先读取原⽂件前8个字节⽐较是否是"WAACRY!",之后⽂件类型是4的情况下,会在新的⽂件名后⾯加上字

符"T"如:“C:”,再创建该⽂件,也就是加密后的⽂件,此时只是没有填充内

容⽽已。

然后在该⽂件中依次写⼊8字节字符"WAACRY!"、某个⼤⼩数值0x100、再写⼊0x100⼤⼩的数据、⽂件的类型值和原⽂件的⼤

⼩。

然后再读取原⽂件内容经过第⼋层加密后,输出加密后的内容,再把该内容追加写⼊到刚才创建的⽂件中,设置⽂件⽇期和时间信息,

加密⽂件就到此完成了,最后做了⼀个移动⽂件的操作,实际作⽤就是个⽂件后缀.WCRYT改为.WCRY。

(8) EnAight_10006940加密函数第⼋层

第⼋层就是通过解析原⽂件,每次输⼊16个字节通过第9层加密后输出16个字节,依次循环直到加密完成为⽌,然后输⼊加密后的缓

冲区。

(9) 加密函数结语:加密函数从第⼋层之后就完全是数据加密相关的代码,没有其他重要的操作了,层数太多,关于加密函数的分析

我也就到此为⽌了。

接下来回到第⼀层,继续分析第⼀层后半段的代码。

通过以上对加密函数层层分析,已经知道了加密形式是怎么进⾏的了,只是上⾯的加密只针对桌⾯⽂件进⾏加密,实际上从加密函数第三层

开始传⼊的参数不同,加密的路径⾃然也会改变。

(1.1) 紧接加密后的下⼀个函数是InterlockedExchange原⼦操作,交换两个数。这也是由于多线程的原因,⽤于线程同步,让线程之间

互补⼲扰。

(1.2) 接下来加密全盘⽂件,获取出所有磁盘类型,对固定的磁盘⽂件进⾏加密,然后再对其他⽤户同样进⾏此操作。主要加密函数是

EncryptDiskAll。

EncryptDiskAll函数

此函数会得到磁盘的盘符如"C:",在最后它会调⽤加密函数的第3层,加密全盘的数据,如有其它盘也⼀样。

在这之前会得到⼀个临时路径,只有c盘时是:“C:Users15PB - W~1AppDataLocalTemp”,之后我添加了⼀个E盘,得到的

是:“E:$RECYCLE”

(1.3) 最后⼀段代码

先开始以不显⽰GUI窗⼝的⽅式启动了解密器@WanaDecryptor@.exe程序,此时可看到桌⾯背景被更改了

再向⽂件写⼊当前时间信息

运⾏cmd

不断的向磁盘写⼊数据

WriteMassData写⼊删除数据函数分析

⾸先该函数在之前得到的临时⽬录以隐藏⽅式创建了⽂件

然后获取磁盘是否还有多余空间,有责每次写⼊0xA00000个字节的0x55,循环写⼊0x14次,检测磁盘有⽆多余空间。。

我花了10多分钟检测了⼀下写满磁盘会发⽣什么,如下图,我的磁盘总60G被写满了之后单步跟踪OD会发现它⼜把这整个⽂件删除

了,回复了原来空闲空间,我只想说⼀句"卧槽",我猜测病毒作者的意图是不断的占⽤磁盘的性能,让⽤户欲罢不能。

好吧,我的猜测都是错的,⼀次⾯试⼤佬给我解释了,磁盘的数据是可以回的,前提是被删除⽂件后该磁盘并没有发⽣过⼤量重新读

写,⽽此病毒不断读写磁盘就是为了阻⽌数据恢复

到此TaskStart函数就分析完毕,在整个分析过程中由于是多线程程序,有些函数的分⽀我分析的时候不满⾜条件,我就没有分析下

去,所以,肯定有些关键点我没分析到,⽐如创建了加密⽂件后,会删除原⽂件,我就没分析到删除原⽂件是哪⾥进⾏的,这不得不说

是个⼩遗憾,由于是新⼿分析了10来天,我有点⼩崩溃不想继续分析了,我也算对得起WannaCry了,哈哈,接下来分析最后两个程

序和。

3.3 程序分析

程序是在TaskStart函数的第4个线程中被运⾏的。现在分析它,当然前⾯的步骤都⼀样,查壳,看是什么程序等等。

到WinMain函数可以看到,这个程序就是⽤来删除后缀为.WCRT的⽂件的。

进⼊DeleteFile11函数中发现,这就是获取上⾯才分析过的临时路径,他删除⾥⾯的.WCRYT⽂件实际就是删除这个⽂

件。

所以得出结论的功能就是删除⽂件。

3.4 程序分析

TaskStart的第5个线程运⾏了此程序,分析这个程序的时候我们要注意⽤OD打开它后需要添加点击"调试" ->"参数"附加参数"

C:Users15pb-win7Desktopwcrywcry2.0@WanaDecryptor@.exe"才能正常运⾏。

最开始判断参数是否符合,然后进⼊提权函数

进⼊ChangePrivileges函数中的ChangePrivilege函数

⾸先获取了⼀些权限相关的API函数的地址,然后进⾏提权操作,所以程序的功能就是进⾏提权。

最后还有⼀个解密器@WanaDecryptor@.exe,我就不分析了,直接运⾏它,就可知道它的功能,⽣成⼀张图⽚,把它设置为桌⾯背景,

然后每个⼏秒弹出⼀个窗⼝让⽤户交钱。

4. 解决⽅案

因为采⽤⾼强度的RSA和AES双重加密,所以如果你的⽂件已被加密,只有交钱才能解密,交了钱也不⼀定100%能解密。

电脑打补丁,因为此病毒是利⽤“永恒之蓝”漏洞进⾏传播的,打完补丁后就阻⽌了蠕⾍病毒的传播。

可以创建名为“MsWinZonesCacheCounterMutexA”互斥体阻⽌病毒运⾏。

把该病毒的特征码加⼊病毒库,⼀经发现⽴马查杀。


本文发布于:2023-05-23 12:04:52,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/falv/fa/83/100007.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 站长QQ:55-9-10-26