2024年5月,卡巴斯基全球研究与分析团队(GReAT)发现一个新的高级持续性威胁(APT)组织,名为 CloudSorcerer,该组织一直在积极针对俄罗斯政府实体进行攻击。
这是一种用于秘密监控、数据收集和通过Microsoft Graph、Yandex Cloud和Dropbox云基础设施进行数据泄露的复杂网络间谍工具。该恶意软件利用云资源作为其命令和控制(C2)服务器,通过API使用认证令牌访问它们。此外,CloudSorcerer还使用GitHub作为其初始C2服务器。
根据安全专家的分析,CloudSorcerer的攻击技术与 2023 年报告的 CloudWizard APT 所使用的技术相似,但是其恶意软件源代码的存在明显不同之处,因此推测CloudSorcerer是一个采用了类似与公共云服务交互方法的新参与者。
核心观点
- CloudSorcerer APT使用公共云服务作为其主要C2;
- 恶意软件使用特殊命令与C2交互,并使用硬编码的字符代码表对其进行解码;
- 该攻击者使用Microsoft COM对象接口执行恶意操作;
- CloudSorcerer根据运行的进程充当单独的模块(通信模块、数据收集模块),但从一个可执行文件中执行。
技术细节
恶意软件由攻击者在已感染机器上手动执行。它最初是一个用C语言编写的单一可移植执行文件(PE)二进制文件,其功能根据执行它的进程而变化。执行时,恶意软件调用GetModuleFileNameA函数来确定它正在运行的进程的名称,然后它将此进程名称与一组硬编码的字符串进行比较:browser、mspaint.exe和msiexec.exe。
根据检测到的进程名称,恶意软件激活不同的功能:
- 如果进程名称是mspaint.exe,CloudSorcerer作为一个后门模块,并执行诸如数据收集和代码执行等活动。
- 如果进程名称是msiexec.exe,CloudSorcerer恶意软件启动其C2通信模块。
- 如果进程名称包含字符串“browser”或不匹配任何指定名称,恶意软件尝试将shellcode注入到msiexec.exe、mspaint.exe或explorer.exe进程中,然后终止初始进程。
CloudSorcerer用于初始进程迁移shellcode的功能:
- 解析进程环境块(PEB)以识别所需Windows核心DLL的偏移量;
- 使用ROR14算法通过哈希识别所需的Windows API;
- 将CloudSorcerer代码映射到目标进程之一的内存中,并在单独的线程中运行它。
- 所有模块之间的数据交换都通过Windows管道组织,这是一种进程间通信(IPC)机制,允许在进程之间传输数据。
CloudSorcerer后门模块
后门模块首先在单独的线程中收集受害机器的各种系统信息。恶意软件收集:
- 计算机名称;
- 用户名;
- Windows子版本信息;
- 系统正常运行时间。
所有收集的数据都存储在一个特别创建的结构中。一旦信息收集完成,数据就被写入到与C2模块进程连接的命名管道。重要的是,所有数据交换都使用具有不同目的、明确定义的结构组织,如后门命令结构和信息收集结构。
接下来,恶意软件尝试从管道读取数据,如果成功,它将传入数据解析为COMMAND结构,并从其中读取一个字节,该字节代表COMMAND_ID。
根据COMMAND_ID,恶意软件执行以下操作之一:
- 0x1 – 收集系统硬盘的信息,包括逻辑驱动器名称、容量和可用空间。
- 0x2 – 收集文件和文件夹的信息,如名称、大小和类型。
- 0x3 – 使用ShellExecuteExW API执行shell命令。
- 0x4 – 复制、移动、重命名或删除文件。
- 0x5 – 从任何文件中读取数据。
- 0x6 – 创建并向任何文件中写入数据。
- 0x8 – 从管道接收shellcode,并通过分配内存和在远程进程中创建新线程将其注入任何进程。
- 0x9 – 接收PE文件,创建一个节并将其映射到远程进程中。
- 0x7 – 运行额外的高级功能。
当恶意软件接收到0x7 COMMAND_ID时,它会运行下面描述的一个额外任务:
所有收集的信息或执行任务的结果都被添加到一个特别创建的结构中,并通过命名管道发送到C2模块进程。
C2模块
C2模块首先创建一个名为\\.\PIPE\[1428]的新Windows管道。接下来,它通过提供一系列负责互联网连接的Windows API函数所需的参数来配置与初始C2服务器的连接:
- InternetCrackUrlA;
- InternetSetOptionA;
- InternetOpenA;
- InternetConnectA;
- HttpOpenRequestA;
- HttpSendRequestA;
恶意软件设置请求类型(“GET”),配置代理信息,设置硬编码的头信息,并提供C2 URL。
然后,恶意软件连接到初始C2服务器,该服务器是位于https://github[.]com/alinaegorovaMygit的GitHub页面,恶意软件使用InternetReadFile调用将整个网页读入内存缓冲区。
GitHub仓库包含三个未修改或更新的公共项目的分叉。它们的唯一目的是使GitHub页面看起来合法且活跃。GitHub页面的作者部分显示了一个有趣的字符串:
安全专家发现一些看起来像是十六进制字符串的数据,它以相同的字节模式开始和结束——“CDOY”。在恶意软件下载整个GitHub HTML页面后,它开始解析,专门搜索字符序列“CDOY”。当找到它时,它会复制第二个分隔符“CDOY”之前的所有字符,然后将它们存储在内存缓冲区中。接下来,恶意软件解析这些字符,将它们从字符串值转换为十六进制值。然后使用硬编码的字符代码替换表对字符串进行解码——解析字符串中的每个字节都作为字符代码表中的索引,指向可替换的字节,从而形成一个新的十六进制字节数组。
解码算法
字符代码表
或者CloudSorcerer不连接到GitHub,而是尝试从hxxps://my.mail[.]ru/获取相同的数据,这是一个俄罗斯的基于云的摄影托管服务器。相册的名称包含相同的十六进制字符串。
十六进制字符串的第一个解码字节是一个魔术数字,告诉恶意软件使用哪个云服务。例如,如果字节是“1”,恶意软件使用Microsoft Graph云;如果是“0”,恶意软件使用Yandex云。后续字节形成一个承载令牌的字符串,用于与云API进行身份验证。
根据魔术数字,恶意软件创建一个结构,并设置一个偏移量到虚拟函数表,该表包含与所选云服务交互的函数子集。
Yandex和Microsoft的不同虚拟表
接下来,恶意软件通过以下方式连接到云API:
- 使用InternetOpenA和InternetConnectA设置初始连接;
- 设置从GitHub页面接收的所有必需头部和授权令牌;
- 在请求中配置API路径;
- 使用HttpSendRequestExA发送请求并检查响应错误;
- 使用InternetReadFile从云中读取数据。
然后,恶意软件创建两个独立的线程——一个负责从Windows管道接收数据,另一个负责向它发送数据。这些线程促进了C2和后门模块之间的异步数据交换。
最后,C2模块通过读取数据、接收编码命令、使用字符代码表对它们进行解码,并将它们通过命名管道发送到后门模块与云服务进行交互。相反,它从后门模块接收命令执行结果或泄露的数据,并将它们写入云中。
基础设施
GitHub页面
GitHub页面创建于2024年5月7日,同一天有两个仓库被fork到其中。2024年5月13日,另一个仓库被fork,之后没有进一步的GitHub交互。被fork的仓库保持原样。C2仓库的名称“Alina Egorova”是一个常见的俄罗斯女性名字;然而,GitHub页面上的照片是一个男性,从公共照片库复制而来。
Mail.ru照片托管
这个页面包含与GitHub页面相同的编码字符串。没有关于相册何时创建和发布的信息。所有者的照片与照片库中的图片相同。
归因
使用云服务并不新鲜,我们在对CloudWizard APT的概述中报告了这样一个例子(与乌克兰冲突中的Operation Groundbait和CommonMagic有关的活动)。然而,将CloudSorcerer归因于同一攻击者的可能性很低,因为恶意软件的代码和整体功能是不同的。因此,我们目前假设CloudSorcerer是一个采用了与公共云服务交互技术的新攻击者。
受害者
俄罗斯联邦的政府组织。
结论
CloudSorcerer恶意软件代表了一个针对俄罗斯政府实体的复杂工具集。它使用云服务如Microsoft Graph、Yandex Cloud和Dropbox作为C2基础设施,以及GitHub进行初始C2通信,展示了对网络间谍活动的精心规划方法。恶意软件根据其运行的进程动态调整其行为的能力,加上它通过Windows管道进行复杂的进程间通信的使用,进一步凸显了其复杂性。
虽然操作方式与之前报告的CloudWizard APT有相似之处,但代码和功能上的显著差异表明CloudSorcerer很可能是一个新的攻击者,可能受到之前技术的启发,但正在开发自己独特的工具。
Yara规则
meta: description = "Detects CloudSorcerer" author = "Kaspersky" copyright = "Kaspersky" distribution = "DISTRIBUTION IS FORBIDDEN. DO NOT UPLOAD TO ANY MULTISCANNER OR SHARE ON ANY THREAT INTEL PLATFORM" version = "1.0" last_modified = "2024-06-06" hash = "F701fc79578a12513c369d4e36c57224" strings: $str1 = "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko" $str2 = "c:\\windows\\system32\\mspaint.exe" $str3 = "C:\\Windows\\system32\\msiexec.exe" $str4 = "\\\\.\\PIPE\\" condition: uint16(0) == 0x5A4D and all of ($str*) }
参考来源:https://securelist.com/cloudsorcerer-new-apt-cloud-actor/113056/