Windows出现恶意二进制loader Wslink,感染途径未知
2021-11-04 12:53:32 Author: www.freebuf.com(查看原文) 阅读量:33 收藏

ESET研究人员发现了一种罕见的、先前未记录的Windows二进制loader,与其他loader不同,它作为服务器运行,并在内存中执行接收到的模块。研究人员以其dll文件名Wslink来命名此恶意软件。

过去两年,研究人员远程监测中只发现了一些攻击,攻击位置在中欧、北美和中东地区。最初的感染途径未知;大多数样本是以MPRESS方式打包,代码的某些部分是虚拟化的。

目前为止,研究人员还无法获得任何它应该接收的模块。没有代码、功能或相似的操作能证明,它是来自我们已知的攻击组织工具。

以下部分为研究人员对loader和客户端实现的分析,最初是用来试验检测方法的。它展示了如何重复使用以及如何与先前分析的恶意软件交互。该分析也可用作蓝队记录威胁的信息储备。

技术分析

Wslink以服务的方式运行,并监听服务参数键的ServicePort 注册表值中指定端口的所有网络接口。注册Wslink服务的先前组件未知。图1展示的代码是接受传入连接到指定的端口。

1635994366_61834afedcf0892e39177.png!small?1635994367201

图1:接受传入连接的循环的 Hex-Rays 反编译

接受连接后,接下来使用硬编码2048位公钥的RSA握手,以安全地交换密钥和初始化向量(CBC模式下用于256位AES,参见图2)。加密模块随后接收到一个唯一标识符—签名和一个额外的解密密钥。

有趣的是,最近接收到的带有签名的加密模块是全局存储的,所有客户端都可用,这样可以节省流量。如果要加载的模块的签名与前一个匹配,则只传输密钥。

1635994453_61834b5588f3b90241785.png!small?1635994453776

图2:接收模块及其签名的Hex-Rays反编译

如图3所示,使用MemoryModule库将解密的模块(一个常规PE文件)加载到内存中,并最终执行其首次导出。用于通信、套接字、键和初始化向量的函数以参数的形式传递给导出,使模块能够通过已经建立的连接交换消息。

1635994470_61834b667fbdf867970df.png!small?1635994470822

图3:在内存中执行接收模块的代码的 Hex-Rays 反编译

客户端的实现

研究人员自己的Wslink客户端实现描述如下:只与修改后的Wslink服务器建立连接,并发送一个模块,然后对该模块进行解密并执行。由于研究人员的客户端不知道Wslink服务器的私钥,因此研究人员生成了自己的密钥,并使用来自该密钥对的公钥修改可执行的服务器,然后在自己的Wslink客户端使用私钥。

该客户端使研究人员能够复制Wslink的通信和搜索独特的模式;由于可复现,进一步证实了研究人员的发现。

最初,一些用于发送/接收消息的函数是从原始样本中获得(参见图4)研究人员可以立即使用它们,不必在以后重新实现它们。

1635994508_61834b8c210b094189501.png!small?1635994508163

图4:从 Wslink 的示例加载函数的代码

随后,研究人员的客户端从文件中读取要使用的RSA私钥,并建立到指定IP和端口的连接。研究人员期望Wslink的一个实例已经监听所提供的地址和端口。当然,它的内嵌公钥也必须替换为私钥已知的公钥。

客户端和Wslink服务器继续握手,交换用于AES加密的密钥和初始化向量。这包括三个步骤,如图5所示:发送客户端hello,接收带有初始化向量的对称密钥,并将它们发送回来以验证成功解密。

通过对Wslink二进制文件的逆向,研究人员了解到hello消息的唯一约束,除了240大小的字节外,第二个字节必须为零,因此将其全部设置为零。

1635994573_61834bcd6e56843db74f9.png!small?1635994573632

图5:客户端RSA握手代码

最后一部分是发送模块。如图6所示,它由几个简单步骤组成:

    1. 接收到之前加载的模块的签名
    2. 发送模块的硬编码签名
    3. 从文件中读取模块,加密并发送(参见图7)
    4. 发送模块加密密钥

1635994618_61834bfae8ed5870da3a4.png!small?1635994619135

图6:发送模块代码

1635994631_61834c070934e846c4822.png!small?1635994631182

图7:加载和加密模块代码

客户端的完整源代码在WslinkClient GitHub库。需要注意的是,代码仍然需要大量的工作才能被用作恶意软件,而从零创建另一个loader会更容易。

结论

Wslink是一个简单但出色的loader,与研究人员通常看到的loader不同,它作为服务器运行,并在内存中执行接收到的模块。这些模块在通信、键和套接字方面重新使用了loader的函数;因此,他们不必启动新的出站连接。Wslink还提供了一个开发良好的加密协议来保护交换的数据。

附IoC

样本

SHA-1ESET监测名
01257C3669179F754489F92947FBE0B57AEAE573

Win64/TrojanDownloader.Wslink

E6F36C66729A151F4F60F54012F242736BA24862
39C4DE564352D7B6390BFD50B28AA9461C93FB32

MITRE ATT&CK techniques

表格采用ATT&CK框架版本9

Tactic

ID

Name

Description

Enterprise

T1587.001

Develop Capabilities: Malware

Wslink is a custom PE loader.

Execution

T1129

Shared Modules

Wslink loads and executes DLLs in memory.

T1569.002

System Services: Service Execution

Wslink runs as a service.

Obfuscated Files or Information

T1027.002

Obfuscated Files or Information: Software Packing

Wslink is packed with MPRESS and its code might be virtualized.

Command and Control

T1573.001

Encrypted Channel: Symmetric Cryptography

Wslink encrypts traffic with AES.

T1573.002

Encrypted Channel: Asymmetric Cryptography

Wslink exchanges a symmetric key with RSA.

参考链接:https://www.welivesecurity.com/2021/10/27/wslink-unique-undocumented-malicious-loader-runs-server/


文章来源: https://www.freebuf.com/articles/paper/303592.html
如有侵权请联系:admin#unsafe.sh