永恒之蓝下载器blackball分析报告

简介

在为客户进行远程排查时,提取到名为blackball的Powershell恶意挖矿程序,经分析关联到一个长期活跃的样本家族,最早出现于2018年。此次的样本较历史版本增加了SMBv3漏洞扫描等模块(便于后续版本漏洞利用),为该家族的最新变种。

流程图

流程图

根据从感染主机上抓取到的PowerShell的命令行参数来着手分析,该命令行参数是从http[:]//t.tr2q.com/x.js下载执行x.js。如图:

x.js

下载到的x.js是经过多轮解混淆操作的PowerShell代码,其主要功能为通过WMI来收集主机信息并将收集到的数据上传至服务器,再从http[:]//t.tr2q.com/x.jsp下载执行x.jsp,如下图:

x.jsp

主要收集的信息有:

主机名 GUID
MAC地址 操作系统版本
操作系统位数 时间

恶意样本主体框架

从服务器上下载下来的x.jsp文件便是该恶意样本的主体框架,主要行为包含:

  • 收集操作系统信息
  • 执行挖矿
  • 横向传播
  • 创建计划任务实现持久化
  • 构造钓鱼邮件实施传播

收集操作系统信息

通过WMI再次收集大量操作系统信息,PowerShell代码如下图:

WMI

收集的信息有:

主机名 UUID
MAC地址 操作系统版本
用户名 域信息
时间信息 显卡信息
内存大小 盘符信息

修改Defender配置,关闭实时监控;添加排除目录C:\;添加排除进程PowerShell进程。如图:

defender

设置DNS服务器;并将获取到的信息拼接起来,后续当有下载访问时再将拼接好的信息发送至服务器,如图:

DNS

创建感染标记文件GkPiGedjuq8f91j.txt,并设置65529和65533端口转发,其中65529端口在后续横向传播时,作为感染标记。

同时关闭445端口和135端口防止后续其他挖矿程序入侵。

445_135

执行挖矿

首先,根据之前获取到的显卡信息,来判断感染主机的显卡类型,如图:

显卡

然后再根据经过判断的显卡类型,以及操作系统版本来下载执行不同的挖矿程序。

具体代码如图:

coinminer

当为64位操作系统时,会从http[:]//d.ackng.com下载名为m6.bin的XMRig的CPU挖矿程序;

当含有英伟达或是AMD的显卡并且为64位操作系统时,会从http[:]//d.ackng.com下载m6g.bin的XMRig的GPU挖矿程序。

GPU

并且当感染主机的显卡为英伟达的显卡时,且操作系统版本为64位,会再下载XMRig CUDA插件来辅助挖矿。

XMRig

通过动态加载的方式执行矿机主体程序,实现无文件挖矿。

nofile

横向传播

通过另起cmd进程,调用PowerShell执行构造好的指令,从http[:]//d.ackng.com下载执行if.bin文件,执行的PowerShell指令代码如图:

if.bin

If.bin主要是进行横向传播的,其行为有:

  • 感染可移动存储设备和网络驱动器
  • 清理其他挖矿程序
  • 使用PowerDump和Mimikatz获取感染主机的用户名密码
  • SMB爆破
  • 永恒之蓝及SMBv3漏洞利用
  • MS-SQL Server 管理员账户暴力破解

感染可移动存储设备和网络驱动器

另起PowerShell进程执行感染可移动设备的C#代码,如图:

removefile

感染USB等可移动设备和网络驱动器,写入带有CVE-2017-8464漏洞的link文件,一旦其他主机点击(不需要打开.lnk文件)被感染后的可移动存储设备或网络驱动器,便会触发CVE-2017-8464漏洞导致远程代码执行,进而感染病毒。

infected

.lnk文件的内容如下:

lnk

清理其他挖矿程序

清理操作主要为:关闭服务,删除计划任务,清除其他挖矿程序另起PowerShell进程执行Source4的PowerShell指令,如图:

source4

首先,通过SC.exe关闭不必要的服务,再通过schtasks.exe删除不必要的计划任务,如图:

schtasks

再通过WMi监控进程,根据进程的命令行参数和进程名,找出其他挖矿程序,结束对应进程,并将其文件删除,如图:

根据命令行参数,判断是否含有其他挖矿程序:

Get-Process

根据进程名判断是否含有其他挖矿程序,并且当Taskmgr.exe进程不存在时,便创建该进程:

Miner

同时还会监控建立TCP连接的端口是否为指定的值,当为指定值,也会将其进程结束。同样是为了清除其他挖矿进程,如图:

tcpconn

使用PowerDump和Mimikatz获取感染主机的用户名密码

通过网上开源的代码powerdump获取当前计算机所有用户秘密的hash值,并且还通过mimikatz获取到当前计算机所有用户的密码,当病毒作者的密码hash字典或密码字典中没有这些值时,便将其添加到字典中,如图:

dictory

用户名、密码hash及密码字典如图:

userpassword

SMB爆破、永恒之蓝及SMBv3漏洞利用

构造目标主机IP

获取主机所能访问到的内网地址,并且还通过访问网址http[:]//api.ipify.org获取公网IP,并且随机化一个公网IP网段。然后将这些获取到的网段地址和0~255的主机号进行拼接,生成后续要进行爆破或漏洞利用的IP地址,代码如图:

