一个利用“永恒之蓝”漏洞传播的挖矿程序分析

背景介绍
近日,国内安全团队追踪到一个利用永恒之蓝漏洞传播的挖矿程序,其具备高度的模块化和较强的传播能力,在短短数日就感染了数万台用户电脑。针对该突发情况,国内安全团队迅速组织应急工作,最终使得目前的感染情况受到控制,下文为样本分析。
感染量
从微软发布ms17-010(永恒之蓝漏洞) 的修复补丁到现在已经过去四个月了,相继爆发的利用该漏洞传播的WannaCry,Petya 勒索病毒更是给 我们 上了一课。但目前来看,还是有不少用户没有及时更新补丁或者做相应的缓解措施,同时 Shadow Brokers把从 Equation Group偷来的全套针对该漏洞的利用工具开源 ,这使得人人有了一套 核武器 ,导致发动攻击的门槛极度降低。综合上述原因,可以推测该漏洞在很长一段时间之内,还会有不同程度的活跃。目前,根据全网监控数据可知,各地区感染该例样本量占比情况如下 :

样本分析
1.感染症状
该样本分为两个模块,分别为挖矿程序与永恒之蓝攻击程序,感染后的用户机器,通常会有如下症状 :
1.  监听26571端口

2.存在C:WindowsIMECrypt文件夹
 

3.访问其他主机的445端口

2.传播方式

如上图所示,是整个样本的攻击流程图,受害者之间的样本投送分工为:
攻击方,挖矿程序搭建web服务器(端口 26571),等待特定的GET请求
被攻击方,payload访问攻击方提供的web服务器,通过 GET请求得到样本(含挖矿程序和永恒之蓝 EXP 程序)
3.样本特性
通过前文已知,该样本是分为挖矿程序与永恒之蓝攻击程序,下面针对不同模块进行分析。
3.1挖矿程序
挖矿程序的调用者是内核后门注入到lsass.exe中的 payload所生成并调起的。
3.1.1 创建计划任务
程序在启动时,创建计划任务,达到开机自启动的目的,命令如下:
schtasks.exe/create /TN "MicrosoftWindowsUPnPServices" /RU SYSTEM /TR"%WinDir%IMEMicrosoftsvchost.exe" /SC ONSTART
 

3.1.2 释放挖矿程序
创建线程,完成从资源bin中释放挖矿程序到系统根目录下功能,文件名称为 ServicesHost.exe

之后传递参数
-o stratum+tcp://xmr.pool.minergate.com:45560-u dashcoin@protonmail.com -t 1 --donate-level=1
执行,同时尝试解析系统根目录下的 settings7283.dat数据文件。
3.1.3 开启WEB服务
创建线程,搭建一个WEB服务器,提供文件下载功能,方便被攻击方快速下拉恶意代码。

其中,回调函数Url_parser只处理两种请求,分别为:
POST方式接收到的Hell World?
GET方式接收到的/dnsclientprovider_userdata.mof
当POST方法得到的请求数据是Hell World? ,则当前挖矿进程会退出,逻辑如下:


其中dnsclientprovider_userdata.mof文件目前没有捕获到,但根据之后的payload 的请求数据来看,该文件是一个 ZIP包,里面包含了挖矿程序和攻击程序,故达到了利用漏洞传播的效果。
3.1.4 执行攻击程序&攻击信息上报
开启新线程,执行C:WindowsIMEMicrosoftspoolsv.exe,实为payload 从攻击方下拉后解压生成的攻击程序。开启新线程,每隔 900s向服务器上报信息。


3.2 永恒之蓝攻击程序
3.2.1 攻击流程
攻击程序执行由挖矿程序进行调起,运行后,首先释放自身资源bin 到 %IMETMP20D1.TMP中,之后进行Unzip 操作,解压缩完成后的文件列表如下:

其中核心模块如下:
文件名称
功能说明
svchost.exe
永恒之蓝攻击程序(Eternalblue-2.2.0.exe)
spoolsv.exe
doublepulsar后门利用程序(Doublepulsar-1.3.1.exe)
svchost.xml
永恒之蓝攻击程序配置文件
spoolsv.xml
doublepulsar配置文件
x64.dll
64位Payload DLL文件
x86.dll
32位Payload DLL文件
接下来,读取xml配置信息、Payload程序到内存,方便之后攻击时进行参数配置,然后扫描开放 445端口,但未开放26571端口的机器( 防止重复感染 ),如下:

得到扫描结果之后,格式化Eternalblue需要的xml配置信息 (ip即可),之后创建进程,将Eternalblue 执行结果重定向到stage1.txt中,方便stage2阶段的筛选。

从stage1.txt中可以得到攻击是否成功,以及目标机器的CPU架构信息,通过查找指定关键字,得到需要的信息,例如 :得到目标机器平台是否为x86(x64原理相同)

实际stage1.txt的内容:

当查找成功之后,构造 Doublepulsar 利用工具的 xml  信息 spoolsv.xml,同时通过特征码定位 payload  中需要填写的配置参数 (攻击方 ip,payload  通过该 ip访问 web 服务,下拉样本程序 )

所有工作完成之后,调用 Doublepulsar 执行后门利用( 通过内核级注入 payload到lsass.exe进程 ( 默认进程名 ))

以上就是攻击程序的执行流程,接下来是payload的功能分析。
3.2.2 payload功能
payload 分为 x64.dll 和 x86.dll ,完成功能相同,这里以 x86.dll 为例进行分析。其导出函数有 Func1 , Func2,代码相同,如下:

访问攻击端架设的WEB服务器,下载 dnsclientprovider_userdata.mof ( 若本地系统根目录存在该文件,则先删除 ),然后进行解压,同时将解压后的下列文件移动到 C:WindowsIMEMicrosoft 下。

最后,执行挖矿程序(此处svchost.exe是挖矿程序 )。

至此,第二个用户已经完成感染。
总结
该样本所使用的绝大多数都是开源模块,其中WEB服务器使用开源项目mongoose ,挖矿程序使用开源项目https://github.com/xmrig/xmrig, 永恒之蓝 漏洞利用工具地址 https://github.com/Eitenne/EternalPulse。