Wannacry勒索病毒分析

12 篇文章 1 订阅
3 篇文章 0 订阅

Wannacry勒索病毒分析

在找活了,之前有幸听过奇安信的招聘会,大佬说,Wannacry病毒现在还在某些地方流行着,是经典的勒索病毒。这让我觉得分析这个病毒是刷经验的好机会,所以就在决定分析一下这个在2017年的纵横江湖无敌手的勒索之王,由于是新手入坑,不对之处还请多多指教(●ˇ∀ˇ●)

病毒简介: 该病毒亦称 “永恒之蓝”,它利用Windows系统的SMB漏洞可以获取系统最高权限。骇客通过改造“永恒之蓝”制作了wannacry勒索病毒,英国、俄罗斯、整个欧洲以及中国国内多个高校校内网、大型企业内网和政府机构专网中招,被勒索支付高额赎金才能解密恢复文件。

而该病毒分为蠕虫传播部分和勒索病毒部分,在这我只分析了勒索病毒Wannacry部分,由于是自己分析学习,所以我就尽量解释详细一点。下面开始分析样本。

  • 分析平台:win7虚拟机
  • 分析工具:OD、IDA
  • 辅助工具:LordPE、PEID、010Editor、火绒剑、ResHacker、Hash等

1. 样本概况

首先获取到病毒样本然后解压
在这里插入图片描述

使用Hash工具查看基本信息01
在这里插入图片描述

2. 具体行为分析

2.1 主要行为流程图

在这里插入图片描述

2.2 病毒对用户造成的危害

加密了常用的大多数格式(约100多种)的文件,加密成后缀是.WNCRY文件,不花钱基本无法解密。
在这里插入图片描述

2.3 病毒行为分析

2.3.1 首先使用PEID观察是什么语言、编译器、壳

结论是c/c++语言编译器是C++6.0写的程序,无壳。
在这里插入图片描述

2.3.2 LordPE观察导入表
  1. 首先观察到有加载锁定资源和打开互斥体相关API,猜测有可能是释放资源操作,还有创建互斥体运行单一实例的常见病毒行为操作。
    在这里插入图片描述
  2. 然后还观察到操作服务和注册表相关的API,猜测修改注册表,这基本是病毒必备的了。
    在这里插入图片描述
2.3.3 使用火绒剑观察行为
  1. 首先查看执行监控,执行了attrib.exe隐藏程序、还有cmd和一些病毒自己释放的程序。
    在这里插入图片描述
  2. 查看注册表监控,发现设置了注册表
    在这里插入图片描述
  3. 查看文件监控,基本没有文件操作,勒索病毒怎么可能没文件操作!猜测加密操作应该是在释放的资源中完成的。
  4. 查看行为监控,首先看到释放很多文件
    在这里插入图片描述
    还有启动自释放的文件
    在这里插入图片描述
    修改注册表自启动项
    在这里插入图片描述
  5. 查看网络监控,发现监听了2个端口,和连接一些随机的IP地址可能是蠕虫传播行为。
    在这里插入图片描述

3. 详细分析

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

3.1 wcry.exe程序分析

找到WinMain函数后分析出了最后的一览图如下:
在这里插入图片描述
从上图中可知有几个比较关键的函数下面将一一分析他们。
1. ModifyRegedit函数修改了注册表
在这里插入图片描述
注册了一个名称为wd数据是当前目录的项
在这里插入图片描述
2. FreeRsrcFile释放资源函数
在这里插入图片描述
知道了有释放资源的相关操作,首先用ResHacker资源编辑工具查看wcry.exe的资源,发现一个资源类型为XIA,名称为2058的资源数据,可以看到16进制是 50 4B开头说明这个一个ZIP压缩包。
在这里插入图片描述
而该函数中FindResourceA,LoadResource,LockResource,SizeofResource这几个函数组合就是明显的要利用资源了,接下来的代码就是解压ZIP包释放出里面每个数据到当前目录。
在这里插入图片描述
3. AddWrite_cwnry函数写入比特币账户信息
在这里插入图片描述
此函数首先会从3个比特币账户中伪随机抽取出一个(不同的电脑抽取到的账户不同),然后把改账户写入到c.wnry文件中,我的电脑写入的是"13AM4VW2dhxYgXeQepoHkHSQuy6NgaEb94",从而得出结论c.wnry文件存储的是比特币账户信息,可能被用于解密器读取。
在这里插入图片描述
运行病毒后可查看到解密器右下角有该账户信息
在这里插入图片描述
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解密函数
在这里插入图片描述
首先此函数会读取t.wnry文件进行一系列简单的操作之后,把t.wnry文件里的内容进行解密,然后得到一个大小为0x10000字节数据,可以观察内存有0x5A4D 和0x4550所以确定这是一个PE文件。
在这里插入图片描述
提取该PE文件,直接复制该0x10000字节的二进制内存数据,然后在010Editor中Crtl+Shift+V粘贴后保存为EXE文件,再用PEID查看,实际上他是个DLL动态库文件。
在这里插入图片描述
把它保存为t.wnry.dll文件,那么就知道了t.wnry文件保存的是t.wnry.dll加密后的数据,从之后的分析中会知道这个模块才是wannacry病毒的核心模块,关键的功能都在这个模块中实现的。

