关键词:间谍组织,多功能后门,隐写加载器

最近,ESET分析人员发现了多起针对亚洲知名公司和地方政府的针对性攻击。这些攻击是由一个以前未知的间谍组织——Worok实施的,该组织自2020年以来一直处于活跃状态。Worok的工具集包括一个C++加载程序CLRLoad、一个PowerShell后门PowHeartBeat和一个C#加载程序PNGLoad,它采用隐写技术从PNG文件中提取隐藏的恶意负载。

1. 概述

在2021年初的ProxyShell(CVE-2021-34523)漏洞披露期间,ESET分析人员观察到了一个新的威胁组织,并将其命名为Worok,这一名称来自于加载程序中的互斥锁。根据ESET的遥测数据,Worok自2020年底以来一直处于活跃状态,在撰写本文时仍然活跃。

早在2020年底,Worok就瞄准了多个国家的政府和公司,包括:

  • 东亚某电信公司

  • 中亚的一家银行

  • 东南亚某海运业公司

  • 中东的一个政府实体

  • 南部非洲的一家私营公司

2021年5月到2022年1月,Worok的攻击活动暂时停止,随后在2022年2月恢复,其攻击目标是:

  • 中亚的一家能源公司

  • 东南亚公共部门实体

图1显示了目标区域的可视化热图。

图1:目标区域的可视化热图

根据攻击目标以及受害主机上部署的工具推测,Worok的主要目标是窃取信息。

2. 技术分析

虽然大多数的初始访问未被发现,但在到2021年和2022年间,分析人员看到了针对ProxyShell漏洞的利用。在这种情况下,通常会在利用这些漏洞后上传webshell,以便在受害者的网络中实现持久驻留。然后攻击者使用各种植入来获得进一步的能力。

获得访问权限后,攻击者部署了多个公开可用的侦察工具,包括Mimikatz、EarthWorm、ReGeorg和NBTscan。接下来是自定义植入程序,包括第一阶段加载程序,以及第二阶段的.NET加载程序(PNGLoad)。但是分析人员没有检索到任何有效载荷。在2021年,第一阶段的加载程序是一个CLR(CLRLoad)程序集。而在2022年,它在大多数情况下已被一个功能齐全的PowerShell后门(PowHeartBeat)所取代,这两种攻击链如图2所示。

图2:攻击链对比

3.CLRLoad:CLR 程序集

CLRLoad是32位和64位通用的WindowsPE。它是一个用C++编写的加载器,是公共语言运行时(CLR)程序集形式的DLL文件,用于加载下一阶段的PNGLoad。其代码是从位于磁盘上的合法目录中的文件加载的,目的是为了误导受害者或事件响应机制。

首先,一些CLRLoad样本会解密文件的完整路径,这些文件路径使用单字节XOR加密,每个样本中都有不同的密钥。解密后的内容或者说明文表明,这些文件路径是绝对的,比如:

  • C:\\ProgramFiles\\VMware\\VMwareTools\\VMwareVGAuth\\xsec_1_5.dll

  • C:\\ProgramFiles\\UltraViewer\\msvbvm80.dll

  • C:\\ProgramFiles\\InternetExplorer\\Jsprofile.dll

  • C:\\ProgramFiles\\WinRar\\RarExtMgt.dll

  • C:\\ProgramFiles(x86)\\FoxitSoftware\\FoxitReader\\lucenelib.dll

然后,不同的样本会创建不同的互斥量。加载器会检查这个互斥锁,如果找到,则退出。在其中一个示例中,遇到了互斥量Wo0r0KGWhYGO,这也是Worok的名称由来。

CLRLoad通过32位变体中的CorBindToRuntimeExWindowsAPI调用或64位变体中的CLRCreateInstance调用,实现从解密出的文件路径加载CLR汇编。

4.PowHeartBeat

PowHeartBeat是一个用PowerShell编写的多功能后门,使用各种技术(如压缩、编码和加密)进行混淆处理。基于ESET遥测,分析人员认为PowHeartBeat在最近的Worok活动中取代了CLRLoad,用以启动PNGLoad。

后门代码的第一层由base64编码的PowerShell代码组成。一旦有效载荷被重建,它就会被IEX执行。解码后,将执行如图3所示的另一层混淆代码。

图3:PowHeartBeat的第二层解码主函数

第二层首先使用base64解码下一层代码,然后使用3DES_CBC解密。解密后,再使用gzip算法解压,从而得到第三层的PowerShell代码,也就是真正的后门。它分为两个主要部分:配置和处理后门命令。

