900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > wannacry勒索病毒简单分析

wannacry勒索病毒简单分析

时间:2021-06-01 21:17:29

相关推荐

wannacry勒索病毒简单分析

文章目录

样本概况样本信息环境及工具分析目标简单行为分析导入表分析字符串分析查看资源火绒剑行为监控病毒详细分析11.exe总结11.exe的主要行为taskche.exe总结taskche.exe的主要行为dump.dll总结dump.dll的主要行为总结

样本概况

样本信息

MD5:DB349B97C37D22F5EA1D1841E3C89EB4

SHA1:E889544AFF85FFAF8B0D0DA705105DEE7C97FE26

CRC32:9FBB1227

文件大小:3723264 bytes

文件名称:11.exe

环境及工具

环境:win7 32位 专业版

工具:IDA pro、OD、010Editor、LordPE

分析目标

分析勒索病毒感染文件的逻辑

简单行为分析

导入表分析

使用LordPE查看导入表

导入函数包括资源操作相关API,GetProcAddress动态加载函数,微软加密库中的API以及服务操作相关的API。

猜测样本将释放文件,使用微软加密库函数对文件进行加密以及创建服务等操作,动态加载dll获取API。

字符串分析

文件中含有大量API字符串,并且包含文件名称taskche.exe,包含一条网址,猜测有网络连接行为。

查看资源

资源中存在一个PE文件。猜测会释放并执行。

火绒剑行为监控

查看主要行为为释放PE文件taskche.exe并备份,然后执行,仅此操作。

病毒详细分析

11.exe

首先尝试连接URL,连接成功则直接返回,否则执行sub_408090。

根据启动参数个数进行行为判断,如果带有参数,会利用漏洞进行网络传播,即调用serviceCtrl函数。

如果没有参数,则会调用sub_407F20。

主要做了两件事,一个是创建启动服务,另一个就是释放PE文件并且执行该PE文件。

可以看出,这里释放了资源中额PE文件,名称为taskche.exe,并且带参数"/i"执行该文件。

总结11.exe的主要行为

尝试连接URL,成功返回。猜测是防止解密完用户再次感染。如果程序带参数运行,则创建服务,并且通过漏洞传播。如果无参运行则会释放PE文件taskche.exe并带参执行。

taskche.exe

将释放11.exe的资源dump出来接着进行分析:

总体流程如下图:

详细流程如下:

判断启动参数是否为”/i”查找C盘下是否存在programData/Intel文件夹,存在一个则在文件夹下创建根据计算机名HASH出来的随机文件夹

将taskche.exe拷贝到随机文件夹下

创建服务,再次启动taskche.exe。启动参数为零,则顺序往下执行。

创建服务:

创建一个注册表项

释放资源操作,这里是个压缩包

可以看出,资源内包含了许多的文件,这里将释放到当前文件夹中

随机一个比特币账户写入到c.wnry中

执行两条cmd命令,用于隐藏当前文件夹,并且设置当前文件夹权限为所有人完全访问权限

导入相关API,用于后面的文件操作和加解密操作

构造函数构造数据结构,并且调用sub_401437函数导入秘钥

通过CryptImportKey从40EBF8处BLOB导入秘钥

解密t.wnry文件,解密方式为RSA+AES方式解密文件

手动加载dll,查找导出表获取taskStart函数

因为这里t.wnry解密后的文件没有落地,所以通过LordPE dump内存获取文件进行分析。

总结taskche.exe的主要行为

备份taskche.exe文件到新创建的随机目录中释放资源中的压缩包中的大量文件随机选取一个比特币账户写入到c.wnry文件中使用RSA+AES的方式解密t.wnry为恶意dll,手动映射PE文件,查找导出表中的taskStart函数,手动调用,参数为(0,0)。

dump.dll

整体流程:

详细流程分析:

开始是一些初始化操作,包括互斥体检测多开,读取c.wnry获取比特币账户,检查当前用户权限,构造密码和资源文件名res,pkey,ekey。并对密码文件进行检测,防止重复感染。

权限比较如下:

构造数据结构,调用importKeyFromMem尝试通过秘钥文件导入秘钥,不存在则创建秘钥文件。

尝试读取资源文件,不存在则创建

Sub_10004420:

开辟5个线程

线程1:用于更新res文件中的时间标志。

线程2:用于检测dkey文件,推测是用来给支付比特币后的用户解密。

线程3:用于检测磁盘变化,当磁盘更新后进行遍历感染

Sub_10005680:

线程4:用来启动taskdl.exe

线程5:用于更新c.wnry时间标志,启动taskse.exe和@WanaDecryptor@.exe,设置注册表自启动。

setAutoRUN:

Sub_100057c0用于创建@WanaDecryptor@.exe,readMe.txt,结束相关进程,遍历磁盘进行文件加密,写满磁盘等操作。主要是针对线程的初始化操作。

如上,创建勒索客户端、遍历加密文件,结束进程占用。

枚举所有磁盘,进行遍历加密操作。

针对关键加密函数sub_10005540:

首先检测磁盘是否有剩余空间,然后检测磁盘类型,后面就调用encryptFile进行遍历加密。

encryptFile:

针对fileHandle,主要是进行文件遍历,符合条件放入链表,再统一加密处理:

对于文件夹的遍历,过滤条件folderFilter如下:

将符合条件的文件夹保存在链表中。

如果遍历到文件,同样的操作,文件类型过滤,放入链表。

getFileType规则如下:

