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

来源:岁月联盟 编辑:猪蛋儿 时间:2020-03-16
0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$%^&*()_+ 未知,似乎未在代码中使用。
Set handle information error      在尝试将创建进程的标准输出设置为继承对象句柄时,如果调用SetHandleInformation失败,则将调试消息发送到C2。
Wait for single object error  在尝试为命令创建进程后,如果调用WaitForSingleObject失败,则将调试消息发送到C2。
九、Spark C2通信过程分析
Payload通过发出HTTP POST请求以及其数据部分中的Base64编码和加密消息,与C2服务器laceibagrafica[.]com进行通信。我们此前没有看到与这个C2服务器相关的任何解释,因此我们将在这里分析Payload和C2服务器之间的双向通信过程,以进一步说明Payload如何使用上文中表格内展示的名称。为了进行这一部分的分析,我们创建了一个C2服务器,与Spark Payload进行交互以发出命令,本章中所有HTTP响应均来源于我们创建的C2服务器,而并非威胁参与者开发的C2软件。下图展示了从Payload发送到C2服务器的初始信标。但是,从Payload到C2的所有出站请求在外观上看起来都是相似的,因为它们都使用HTTP POST请求将编码和加密后的消息发送到相同的URL。
从Payload发送到C2服务器的初始信标:

初始信标中的数据部分经过解码和解密后实际上是JSON消息{“CallieVK”:”W10=”,”ReeceWNM”:”Jessicay”}。在JSON消息中包含两个键值对,分别是“ReeceWNM”和“CallieVK”,其中的值分别代表通信类型和数据。例如,“ReeceWNM”键中包含用于表示初始信标通信类型的名称“Jessicay”。Payload将解密C2服务器的响应,以寻找“EverlyY”字段,并在继续之前使用该值作为睡眠间隔。下图展示了从C2服务器到初始信标的响应过程,该响应内容解密为{“EverlyY”: 0}。
从C2服务器发送到Payload的响应内容:

在收到EverlyY响应后,Payload将使用cmd.exe运行以下命令行命令来收集系统信息,其中包括用户名、主机名和系统特定的UUID:
1. wmic csproduct get UUID | more +1 | cmd /q /v:on /c “set/p .=&echo(!.!”;
2. hostname;
3. echo %username%。
Payload会将这些命令结果的密文进行Base64编码后,以JSON格式存储到字段名称“ZaydenlnL”中,并使用第一个名称“AngelxEv”代表数据类型,其值对应上表中的结果,1代表UUID,2代表主机名,3代表用户名。
这三个JSON对象将添加到名称为“Maximiliano”的JSON数组中,并发送到C2服务器。例如,Payload会将系统信息存储在JSON中,如下所示:
{“Maximiliano”:[{“AngelxEv”:1,”Houstonod”:1,”ZaydenlnL”:”  ”},{“AngelxEv”:3,”Houstonod”:1,”ZaydenlnL”:”  ”},{“AngelxEv”:2,”Houstonod”:1,”ZaydenlnL”:”  ”}]}
Payload将创建出站通信的JSON对象,将“CallieVK”值设置为编码后的系统信息,并将“ReeceWNM”值设置为通信类型“JoslynKe”。生成的JSON将类似于以下内容:
{“CallieVK”:”  ”,”ReeceWNM”:”JoslynKe”}
生成的JSON对象经过Base64编码和加密后,以HTTP POST的方式发送到C2服务器,如下图中示例的请求所示:
从Payload发送到C2服务器的系统信息:

在发送系统信息后,Payload将等待从C2服务器接收响应,其中包含命令。下图展示了对此请求的响应,其中包含Payload需要解析并执行的命令内容(以加密数据的形式)。

Payload没有命令处理程序,而是通过调用CreateProcessW API函数来处理C2响应中的JSON对象,以使应用程序打开或运行命令行命令。预期的JSON对象中应该包含一个名为“Jordanlzw”的数组,该数组中包含一个或多个对象,这些对象的“Ivory”字段中包含任务标识符编号,“Alanih”字段中包含要运行的应用程序名称,“TrumanRd”字段中包含要传递到应用程序的命令行参数。例如,下图中展示的响应中包含一个JSON对象,该对象将使用命令行参数“/c whoami”来指示Payload运行“c:/windows/system32/cmd.exe”并执行“whoami”命令:
{“Aryana”: 0, “Jordanlzw” :[{“Ivory” : 5, “Jonas” : true, “Reginacy” : false, “TrumanRd” : “/NKg0zJdCDP1XlK9NJ4eJA==”, “Alanih” : “i8KOnxchf86h8NKfF45XMETHhwTx6yF3AfMoWzyG9wA=”, “LondonzO” : true}]}
在运行C2提供的命令后,Payload将向C2服务器发送一条消息,我们认为该消息是通过向服务器发送特定的任务标识符以通知C2成功接收到该命令。Payload将使用通信类型“MorganE”来通知C2服务器,如下面的JSON所示:
{“CallieVK”:”eyJKYXNlTiI6W3siTGF3cmVuY2UiOjV9XX0=”,”ReeceWNM”:”MorganE”}

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