9. PeToMem加载DLL函数
这个函数比较复杂,总结起来也很简单,就是申请了一块虚拟内存存放t.wnry.dll的内容,把改虚拟内存中NT头和DOS头的地址存放进堆空间中。
在这里插入图片描述
从下图可以看出堆内存中第一个地址中是NT地址,第二个地址保存的是DOS头地址。
在这里插入图片描述
10. GetFunAddr函数
它遍历t.wnry.dll的导出表,最终找到并返回了TaskStart函数的地址
在这里插入图片描述在这里插入图片描述
11. 调用TaskStart函数
这个函数才是真正的核心函数,病毒功能都在这里面实现。
12. FreeData函数收尾释放数据

3.2 TaskStart函数分析

  • t.wnry.dll模块中TaskStart函数才是真正的加密函数,亦可称之为加密器,wannacry的核心功能都在这里面实现,这个函数就是水磨工夫,分析过程中很有很多函数没用过,就查MSDN和百度, 比较耗时,但是静下心来还是能勉强理解它的,坚持就是胜利。
  • TaskStart函数在t.wnry.dll模块中,分析时打开它g到0x10005AE0 地址反编译为伪C代码后一览图
    在这里插入图片描述
    在这里插入图片描述
    接下来逐一分析:
    1. SingleRun单一运行函数
    可以看到它创建了名为MsWinZonesCacheCounterMutexA的互斥体,用于防多开,确保单一实例运行,套路!
    在这里插入图片描述
    2. 之后进行了一些操作,读取c.wnry文件,对比密钥不等,获取一些API地址这些比较简单的操作。
    3. NoDoubleOpen函数
    这个函数,检测一个互斥体,第一次没有所以它再次创建了一个名称是"Global\MsWinZonesCacheCounterMutexA0"的互斥体。
    在这里插入图片描述4. CheckFileExist函数
    它检测一个00000000.dky的文件,由于第一次没有,不理睬,继续跟踪。
    在这里插入图片描述
    5. CreatePubPriFile函数
    这个函数总结后就是在当前目录创建00000000.pky文件保存公钥,创建00000000.eky保存加密后的私钥。在OD中分析工程中能看到RAS和AES等字符串,说明此病毒采用的是RAS和AES双重加密。
    在这里插入图片描述
  • WritePubKeyToFile写入公钥文件函数
    在这里插入图片描述
  • WritePriKeyToFile写入私钥文件函数
    在这里插入图片描述

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

7. 第一个线程回调函数CreateResFile1
此函数就是创建00000000.res文件写入时间信息
在这里插入图片描述

  • CreateResFile函数填充了8个字节随机数和4字节时间信息的内容,在之后这个.res还会保存更多的时间信息,所以得出结论.res文件是用来保存时间信息的。
    在这里插入图片描述
    在这里插入图片描述

8. 第二个线程回调函数CheckDkyFile
每隔5秒检测00000000.dky文件对其处理。
在这里插入图片描述
9. 第三个线程回调函数CheckNewDisk
它的功能就是每3秒检测是否有新的磁盘,有就对其文件加密,我的虚拟机没有新磁盘,所以就略过。
在这里插入图片描述
10. 第四个线程回调函数RunTaskdl1
每隔30秒运行一次taskdl.exe程序。
在这里插入图片描述

