Winnti 恶意组织:利用 ShadowPad 和 Winnti 恶意软件针对高校发动攻击

Winnti 恶意组织:利用 ShadowPad 和 Winnti 恶意软件针对高校发动攻击一、概述

在 2019 年 11 月,我们发现了 Winnti 恶意组织针对两所香港高校发起的新型恶意活动。在恶意活动中,我们发现了 ShadowPad 后门的新变种,这是该恶意组织主要使用的后门。新变种中部署了新的启动器,并且嵌入了许多模块。在 ShadowPad 出现的前几周,我们还在这些高校中发现了 Winnti 恶意软件。

Winnti 恶意组织自 2012 年开始活跃,主要针对视频游戏和软件行业展开供应链攻击,最终导致受害者发布包含木马的软件(例如:CCleaner、ASUS LiveUpdate 和多个视频游戏),并以此来攻击更多的受害者。并且,该恶意组织此前也针对医疗保健和教育领域的各种目标发动过攻击。

ESET 研究人员最近在一篇文章中发布了一份白皮书,其中更新了我们对于 Winnti 恶意组织武器库的理解,该文章记录了针对亚洲视频游戏行业的供应链攻击。此外,我们还曾经分析过一个名为 skip-2.0 的新型后门,该后门主要以 Microsoft SQL Server 为目标。

本文将重点介绍这个新型 ShadowPad 变种的技术细节。

关于 Winnti 恶意组织的命名:

我们选择沿用“Winnti 恶意组织”的名称,这是 Kaspersky 在 2013 年首次用于识别该组织的名称。由于 Winnti 也是一个恶意软件家族的名称,因此在提及攻击者时,我们会将其称为“Winnti 恶意组织”。自 2013 年以来,事实证明 Winnti 只是 Winnti 恶意组织使用的众多恶意软件家族其中的一个。

Winnti 恶意组织:利用 ShadowPad 和 Winnti 恶意软件针对高校发动攻击二、ShadowPad 恶意软件分析

2019 年 11 月,ESET 的机器学习引擎 Augur 在位于两所香港高校的多台计算机上检测到一个恶意样本,该样本是已经在 10 月底发现的 Winnti 恶意软件。Augur 检测到的可疑样本实际上是一个新的 32 位 ShadowPad 启动器。在这些高校中发现的 ShadowPad 和 Winnti 样本均包含恶意软件识别特征以及带有高校名称的 C&C; URL,这表明是有针对性的攻击。

除了我们发现的两所高校之外,由于攻击者使用了固定格式的 C&C; URL,我们有理由认为,攻击者还针对其他三所高校使用了相同的 ShadowPad 和 Winnti 变种发动攻击。

我们已经与受感染的高校取得联系,并提供了必要的信息和协助以消除威胁。

2.1 更新版本的启动器

与我们此前在 Winnti 恶意组织武器库的白皮书中记录的 ShadowPad 变种不同,这个启动器不会使用 VMProtect 进行混淆。此外,加密的 Payload 既不嵌入其中,也不位于 COM1:NULL.dat 备用数据流中,并且也没有使用根据受害主机系统驱动器卷 ID 生成的密钥进行常规 RC5 加密(在 PortReuse 后门、skip-2.0 和一些 ShadowPad 变种中使用这种方式)。在这种情况下,启动器的功能较为简单。

2.2 DLL 侧加载

启动器是一个名为 hpqhvsei.dll 的 32 位 DLL,它是 hpqhvind.exe 加载的合法 DLL 的名称。该可执行文件来自 HP,通常与名为“HP Digital Imaging”的打印和扫描软件一起安装。在这种情况下,攻击者将合法的 hpqhvind.exe 与恶意的 hpqhvsei.dll 共同投放到 C:\Windows\Temp 中。

尽管我们没有获取到投放并执行该启动器的组件,但这些文件的存在证明了,该启动器的初始执行是通过 DLL 侧加载来完成的。

在 hpqhvind.exe 启动时,恶意 DLL 被加载,此时将调用 DLLMain 函数,该函数检查其父进程中偏移量 0x10BA 处的下列字节:

85 C0 ; test eax, eax

0F 84 ; jz

如果父进程是 hpqhvind.exe,这个字节序列将出现在确定的位置,并且恶意 DLL 将继续在内存中修补父进程。它将无条件跳转(jmp – 0xE9)替换为 hpqhvsei.dll 中函数的地址,以解密并执行嵌入在启动程序中的加密 Payload,从而替换 0x10BA 处的原始指令。

负责修补父进程的反编译函数如下图所示。如果 hpqhvsei.dll 由与 hpqhvind.exe 不同的进程加载,则恶意代码将不会被解密和执行。

