这是作者网络安全自学教程系列,主要是关于安全工具和实践操作的在线笔记,特分享出来与博友们学习,希望您们喜欢,一起进步。前文分享了宏病毒相关知识,包括宏病毒基础原理、防御措施、自发邮件及APT28样本分析。这篇文章作者将继续分析WannaCry勒索病毒,主要通过IDA和OD逆向分析蠕虫传播部分,详细讲解蠕虫是如何感染传播的。同时,由于作者技术真的菜,只能叙述自己摸索的过程,如果存在错误或不足之处,还望告知。希望这篇基础性文章对您有所帮助~
作者作为网络安全的小白,分享一些自学基础教程给大家,主要是关于安全工具和实践操作的在线笔记,希望您们喜欢。同时,更希望您能与我一起操作和进步,后续将深入学习网络安全和系统安全知识并分享相关实验。总之,希望该系列文章对博友有所帮助,写文不易,大神们不喜勿喷,谢谢!如果文章对您有帮助,将是我创作的最大动力,点赞、评论、私聊均可,一起加油喔~
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勒索病毒,这里提醒下。
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加密随机密钥,每个文件使用一个随机密钥,理论上不可攻破。同时@[email protected]显示勒索界面。其核心流程如下图所示:
WannaCry勒索病毒主要行为是传播和勒索。
实验环境:
实验工具:
实验步骤:
切记、切记、切记:实验复现过程中必须在虚拟机中完成,运行之前关闭虚拟机Win7文件共享,真机上一旦被感染你就真的只能想哭了(wannacry)。同时,该实验比上一篇文章精简很多,更推荐该方法。
核心步骤:
(1) 利用永恒之蓝漏洞并设置参数
(2) 获取Win7系统管理员权限并上传勒索病毒
(3) 成功完成勒索,系统文件被加密
运行病毒程序后的界面如下图所示,已经成功被勒索。再次强调,所有代码必须在虚拟机中执行,并且关闭文件共享。
加密系统中的文件,被加密的文件后缀名统一修改为“.WNCRY”。
接下来开始对WannaCry样本进行分析,恶意样本一定要在虚拟环境下做好保护措施再进行分析。通常拿到一个软件先试着运行软件,如果有帮助文档查阅帮助文档,熟悉软件的基本用法,接着尝试输入错误的注册码,观察错误提示。如果没有输入注册码的地方,要考虑是否是读取注册表或Key文件,这些可以用其他工具来辅助分析。
第一步,调用PEiD检测程序是否加壳。
拿到一个样本,先调用查壳软件检查程序是否加壳(如PeiD、FI),有壳的需要脱壳之后再调用OllyDbg分析调试,无壳的直接调用工具调试。具体过程如下,该病毒使用VC6无壳编写的。
第二步,通过在线沙箱网站监测该病毒详情。
方法一:visualtool上传文件在线监测(https://www.virustotal.com/gui/home)
方法二:微步在线沙箱搜索MD5(https://s.threatbook.cn/)
多引擎监测信息如下:
行为签名信息如下:
静态信息如下:
第三步,我们将“.exe”修改为“.zip”可以看到更为详细的信息。
直接用资源工具看一下,发现是PK开头的,多半是个压缩文件了,导出来试试。样本的解压密码是WNcry@2ol7,通过资源工具也可以查看到。解压后的文件结构如下:
msg文件夹下就是所有的语言包。
其他文件内容如下,下一篇文章会详细介绍勒索原理。
第四步,推荐安全厂商及大佬分析报告。
为了更好帮助读者,作者将参考文献提前。下面给出下各大安全厂商及安全大佬对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运行的整体流程推荐安天公司的框架图,如下图所示:
其中,图中上半部分为WannaCry蠕虫的传播部分,该蠕虫通过网络进行传播,有自我复制和传播迅速等特点。传播步骤如下:
接着在虚拟机中用IDA Pro打开勒索病毒wcry.exe,进行静态分析。
主程序运行后会先连接域名(KillSwitch):hxxp://www.iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea.com
目前该域名已被英国的安全公司接管,代码如下图所示:
如果该域名无法访问,则安装mssecsvc2.0服务,服务的二进制文件路径为当前进程文件路径,参数为“-m security”,并且伪装成微软安全中心服务。
接着启动mssecsvc2.0服务,网络传播行为需要以服务启动才会触发。
蠕虫服务启动后,如果目标主机445端口开启,则会利用MS17-010漏洞传播,传播分为局域网传播和外网传播。
上图为火绒注释过版本,下图为作者利用IDA Pro分析原始wcry.exe的代码。
(1) 局域网传播: 蠕虫根据用户内网IP,生成覆盖整个局域网网段表,然后循环依次尝试攻击。
定位函数sub_407540如下。
样本会首先判断是否处于内网环境,如果处于内网中则尝试对内网主机进行感染,进行判断内网 I P 段分别是:
(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
主机IP地址探测成功后,会利用SMB漏洞(MS17-010)发起攻击。
网络传播过程会建立Socket通信,并进行网络连接和传播。
样本在利用漏洞MS17-010获取目标主机权限后,并不会直接发送蠕虫自身到目标,而是发送一段经过简单异或加密后的Payload到目标机器中执行。Payload由shellcode和包含样本自身的dll组成,Payload分为64位与32位。
Payload,中文“有效载荷”,指成功exploit之后,真正在目标系统执行的代码或指令。Shellcode,简单翻译“shell代码”,是Payload的一种,由于其建立正向/反向shell而得名。一个攻击代码发送的字节序列往往同时包含payload和shellcode代码。
整个字节流一般包含两个部分:(1) 一个包含部分代码的字节序列,被送入目标计算机执行,辅助攻击机获得控制权,比如打开目标计算机上的端口或者建立一个通信信道。(2) 一个用于实现在目标主机上运行某个应用程序如cmd或者计算器(常用于poc–概念验证)等。
那么,如何定位shellcode的起始位置呢?
Payload版本选择代码如下图所示:
(1) 首先,需要读取Payload内容,其中64位大小为0xc8a4,32位大小为0x4060。
(2) 调用sub_4072A0函数建立通信连接。
(3) 根据目标机器系统的不同,读取不同版本的代码部分,再获取样本自身进行拼接得到完整的dll。dll同样分为64位与32位版本,由代码与样本自身两部分组成。
当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中,二进制粘贴,可以看到对应的汇编代码。
如下图所示:
漏洞利用成功后,执行shellcode并使用APC注入将生成的dll注入到进程lsass.exe。
核心函数sub_406F50如下图所示:
dll具有一个导出函数PlayGame,它会将自身的资源文件(主程序)释放到被攻击的计算机,保存为C:\WINDOWS\mssecsvc.exe并执行。
最后释放资源tasksche.exe(勒索加密功能)到C:\WINDOWS目录下,并将其启动。
使用火绒剑检测结果如下图所示,看到释放的lsass.exe、mssecsvc.exe和tasksche.exe程序。
被攻击的计算机包含蠕虫的完整功能,除了会被勒索,还会继续使用MS17-010漏洞进行传播,这种传播呈几何级向外扩张,也是该蠕虫短时间内大规模爆发的主要原因。
写到这里,这篇文章就介绍完毕。主要讲解了WannaCry蠕虫的传播机制,后面作者会继续分享勒索部分的机理,希望您喜欢~
这篇文章中如果存在一些不足,还请海涵。作者作为网络安全初学者的慢慢成长路吧!希望未来能更透彻撰写相关文章。同时非常感谢参考文献中的安全大佬们的文章分享,感谢师傅、师兄师弟、师姐师妹们的教导,深知自己很菜,得努力前行。
欢迎大家讨论,是否觉得这系列文章帮助到您!任何建议都可以评论告知读者,共勉。
(By:Eastmount 2020-04-27 晚上6点写于贵阳 http://blog.csdn.net/eastmount/ )