zoukankan      html  css  js  c++  java
  • WannaCrypt0r分析报告

     

    病毒分析报告

     

    样本名

    WannaCrypt0r

    版本

    原版

    时间

    2018-05-08

    平台

    Windows 7-32位

     

    目录

    1.样本概况... 3

    1.1 样本信息... 3

    1.2 测试环境及工具... 3

    1.3 分析目标... 3

    1.4 样本行为分析... 3

    1.4.1查壳... 3

    1.4.2 原样本分析... 4

    1.4.3 tasksche.exe分析... 6

    1.4.3 crypt.dll分析... 12

    2,感谢... 17

     

    1.样本概况

    1.1 样本信息

    病毒名称:  永恒之蓝

    所属家族:  勒索性病毒/蠕虫病毒(Worm) 

    大小:       3723264 bytes

    MD5值:     DB349B97C37D22F5EA1D1841E3C89EB4

    SHA1值:    E889544AFF85FFAF8B0D0DA705105DEE7C97FE26

    CRC32:     9FBB1227

     

    1.2 测试环境及工具

    Win7 32位、OD/IDA/x64DBG/火绒剑/ExeiofoPE/

    1.3 分析目标

    分析病毒利用漏洞方式,网络连接,病毒的恶意行为

    1.4 样本行为分析

    1.4.1查壳

     

    Exeinfo 可查是该程序无壳,使用的是vc++/MFC 程序编写

    1.4.2 原样本分析

    进入WinMain后,可以发现入口处程序会尝试连接一个域名:

    http://www.iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea.com

     

    成功连接则程序不展开相关行为;否则执行sub_408090;

     

    在sub_408090函数内部,分为两个模块:

     

    在第一轮程序执行的是条件为false的模块,其功能主要是创建服务,释放并执行一个tasksche.exe /i。

    创建服务:

    创建是一个名为mssecsvc2.0,服务说明为“Microsoft Security Center (2.0) Service”的是服务:

     

    原始样本会从资源中加载,释放一个名为tasksche.exe的文件,并且以tasksche.exe/i的方式启动:

     

    接着分析tasksche.exe;

    1.4.3 tasksche.exe分析

    tasksche.exe启动后,首先,会将自身拷贝到C:intellgxbrzjmuzoytl531

     

    检查命令行参数中是否有/i这个参数:

     

    sub_401B5F中:检查并尝试在ProgramData目录 或 Intel目录 或 Temp系统临时目录 下创建前面以计算机名算出的标识的目录:

     

    将创建的目录设置为6即为隐藏和系统:(FILE_ATTRIBUTE_HIDDEN 和 FILE_ATTRIBUTE_SYSTEM )

     

    复制自己并重命名为tasksche.exe:

     

    将taskche.exe以服务方式启动,如果失败就以普通方式(/i)启动,这样启动的入口点不一样了,内部实现的逻辑就不一样了:

     

    互斥体检测启动是否成功:

     

    上面几项都成功完成后才能继续,否则退出

    创建注册表项HKEY_CURRENT_USERSoftwareWanaCrypt0rwd,写入当前路径值:

     

    然后就从资源中释放加密过的taskdlexe、taskse.exe,有比较复杂的解密函数,key为Wncry@2ol7:

     

    在当前目录下读取c.wnry文件:

     

    如果读取到了c.wnry文件,就会把13AM4VW2dhxYgXeQepoHkHSQuy6NgaEb94通过随机数加密后写入c.wnry,而这串数字就是比特币的地址,也就是说c.wnry文件中保存着加密后的比特币地址:

     

    下图是c.wnry的加密算法:

     

    执行这两句命令:

    attrib +h .

    icacls . /grant Everyone:F /T /C /Q

    attrib命令:将DisplayName工作目录设置为隐藏

    icacls命令:开放目录的用户权限

     

    接着,会读取前期释放的一个名为t.wnry的文件,并对其中的内容进行解密,解密后的内容为一个dll文件,但是该dll文件并不会写入磁盘,而是在内存中直接执行:

     

    将该文件从内存中dump 出来,重命名为crypt.dll,再次分析

    1.4.3 crypt.dll分析

    Crypt.dll仅有一个自定义的导出函数,这个导出函数是其行为展开的入口:

     

    先加载了kernel32.dll,动态获取后续需要的API:

     

    创建互斥体,用于判断自身重入问题:

     

    然后创建了四个线程:

     

    分析后作用分别是:

    1.将tasksc.exe加入到HKCUSOFTWAREMicrosoftWindowsCurrentVersionRun项,用于开机自启动

    2.遍历驱动器,并检查是否有U盘等移动存储插入

    3.循环调用taskdl.exe

    4.写入并执行vbs脚本

    遍历文件并加密文件:

     

    所加密的文件类型约有两百多种:

    罗列出部分加密文件的后缀名:

     

    加密方法:

    1,遍历到要感染的文件,被AES加密,AES加密使用的KEY,是根据每个文件随机生成的。随机生成的Key,之后会被下一步的RSA 2048加密。

    2,样本在针对每一台机器上,会随机生成一对RSA 2048密钥,其中公钥保存在00000000.pky中,用于加密上一步的AES KEY,私钥将被加密后存在文件00000000.eky中

    3,上一步的RSA私钥,会被另一个RSA 2048公钥加密,该加密后的私钥仅勒索者本人知道。、

     

    文件加密以WANACRY为特征头:

     

    知道以上思路后,就比较容易理解该样本的加密流程了:

    1,新建文件,新文件名为原始文件名.WANACRYT(T表示临时文件,用于临时处理文件加密)

    2,在新的文件头部写入8字节的WANACRY!加密标志

    3,写入4字节的长度标识,表示后面紧跟的加密后的文件加密密钥的长度

    4,写入256字节长度的加密后的文件加密密钥(该密钥解密后为16字节长度的字符串,使用该字符串AES加密文件)

    5,写入4字节长度的 勒索者作者定义的类型,不为4的文件类型记录到f.wnry文件中,用于后期免费解密。

    6,写入8字节长度的原始文件长度

    7,使用随机生成的16位字节的密钥利用AES加密算法进行加密,并写到上述内容之后。

    8,修改新文件的文件时间为源文件的时间。

    9,删除原文件,并将新文件重命名为WANACRY。

    10,     若文件为可免费恢复的文件,则将文件名记录到f.wnry文件中。

     

    至此,分析基本结束。

    上次有人问我,如果针对永恒之蓝该怎么做到抑制它,而不专杀掉:

    抑制构思如下,

    1,微软补丁

    2,它有检测互斥体的位置,可以从这里入手,Hook 或者注入

    3,它利用的CVE-2017-0143------CVE-2017-0148漏洞传播自身,而此漏洞需要使用445端口传播,在组策略中关闭此端口

    2,感谢

    Freebuff的epsky: http://www.freebuf.com/vuls/134602.html

    看雪的白小菜:    https://bbs.pediy.com/thread-217636.htm

  • 相关阅读:
    Twitter网站架构学习笔记
    优化和架构之服务切分
    现代浏览器的工作原理
    可伸缩性原则
    图解:2013年百度搜索引擎工作原理
    构建的可伸缩性和达到的性能:一个虚拟座谈会
    提升可伸缩性的8项最佳实践
    Oracle odbc配置
    Oracle Error
    java与java web数组括号的不同
  • 原文地址:https://www.cnblogs.com/by-clark/p/9126911.html
Copyright © 2011-2022 走看看