负责修补父进程的反编译函数:

Winnti 恶意组织:利用 ShadowPad 和 Winnti 恶意软件针对高校发动攻击

原始 hpqhvind.exe 与已经修补的 hpqhvind.exe 之间的区别,如下图所示。

原始 hpqhvind.exe (左侧)与修补后 hpqhvind.exe (右侧)之间的区别:

Winnti 恶意组织:利用 ShadowPad 和 Winnti 恶意软件针对高校发动攻击

修补的代码部分位于 hpqhvind.exe 主函数的最开始。如上图所示,修补的代码位于加载 hpqhvsei.dll 之后。这表明,负责解密和执行 Payload 的函数是在加载恶意 DLL 之后直接执行的。

2.3 Payload 解密

加密的 Payload 位于 hpqhvsei.dll 的 .rdata 段中,解密算法是一个 XOR 循环,其中 XOR 密钥在每次迭代时都会更新,如下图所示。

Payload 解密循环的伪代码:

Winnti 恶意组织:利用 ShadowPad 和 Winnti 恶意软件针对高校发动攻击

解密后的 Payload 是负责 ShadowPad 初始化的常规 Shellcode。在这里,使用了伪造的条件跳转来进行混淆,以阻止反汇编过程。

2.4 持久化

解密后,将执行 ShadowPad 的 Shellcode,它将首先将内存中已经修补的父进程写入磁盘(配置字符串池指定的路径),从而在系统上实现持久性。在我们所分析的样本中,写入的路径为 C:\ProgramData\DRM\CLR\CLR.exe。随后,它创建一个名为 clr_optimization_v4.0.30229_32 的服务,该服务负责执行 CLR.exe。为避免怀疑,恶意软件作者选择了这样的服务名称和可执行文件名称,使其看起来类似于 Microsoft .NET 优化服务的名称。

下图总结了整个阶段的过程,每个箭头上的编号对应于事件的时间顺序。

ShadowPad 阶段过程:

Winnti 恶意组织:利用 ShadowPad 和 Winnti 恶意软件针对高校发动攻击

2.5 模块

ShadowPad 是一个多模块的后门,其中从 Root 模块引用的模块中包含循环列表,可以从中提取模块地址、UNIX 时间戳(可能在模块编译过程中自动嵌入)和模块标识符。从模块本身中,我们还可以提取到开发人员为其指定的名称。在我们所分析的版本中,共嵌入了 17 个模块,具体信息如下。

·Root (ID:100) Thu 24 Oct 2019 12:08:27 PM UTC 初始 Shellcode

·Plugins (ID:101) Thu 24 Oct 2019 12:07:02 PM UTC 为其他模块提供 API

·Config (ID:102) Thu 24 Oct 2019 12:07:09 PM UTC 处理加密的配置字符串池

·Install (ID:103) Thu 24 Oct 2019 12:07:46 PM UTC 实现持久性

·Online (ID:104) Thu 24 Oct 2019 12:07:17 PM UTC 与 C&C; 服务器进行整体通信

·ImpUser (ID:106) Thu 24 Oct 2019 12:07:24 PM UTC 通过复制 Token 模拟用户

·TCP (ID:200) Thu 24 Oct 2019 12:01:01 PM UTC TCP 通信

·HTTPS (ID:202) Thu 24 Oct 2019 12:01:15 PM UTC HTTPS 通信

·Pipe (ID:207) Thu 24 Oct 2019 12:01:35 PM UTC 处理命名管道

·Disk (ID:300) Thu 24 Oct 2019 12:02:29 PM UTC 文件系统操作

·Process (ID:301) Thu 24 Oct 2019 12:02:36 PM UTC 句柄命名管道

·Servcie (ID:302) Thu 24 Oct 2019 12:02:45 PM UTC 服务操作

·Register (ID:303) Thu 24 Oct 2019 12:02:52 PM UTC 注册表操作

·Shell (ID:304) Thu 24 Oct 2019 12:03:00 PM UTC 命令行操作

·Keylogger (ID:306) Thu 24 Oct 2019 12:03:16 PM UTC 将键盘输入记录到文件系统

·Screen (ID:307) Thu 24 Oct 2019 12:03:25 PM UTC 屏幕截图

·RecentFiles (ID:317) Thu 24 Oct 2019 12:04:44 PM UTC 列出最近访问的文件

除了 RecentFiles 之外的所有模块,此前均已经由 Kaspersky 和 Avast 发现。其中的“Servcie”应该是恶意软件作者的笔误。

