疑似民族国家威胁行为者在供应链攻击中使用新的Airstalk 恶意软件

n1ght

版主

n1ght Rep
0
0
0
Rep
0
n1ght Vouches
Vouches
0
8 MONTHS
8 8 MONTHS OF SERVICE
n1ght 获得
0
0
0
获得
0
n1ght 凭证
0
0
0
凭证
0
主题
19
点赞
0
HakB
8
在社区成长 8 月
LEVEL 50 100 XP
 

执行摘要​

我们发现了一个新的基于Windows 的恶意软件系列,我们将其命名为Airstalk,它在PowerShell 和.NET 变体中均可用。我们以中等信心评估,一个可能的民族国家威胁行为者在可能的供应链中使用了这种恶意软件。我们创建了威胁活动集群CL-STA-1009 来识别和跟踪任何进一步的相关活动。
Airstalk 滥用AirWatch API 进行移动设备管理(MDM),现在称为Workspace ONE 统一端点管理。它使用API 建立隐蔽的命令和控制(C2) 通道,主要通过AirWatch 功能来管理自定义设备属性和文件上传。
Airstalk具有以下功能:
采用多线程C2通信协议
包含版本控制
使用可能被盗的证书对找到的一些样本进行签名
该恶意软件旨在窃取敏感浏览器数据,包括:
饼干
浏览历史记录
书签
截图
我们还发现了样本中威胁作者未执行的其他任务。
高级野火
Cortex XDR 和XSIAM
棱镜浏览器
如果您认为自己可能已受到威胁或有紧急事项,请联系Unit 42 事件响应团队。
相关单元42 主题
供应链攻击,恶意PowerShell 脚本

技术分析​

我们发现了Airstalk 恶意软件的两种主要变体,一种是用PowerShell 编写的,另一种是用.NET 编写的。 Airstalk 的.NET 变体比PowerShell 变体具有更多功能,并且似乎处于更高级的开发阶段。
我们将此恶意软件称为Airstalk,因为它滥用AirWatch 的MDM API 进行C2 通信。两种变体都采用相同的C2 隐蔽通道,但C2 协议和目标浏览器略有不同。

Airstalk PowerShell 变体​

PowerShell 隐蔽通道实施​

Airstalk 使用AirWatch 的MDM API 的设备端点(/api/mdm/devices/) 与攻击者进行秘密C2 通信。这些C2 通信使用AirWatch MDM API 中设备的自定义属性功能来存储后门的通信详细信息并将其用作死点。
死角是一种秘密通信方法,用于在个人之间传递物品或信息,而无需直接连接。对手通常在间谍活动中使用这种技术,其中一个人将物品留在隐藏的位置,另一个人稍后取回它。
该恶意软件还利用另一个API 端点(/api/mam/blobs/uploadblob) 上传用于不同目的的文件。
C2 通信基于通过设备API 端点的JSON 消息,至少包含以下必需字段(第一个架构):
{
“名称”:“CLIENT_UUID”,
第:章
第:章
“应用程序”:“services.exe”,
“应用组”:“服务”
}
12345678910111213
{“名称”:“CLIENT_UUID”,“值”:“SERIALIZED_MESSAGE”,“Uuid”:“CLIENT_UUID”,“应用程序”:“services.exe”,“ApplicationGroup”:“服务”}
CLIENT_UUID: 通读Windows Management Instrumentation (WMI) 以包含受感染设备的真正价值
SERIALIZED_MESSAGE: Base64 编码的JSON 消息
在值字段中发送的序列化消息具有以下最小字段(第二个架构):
{
第:章
第:章
“发件人”; “SENDER_ROLE”
}
123456789
{“方法”:“MESSAGE_TYPE”,“uuid”:“CLIENT_UUID”,“发送者”; “SENDER_ROLE”}
CLIENT_UUID: 受感染设备的真实通用唯一标识符(UUID) 值
MESSAGE_TYPE: 根据消息的目的而变化
SENDER_ROLE: 对于从受感染设备向API 端点发送的所有消息,设置为客户端
然后,最终消息(第一个架构)通过MDM API 设置为自定义属性,以便与攻击者进行通信。
图1.Airstalk PowerShell 变体的隐蔽通道核心功能。为了读取攻击者发回的消息,恶意软件会执行相反的过程。它会反序列化消息并验证消息是否来自攻击者,以避免读取自己发送的消息,如图2所示。
图2.来自Airstalk 的PowerShell 变体的隐蔽通道核心功能的C2 响应。

C2 协议​