api_ipify

根据获取到的IP网段进行端口扫描,查看该网段内哪些主机开放了445端口以及作为感染标记的65529端口,如图:

65529

当扫描到开放445端口,并且没有开放65529端口的主机,视为目标主机,将依次进行如下攻击:

SMB弱口令爆破

通过弱口令对开放445端口的主机进行SMB爆破,来实现横向传播,代码如图:

445SMB

当爆破成功,便下载执行7p.php来绕过UAC,然后再将run.bat文件释放到目标主机的自启动目录下,代码如图:

7p.php

永恒之蓝(MS17-010)漏洞利用

首先扫描目标主机是否存在永恒之蓝的漏洞,当检查到存在该漏洞时,便执行指定的Exp。

MS17-010

SMB v3(CVE-2020-0796)漏洞扫描

验证当前主机是否存在CVE-2020-0796漏洞,并将存在漏洞的主机信息,发送到服务器上。如图:

CVE-2020-0796

MS-SQL Server 管理员账户暴力破解

先扫描当前网段哪些主机开放了1433端口和感染标记端口65529,当扫描到目标主机开放了1433端口并且没有开放65529端口,便对目标主机的SA账户进行爆破,当爆破成功便执行指令继续从服务器http[:]//t.tr2q.com上下载执行ms.jsp,来进行横向传播。

横向传播

最后再将执行的结果,返回到服务器/log.json上,如图:

log.json

创建计划任务实现持久化

从http[:]//t.tr2q.com下载执行report.jsp文件,如图:

report.jsp

report.jsp依旧是经过多轮混淆的Powershell指令,其主要功能为创建计划任务来实现持久化。首先创建名为“blackball”的计划任务,该计划任务不实现任何功能代码,只是作为感染标记。如图:

blackball

在根据下图的三个域名,创建三个随机命名的计划任务。这些计划任务除域名不同外,内容基本一致。都是通过调用PowerShell来执行下载执行a.jsp。如图:

a.jsp

经验证,计划任务下载的文件a.jsp与整体框架x.jsp是一致的,因此计划任务的目的便是实现持久化。

md5

构造钓鱼邮件实施传播

检测godmali3.txt是否存在,当文件不存在时下载if_mail.bin.

mail

字符串形式保存要执行的第一段C#代码,用于突破会话隔离创建CMD进程

createCMD

枚举当前会话ID

WTSEnumeratesessuions

创建CMD进程,突破Session 0隔离

Seeion_0

第二段要执行的C#代码,用于邮件发送

首先解出使用Base64加密的脚本字符串

base64

该部分主要用于生成发送邮件的附件,附件包括a.rtf和1.js两个文件

127.0.0.1

通过两段数据拼接的形式生成a.rtf

仔细分析后发现此文档包含CVE-2017-8570漏洞,当未修复此漏洞的主机打开后会触发隐含的脚本文件4i8IDlz75m1dp3c.sct,下载恶意代码执行。并实现脚本的自删除,清除痕迹。

a.rtf

1.js采用社会工程学手段,将要执行的代码隐藏在最低端。使用记事本打开文本并静默执行powershell代码。可以让用户误以为是无意义的文本文件而实现代码执行

1.js

随后会进行邮件的构造

从邮件池中取出邮件的主题内容等

scrt_1.js

cmdstr

通过新冠肺炎等热门话题或诱导性文字引导用户打开附件

covid-19

获取联系人信息并发送生成的钓鱼邮件。此前生成的RTF文件和JS脚本经处理后作为附件被添加,分别命名为readme.doc, readme.zip。

用户一旦打开附件就会成为新的受害者和不知情的传播者,如不能及时阻断将会通过钓鱼邮件的方式持续传播。

sending_mail

防护建议

安装如下补丁,防止漏洞利用:

CVE-2017-8464 LNK 远程代码执行漏洞补丁

MS17-010永恒之蓝漏洞补丁

CVE-2020-0796 SMB v3远程代码执行漏洞补丁

CVE-2017-8570 office远程代码执行漏洞补丁

设置复杂度较高的密码,杜绝同一密码多次使用,防止弱口令爆破和撞库:

数据库管理员账户密码

Windows账户

杜绝访问来源不明的邮件和使用不明的可移动设备

产品改进建议

对 PowerShell 进程命令行参数进行过滤,维护命令行规则库,对危险操作进行拦截。

通过 Hook Invoke-Expression 函数的方式实现对混淆命令行参数的识别,对最终执行的

Powershell 指令进行规则匹配。

加强对 PowerShell 高风险行为的监控。

溯源

IOC:

http[:]//t.tr2q.com

http[:]//d.ackng.com

http[:]//t.awcna.com

http[:]//t.amynx.com

总结

此次PowerShell样本可灵活地从服务器端获取更新的配置文件,结合各种黑客工具和漏洞利用模块,通过多种途径实现传播,给用户带来了极大的安全威胁。在此建议用户仔细检查邮件来源信息,不要被钓鱼信息迷惑。做好安全检查,不开放危险的端口,及时更新安全补丁。合理配置密码,不使用弱口令,避免遭遇弱口令爆破攻击。