我们看到,所有模块的时间戳都分布在较短的时间范围内,这说明可能使用了编译框架来编译这些模块。同时也表明,这些模块是在启动器被编译之前的几个小时内编译的,启动器的编译时间戳是 Thu Oct 24 14:10:32 2019。由于这个编译时间戳是在恶意活动开始的两周之前,因此我们推测,时间戳可能没有被攻击者篡改。

可能还会有人注意到,该变种中嵌入的模块数量(17 个)比我们之前白皮书中所记录的变种中嵌入的模块数量(8-10 个)要多。

默认情况下,受害者的击键将使用 Keylogger 模块(306)进行记录,并保存到磁盘中的 %APPDATA%\PAGM\OEY\XWWEYG\WAOUE 位置。

日志文件使用与模块中加密静态字符串相同的方法进行加密。使用这个模块,表明攻击者倾向于从受害者的计算机中窃取信息。而我们在白皮书中所分析的变种,甚至都没有嵌入这个模块。

2.6 配置

与以前其他的 ShadowPad 变种一样,配置模块(102)中包含一个加密的字符串池,可以从其他任何模块进行访问。字符串池永远不会解密存储在内存中,特定字段只会在需要时被解密,随后立即被释放。配置部分的大小为 2180 字节,加密的字符串位于偏移量 0x84 的位置。用于解密字符串的算法与用于解密模块中静态字符串的算法相同。字符串池的解密内容如下:

·0x84: 2019/11/7 16:28:36

·0x99: CAMPAIGN_ID_REDACTED

·0xa1: %ALLUSERSPROFILE%\DRM\CLR\CLR.exe

·0xc5: clr_optimization_v4.0.30229_32

·0xe6: clr_optimization_v4.0.30229_32

·0x107: clr_optimization_v4.0.30229_32

·0x128: SOFTWARE\Microsoft\Windows\CurrentVersion\Run

·0x158: CLR

·0x15e: %ProgramFiles%\Windows Media Player\wmplayer.exe

·0x197: %windir%\system32\svchost.exe

·0x1b7: TCP://b[redacted].dnslookup.services:443

·0x1db: UDP://b[redacted].dnslookup.services:443

·0x202: SOCKS4

·0x21e: SOCKS5

其中,恶意活动 ID 位于偏移量 0x99 的位置,是目标高校的名称。在 ShadowPad 和 Winnti 中,通常会将于目标相关的恶意活动 ID 保存到恶意软件中。

值得关注的是,位于偏移量 0x84 处的时间戳要晚于模块和加载程序编译的时间戳。这表明该配置信息是在编译后手动加载到样本中的。尽管可能是巧合,但配置中的日期与在相应高校首次检测到该样本的日期一致。

2.7 网络通信

一旦安装到系统上,ShadowPad 将启动一个隐藏、挂起的 Microsoft Windows Media Player 进程 wmplayer.exe,并将自身注入到该进程中,wmplayer.exe 的路径由 Config 模块提供。

将 ShadowPad 注入到 wmplayer.exe 之后,Online 模块将使用配置中指定的 URL 与 C&C; 服务器进行通信。在更新防火墙规则之后,它将开始监听 13567 端口上的连接。

注册表键:HKLM\SYSTEM\ControlSet001\services\SharedAccess\Parameters\FirewallPolicy\FirewallRules\{816381AB-1400-45E5-B560-B8E11C5988CF}

值:v2.10|Action=Allow|Active=TRUE|Dir=In|Protocol=6|Profile=Public|LPort=13567|Name=Network Discovery (TCP)|

随后,由 Kaspersky 先前记录的 TCP 模块(200)处理该通信。

Winnti 恶意组织:利用 ShadowPad 和 Winnti 恶意软件针对高校发动攻击三、Winnti 恶意软件分析

除了 ShadowPad 恶意软件之外,在这两所高校的一些计算机上,还发现了 Winnti 恶意软件。Winnti 恶意软件于 10 月底被发现,时间上比发现 ShadowPad 的时间要早两周,该恶意软件位于 C:\Windows\System32\oci.dll,被 ESET 产品检测为 Win64/Winnti.CA。

在 Winnti 恶意软件中,通常包含特定恶意活动 ID 和 C&C; URL 的配置信息。在所有主机上,恶意活动 ID 与目标高校的名称相匹配,并且 C&C; URL 为:

w[已隐去].livehost.live:443

w[已隐去].dnslookup.services:443

其中,隐去的部分与目标高校的名称相对应。

Winnti 恶意组织:利用 ShadowPad 和 Winnti 恶意软件针对高校发动攻击四、C&C; URL 格式