Type 0:无后缀名的文件Type 1:exe和dllType 2:".doc" ".docx" ".xls" ".xlsx" ".ppt" ".pptx" ".pst" ".ost" ".msg" ".eml" ".vsd" ".vsdx" ".txt" ".csv" ".rtf" ".123" ".wks" ".wk1" ".pdf" ".dwg" ".onetoc2" ".snt" ".jpeg" ".jpg"Type 3:".docb" ".docm" ".dot" ".dotm" ".dotx" ".xlsm" ".xlsb" ".xlw" ".xlt" ".xlm" ".xlc" ".xltx" ".xltm" ".pptm" ".pot" ".pps" ".ppsm" ".ppsx" ".ppam" ".potx" ".potm" ".edb" ".hwp" ".602" ".sxi" ".sti" ".sldx" ".sldm" ".sldm" ".vdi" ".vmdk" ".vmx" ".gpg" ".aes" ".ARC" ".PAQ" ".bz2" ".tbk" ".bak" ".tar" ".tgz" ".gz" ".7z" ".rar" ".zip" ".backup" ".iso" ".vcd" ".bmp" ".png" ".gif" ".raw" ".cgm" ".tif" ".tiff" ".nef" ".psd" ".ai" ".svg" ".djvu" ".m4u" ".m3u" ".mid" ".wma" ".flv" ".3g2" ".mkv" ".3gp" ".mp4" ".mov" ".avi" ".asf" ".mpeg" ".vob" ".mpg" ".wmv" ".fla" ".swf" ".wav" ".mp3" ".sh" ".class" ".jar" ".java" ".rb" ".asp" ".php" ".jsp" ".brd" ".sch" ".dch" ".dip" ".pl" ".vb" ".vbs" ".ps1" ".bat" ".cmd" ".js" ".asm" ".h" ".pas" ".cpp" ".c" ".cs" ".suo" ".sln" ".ldf" ".mdf" ".ibd" ".myi" ".myd" ".frm" ".odb" ".dbf" ".db" ".mdb" ".accdb" ".sql" ".sqlitedb" ".sqlite3" ".asc" ".lay6" ".lay" ".mml" ".sxm" ".otg" ".odg" ".uop" ".std" ".sxd" ".otp" ".odp" ".wb2" ".slk" ".dif" ".stc" ".sxc" ".ots" ".ods" ".3dm" ".max" ".3ds" ".uot" ".stw" ".sxw" ".ott" ".odt" ".pem" ".p12" ".csr" ".crt" ".key" ".pfx" ".der"Type 4:.WNCRYTType 5:.WNCYRType 6:.WNCRY

接着对于链表中的文件进行加密操作

对于sub_10002940:

针对sub_10002200,主要用于加密之前构造不同的文件后缀,作为加密后的文件:

针对cryptFile,开始真正的文件加密操作:

对于cryptFile主要分为两种加密方式,方式3和方式4。

方式4:

该中文件是指大于1K小于200M的文件,这种文件仅仅加密一次。

流程如下:

1.打开文件

2.获取文件大小

3.获取文件时间。

4.判断文件是否已经被加密(这里主要为了加密方式3会加密两次)

5.创建一个新的文件.wncryt

6.选择加密秘钥

7.写入加密文件头

8.对文件进行循环读取加密

9.修改文件名称

至此,小于200M大于1KB的文件加密流程就完成了

对于大于200M的文件,会进行两次加密:

第一次在第5步时,会先对文件进行预处理,将文件头部的0x10000字节的数据追加到文件的最后,然后将头部的0x10000字节清零,随后写入加密标记

后面不会对文件进行加密操作而直接返回,将文件类型修改为5,文件后缀修改为.WNCYR

将该修改后的文件加入第二次处理的链表,按照加密类型4进行加密处理。

至此,对于文件加密的详细流程已经分析完毕,由于代码非常多,比较复杂,简单总结一下加密流程:

遍历时对不同文件进行分类通过sub_10002E70再次对文件进行大的分类,选择不同的加密方式。主要是通过文件大小进行,按照200M为分界线将文件分为两大类。分两次进行加密操作。大于200M的文件会先进行一次预处理,将头部0x10000字节预留出来,用于写入相关标记,然后再按照方式4加密。小于200M的文件直接使用方式4加密。加密方式为,利用cryptGenRandom产生真随机数,使用该随机数进行AES拓展加密,利用加密后的秘钥进行AES加密文件内容。随后将对产生的随机数使用RSA公钥加密,写入到文件中。这样一来,受害者自行解密几乎不可能,因为私钥保存在其他人手中,我们无法猜测出该16字节的随机数。

下面会设置壁纸,启动勒索客户端,遍历磁盘写入垃圾数据,重启时删除。

对于磁盘填充的操作如下:

总结dump.dll的主要行为

创建秘钥文件和资源文件,用于后面加密时使用检测是否存在dkey解密用的秘钥文件,存在则停止加密检测磁盘状态,磁盘有更新则会对新磁盘进行加密启动勒索客户端,设置注册表自启动启动taskdl.exe进行扫尾工作遍历文件进行指定类型文件的加密在所有磁盘创建临时文件,循环写入数据,占满磁盘

总结

文件加密方式为使用真随机数进行加密,使用RSA加密随机数保存到文件中用于解密部分文件采用的加密秘钥可能没有保存私钥,即不能解密病毒传播使用"永恒之蓝漏洞",通过139和445端口进行局域网和外网的传播病毒往磁盘写入大量垃圾数据,重启后又会删除病毒采用注册表加服务实现自启动

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。