首页 > 编程知识 正文

wannacry病毒主要危害,wannacry勒索病毒危害

时间:2023-05-04 05:04:45 阅读:152944 作者:3711

示例名称Wannacry作者yusakul时间2019-05-6平台Win10-641示例信息病毒名称Wannacry所属家族Wannacry示例名称ed 01 ebf BC 9e b5 bbea 545 af 4d 01bf 1071661845 f 514、 368 bytesMD5值84c 82835 a5d 21 bbcf 75 a 61706 D8 ab 549 sha 1值5ff 465 afaabcbf 0150 D1 a3a B2C 2e 74 F3 a 4426467 sha 256 ed 01 ebf BC 9e b5 bbbbea 545 a 4d 01 bbf 51bf5f 5145 ad 06 a10 BF5ab 50 f 50 a145 ab 65 ad 06 ab 06 ab 106 ab 50 a 规则注释VMware Workstation 15 Pro分析环境win10_x64防火墙操作监控dddbb pro 7.0静态分析Ollydbg动态分析3使用分析对象3.1 PE文件结构PEid显示程序的PE结构并获取部分信息

3.1.1导入表kernel32.dll导入表包含进程、文件操作、加载资源和内存处理等相关函数。

Advapi32.dll Advapi32.dll是一个高级API APP应用程序接口。 包含函数和对象安全性、注册表操作以及与事件日志相关的API函数。

这些函数主要分为三类:注册表相关函数、进程权限更改函数和服务相关函数。

3.1.2检索加密算法

Adler32,CRC32计算校验和算法CryptEncrypt,CryptDecrypt,CryptGenKey是Microsoft CryptoAPIRijndael或AESZIP2和ZLIB是压缩算法3.1

PK这两个字符的开头可能是zip文件,并另存为res.zip

可以看到这样的内容。 被释放病毒的文件。

3.1.4字符串搜索dddbb反编译示例,敏感字符串搜索

在dddbb中看到字符串包含RSA2和AES时,应该与病毒加密方法和cmd命令有关。

3.2 ark工具可监控行为,此处使用小檗剑监控系统服务、流程、网络、文件操作、注册表和各种hook等。

在虚拟机上运行病毒:

病毒将资源段的zip压缩包文件释放到桌面上。 过了一半左右:

原始文件已加密,开头字符全部设定为WANACRY!

进程资源管理器显示病毒创建了四个子进程

绒剑监控:病毒流程wanacry包括文件修改、注册表修改、网络连接行为

通过运行监视@WanaDecrypor@.exe进程继续创建封闭进程,直观的效果是可以继续将自己的窗口弹出到顶部。

cmd进程:运行cmd命令以执行exe和bat

文件监视释放文件

病毒在系统的各个目录下释放了@ wana decryptor @.exe @ please _ read _ me @.txt的文件,在桌面上释放了bat文件。 之前也运行过bat脚本,可以看到运行后立即删除,在桌面上释放了其他文件。

修改文件在这里,我们将看到修改和重命名各种文件

注册表监视在测试环境中,只在SOFTWARE密钥中创建了一个子密钥就成功了---

网络监视病毒尝试连接到局域网中的几个ip,监视端口感染本身

3.3发行文件msg文件夹:显然是语言包

Please_Read_Me@.txt :恐吓文本

其他的暂时不能放在一边吧

3.4 dddbb分析发现WinMain函数

粗略分析可以得到以下信息

接下来进入各函数的详细分析

3.4.1子_401225

此函数返回了最后一个随机生成的字符串,因此可以更改其名称以方便查看。 在此修改为GetRandStr ()。

3.4.2判断

_p___argc (或命令行参数的数量,即返回argc,_p___argv ) )返回指向参数指针的指针,即argv。

判断为参数个数不相等,

第五个参数大于“/i”

在系统目录中创建文件夹

将当前模块复制为tasksche.exe以获取文件属性

创建tasksche.exe进程,使用互斥的主体机制作为进程保护

3.4.3注册表操作func_reg函数如下

3.4.4加载资源段func_resource(0,aWNcry );

资源释放不是关注的重点,所以大体上都有。

3.4.5填写比特币帐户

3.4.6导入私钥crypt(this,0,0,0 ) :导入私钥并分配内存

子函数sub_401861

其中函数sub_401

82C:

获取句柄,加密服务为Microsoft Enhanced RSA and AES Cryptographic Provider

此处判断由于lpFileName为0,所以判断结果固定了,使用后一种方式导入秘钥。

3.4.6 解密t.wnry

sub_4014A6(this, aTWnry, &size);

解密函数根据自定义的文件格式定位到加密内容,获取加密内容的大小,解密后保存在新开辟的内存中。

3.4.6 解析解密文件

sub_4021BD(pefile, size),将解密后的文件的内存句柄和大小传入。

进入该函数,新增了几个api的地址传入。进入子函数sub_4021E9。

检查文件的PE格式。

来来回回处理最后把PE文件保存在堆中了。

3.4.7 获取TaskStart地址


主要是从堆中获取TaskStart地址运行它。
目前病毒的主体程序实际上只做了一些初始化的操作 到目前为止并没有看到它感染或加密任何一个文件 也没有对用户进行勒索 真正的核心代码在t.wnry中 ,由于这个函数是在堆空间中调用 所以在dddbb中并没有显示出伪C代码 那么接下来需要用OD提取出这个PE文件。

3.4 病毒核心分析


病毒主要功能在sub_4014A6函数提取出的pe文件中,OD找到该函数,获取到他的返回值。