我们可以观察到,Winnti 和 ShadowPad 所使用的 C&C; URL 都符合“[backdoor_type][target_name].domain.tld:443”的格式。其中,“[backdoor_type]”是单个字母,Winnti 恶意软件表示为“w”,ShadowPad 恶意软件表示为“b”。

通过这样的格式,我们可以找到一些 C&C; URL,其中包含另外三所香港高校的名称。在我们分析的样本中找到的恶意活动标识符与 C&C; 服务器的子域名相匹配,说明这些样本确实针对特定的高校。

Winnti 恶意组织:利用 ShadowPad 和 Winnti 恶意软件针对高校发动攻击五、总结

目前,Winnti 恶意组织仍然在积极利用其后门 ShadowPad 针对香港的高校发动攻击。在这一起恶意活动中,此前与 ShadowPad、PortReuse 后门、skip-2.0 共同使用的 VMProtected 启动器被恶意软件作者替换为更简单的启动器。除了在特定的高校发现了这些样本之外,样本中还包含与高校名称匹配的恶意活动 ID,并且使用包含高校名称的 C&C; URL,上述证据共同证明了该恶意活动是高度针对特定目标发起的。

我们将持续监控 Winnti 恶意组织的新动向,并在博客上发布相关信息。如有任何疑问,请通过 threatintel@eset.com 与我们联络。

Winnti 恶意组织:利用 ShadowPad 和 Winnti 恶意软件针对高校发动攻击六、威胁指标

ESET 检测名称:

Win32/Shadowpad.C trojan

Win64/Winnti.CA trojan

文件名称:

%ALLUSERSPROFILE%\DRM\CLR\hpqhvsei.dll

%ALLUSERSPROFILE%\DRM\CLR\CLR.exe

C:\windows\temp\hpqhvsei.dll

C:\windows\temp\hpqhvind.exe

%ALLUSERSPROFILE%\DRM\CLR\hpqhvsei.dll

%SYSTEM32%\oci.dll

%APPDATA%\PAGM\OEY\XWWEYG\WAOUE

服务显示名称:

clr_optimization_v4.0.30229_32

C &C; 服务器

b[org_name].dnslookup[.]services:443

w[org_name].livehost[.]live:443

w[org_name].dnslookup[.]services:443

ShadowPad 启动器:

693f0bd265e7a68b5b98f411ecf1cd3fed3c84af

Winnti 恶意组织:利用 ShadowPad 和 Winnti 恶意软件针对高校发动攻击七、MITRE ATT&CK; 技术

7.1 持久性

新服务(T1050):ShadowPad 借助名称为 clr_optimization_v4.0.30229_32 的服务来确保持久性。

7.2 逃避防御

DLL 侧加载(T1073):ShadowPad 的启动器由合法的可执行文件通过 DLL 侧加载的方式进行加载。

进程注入(T1055):ShadowPad 被注入到 wmplayer.exe 进程中。

反混淆 / 解码文件或信息(T1140):ShadowPad 启动器使用 XOR 解密 Payload,使用自定义算法来解密字符串和配置。

混淆文件或信息(T1027):ShadowPad 使用 XOR 编码 Shellcode,并使用伪造的条件跳转来阻止反汇编过程。ShadowPad 的字符串和配置均进行加密,并且还使用了 API 哈希。

隐藏窗口(T1143):ShadowPad 被注入在隐藏窗口中启动的 wmplayer.exe 进程中。

7.3 发现

应用程序窗口发现(T1010):ShadowPad 的 Keylogging 模块列出了应用程序的窗口。

文件和目录发现(T1083):ShadowPad 的 RecentFiles 模块列出了最近访问的文件。

7.4 命令与控制

标准应用层协议(T1071):ShadowPad 可以使用 HTTP 和 HTTPS 协议进行 C&C; 通信。

常用端口(T1043):ShadowPad 使用 TCP/443 和 UDP/443 端口。

不常用的端口(T1065):ShaodwPad 在 13567 端口上进行监听。

标准非应用层协议(T1095):ShadowPad 可以使用 UDP 和 TCP 协议进行 C&C; 通信。

自定义加密协议(T1024):ShadowPad 使用其自定义的加密协议进行 C&C; 通信。

7.5 收集

输入捕获(T1056):ShadowPad 具有按键记录模块。

屏幕捕获(T1113):ShadowPad 具有屏幕截图模块。

7.6 渗出

数据加密(T1022):按键记录模块所记录的内容被加密存储在磁盘上。

本文参考自:https://www.welivesecurity.com/

Winnti 恶意组织:利用 ShadowPad 和 Winnti 恶意软件针对高校发动攻击

Winnti 恶意组织:利用 ShadowPad 和 Winnti 恶意软件针对高校发动攻击