后门代码也是用PowerShell编写的,并使用HTTP或ICMP与C&C服务器进行通信。它的通信过程如图4所示。

图4:PowHeartBeat的功能

(1)配置

配置包含多个字段,包括版本号、可选代理配置和C&C地址。表1描述了不同版本中配置字段的含义。

表1:配置字段含义

字段名称

描述

nouse/ikuyrtydyfg(其他样本)

未使用

ClientId

客户端标识符,用于以下目的:

·作为构造C&C通信的Cookie标头时的值;

·与加密数据有关的密码构成要素。

Version

PowHeartBeat的版本号。

ExecTimes

发出RunCmd(命令运行)命令时允许的执行尝试次数。

UserAgent

用于C&C通信的Useragent。

Referer

用于C&C通信的referer标头。

接受编码

未使用

CookieClientId

CookieTaskId

CookieTerminalId

用于构造C&C通信的Cookie标头的值。

UrlHttps

用于C&C通信的协议。

UrlDomain

IPAddress

Domains

用作C&C服务器的URL、域名或IP地址。

UrlSendHeartBeat

后门向C&C服务器请求命令时使用的URL路径。

UrlSendResult

后门将结果发送回C&C服务器时使用的URL路径。

GetUrl

完整的URL,是上面URL元素的连接,用于向C&C服务器发送请求命令。

PutUrl

与GetUrl相同,但用于将结果发送回C&C服务器。

currentPath

未使用

ProxyEnableFlag

后门是否使用代理的标志。

Proxymsg

ProxyEnableFlag设置为true时使用的代理地址。

Interval

GET请求之间休眠的时间(以秒为单位)。

BasicConfigPath

包含UpTime、DownTime、DefaultInterval和Domains的可选配置文件的路径。若文件存在,这些值将被覆盖。

UpTime

后门开始运行的时间,这意味着它开始向C&C服务器发出GET请求。

DownTime

后门停止向C&C服务器发出请求的时间。

DomainIndex

用于与C&C服务器通信的当前域名索引。如果响应的是不同于304的错误信息,则DomainIndex会增加。

SecretKey

用于解密/加密配置的密钥。

IfLog

未使用

IfLogFilePath

指示是否启用日志记录的标志。

logpath

日志文件的路径。

ProxyFile

可选代理配置的文件路径。如果为空或无法在文件系统中找到,则从注册表值HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\InternetSettings\\ProxyServer中检索用户的代理设置。

IfConfig

指示是否使用配置文件的标志。

图5显示了从PowHeartBeat样本中提取的配置示例(SHA-:757ABA12D04FD1167528FDD107A441D11CD8C427)

图5:配置示例

(2)数据加密

PowHeartBeat对日志和其他配置文件的内容进行加密。日志文件内容通过多字节XOR与示例中以明文形式出现的密钥进行加密。其中,clientId被用作密钥数组索引的盐。密钥是一个256字节的数组,每个样本中都是相同的。其他配置文件内容通过多字节XOR加密,并将SecretKey中的值作为其密钥。

(3)C&C通讯

PowHeartBeat在2.4版本之前使用HTTP进行C&C通信,之后切换到ICMP。在这两种情况下,通信都没有加密。

  • HTTP

后门向C&C服务器发送GET请求,请求下一步指令。返回的加密信息由后门解密,并将命令的执行结果写入文件,然后通过POST请求将其发送到C&C服务器。

GET请求的格式如下

图6:GET请求格式

在C&C服务器的响应中,内容的第三个字节是命令标识,表示后门要处理的命令,称之为command_id。响应的剩余内容将作为参数传递给正在处理的命令,此内容使用图6中所示的算法进行加密,其中taskId是配置中的CookieTaskId的值。

图7:请求内容数据加密算法

来自C&C服务器的响应还包含另一个cookie,其名称由后门的CookieTerminalId指定。该cookie的值在后门的POST请求中重复出现,不能为空。执行后门命令后,PowHeartBeat将结果保存成文件,命名为.png,并以POST请求的形式发送到C&C服务器。

  • ICMP

从PowHeartBeat的2.4版本开始,HTTP被ICMP取代,发送数据包的时间限制为6秒,且未做分片处理。通过ICMP进行通信很可能是逃避检测的一种方式。

2.4及更高版本没有大的变化,但代码中有一些修改:

在请求命令之前,PowHeartBeat会发送一个包含字符串abcdefghijklmnopqrstuvwxyz的心跳,这是通知C&C服务器后门已准备好接收命令。

