一个利用“永恒之蓝”漏洞传播的挖矿程序分析
背景介绍
近日,渔村安全团队追踪到一个利用永恒之蓝漏洞传播的挖矿程序,其具备高度的模块化和较强的传播能力,在短短数日就感染了数万台用户电脑。针对该突发情况,渔村安全团队迅速组织应急工作,最终使得目前的感染情况受到控制,下文为样本分析。
感染量
从微软发布ms17-010(永恒之蓝漏洞) 的修复补丁到现在已经过去四个月了,相继爆发的利用该漏洞传播的WannaCry,Petya 勒索病毒更是给 我们 上了一课。但目前来看,还是有不少用户没有及时更新补丁或者做相应的缓解措施,同时 Shadow Brokers把从 Equation Group偷来的全套针对该漏洞的利用工具开源 ,这使得人人有了一套 核武器 ,导致发动攻击的门槛极度降低。综合上述原因,可以推测该漏洞在很长一段时间之内,还会有不同程度的活跃。目前,根据全网监控数据可知,各地区感染该例样本量占比情况如下 :
样本分析
1.感染症状
该样本分为两个模块,分别为挖矿程序与永恒之蓝攻击程序,感染后的用户机器,通常会有如下症状 :
1. 监听26571端口
2.存在C:\Windows\IME\Crypt文件夹
3.访问其他主机的445端口
2.传播方式
如上图所示,是整个样本的攻击流程图,受害者之间的样本投送分工为:
攻击方,挖矿程序搭建web服务器(端口 26571),等待特定的GET请求
被攻击方,payload访问攻击方提供的web服务器,通过 GET请求得到样本(含挖矿程序和永恒之蓝 EXP 程序)
3.样本特性
通过前文已知,该样本是分为挖矿程序与永恒之蓝攻击程序,下面针对不同模块进行分析。
3.1挖矿程序
挖矿程序的调用者是内核后门注入到lsass.exe中的 payload所生成并调起的。
3.1.1 创建计划任务
程序在启动时,创建计划任务,达到开机自启动的目的,命令如下:
schtasks.exe/ create /TN "\Microsoft\Windows\UPnP\Services" /RU SYSTEM /TR "%WinDir%\IME\Microsoft\svchost.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:\Windows\IME\Microsoft\spoolsv.exe,实为payload 从攻击方下拉后解压生成的攻击程序。开启新线程,每隔 900s向服务器上报信息。
3.2 永恒之蓝攻击程序
3.2.1 攻击流程
攻击程序执行由挖矿程序进行调起,运行后,首先释放自身资源bin 到 %\\IME\\TMP20D1.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:\Windows\IME\Microsoft\ 下。
最后,执行挖矿程序(此处svchost.exe是挖矿程序 )。
至此,第二个用户已经完成感染。
总结
该样本所使用的绝大多数都是开源模块,其中WEB服务器使用开源项目mongoose ,挖矿程序使用开源项目 https://github.com/xmrig/xmrig , 永恒之蓝 漏洞利用工具地址 https://github.com/Eitenne/EternalPulse 。