ESET研究人员发现了一种罕见的、先前未记录的Windows二进制loader,与其他loader不同,它作为服务器运行,并在内存中执行接收到的模块。研究人员以其dll文件名Wslink来命名此恶意软件。
过去两年,研究人员远程监测中只发现了一些攻击,攻击位置在中欧、北美和中东地区。最初的感染途径未知;大多数样本是以MPRESS方式打包,代码的某些部分是虚拟化的。
目前为止,研究人员还无法获得任何它应该接收的模块。没有代码、功能或相似的操作能证明,它是来自我们已知的攻击组织工具。
以下部分为研究人员对loader和客户端实现的分析,最初是用来试验检测方法的。它展示了如何重复使用以及如何与先前分析的恶意软件交互。该分析也可用作蓝队记录威胁的信息储备。
Wslink以服务的方式运行,并监听服务参数键的ServicePort 注册表值中指定端口的所有网络接口。注册Wslink服务的先前组件未知。图1展示的代码是接受传入连接到指定的端口。
图1:接受传入连接的循环的 Hex-Rays 反编译
接受连接后,接下来使用硬编码2048位公钥的RSA握手,以安全地交换密钥和初始化向量(CBC模式下用于256位AES,参见图2)。加密模块随后接收到一个唯一标识符—签名和一个额外的解密密钥。
有趣的是,最近接收到的带有签名的加密模块是全局存储的,所有客户端都可用,这样可以节省流量。如果要加载的模块的签名与前一个匹配,则只传输密钥。
图2:接收模块及其签名的Hex-Rays反编译
如图3所示,使用MemoryModule库将解密的模块(一个常规PE文件)加载到内存中,并最终执行其首次导出。用于通信、套接字、键和初始化向量的函数以参数的形式传递给导出,使模块能够通过已经建立的连接交换消息。
图3:在内存中执行接收模块的代码的 Hex-Rays 反编译
研究人员自己的Wslink客户端实现描述如下:只与修改后的Wslink服务器建立连接,并发送一个模块,然后对该模块进行解密并执行。由于研究人员的客户端不知道Wslink服务器的私钥,因此研究人员生成了自己的密钥,并使用来自该密钥对的公钥修改可执行的服务器,然后在自己的Wslink客户端使用私钥。
该客户端使研究人员能够复制Wslink的通信和搜索独特的模式;由于可复现,进一步证实了研究人员的发现。
最初,一些用于发送/接收消息的函数是从原始样本中获得(参见图4)研究人员可以立即使用它们,不必在以后重新实现它们。
图4:从 Wslink 的示例加载函数的代码
随后,研究人员的客户端从文件中读取要使用的RSA私钥,并建立到指定IP和端口的连接。研究人员期望Wslink的一个实例已经监听所提供的地址和端口。当然,它的内嵌公钥也必须替换为私钥已知的公钥。
客户端和Wslink服务器继续握手,交换用于AES加密的密钥和初始化向量。这包括三个步骤,如图5所示:发送客户端hello,接收带有初始化向量的对称密钥,并将它们发送回来以验证成功解密。
通过对Wslink二进制文件的逆向,研究人员了解到hello消息的唯一约束,除了240大小的字节外,第二个字节必须为零,因此将其全部设置为零。
图5:客户端RSA握手代码
最后一部分是发送模块。如图6所示,它由几个简单步骤组成:
图6:发送模块代码
图7:加载和加密模块代码
客户端的完整源代码在WslinkClient GitHub库。需要注意的是,代码仍然需要大量的工作才能被用作恶意软件,而从零创建另一个loader会更容易。
Wslink是一个简单但出色的loader,与研究人员通常看到的loader不同,它作为服务器运行,并在内存中执行接收到的模块。这些模块在通信、键和套接字方面重新使用了loader的函数;因此,他们不必启动新的出站连接。Wslink还提供了一个开发良好的加密协议来保护交换的数据。
SHA-1 | ESET监测名 |
01257C3669179F754489F92947FBE0B57AEAE573 | Win64/TrojanDownloader.Wslink |
E6F36C66729A151F4F60F54012F242736BA24862 | |
39C4DE564352D7B6390BFD50B28AA9461C93FB32 |
表格采用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/