后门执行命令包含字符串abcdefghijklmnop。

心跳的格式如图8所示。

图8:心跳格式

clientID和clientflag区别在于,clientID在每个样本中都不同,而clientflag在每个使用ICMP的样本中都是相同的。heartbeatflag表示后门是否在发送心跳。来自C&C服务器的响应具有图9描述的格式。

图9:C&C服务器响应格式

这里的flag表示是否有命令发给后门。获取命令的请求格式如图10所示。

图10:请求命令格式

后门的ICMP模式允许接收无限量的数据,这些数据被划分为块。datalength,currentposition以及totallength用于跟踪传输的数据。对这一请求的响应格式如图11所示。

图11:命令请求的响应格式

与HTTP响应一样,命令标识符是data的第三个字节。

如果ICMP的回复连续7次都为空或格式不一致时,则认为后门和C&C服务完成了传输。

关于将结果发送到C&C服务器的请求,服务器更改为post模式,字符串abcdefghijklmnop更改为结果数据。

5. 后门命令

PowHeartBeat具有多种功能,包括命令/进程执行和文件操作。表2列出了样本支持的各种命令。

表2:PowHeartBeat命令说明

字段名称

命令标识符

描述

Cmd

0x02

执行PowerShell命令

Exe

0x04

执行进程

FileUpload

0x06

将文件上传到受害者主机,使用gzip压缩

FileDownLoad

0x08

从受害主机下载文件,并将文件路径、文件长度、创建时间、访问时间和文件内容返回给C&C服务器

FileView

0x0A

获取特定目录的文件信息:

·文件名

·文件属性

·最后写入时间

·文件内容

FileDelete

0x0C

删除文件

FileRename

0x0E

重命名或移动文件

ChangeDir

0x10

更改后门的当前工作路径

Info

0x12

根据指定参数获取信息:

·“基本信息”:ClientId、Version、主机名、IP地址、explorer.exe版本和大小信息、OS、Interval、当前目录、驱动器信息(名称、类型、可用空间和总大小)、当前时间

·“时间间隔信息”:Interval和当前时间

·“域名信息”:解密的配置文件内容

Config

0x14

更新配置文件内容并重新加载配置

N/A

0x63

后门退出

如果后门发生错误,会向C&C服务器的POST请求中加入特定的命令标识符0x00,来表明发生了错误。在将信息发送回C&C服务器之前,数据需要经过gzip压缩。

6. PNGLoad:隐写加载器

PNGLoad是Worok在受感染系统上部署的第二阶段有效载荷,由CLRLoad或PowHeartBeat加载。虽然在PowHeartBeat中没有找到任何直接加载PNGLoad的代码,但后门能够从C&C服务器下载和执行其他的有效载荷,这很可能是攻击者在被攻击系统上部署PNGLoad的方式。PNGLoad是一个加载器,它使用PNG文件中的字节来创建要执行的有效负载。它是一个64位的.NET可执行文件,使用.NETReactor进行了混淆,伪装成合法软件。例如,图12显示了伪装成WinRARDLL的CLR标头。

图12:伪造WinRARDLL示例

一旦解除混淆,能在这个类中找到MainPath属性,其指明了后门搜索的目录路径,包括其子目录,以及扩展名为.png的文件,如图13所示。

图13:.png文件

接下来检查MainPath目录所包含的每个.png文件中的隐写内容。首先,获取每个像素的R(红色)、G(绿色)、B(蓝色)和A(alpha)值的最低有效位并将其组装到缓冲区中。如果该缓冲区的前8个字节与图14中看到的magic数匹配,并且下一个8字节值control不为空,则文件通过PNGLoad的隐写内容检查。对于此类文件,使用存储在PNGLoad的SecretKeyBytes属性中的密钥,对缓冲区的其余部分进行多字节XOR解密,然后对解密的缓冲区进行gzip解压缩。最后生成一个PowerShell脚本,并立即运行。

图14:PNGLoad处理.png文件的缓冲区格式

PNGLoad的操作记录在一个文件中,该文件的路径存储在变量LogFilePath中。仅当文件是由内部变量IfLogFilePath指定时,才会记录操作。

分析人员没有获得与PNGLoad一起使用的.png样本文件,但PNGLoad的操作方式表明它应该与有效的PNG文件一起使用。为了隐藏恶意负载,Worok使用C#中的位图对象,只从文件中获取像素信息,而不是文件元数据。这意味着Worok可以将其恶意负载隐藏在有效的、看起来无害的PNG图像中,从而隐蔽自身。

