深入分析Spark后门的多个版本,逐步揭秘Molerats恶意组织活动轨迹

来源:岁月联盟 编辑:猪蛋儿 时间:2020-03-16
Spark使用HTTP POST请求与其C2服务器进行通信,以接收命令并提取结果,所有的通信过程都使用JSON结构的消息。在大多数情况下,威胁行为者会使用商业加壳器来混淆Spark Payload,以避免被发现。在我们的研究中,我们已经看到攻击者使用了Enigma、Themida和VMProtect,这使得识别样本的过程变得困难。我们还可以识别开发人员在二进制文件中留下的两个不同版本的基于Spark的标识符,分别是2.2版本和4.2版本。根据包含可识别版本字符串的Spark样本的编译时间,我们可以推测2.2版本是在2017年创建的,而4.2版本是在2019年12月下旬和2020年1月创建的。下面展示了这些带有版本号的Spark样本,以及其编译时间,和用于混淆其内容的加壳工具。
Spark样本及版本号、编译时间和加壳工具信息:

我们已经收集到数十个Spark Payload,其编译时间从2017年3月到2020年1月,这近一步表明该恶意组织已经在攻击活动中使用该后门程序将近三年。我们从每个文件中提取了配置信息,以收集与Spark相关的已知C2域名,如下表所示。
Spark C2域名及其使用的大致时间:

在下一章中,我们将解释Spark的功能,并展示其C2通信过程,该过程是我们根据对Pictures.pdf文档在2019年11月攻击者提供的“pdf.exe”Payload进行分析而确定的。
八、Pictures.pdf文档Spark Payload分析
Spark Payload由编译后的AutoIt脚本安装,并使用商业Enigma工具进行加壳(T1045)。在对Payload进行加壳时,威胁参与者使用了Enigma中被称为“闪屏”的功能,威胁参与者将其配置为在所有窗口的上方显示图像,并等待用户单击该图像,然后执行恶意代码。下图展现了Enigma保护程序在执行Payload之前显示的启动图像,它是在wallpaperwide.com上获取的壁纸图像。闪屏功能可以作为逃避沙箱的一种技术,因为它要求用户在恶意代码运行之前以单击屏幕的形式进行交互。
恶意PDF文档内容的屏幕截图:

我们分析其功能,一旦脱壳后,Spark的Payload类似于在Operation Parliament中使用的Payload。Spark Payload是一个后门,允许威胁参与者在受感染的系统上打开应用程序并运行命令行命令。
Payload首先检查GetKeyboardLayoutList的结果,以及GetLocaleInfoA返回的语言名称,以确认其中是否包含关键词“arabic”。如果这两个API调用的结果中不包含该关键词,则Payload不会执行任何恶意代码。我们知道,检查特定的键盘和语言是一种已知的逃避策略,旨在避免恶意代码在样本分析环境中运行,并使得威胁参与者可以精准攻击目标用户。
在Payload确认系统正在使用特定的键盘和语言包之后,它将尝试与Payload中嵌入配置中指定的C2服务器进行通信。其中,嵌入的配置信息已经被预先加密,Payload首先需要使用自定义的XOR算法解密密钥,并使用密钥对文本内容进行解密,这里的密钥和密文看上去像是Base64编码。随后,它将生成Base64编码密钥的SHA-256哈希值,并使用所得到的哈希值的第4-28个字节作为最终密钥。Payload将对64位密文进行Base64编码,并使用最终密钥以Triple DES(3DES)算法解密解码后的密文,从而得到JSON结构表示的配置信息。在我们所分析的Payload中,配置信息包含如下内容:

Payload还使用该例程来解密包含睡眠间隔的加密缓冲区,更重要的是,该缓冲区包含用于构造与C2服务器进行通信的消息名称列表,以及用于解密这些消息的密钥。Payload将使用下表中列出的名字作为发送到C2的消息和从C2接收的消息中的JSON键和值。我们在附录中提供了其中每个字段的具体描述,并且在后文中说明了如何在C2通信中使用这些字段名称。对于每个Spark样本来说,所使用的值都是唯一的,因为开发人员会不断更改Payload的名称和字段。
Spark用于C2通信的JSON字段/值的名称:

在与C2服务器通信之前,Payload将解密另一个缓冲区,该缓冲区中包含Payload用于调试消息的字符串,以及用于收集系统信息的命令。下表展示了解密的字符串及其用途。
Payload用于与C2服务器通信的缓冲区中的JSON键/值:
1     用途不明,但使用Averizt字段发送到C2。
311OEVZihfReZStoFf4cfg==       解码并解密后为/c hostname,用于获取系统的主机名。
Z9Q1WVryAIzLVSxF1yWRwg== 解码并解密后为%COMSPEC%,用于获取cmd.exe的位置,以运行命令来收集系统信息。
P5K5He/2wSGGsvrFPKYpwg4KjBLyTOpbsGJwm1DckoyGK8eXeNMZCQBfHzkYRSjJlGcw6Ckn41X0MY3zJcU65uMvxpABv/g+ttABRJsG7js=       解码并解密后为/c wmic csproduct get UUID | more +1 | cmd /q /v:on /c “set/p .=&echo(!.!”,用于获取已登录帐户的用户名。
ok   表示成功执行命令的通用消息。
Create Pipe Error  如果Payload未能创建通道以获取命令结果,则将调试消息发送到C2。
Create processa error   如果Payload未能创建进程,则将调试消息发送到C2。
Get exit code process error 如果尝试在为命令创建进程的过程中,无法调用GetExitCodeProcess获取错误消息,则将调试消息发送到C2。

上一页  [1] [2] [3] [4] [5] [6] [7]  下一页