11. 第五个线程回调函数RunExeAndSetReg
每隔30秒就运行taskse.exe和@WanaDecryptor@.exe这两个程序和设置注册表启动项。
在这里插入图片描述

  • RunTwoExe函数功能是运行taskse.exe和@WanaDecryptor@.exe程序
    在这里插入图片描述
  • SetRegeditRun函数
    把"C:\Users\15pb-win7\Desktop\wcry\wcry2.0\tasksche.exe"设置为自启动项
    在这里插入图片描述
    12. 加密关键函数
    (1.0) EnOne_100057C0加密函数第一层
    这个函数很长,很多,函数嵌套复杂,所以先分析第一层的前半段,前面一些函数条件不满足的就不管它了,从CopyUwnryFile开始分析
    在这里插入图片描述
  • CopyUwnryFile函数
    此函数首先检测@WanaDecryptor@.exe文件是否存在,没有就拷贝u.wnry的内容创建为新未见@WanaDecryptor@.exe。并且在之后创建了一个@WanaDecryptor@.exe.lnk文件也就是@WanaDecryptor@.exe文件的快捷方式。
    可以双击@WanaDecryptor@.exe程序发现这个就是解密器程序,它会显示出勒索窗口和勒索桌面背景。
    可以得出结论u.wnry文件保存就是解密器内容的数据。
    在这里插入图片描述
  • CreateReadingFile函数
    这个函数拷贝r.wnry里的内容生成一个阅读文件@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加密函数第六层
    第六层也比较简单,首先获取原文件全路径,对比该文件是否是.WNCRY格式,不是就在其文件名后追加.WNCRY,然后经过第7层加密的问价就以其命名!
    在这里插入图片描述
    (7) EnSeven_10001960加密函数第七层
    首先读取原文件前8个字节比较是否是"WANACRY!",之后文件类型是4的情况下,会在新的文件名后面加上字符"T"如:“C:\Users\15pb-win7\Desktop\1234.docx.WNCRYT”,再创建该文件,也就是加密后的文件,此时只是没有填充内容而已。
    在这里插入图片描述
    然后在该文件中依次写入8字节字符"WANACRY!"、某个大小数值0x100、再写入0x100大小的数据、文件的类型值和原文件的大小。
    在这里插入图片描述
    然后再读取原文件内容经过第八层加密后,输出加密后的内容,再把该内容追加写入到刚才创建的文件中,设置文件日期和时间信息,加密文件就到此完成了,最后做了一个移动文件的操作,实际作用就是个文件后缀.WNCRYT改为.WNCRY。
    在这里插入图片描述
    (8) EnAight_10006940加密函数第八层
    第八层就是通过解析原文件,每次输入16个字节通过第9层加密后输出16个字节,依次循环直到加密完成为止,然后输入加密后的缓冲区。
    在这里插入图片描述
    (9) 加密函数结语:加密函数从第八层之后就完全是数据加密相关的代码,没有其他重要的操作了,层数太多,关于加密函数的分析我也就到此为止了。

接下来回到第一层,继续分析第一层后半段的代码。
通过以上对加密函数层层分析,已经知道了加密形式是怎么进行的了,只是上面的加密只针对桌面文件进行加密,实际上从加密函数第三层开始传入的参数不同,加密的路径自然也会改变。

(1.1) 紧接加密后的下一个函数是InterlockedExchange原子操作,交换两个数。这也是由于多线程的原因,用于线程同步,让线程之间互补干扰。
(1.2) 接下来加密全盘文件,获取出所有磁盘类型,对固定的磁盘文件进行加密,然后再对其他用户同样进行此操作。主要加密函数是EncryptDiskAll。
在这里插入图片描述

  • EncryptDiskAll函数
    此函数会得到磁盘的盘符如"C:",在最后它会调用加密函数的第3层,加密全盘的数据,如有其它盘也一样。
    在这之前会得到一个临时路径,只有c盘时是:“C:\Users\15PB - W~1\AppData\Local\Temp”,之后我添加了一个E盘,得到的是:“E:$RECYCLE”
    在这里插入图片描述

(1.3) 最后一段代码
在这里插入图片描述

  • 先开始以不显示GUI窗口的方式启动了解密器@WanaDecryptor@.exe程序,此时可看到桌面背景被更改了
  • 再向00000000.res文件写入当前时间信息
  • 运行cmd
  • 不断的向磁盘写入数据
  • WriteMassData写入删除数据函数分析
    首先该函数在之前得到的临时目录以隐藏方式创建了hibsys.WNCRYT文件
    在这里插入图片描述
    然后获取磁盘是否还有多余空间,有责每次写入0xA00000个字节的0x55,循环写入0x14次,检测磁盘有无多余空间。。
    在这里插入图片描述
    我花了10多分钟检测了一下写满磁盘会发生什么,如下图,我的磁盘总60G被写满了之后单步跟踪OD会发现它又把这整个文件删除了,回复了原来空闲空间,我只想说一句"卧槽",我猜测病毒作者的意图是不断的占用磁盘的性能,让用户欲罢不能。
    好吧,我的猜测都是错的,一次面试大佬给我解释了,磁盘的数据是可以找回的,前提是被删除文件后该磁盘并没有发生过大量重新读写,而此病毒不断读写磁盘就是为了阻止数据恢复
    在这里插入图片描述
    到此TaskStart函数就分析完毕,在整个分析过程中由于是多线程程序,有些函数的分支我分析的时候不满足条件,我就没有分析下去,所以,肯定有些关键点我没分析到,比如创建了加密文件后,会删除原文件,我就没分析到删除原文件是哪里进行的,这不得不说是个小遗憾,由于是新手分析了10来天,我有点小崩溃不想继续分析了,我也算对得起WannaCry了,哈哈,接下来分析最后两个程序taskdl.exe和taskse.exe。

