新的SysJoker后门针对Windows Linux和macOS

新的SysJoker后门针对Windows Linux和macOS

针对多个操作系统的恶意软件在恶意软件威胁领域也不例外。去年 9 月才记录的Vermilion Strike是迄今为止最新的例子之一。  

新的SysJoker后门针对Windows Linux和macOS

2021 年 12 月,我们发现了一个针对 Windows、Mac 和 Linux 的新多平台后门。VirusTotal 中完全未检测到 Linux 和 Mac 版本。我们将这个后门命名为SysJoker

SysJoker 是在对一家领先教育机构的基于 Linux 的 Web 服务器的主动攻击期间首次发现的。经过进一步调查,我们发现 SysJoker 也有 Mach-O 和 Windows PE 版本。根据在 VirusTotal 中发现的命令和控制 (C2) 域注册和样本,我们估计 SysJoker 攻击是在 2021 年下半年发起的。  

SysJoker 伪装成系统更新,并通过解码从托管在 Google Drive 上的文本文件中检索到的字符串来生成其 C2。在我们的分析中,C2 更改了 3 次,表明攻击者处于活动状态并正在监视受感染的机器。根据受害者学和恶意软件的行为,我们评估 SysJoker 是针对特定目标的。

SysJoker 以用于TypeScript 文件的后缀.ts上传到 VirusTotal 。此恶意软件的一个可能攻击媒介是通过受感染的 npm 包。  

下面我们提供了对该恶意软件的技术分析以及 IoC 以及检测和响应缓解措施。

SysJoker的技术分析

该恶意软件是用 C++ 编写的,每个样本都是针对它所针对的特定操作系统量身定制的。在 VirusTotal 中完全未检测到 macOS 和 Linux 样本。

新的SysJoker后门针对Windows Linux和macOS
VirusTotal 中针对 Mac M1 处理器的病毒hash
e06e06752509f9cd8bc85aa1aa24dba2

行为分析

SysJoker 的行为对于所有三个操作系统都是相似的。我们将分析 SysJoker 在 Windows 上的行为。

与 Mac 和 Linux 示例不同,Windows 版本包含一个第一阶段的 dropper。生成 ( d71e1a6ee83221f1ac7ed870bc272f01 ) 是一个 DLL,它作为style-loader.ts上传到 VirusTotal,在撰写本文时只有 6 次检测。