得到保存PE文件指针,同时获取到文件大小为0x10000,dump内存脚本一行:

dm 8ABED0, 10000, “C:UsersyusakulDesktopt.wnry”


dddbb打开该文件查看导出表,前面的分析知道,主程序获取到了TaskStart的地址,并执行它,现在可以分析TaskStart函数了。

3.4.1 读取c.wncy

读取c.wnry文件保存在内存中,后续会有使用,将其写入c.wnry

3.4.2 注册表操作


检查用户是否SYSTEM,sid是否为s-1-5-18,作用是权限检查

3.4.3 获取模块符号

3.4.4 秘钥生成


其中sub_10004500函数:
检查文件00000000.pky 和00000000.dky 是否存在,是则尝试加解密测试字符串,比较加解密效果,函数sub_10003D10:

if判断成立后创建线程:定时写入c.wncy,检查权限,运行@WanaDecryptor@.exe进程,添加tasksche.exe开机自启。见sub_10004990函数。



然后是创建秘钥文件CreateKey:

创建公钥
这里会进入第一个分支,key1存在但是key文件目前为止没有发现生成,会导入秘钥数组,生成pky(公钥)文件。从byte_1000CF40数组中导入并创建秘钥,三步有一个失败则会退出。byte_1000CF40如下。
创建私钥

进入sub_10004170:

生成私钥后,会将其加密返回,动态调试t.wnry.dll,dump出两个密钥。
公钥
私钥

随后读取密钥。 3.4.5 线程1:读取资源


这一段主要功能为检查res文件是否存在,不存在则开辟线程,创建res文件并写入8位随机数。进入函数sub_10004790:

3.4.6 线程2:加解密检测

创建线程每5秒检测一次,直到测试成功则退出线程。

3.4.7 线程3:加密




这个函数开始,F5伪代码逻辑比较混乱,各种跳转个循环,所以只贴出关键函数,进入下一层子函数:

进入下一层子函数sub_100027F0:

遍历文件夹、存储文件信息是使用链表实现的,以下是定义的结构体struct FILE_LIST{ FILE_LIST* prev; FILE_LIST* next; FILE_INFO file;//}struct FILE_INFO{ WCHAR path[0x168];// WCHAR name[0x104];//2d0 DWORD nFileSizeLow;//4d8 DWORD nFileSizeHigh;//4dc DWORD type;//4e0 FILE_TYP}//0x4e4enum FILE_TYPE{ FILE_TYPE_NULL = 0, FILE_TYPE_EXEDLL, FILE_TYPE_DOC, FILE_TYPE_DOCEX, FILE_TYPE_WNCRYT, //.wncryt FILE_TYPE_WNCYR, //.wncyr FILE_TYPE_WNCRY //.wncry}


sub_10002300函数主要操作为过滤需要加密的文件,并保存要加密文件的文件夹信息到链表中,随后执行加密操作,其中也调用了DispatchEncrypt_10002940加密分发函数。随后的循环则把链表中的文件加密,根据加密方式,删除或者保存文件信息节点。
进入子函数sub_10002300:

第1步,获取第一个文件。
第2步,在目录下创建临时文件,同时跳过当前文件夹“.”或者上级文件夹“…”,跳过系统目录的加密,经过过滤后将文件名和路径保存到String对象:
第3步,循环查找下一个文件,并过滤获取文档类型的文件,保存到new处那段内存中。

过滤掉系统目录,病毒释放文件,以及PE文件,要加密的文件类型如下:



第4步,遍历保存的路径,开始加密。

加密完成后再当前目录下创建勒索信息文件。第5步,加密分发函数DispatchEncrypt_10002940。
加密前的最后一次分类

到这里可以总结一下加密策略:

在枚举文件中,type=1,会对普通文件直接加密为.WNCRY,不再加入链表,大文件处理为.WNCYR,以及其他未作处理文件继续加入链表等待处理。枚举完成后,type从2-4,每个type遍历都遍历加密文件。

type=2,加密FILE_TYPE_DOCEX普通文件为.WNCRY(移出链表),以及FILE_TYPE_DOCEX大文件为.WNCYR。
type=2, 删除.WNCRYT
type=3, 加密链表中所有文件(移出链表)
type=4, 加密可能剩余链表中的文件

文件内容加密过程
验证文件是否未加密,或者未加密完成。已完成加密,直接退出。

type=4(只加密),打开wncyr或wncry文件;
type=3*(加密并修改文件名),按写打开源文件,将文件头0x10000字节内容移动到尾部,头部内容清零,写入加密文件头部数据,然后源文件移动为.WNCYR或.WNCRY。

加密文件,并将自定义的加密文件文件头写入新加密的文件。
//加密文件头部数据结构struct { char magic[8];//WANACRY!' int size;//0x100 char key[size];// int type;//加密文件类型3,4 __int64 datasize;// <=0x6400000 源文件大小 char data[1];//}


加密完成后,读取加密文件内容,写入源文件中:
当前加密类型为4:只加密时,这里又分两种情况:
1)如果文件被加密类型3处理过一次,那么读取加密类型3处理后的文件最后0x10000字节,写入刚刚加密完成的文件
2)如果文件未被加密处理过,那么读取加密处理后的文件,写入原文件,同时删除wncry文件

该线程主要加密流程如下

线程4:taskdl.exe


线程5:@WanaDecryptor@.exe与权限、自启

加密与其他工作




这里加密函数与前面的相同。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。