7. 结论

Worok是一个网络间谍组织,它既开发工具,又利用现有工具来攻陷目标。该组织专注于亚洲和非洲的知名组织,针对私营和公共部门的各个部门,尤其偏爱政府部门。他们的自定义工具集包括C++与C#的两个加载器,以及PowerShell后门。

附录 攻击指标

(1)样本

SHA-1

文件名

检测名称

备注

3A47185D0735CDECF4C7C2299EB18401BFB328D5

script

PowerShell/PowHeartBeat.B

PowHeartBeat2.4.3.0003.

27ABB54A858AD1C1FF2863913BDA698D184E180D

script

PowerShell/PowHeartBeat.A

PowHeartBeat2.4.3.0003.

678A131A9E932B9436241402D9727AA7D06A87E3

script

PowerShell/PowHeartBeat.B

PowHeartBeat2.4.3.0003.

757ABA12D04FD1167528FDD107A441D11CD8C427

script

PowerShell/PowHeartBeat.B

PowHeartBeat2.1.3.0003.

54700A48D934676FC698675B4CA5F712C0373188

script

PowerShell/PowHeartBeat.A

PowHeartBeat1.1.3.0002.

C2F53C138CB1B87D8FC9253A7088DB30B25389AF

script

PowerShell/PowHeartBeat.A

PowHeartBeat1.1.3.0002.

C2F1954DE11F72A46A4E823DE767210A3743B205

tmp.ps1

PowerShell/PowHeartBeat.B

PowHeartBeat2.4.3.0004.

CE430A27DF87A6952D732B4562A7C23BEF4602D1

tmp.ps1

PowerShell/PowHeartBeat.A

PowHeartBeat2.1.3.0004.

EDE5AB2B94BA85F28D5EE22656958E4ECD77B6FF

script

PowerShell/PowHeartBeat.A

PowHeartBeat2.4.3.0003.

4721EEBA13535D1EE98654EFCE6B43B778F13126

vix64.dll

MSIL/PNGLoader.A

PNGLoader

728A6CB7A150141B4250659CF853F39BFDB7A46C

RarExtMgt.dll

MSIL/PNGLoader.A

PNGLoader

864E55749D28036704B6EA66555A86527E02AF4A

jsprofile.dll

MSIL/PNGLoader.A

PNGLoader

8DA6387F30C584B5FD3694A99EC066784209CA4C

vssxml.dll

MSIL/PNGLoader.A

PNGLoader

AA60FB4293530FBFF00D200C0D44EEB1A17B1C76

xsec_1_5.dll

MSIL/PNGLoader.A

PNGLoader

B2EAEC695DD8BB518C7E24C4F37A08344D6975BE

msvbvm80.dll

MSIL/PNGLoader.A

PNGLoader

CDB6B1CAFEE098615508F107814179DEAED1EBCF

lucenelib.dll

MSIL/PNGLoader.A

PNGLoader

4F9A43E6CF37FF20AE96E564C93898FDA6787F7D

vsstrace.dll

Win64/CLRLoad.C

CLRLoad

F181E87B0CD6AA4575FD51B9F868CA7B27240610

ncrypt.dll

Win32/CLRLoad.A

CLRLoad

4CCF0386BDE80C339EFE0CC734CB497E0B08049C

ncrypt.dll

Win32/CLRLoad.A

CLRLoad

5CFC0D776AF023DCFE8EDED5CADA03C6D7F9C244

wlbsctrl.dll

Win64/CLRLoad.E

CLRLoad

05F19EBF6D46576144276090CC113C6AB8CCEC08

wlbsctrl.dll

Win32/CLRLoad.A

CLRLoad

A5D548543D3C3037DA67DC0DA47214B2C2B15864

安全32.dll

Win64/CLRLoad.H

CLRLoad

CBF42DCAF579AF7E6055237E524C0F30507090F3

dbghelp.dll

Win64/CLRLoad.C

CLRLoad

(2)文件路径

MainPath

LogFilePath

IfLogFilePath

C:\\ProgramFiles\\VMware\\VMwareTools\\

C:\\ProgramFiles\\VMware\\VMwareTools\\VMwareVGAuth\\readme.txt

C:\\ProgramFiles\\VMware\\VMwareTools\\VMwareVGAuth\\VMWSU_V1_1.dll

C:\\ProgramFiles\\WinRar\\