Airstalk PowerShell 变体的C2 协议根据通信阶段使用不同的消息类型来同步和执行特定任务。
表1 显示了方法字段可以具有的不同值。
MESSAGE_TYPE
目的
连接
连接请求
连接
连接已接受
行动
任务同步
结果
任务结果
表1. Airstalk 的PowerShell 变体C2 通信中方法字段的值。
执行时,Airstalk 的PowerShell 变体会初始化与攻击者的通信。为此,它发送CONNECT 消息并通过函数Get-Response 阻止执行,如图3 所示,等待来自威胁参与者的消息。
图3. Airstalk 的PowerShell 变体的连接初始化。该代码似乎期望收到一条CONNECTED 消息。但是,无论消息类型是什么,只要它不是来自恶意软件(客户端),结果都是相同的。
与攻击者建立连接后,恶意软件:
请求执行任务,发送ACTIONS 类型的消息
阻止执行,等待攻击者使用ACTIONS 消息类型做出答复
返回要进行的操作的ID,如下图4所示
图4. Airstalk 的PowerShell 变体检查的C2 任务。如图4 所示,这次执行流程正确地过滤了消息类型。
图5 说明了Airstalk 的PowerShell 变体的执行流程。
图5.Airstalk 的PowerShell 变体的C2 执行流程。

后门功能​

一旦建立了C2 通信通道,Airstalk 的PowerShell 变体就可以通过操作字段接收不同的任务,如下表2 所示。
ACTION_ID
任务
0
截图
1
获取所有Chrome cookie
2
列出用户目录中的所有文件
4
列出用户目录中的所有Chrome 配置文件
5
获取给定Chrome 配置文件的浏览器书签
6
获取给定Chrome 配置文件的浏览器历史记录
7
卸载后门
表2. 操作字段的标识符和任务。
根据表2 中的ACTION_ID 值,我们发现值3 被跳过。这可能是开发人员的决定、错误或通过删除任务的实现来隐藏后门附加功能的方法。这种删除是将其用作模块化后门的简单而有效的方法。
执行任务后,恶意软件通过函数UploadResult 发送任务结果,指定所执行任务的ACTION_ID 及其返回值,如图6 所示。
图6. 将任务结果发送回C2 通道。有些任务需要在Airstalk执行后发回大量数据或文件。为此,恶意软件使用AirWatch MDM API 的blob 功能将内容作为新blob 上传。图7 显示了如何在Airstalk 的PowerShell 变体脚本中实现这一点。
图7.Airstalk 的PowerShell 变体中的文件上传功能。此行为的一个示例是截取受感染主机的屏幕截图,如下图8 所示。
图8. 利用UploadResult 功能的屏幕截图函数。从Chrome 转储cookie 的功能可以在浏览器中进行远程调试,并使用参数重新启动浏览器以加载目标Chrome 配置文件。这些参数还发送命令来转储所有cookie 并将它们保存到一个文件中,该文件随后通过隐蔽通道泄露,如图9 所示。
图9. Chrome Cookie 的渗漏。正如Red Canary 之前报道的那样,通过Chrome 远程调试进行cookie 盗窃并不是什么新鲜事,并且已经内置于许多信息窃取程序中,例如Lumma 和StealC。然而,这些信息窃取程序不太可能在受到良好保护的环境中成功运行。将功能捆绑到可信的系统管理工具中可以在不引起怀疑的情况下执行。

Airstalk .NET 变体​

在调查该恶意软件期间,我们发现了一组代表Airstalk .NET 变体的样本。与PowerShell变体相比,NET变体在其隐蔽的C2通道协议上略有不同,并且具有更多的功能。NET 变体似乎还处于比PowerShell 变体更高级的开发阶段。
虽然我们发现的Airstalk PowerShell 样本仅针对Google Chrome,但Airstalk 的.NET 变体还针对另外两个Web 浏览器:
微软边缘
岛屿浏览器
.NET 变体尝试通过使用代码签名和特定元数据属性来模仿遗留应用程序。图10 给出了一个示例。
图10.Airstalk 的.NET 变体中的Exif 元数据是通过.NET 程序集本机设置的。

.NET 隐蔽通道实现​

与PowerShell 变体相比,Airstalk 的.NET 变体在其隐蔽C2 通信中的JSON 消息(第一个架构)内的UUID 字段中包含一个附加后缀,如图11 所示。
图11. Airstalk 的.NET 变体中的隐蔽通道代码功能。Airstalk .NET 变体的C2 通信具有三种不同的传输类型,如表3 所示。
交货类型
后缀
描述
调试
-kd
用于发送调试数据
结果
-kr
用于检查任务和
 
顶部