Dropper从 C2 https[://]github[.]url-mini[.]com/msg.zip 中删除一个压缩的 SysJoker ( 53f1bb23f670d331c9041748e7e8e396 ) ,将其复制到C:\ProgramData\RecoverySystem\recoveryWindows.zip,解压缩并执行它。所有这些操作都是通过 PowerShell 命令执行的。

新的SysJoker后门针对Windows Linux和macOS
显示 PowerShell 命令的进程树。

一旦 SysJoker ( d90d0f4d6dad402b5d025987030cc87c ) 被执行,它会随机休眠 90 到 120 秒。然后,它将创建 C:\ProgramData\SystemData\ 目录并将自身复制到该目录下,伪装成igfxCUIService.exe(igfxCUIService 代表 Intel Graphics Common User Interface Service)。接下来,它将使用落地 (LOtL) 命令收集有关机器的信息。SysJoker 使用不同的临时文本文件来记录命令的结果。这些文本文件会立即删除,存储在 JSON 对象中,然后编码并写入名为microsoft_Windows.dll的文件。下图展示了SysJoker在内存中构建的JSON对象。

新的SysJoker后门针对Windows Linux和macOS
SysJoker 在内存中构建的 JSON 对象。

它将收集 MAC 地址、用户名、物理媒体序列号和 IP 地址(请参阅 IoC 部分以获取完整的命令列表)。SysJoker 将通过向注册表运行键HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run添加一个条目来创建持久性。在上述每个步骤之间,恶意软件会随机休眠一段时间。

以下屏幕截图显示了进程树和命令。

新的SysJoker后门针对Windows Linux和macOS
处理流程和命令。

接下来,SysJoker 将开始其 C2 通信。

解码/编码方案  

SysJoker 在二进制文件中保存一个硬编码的 XOR 密钥,用于解码和编码二进制文件中的字符串以及从 C2 发送和接收的数据。XOR 密钥是未在解码方案中使用的 RSA 公钥。SysJoker 的所有版本中都存在相同的 XOR 键:

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDkfNl+Se7jm7sGSrSSUpV3HUl3vEwuh+xn4q\

BY6aRFL91x0HIgcH2AM2rOlLdoV8v1vtG1oPt9QpC1jSxShnFw8evGrYnqaou7gLsY5J2B06eq5UW7\

+OXgb77WNbU90vyUbZAucfzy0eF1HqtBNbkXiQ6SSbquuvFPUepqUEjUSQIDAQAB

解决 C2

为了获得可用的 C2 并开始通信,SysJoker 首先对硬编码的 Google Drive 链接进行解码。

新的SysJoker后门针对Windows Linux和macOS
新的SysJoker后门针对Windows Linux和macOS
使用Cyber​​Chef解码

Google Drive 链接托管一个名为domain.txt的文本文件,该文件包含一个编码的 C2。文本文件的内容会随着时间的推移而变化,具体取决于当前可用的 C2。SysJoker 将解码 C2 并将收集到的用户信息发送到 C2 的/api/attach 目录作为初始握手。C2 回复一个唯一的令牌,从现在开始,当恶意软件与 C2 通信时,该令牌将用作标识符。

C2 说明

SysJoker 运行一个 while(1) 循环,该循环 使用唯一令牌向 C2 的/api/req目录发送请求,并将处理 C2 的响应,该响应使用此库中的函数构建为 JSON 。这是 SysJoker ping C2 以获取说明的方式(请参见下图中的步骤 2):

新的SysJoker后门针对Windows Linux和macOS
步骤

如果服务器响应数据,SysJoker 将解析接收到的有效负载(参见下图中的步骤 3)。SysJoker 可以从 C2 接收以下指令:execmd、  remove_regexit

下图显示了 SysJoker 与 C2 的通信流程。

新的SysJoker后门针对Windows Linux和macOS

当前版本中未实现remove_regexit。根据指令名称,我们可以假设它们负责恶意软件的自我删除。让我们看看execmd指令:

exe  – 此命令负责删除和运行可执行文件。SysJoker 将收到一个 zip 文件的 URL、一个文件应该被放置到的路径的目录,以及恶意软件应该在提取的可执行文件上使用的文件名。它将下载此文件,解压缩并执行它。

新的SysJoker后门针对Windows Linux和macOS
解析函数的 IDA 代码片段,如果是
exe部分。

执行后,恶意软件将回复 C2 的/api/req/res  API,如果进程成功则返回“成功”,否则返回“异常”(上图中的步骤 4)。

新的SysJoker后门针对Windows Linux和macOS
解析函数的IDA代码片段,构建响应状态。

cmd  – 该指令负责运行命令并将其响应上传到 C2。SysJoker 将对命令进行解码、执行并通过/api/req/res  API将命令的响应上传到 C2 (上图中的步骤 4)。

新的SysJoker后门针对Windows Linux和macOS
解析函数的IDA代码片段,构建
cmd命令响应。

在我们的分析过程中,C2 没有响应下一个阶段的指令。

检测与响应

要检测您组织中的机器是否受到威胁,我们建议采取以下步骤:

1. 使用内存扫描器检测内存中的 SysJoker 有效载荷

  • 对于 Linux 机器,使用Intezer Protect 获得对基于 Linux 系统中代码的完整运行时可见性,并在任何恶意或未经授权的代码时收到警报。我们有一个免费的社区版
  • 对于 Windows 机器,使用 Intezer 的Endpoint Scanner。Endpoint Scanner 将让您了解驻留在机器内存中的所有二进制代码的类型和来源。下图显示了一个感染 SysJoker 的端点示例:
新的SysJoker后门针对Windows Linux和macOS

2. 使用检测内容在您的 EDR 或 SIEM 中进行搜索。我们为您提供了以下每个操作系统的 IoC 和丰富的检测内容列表。将这些与您的 EDR 一起使用来寻找受感染的机器。我们将很快发布一个专门的博客,讨论如何使用检测内容来检测 SysJoker。 

如果您已被入侵,请执行以下步骤:

  1. 杀死与SysJoker相关的进程,删除相关的持久化机制,以及所有与SysJoker相关的文件(见下文检测内容部分)
  2. 通过运行内存扫描程序确保受感染的机器是干净的
  3. 调查恶意软件的初始入口点。如果服务器感染了 SysJoker,在调查过程中,请检查:
    • 面向公众的服务的配置状态和密码复杂性  
    • 使用的软件版本和可能的已知漏洞

SysJoker 的 Linux 和 Windows 版本现已在Intezer Analyze 中编入索引

新的SysJoker后门针对Windows Linux和macOS

最终归属

有迹象表明 SysJoker 攻击是由高级威胁参与者执行的:

  1. 代码是从头开始编写的,在其他攻击中从未见过。最重要的是,在实时攻击中很少发现以前看不见的 Linux 恶意软件。
  2. 攻击者注册了至少 4 个不同的域,并为三种不同的操作系统从头开始编写恶意软件。
  3. 在我们的分析过程中,我们没有目睹攻击者发送的第二阶段或命令。这表明攻击是特定的,通常适合高级参与者。  

根据恶意软件的功能,我们评估攻击的目标是间谍活动以及横向移动,这也可能导致勒索软件攻击作为下一阶段之一。

IOCs(侵害指标)

ELF

bd0141e88a0d56b508bc52db4dab68a49b6027a486e4d9514ec0db006fe71eed

d028e64bf4ec97dfd655ccd1157a5b96515d461a710231ac8a529d7bdb936ff3

Mac

1a9a5c797777f37463b44de2b49a7f95abca786db3977dcdac0f79da739c08ac

Windows

61df74731fbe1eafb2eb987f20e5226962eeceef010164e41ea6c4494a4010fc

1ffd6559d21470c40dcf9236da51e5823d7ad58c93502279871c3fe7718c901c

C2

https[://]bookitlab[.]tech

https[://]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

检测内容

Windows

机器上创建的文件和目录:

C:\ProgramData\RecoverySystem

C:\ProgramData\RecoverySystem\recoveryWindows.zip

C:\ProgramData\RecoverySystem\msg.exe

C:\ProgramData\SystemData

C:\ProgramData\SystemData\igfxCUIService.exe

C:\ProgramData\SystemData\tempo1.txt

C:\ProgramData\SystemData\tempo2.txt

C:\ProgramData\SystemData\tempi1.txt

C:\ProgramData\SystemData\tempi2.txt

C:\ProgramData\SystemData\temps1.txt

C:\ProgramData\SystemData\temps2.txt

C:\ProgramData\SystemData\tempu.txt

C:\ProgramData\SystemData\microsoft_Windows.dll

持久性控制:

HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRun

名称: igfxCUIService类型: REG_SZ数据:  “C:\ProgramData\SystemData\igfxCUIService.exe”

命令:

“C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe” getmac | Out-File -Encoding ‘Default’ ‘C:\ProgramData\SystemData\temps1.txt’ ; wmic path win32_physicalmedia get SerialNumber | Out-File -Encoding ‘Default’ ‘C:\ProgramData\SystemData\temps2.txt’

“C:\Windows\System32\Wbem\WMIC.exe”  path win32_physicalmedia get SerialNumber

“C:\Windows\system32\getmac.exe”

“C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe” $env:username | Out-File -Encoding ‘Default’ ‘C:\ProgramData\SystemData\tempu.txt’

“C:\Windows\System32\cmd.exe” /c wmic OS get Caption, CSDVersion, OSArchitecture, Version / value > “C:\ProgramData\SystemData\tempo1.txt” && type “C:\ProgramData\SystemData\tempo1.txt” > “C:\ProgramData\SystemData\tempo2.txt”

wmic  OS get Caption, CSDVersion, OSArchitecture, Version / value  

“C:\Windows\System32\cmd.exe” /c wmic nicconfig where ‘IPEnabled = True’ get ipaddress > “C:\ProgramData\SystemData\tempi1.txt” && type “C:\ProgramData\SystemData\tempi1.txt” > “C:\ProgramData\SystemData\tempi2.txt”

wmic  nicconfig where ‘IPEnabled = True’ get ipaddress  

“C:\Windows\System32\cmd.exe” /c REG ADD HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /V igfxCUIService /t REG_SZ /D “C:\ProgramData\SystemData\igfxCUIService.exe” /F

REG  ADD HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /V igfxCUIService /t REG_SZ /D “C:\ProgramData\SystemData\igfxCUIService.exe” /F

Linux

机器上创建的文件和目录:

/.Library/

/.Library/SystemServices/updateSystem

/.Library/SystemNetwork

/.Library/log.txt

持久性:

创建计划任务:

@reboot (/.Library/SystemServices/updateSystem) 

命令:

crontab -l | egrep -v “^(#|$)” | grep -e “@reboot (/.Library/SystemServices/updateSystem)”

cp -rf <sample name> /.Library/SystemServices/updateSystem

nohup ‘/.Library/SystemServices/updateSystem’ >/dev/null 2>&1 &

ifconfig | grep -v 127.0.0.1 | grep -E “inet ([0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3})” | awk ‘{print $2}’

ip address | awk ‘/ether/{print $2}’

id -u

uname -mrs

Mac

机器上创建的文件和目录:

/Library/MacOsServices

/Library/MacOsServices/updateMacOs

/Library/SystemNetwork

/Library/LaunchAgents/com.apple.update.plist

持久性:

通过路径/Library/LaunchAgents/com.apple.update.plist下的 LaunchAgent 创建持久性

内容

<?xml version=”1.0″ encoding=”UTF-8″?>

<!DOCTYPE plist PUBLIC “-//Apple//DTD PLIST 1.0//EN” “http://www.apple.com/DTDs/PropertyList-1.0.dtd”>

<plist version=”1.0″>

<dict>

        <key>Label</key>

        <string>com.apple.update</string>

    <key>LimitLoadToSessionType</key>

    <string>Aqua</string>

        <key>ProgramArguments</key>

        <array>

                <string>/Library/MacOsServices/updateMacOs</string>

        </array>

        <key>KeepAlive</key>

    <dict>

       <key>SuccessfulExit</key>

       <true/>

    </dict>

        <key>RunAtLoad</key>

        <true/>

</dict>

</plist>

from

转载请注明出处及链接

Leave a Reply

您的电子邮箱地址不会被公开。