C:\\ProgramFiles\\WinRar\\rarinstall.log

C:\\ProgramFiles\\WinRar\\des.dat

C:\\ProgramFiles\\UltraViewer\\

C:\\ProgramFiles\\UltraViewer\\CopyRights.dat

C:\\ProgramFiles\\UltraViewer\\uvcr.dll

(3)网络

Domain

IP

None

118.193.78[.]22

None

118.193.78[.]57

airplane.travel-commercials[.]agency

5.183.101[.]9

central.suhypercloud[.]org

45.77.36[.]243

(4)互斥量

CLRLoad中所包含的互斥锁名称:

aB82UduGX0EX

ad8TbUIZl5Ga

Mr2PJVxbIBD4

oERiQtKLgPgK

U37uxsCsA4Xm

Wo0r0KGWhYGO

xBUjQR2vxYTz

zYCLBWekRX3t

3c3401ad-e77d-4142-8db5-8eb5483d7e41

9xvzMsaWqxMy

(5)MITRE ATT&CK

该表是使用MITREATT&CK框架的11版本构建的。

战术

ID

名称

描述

侦察

T1592.002

收集受害者主机信息:软件

PowHeartBeat收集explorer.exe的信息。

T1592.001

收集受害者主机信息:硬件

PowHeartBeat收集有关驱动器的信息。

T1590.005

收集受害者网络信息:IP地址

PowHeartBeat收集受感染计算机的IP地址。

资源开发

T1583.004

获取基础设施:服务器

Worok使用自己的C&C服务器。

T1588.002

获得能力:工具

Workok在受感染的机器上部署了多个公开可用的工具。

T1583.001

获取基础设施:域名

Worok注册域名以促进C&C通信。

T1588.005

获得能力:漏洞利用

Workok使用了ProxyShell漏洞。

T1587.001

开发能力:恶意软件

Worok开发了自己的恶意软件:CLRLoad、PNGLoad、PowHeartBeat。

T1587.003

开发能力:数字证书

Worok创建了Let"sEncryptSSL证书,以便为恶意软件启用双向TLS身份验证。

执行

T1059.001

命令和脚本解释器:PowerShell

PowHeartBeat是用PowerShell编写的。

持久性

T1505.003

服务器软件组件:WebShell

Worok使用webshell ReGeorg。

防御规避

T1140

去混淆/解码文件或信息

Worok使用各种基于XOR的自定义方案来加密PowHeartBeat、PNGLoad和CLRLoad中的字符串和日志。

T1036.005

伪装:匹配合法名称或位置

PNGLoad样本部署在看起来合法的VMWare目录中。

凭证访问

T1003.001

操作系统凭证转储:LSASS内存

Worok使用Mimikatz从LSASS内存中转储凭据。

发现

T1082

系统信息发现

PowHeartBeat收集操作系统信息。

T1083

文件和目录发现

PowHeartBeat可以列出文件和目录。

T1046

网络服务发现

Worok使用NbtScan获取受感染机器的网络信息。

T1124

系统时间发现

PowHeartBeat收集受害者的时间信息。

收集

T1005

来自本地系统的数据

PowHeartBeat从本地系统收集数据。

T1560.002

压缩收集的数据

PowHeartBeat gzip压缩数据,然后将其发送到C&C服务器。

命令与控制

T1071.001

应用层协议:Web协议

一些PowHeartBeat变体使用HTTP作为与C&C服务器的通信协议。

T1090.001

代理:内部代理

PowHeartBeat处理受害者机器上的代理配置。

T1001.002

数据混淆:隐写术

PNGLoad从.png文件中提取像素值以重建有效负载。

T1573.002

加密通道:非对称加密

PowHeartBeat与C&C服务器使用HTTPS通信。

T1095

非应用层协议

一些PowHeartBeat变体使用ICMP作为与C&C服务器的通信协议。

T1132.001

数据编码:标准编码

Worok在PowHeartBeat和PNGLoad中使用XOR编码。

T1132.002

数据编码:非标准编码

Worok使用其他盐的XOR编码算法。

泄密

T1041

通过C2信道泄密

PowHeartBeat使用其C&C通信渠道来泄露信息。

参考链接:https://www.welivesecurity.com/2022/09/06/worok-big-picture/

编辑|延俊杰

审校|邓铁洪、何双泽

本文为CNTIC编译整理,不代表本公众号观点,转载请保留出处与链接。

声明:本文来自国家网络威胁情报共享开放平台,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。