一、概述
近期,FireEye Labs观察到针对中亚政府部门的攻击,该攻击利用众所周知的Microsoft Office漏洞CVE-2017-11882和CVE-2018-0802提供新型Hawkball后门。
Hawkball是一个后门,攻击者可以利用该后门收集受害者的信息,同时可以提供Payload。Hawkball能够对主机进行信息收集、创建命名管道执行本地Windows命令、终止进程、创建/删除及上传文件、搜索文件、列举驱动器。
下图展示了实际攻击中所使用的诱饵文件。
诱饵文件doc.rtf(MD5值为:AC0EAC22CE12EAC9EE15CA03646ED70C)包含一个OLE对象,该对象使用公式编辑器将嵌入的Shellcode放在%TEMP%中,名称为“8.t”。这一Shellcode通过EQENDT32.EXE在内存中解密。下图展示了EQENDT32.EXE中所使用的解密机制。中国菜刀
Shellcode解密例程:
解密后的Shellcode将作为Microsoft Word的插件WLL(MD5值为:D90E45FBF11B5BBDCA945B24D155A4B2),被投放到C:\Users\ADMINI~1\AppData\Roaming\Microsoft\Word\STARTUP目录下(如下图所示)。
Payload作为Word插件被投放:
二、技术细节
投放的Payload中包含一个DllMain,负责确定样本命令行中是否存在字符串“WORD.EXE”。如果该字符串不存在,则会退出恶意软件。如果该字符串存在,恶意软件将使用WinExec()函数执行命令RunDll32.exe < C:\Users\ADMINI~1\AppData\Roaming\Microsoft\Word\STARTUP\hh14980443.wll, DllEntry>。
DllEntry是Payload的唯一导出函数。恶意软件在%TEMP%中创建一个名为c3E57B.tmp的日志文件。恶意软件每次会以下面的格式写入当前本地时间与两个硬编码值:
<Month int>/<Date int> <Hours>:<Minutes>:<Seconds>\t<Hardcoded Digit>\t<Hardcoded Digit>\n
例如:
05/22 07:29:17 4 0
该日志文件每隔15秒写入一次。最后两位数字是硬编码的,并且会作为参数传递给函数(如下图所示)。
日志文件的字符串格式:
加密文件包含0x78字节的配置文件。这部分数据内容使用0xD9 XOR操作解密数据。解密后的数据包含命令和控制(C2)信息以及恶意软件初始化期间使用的互斥锁字符串。下图展示了解密例程以及解密的配置文件。
配置解密例程:
配置文件中的IP地址将使用本地时间写入到%TEMP%/3E57B.tmp。例如:
05/22 07:49:48 149.28.182.78.
2.1 创建互斥锁
恶意软件会创建一个互斥锁,以防止多个实例的执行。在命名互斥锁之前,恶意软件会首先确定它是否作为系统配置文件运行(如下图所示)。要验证恶意软件是否解析了%APPDATA%的环境变量,它会检查字符串config/systemprofile。
验证恶意软件是否作为系统配置文件运行:奇热看片
如果恶意软件作为系统配置文件运行,则解密的配置文件中的字符串d0c会用于创建互斥锁。否则,字符串_cu将附加到d0c,互斥锁名称为d0c_cu(如下图所示)。
互斥锁创建:
在创建互斥锁后,恶意软件会在%TEMP%的日志文件中写入另一个条目,其值为32和0。
2.2 网络通信
Hawkball是一个后门程序,它使用HTTP与单个硬编码的C2服务器进行通信。C2服务器是从解密的配置文件中获得的,如下图所示。网络请求由硬编码后的值组成,例如User-Agent。恶意软件还会设置请求标头的其他字段,例如:
· Content-Length: <content_length>
· Cache-Control: no-cache
· Connection: close
恶意软件使用443端口上的HTTP协议向其C2 IP地址发送HTTP GET请求。下图展现了通过网络发送的GET请求。
网络请求:
网络请求由四个参数组成,格式如下图所示:
Format = "?t=%d&&s=%d&&p=%s&&k=%d"
GET请求参数的组成部分:
GET请求参数具体如下:
T:初始化设置为0;
S:初始化设置为0;
P:来自解密配置的字符串,位于0x68;
k:GetTickCount()的结果。
如果返回的响应为200,那么恶意软件会发送另一个GET请求(如下图所示),其中包含以下参数(如下图所示)。
Format = "?e=%d&&t=%d&&k=%d"
第二个GET请求:
第二个GET请求参数的组成部分:
GET请求参数具体如下:
E:初始化设置为0;
T:初始化设置为0;
K:GetTickCount()的结果。
如果返回的响应为200,那么恶意软件将会检查Set-Cookie字段。该字段会提供命令ID(Command ID)。如上方第二个GET请求的截图所示,字段Set-Cookie的响应ID=17。
该命令ID将作为恶意软件创建的函数表的索引。下图展示了将要执行的后门命令对应的虚拟函数表的创建过程。
函数表:
下面列出了Hawkball所支持的命令:
0:将URI查询字符串设置为某个值;
16:未知;
17:收集系统信息;
18:使用CreateProcess执行提供的参数;
19:使用CreateProcess执行提供的参数,并上传输出结果;
20:创建cmd.exe的反向Shell,执行命令并上传输出结果;
21:关闭反向Shell;
22:未知;
23:关闭反向Shell;
48:下载文件;
64:获取逻辑驱动器C-Z的驱动器大小和可用空间大小;
65:检索有关特定目录的信息;
66:删除文件;
67:移动文件。
2.3 收集系统信息
命令ID 17索引至收集系统信息,并将其发送到C2服务器的功能。系统的信息包括:
· 计算机名称;
· 用户名;
· IP地址;
· 活动代码页;
· OEM页面;
· 操作系统版本;
· 系统架构细节(32位或64位);
· 字符串与解密的配置文件的0x68偏移量。
恶意软件使用以下WINAPI调用,从受害者计算机中检索上述信息:
Format = "%s;%s;%s;%d;%d;%s;%s %dbit" GetComputerNameA GetUserNameA Gethostbyname and inet_ntoa GetACP GetOEMPC GetCurrentProcess and IsWow64Process
系统信息:
收集到的系统信息,会使用分号分隔不同字段,并连接到一起,如下所示:
WIN732BIT-L-0;Administrator;10.128.62.115;1252;437;d0c;Windows 7 32bit
我们使用XOR操作来加密此信息。来自第二个GET请求的响应将作为加密密钥。如此前截图所示,第二个GET请求以4字节的XOR键值响应。在这种情况下,密钥为0xE5044C18。
在加密后,系统信息将会在HTTP POST的正文中发送。下图展示了使用POST请求通过网络发送的数据。
POST请求:
在请求标头中,字段Cookie使用发送响应的命令的命令ID进行设置。如上图所示,Cookie字段设置为ID=17,这是对前一个命令的响应。在收到的响应中,会在字段Set-Cookie中返回下一个命令。
下表展示了此POST请求的参数。
E:初始化设置为0;
T:XOR键值的十进制形式(采用小端字节顺序);
K:GetTickCount()的结果。
2.4 创建进程
恶意软件使用指定的参数创建进程,下图展示了该操作。
命令创建进程:
2.5 删除文件
恶意软件将删除指定参数中的对应文件,下图展示了该操作。
删除文件操作:
2.6 获取目录信息
恶意软件使用以下WINAPI调用,获取所指定目录地址的详细信息:
· FindFirstFileW
· FindNextFileW
· FileTimeToLocalFileTime
· FiletimeToSystemTime
下图展示了用于收集信息的API:
2.7 获取磁盘信息
该命令将检索驱动器C到Z盘的驱动器信息,以及每个驱动器的可用磁盘空间。
检索驱动器空间:
每个驱动器的信息将以如下格式存储:
Format = "%d+%d+%d+%d;"
例如:“8+512+6460870+16751103;”。
将所有可用驱动器的信息组合在一起之后,将会采用类似于“收集系统信息”的操作发送到服务器。
三、反调试技巧
3.1 使用PEB进行调试器检测
恶意软件使用PEB查询标志BeingDebugged的值,以检查进程是否正在被调试。
从PEB检索值:
3.2 NtQueryInformationProcess
恶意软件使用NtQueryInformationProcess API来检测它是否正在被调试。下面的标志将会被使用:
将值0x7传递给ProcessInformationClass。
ProcessDebugPort验证:
将值0x1E传递给ProcessInformationClass。
ProcessDebugFlags验证:
将值0x1F传递给ProcessInformationClass。
ProcessDebugObject:
四、总结
Hawkball是一个新型的后门程序,该后门为攻击者提供了可以从受害者计算机中收集信息并将新的Payload传递给目标的功能。在撰写本文时,我们的多向量执行(MVX)引擎可以识别并阻止此威胁。我们建议所有行业保持警惕,因为开展恶意活动的威胁参与者可能会扩大他们所针对的目标范围。
五、IoC
5.1 文件名及哈希值
Doc.rtf(MD5:AC0EAC22CE12EAC9EE15CA03646ED70C)
hh14980443.wll(MD5:D90E45FBF11B5BBDCA945B24D155A4B2)
5.2 网络通信
149.28.182[.]78:443
149.28.182[.]78:80
http://149.28.182[.]78/?t=0&&s=0&&p=wGH^69&&k=<tick_count>
http://149.28.182[.]78/?e=0&&t=0&&k=<tick_count>
http://149.28.182[.]78/?e=0&&t=<int_xor_key>&&k=<tick_count>
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2)
六、检测
MD5:AC0EAC22CE12EAC9EE15CA03646ED70C
适用检测产品:邮件安全、网络安全、终端安全
检测名称:FE_Exploit_RTF_EQGEN_7、Exploit.Generic.MVX
防御方式:阻断
MD5::D90E45FBF11B5BBDCA945B24D155A4B2
适用检测产品:邮件安全、网络安全、终端安全
检测名称:Malware.Binary.Dll、FE_APT_Backdoor_Win32_HawkBall_1、APT.Backdoor.Win.HawkBall
防御方式:阻断