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 条评论) |