在恶意软件领域中,能够针对多个操作系统发起攻击的跨平台恶意软件是很多的。2020 年 9 月发现的 Vermilion Strike 就是最新的示例。
2021 年 12 月,网络安全公司 Intezer 发现了一个能够对 Windows、Mac 和 Linux 发起攻击的跨平台后门 SysJoker,其 Linux 版本和 Mac 版本的恶意软件在 VirusTotal 上完全没有检出。
SysJoker 是在一家教育机构的 Web 服务器上发现的,该服务器为 Linux 系统。经过进一步调查,发现 SysJoker 也有 Mach-O 和 Windows 版本。
根据在 VirusTotal 上发现的 C&C 域名与相关样本,估算 SysJoker 攻击是在 2021 年下半年发起的。
SysJoker 会伪装成系统更新,下载托管在 Google Drive 上的文本文件,通过解密得到 C&C 地址。
在分析过程中,其 C&C 地址更改了 3 次,这表明攻击者仍然处于活动状态并且在监视受感染的机器。根据受害者和恶意软件的特定行为,SysJoker 应该是针对特定目标的恶意软件。
SysJoker 以 TypeScript 文件的后缀名 .ts上传到 VirusTotal,此恶意软件可能是通过受感染的 npm 包进行传播的。
SysJoker
SysJoker 使用 C++ 编写,每个样本都是针对特定操作系统量身定制的。在 VirusTotal 中 macOS 和 Linux 样本都是零检出。
VirusTotal 检测结果
行为分析
在不同的操作系统上,SysJoker 的行为都是相似的。本文以针对 Windows 系统的恶意样本为例,进行相关分析。
第一阶段的 Dropper(d71e1a6ee83221f1ac7ed870bc272f01)是一个 DLL 文件,上传到 VirusTotal 的名字是 style-loader.ts,在撰写本文时只有 6 个引擎检出。(截至发稿前已有 22 个引擎检出)
VirusTotal 检测结果
Dropper 使用 PowerShell 命令从 https://github.url-mini.com/msg.zip中下载一个压缩的 SysJoker(53f1bb23f670d331c9041748e7e8e396),并将其复制到 C:\ProgramData\RecoverySystem\recoveryWindows.zip,再进行解压缩并执行。
进程执行链
一旦 SysJoker(d90d0f4d6dad402b5d025987030cc87c)成功执行,样本会随机休眠 90 到 120 秒。然后创建 C:\ProgramData\SystemData\目录并将自身复制到该目录下,伪装成 igfxCUIService.exe程序文件(igfxCUIService 与 Intel Graphics Common User Interface Service 有关)。
接着收集有关失陷主机的信息。SysJoker 使用不同的临时文本文件来记录命令的结果。这些文本文件会被立即删除,数据存储在 JSON 对象中,然后编码并写入名为 microsoft_Windows.dll的文件。下图展示了 SysJoker 在内存中构建的JSON对象:
内存数据结构
SysJoker 会收集 MAC 地址、用户名、物理设备序列号和 IP 地址等信息。
另外,SysJoker 通过注册表 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run实现持久化。在上述每个步骤之间,恶意软件都会随机休眠一段时间。
下图显示了进程树和命令:
进程执行链
编码/解码
SysJoker 在二进制文件中保存一个硬编码的 XOR 密钥,用于解码和编码二进制文件中的字符串以及与 C&C 服务器间发送和接收的数据。
所有版本的 SysJoker 中都使用相同的 XOR 密钥:
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDkfNl+Se7jm7sGSrSSUpV3HUl3vEwuh+xn4qBY6aRFL91x0HIgcH2AM2rOlLdoV8v1vtG1oPt9QpC1jSxShnFw8evGrYnqaou7gLsY5J2B06eq5UW7+OXgb77WNbU90vyUbZAucfzy0eF1HqtBNbkXiQ6SSbquuvFPUepqUEjUSQIDAQAB
C&C
为了获取可用的 C&C 服务器地址并开始通信,SysJoker 首先对硬编码的 Google Drive 链接进行解码。
数据解码对应关系
Google Drive 链接上部署了一个名为 domain.txt的文本文件,该文件包含一个经过编码的 C&C 服务器地址。文本文件的内容会随着时间的推移而变化,不断更新当前可用的 C&C 服务器。
CyberChef 解码示例
SysJoker 将收集到的用户信息发送到 C&C 服务器的 /api/attach作为初始握手。C&C 服务器会回复一个唯一 Token,从此以后的恶意软件与 C&C 服务器通信,Token 将被用作标识符。
SysJoker 运行一个 while(1) 循环,该循环会使用唯一 Token 向 C&C 服务器的 /api/req发送请求,接收响应处理为 JSON。这就是 SysJoker 与 C&C 服务器保活获取指令的方式:
请求代码结构
如果服务器响应数据,SysJoker 解析接收到的 Payload 执行对应指令:exe、cmd、remove_reg 和 exit。
C&C 通信基本流程
当前版本的恶意软件并未实现 remove_reg和 exit。根据指令名称,可以推断是恶意软件的自我删除功能。
exe
exe指令负责下载并运行可执行文件。SysJoker 会接收到一个 zip 文件的下载 URL、一个文件应该被放置到的路径,以及可执行文件的文件名。SysJoker 将下载该压缩文件,解压缩并执行。
exe指令
执行后,恶意软件将向 C&C 服务器的 /api/req/res发送消息。如果成功则返回 success,否则返回 exception。
exe 指令响应
cmd
cmd指令负责运行命令并将其结果发送给 C&C 服务器。SysJoker 将对命令进行解码、执行并将结果发送给 /api/req/res。
cmd 指令
在撰写本文时,C&C 服务器没有响应下一个阶段的指令。
结论
有迹象表明 SysJoker 是由高级攻击者使用的:
代码是重新编写的,在其他攻击中从未见过。最重要的是,很少发现前所未见的 Linux 恶意软件。
攻击者注册了至少 4 个不同的域名,并为三种不同的操作系统重新编写恶意软件。
没有发现攻击者发送第二阶段的指令。这表明攻击是特定目标的,通常是高级攻击者的表现。
根据恶意软件的功能,猜测攻击的目的是间谍活动以及横向移动。
IOC
bd0141e88a0d56b-08bc52db4dab68a49b6027a486e4d9514ec0db006fe71eedd028e64bf4ec97dfd655ccd1157a5b96515d461a710231ac8a529d7bdb936ff31a9a5c797777f37463b44de2b49a7f95abca786db3977dcdac0f79da739c08ac61df74731fbe1eafb2eb987f20e5226962eeceef010164e41ea6c4494a4010fc1ffd6559d21470c40dcf9236da51e5823d7ad58c93502279871c3fe7718c901c
https://bookitlab.nethttps://winaudio-tools.com
https://graphic-updater.com
https://github.url-mini.com
https://office360-update.com
https://drive.google.com/uc?export=download&id=1-NVty4YX0dPHdxkgMrbdCldQCpCaE-Hn
https://drive.google.com/uc?export=download&id=1W64PQQxrwY3XjBnv_QAeBQu-ePr537eu