3.3 taskdl.exe程序分析

taskdl.exe程序是在TaskStart函数的第4个线程中被运行的。现在分析它,当然前面的步骤都一样,查壳,看是什么程序等等。
找到WinMain函数可以看到,这个程序就是用来删除后缀为.WNCRT的文件的。
在这里插入图片描述
进入DeleteFile11函数中发现,这就是获取上面才分析过的临时路径,他删除里面的.WNCRYT文件实际就是删除hibsys.WNCRYT这个文件。
所以得出结论taskdl.exe的功能就是删除hibsys.WNCRYT文件。
在这里插入图片描述
在这里插入图片描述

3.4 taskse.exe程序分析

TaskStart的第5个线程运行了此程序,分析这个程序的时候我们要注意用OD打开它后需要添加点击"调试" ->"参数"附加参数"taskse.exe C:\Users\15pb-win7\Desktop\wcry\wcry2.0@WanaDecryptor@.exe"才能正常运行。
在这里插入图片描述
最开始判断参数是否符合,然后进入提权函数
在这里插入图片描述

  • 进入ChangePrivileges函数中的ChangePrivilege函数
    首先获取了一些权限相关的API函数的地址,然后进行提权操作,所以taskse.exe程序的功能就是进行提权。
    在这里插入图片描述
    在这里插入图片描述

最后还有一个解密器@WanaDecryptor@.exe,我就不分析了,直接运行它,就可知道它的功能,生成一张图片,把它设置为桌面背景,然后每个几秒弹出一个勒索窗口让用户交钱。

4. 解决方案

  • 因为采用高强度的RSA和AES双重加密,所以如果你的文件已被加密,只有交钱才能解密,交了钱也不一定100%能解密。
  • 电脑打补丁,因为此病毒是利用“永恒之蓝”漏洞进行传播的,打完补丁后就阻止了蠕虫病毒的传播。
  • 可以创建名为“MsWinZonesCacheCounterMutexA”互斥体阻止病毒运行。
  • 把该病毒的特征码加入病毒库,一经发现立马查杀。
  • 22
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
Wannacry勒索软件是一种使用加密原理的恶意软件,它通过感染目标计算机,将用户的文件加密,并要求用户支付赎金以解密文件。 Wannacry利用了一个名为EternalBlue的漏洞进行传播,这是一种影响Windows操作系统的漏洞。一旦感染了一个计算机,它就会在网络上寻找其他连接的计算机,并试图传播到这些计算机上。利用EternalBlue漏洞,Wannacry可以快速传播,并感染更多的计算机。 一旦Wannacry感染了目标计算机,它会对用户的文件进行加密,包括文档、照片、视频和其他重要文件。Wannacry使用密钥加密标准(AES)对这些文件进行加密,该加密算法被认为是非常强大和安全的。 加密完成后,Wannacry会将目标计算机上的所有文件更名为随机字符,并添加一个.wnry文件扩展名。通常,它还会在计算机上创建一个文本文件,其中包含有关解密文件需要支付的赎金金额和指示的详细信息。 对于被Wannacry感染并加密的文件,如果用户未支付赎金购买解密密钥,这些文件将保持被加密的状态,并且无法被用户访问或使用。如果用户选择支付赎金,Wannacry会向用户提供一个解密密钥,以便在用户支付后将文件解密。 然而,专家和执法机构强烈建议不要支付赎金,因为这只会鼓励恶意软件开发者继续进行这种勒索行为。而最好的防范方式是及时更新操作系统和软件补丁,使用合法的杀毒软件和防火墙,并定期备份重要文件,以便在遇到类似的勒索软件攻击时能够恢复文件。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值