在我们不断努力监控和识别暗网上新出现的威胁的过程中,Uptycs 威胁研究团队最近发现了一个新的令人担忧的威胁。上次,我们遇到了臭名昭著的RTM Locker 勒索软件. 这一次,我们偶然发现了一个名为 Cyclops 威胁组织的新演员。
Cyclops 组织特别自豪地创造了能够感染所有三个主要平台的勒索软件:Windows、Linux 和 macOS。在前所未有的举措中,它还共享了一个单独的二进制文件,专门用于窃取敏感数据,例如受感染的计算机名称和多个进程。后者针对 Windows 和 Linux 中的特定文件。
威胁
Uptycs 威胁情报主动监控暗网,我们最近在暗网遇到了一个新的勒索软件即服务 (RaaS) 提供商。除了提供勒索软件服务外,该实体还提供用于窃取目的的单独二进制文件。
此 RaaS 背后的威胁行为者在论坛上推广其产品。它在那里要求那些使用其恶意软件从事恶意活动的人分享利润。
图 1 - Cyclops 管理员帖子
威胁开发人员提供了一个单独的面板,以方便为上述三个操作系统分发其勒索软件。
在同一个面板中,有不同的二进制文件可用于专门为 Linux 和 Windows 定制的辅助窃取器组件。
图 2 - Cyclops 管理面板
作为一种银行,该网站包括一个金融部分,为 Cyclops 攻击者提供发起提取已付赎金金额的能力。
图 3 - Cyclops 支付面板
威胁开发人员能够及时解决实时问题并为有价值的建议提供奖励。
勒索软件二进制分析
Windows
提取从面板获得的下载存档文件后,Uptycs 发现了构建器二进制文件和readme.txt文件的存在。此外,攻击者还私下共享了一个构建器 ID,用于创建名为locker.exe 的勒索负载。
图 4 - 生成赎金有效载荷
此有效负载专门设计用于感染本地和联网机器。随附的文本文件包含有效载荷执行指令——包括和不包括命令行参数。
图 5 - 勒索载荷执行命令行
Cyclops 勒索软件有效负载是一个已编译的可执行二进制文件,专门针对使用 VC++ 编译器的 x64 位架构。
载荷扫描并识别进程在受害者的机器上运行,立即终止任何可能阻碍加密它打算劫持的目标文件的进程。
这些过程包括:
图 6 - 终止进程列表
有效负载使用 GetLogicalDriveStrings API 来检索系统逻辑驱动器信息。
图 7 - 获取逻辑驱动器信息
获取驱动器号后,它会枚举文件夹并在磁盘上放置一个名为 How To Restore Your Files.txt 的赎金票据文件。在加密任何给定文件之前,有效负载会检查其文件扩展名是否与预定义列表匹配(图 8)。如果不是,文件将被加密并附加一个.CYCLOPS扩展名,例如LICENSE.txt.CYCLOPS。
图 8 - 排除文件扩展名列表
攻击者通过执行 SELECT * FROM Win32_ShadowCopy 查询从受害系统获取卷影副本详细信息。查询输出包括每个卷影副本 ID、创建时间、卷名和其他相关详细信息等信息。
接下来有效载荷启动删除特定的卷影副本由其 ID 标识;它通过命令提示符执行 Windows Management Instrumentation 命令行 (WMIC) 实用程序来实现。
删除卷影副本命令
cmd.exe /c C:\Windows\System32\wbem\WMIC.exe shadow copy where "ID='{<ID>}'" delete
赎金记录
赎金记录消息指向一个 Onion 站点,受害者可以访问该站点以恢复其加密文件。
图 9 - 勒索信
Linux
Linux 二进制文件是一个 Golang 编译的文件,其中的函数名称被剥离以增加逆向工程的难度。它是基于 CGO 的,其中源代码是用 C 编写的,并构建在 Golang 上。
在执行示例时,它提供了用于加密特定路径、虚拟机中的文件或启用详细输出的选项,如图 10 所示。
图 10 - Linux 勒索软件参数
排除的加密文件和文件夹
/proc 和 /boot 中的文件未加密。相反,它加密具有扩展名的文件。vmcx、.vmdk、.vmem、.vmrs、.vmsd、.vmsn、.txt、.csv、.lock、.pdb、.csv等等。
并且它会在它加密的每个文件夹中放置一张赎金票据。
图 11 - Linux 勒索软件说明
加密所有文件后,它会生成与找到的文件、加密文件、加密错误文件、时间等相关的统计报告。
图 12 - Cyclops 勒索软件 (Linux) 加密后的报告
Windows和Linux的加密逻辑
加密很复杂;所有功能都使用非对称和对称加密的组合静态实现。下面是加密过程。
调用CryptAcquireContext以获取 CSP 中特定密钥容器的句柄。
然后调用Cryptgenrandom以用加密随机 32 字节填充缓冲区,在步骤 1 中获得的句柄作为参数传递。(在 Linux 中,图 14 中突出显示的crypto_rand_batched Golang 库用于生成 32 个随机字节。)
图 13 - Windows 中的随机数生成
图 14 - Linux 中的随机数生成
在 Curve25519 上的 ECDH 算法中,随机字节用作私钥。
现在使用私钥通过 Curve25519 生成公钥,将其附加在加密文件的末尾。
ECDH 中的共享密钥/会话密钥现在通过 Curve25519 生成,使用步骤 2 中的私钥和文件中硬编码的攻击者公钥。在 Windows 中,Curve25519 加密是静态实现的,这使得逆向工程变得困难。Golang 库 Curve25519 在 Linux 中使用。
图 15 - Curve25519 在 Windows 中的实现
图 16 - Curve25519 ECDH 公钥 (Windows)
图 17 - Linux 中的 Curve25519 调用
在对称加密期间计算和使用生成的共享/会话密钥 SHA512 哈希。它是静态实现的,所有文件常量都是硬编码的。
图 18 - Windows 中的 SHA512 实现
SHA512 哈希的 CRC32 被计算并附加在加密文件的末尾。CRC32 函数也使用文件中包含的所有常量静态实现。
图 19 - Windows 文件中的硬编码 CRC32 常量
这里使用的对称加密是 HC-256(一种流密码)。它将生成的 SHA512 的前 32 个字节作为密钥,将生成的 512 的后 32 个字节作为初始化向量 (IV)。图 20 显示了密钥和 IV 如何扩展为 2560 字 (0xA00) 的数组。
图 20 - Windows 中的 HC-256 算法实现
Linux 对称加密使用 ChaCha,其中密钥和 IV 来自生成的共享/会话密钥 SHA512 哈希。
图 21 - ChaCha 在 Linux 中的实现
使用公钥在 Windows 和 Linux 中加密后,CRC32 和文件标记将附加到文件末尾。用于标识文件是否已经加密(以免重复加密),Linux文件标记为00ABCDEF,而在Windows中为0000000000000000000000000。
Linux:
图 22 - Linux 中的加密文件内容
windows:
图 23 - Windows 中的加密文件内容
苹果系统
哈希是 Golang 编译的文件(与 Linux 变体相同),采用 mach-O 二进制文件的形式(图 24)
图 24 - mach-0 二进制信息
在执行我们的示例时,它提供了用于加密特定路径、虚拟机中的文件或启用详细输出的选项(图 25)。
图 25 - 赎金执行命令
为执行赎金选择的选项将加密文件放在指定文件夹中,并附有赎金记录(如何恢复您的文件.txt)(图 26)。
图 26 - 赎金加密 文件夹
窃取二进制文件
Windows窃取者
这个窃取器可以从前面提到的主 Cyclops 面板(图 2)下载。解压下载的归档文件后,我们得到了两个文件:stealer.exe和config.json。窃取器是 x64 系统的可执行二进制文件,可从目标计算机中提取系统信息。
之后,窃取者读取其执行时位于同一目录中的config.json文件。它包含文件名列表以及相应的扩展名和大小。
图 27 - Config.json 文件
接下来,窃取者会仔细检查 \system32 目录中是否存在未识别的文件(以随机生成和过长的文件名为特征)。
图 28 - 检查\ system32 文件夹中的随机文件
窃取程序然后枚举目录并检查目标文件和特定文件扩展名的存在。如果找到任何匹配项,它会创建一个新的受密码保护的 zip 文件(zip 文件名 - n.zip),其中包含已识别文件的精确副本及其相应的文件夹树结构。然后数据被泄露到攻击者的服务器。
图 29 - 在临时文件夹中收集的受害者文件
zip文件名n.zip包含从受害者机器非法获取的文件。
图 30 - 在 zip 文件中
Linux窃取者
这个 stealer 也是从主 Cyclops 面板中获得的(图 2)。提取从面板获得的存档文件后,我们再次发现了两个文件:stealer.linux和config.json。这个窃取器的功能类似于 Windows 窃取器,两者都是 Golang 编译的。它首先读取位于与其执行相同的目录中的config.json 。该文件包含一个文件名列表及其相应的扩展名和大小。
图 31 - 配置文件 - Linux
窃取程序枚举目录并检查 JSON 文件中提到的目标文件和特定文件扩展名是否存在。如果找到匹配项,它会创建一个新的受密码保护的 zip 文件(zip 文件名 - n.zip),其中包含已识别文件的精确副本及其在 /tmp 目录中的相应文件夹树结构。
然后它会上传 zip 文件:
https[:]//api[.]bayfiles[.]com/upload
https[:]//api[.]anonfiles[.]com/upload
Uptycs 团队仍在研究窃取器组件,并将在我们获得更多信息时更新我们的博客。
与 Babuk 和 Lockbit 勒索软件的相似之处
Cyclops 勒索软件加密逻辑与 Babuk 勒索软件有相似之处。与 Cyclops 一样,后者也使用 Curve25519 和 HC-256 进行 Windows 加密。再次像 Cyclops 一样,Babuk 使用 Curve25519 和 ChaCha 的组合。
可执行字符串被编码并存储为 Cyclops 勒索软件中的堆栈字符串。要使用这些字符串,需要通过涉及加法、减法、移位、XORing 等的计算对它们进行动态解码。在 Lockbit v2 中类似地观察到这种编码。
图 32 - Cyclops 勒索软件中的堆栈字符串混淆
图 33 - Lockbit v2 勒索软件中的堆栈字符串混淆
更新检测
鉴于我们的平台配备了 YARA 进程扫描和高级检测,Uptycs XDR 客户端可以轻松扫描 Linux 和 Macintosh 勒索软件。
图 34 - Uptycs 检测 - macOS/Linux
不容忽视的是,Uptycs 产品还配备了针对 Windows 勒索软件的专门警报检测。
图 35 - Uptycs 检测 - Windows
查询以扫描恶意窃取者
以下查询扫描临时位置以识别窃取者。但是,不能保证所示示例位置会出现盗窃者。因此,您应该根据自己的系统位置扫描任何可疑文件。
查询 - Windows:
select * from yara where count > 0 and path like 'C:\Users\%\AppData\Local\Temp\%%' and rule = 'rule Uptycs_Infostealer_Cyclops_windows
{
meta:
malware_name = "Infostealer"
description = "Infostealers are malwares that can steal credentials from browsers, FTP clients, email clients etc from victim machines."
author = "Uptycs Inc"
version = "1"
strings:
$string_0 = {0F B6 B4 18 EA 01 00 00 40 C0 EE 04 40 0F B6 F6 48 8D 3D ?? ?? ?? 00 0F B6 34 37 0F 1F 00 48 81 FA 0B 02 00 00 0F 83 ?? ?? 00 00}
$string_1 = {44 0F B6 84 18 EA 01 00 00 41 83 E0 0F 41 0F B6 3C 38 48 81 FE 0B 02 00 00 72 95}
$string_2 = {FF D0 48 81 C4 50 01 00 00 59}
$string_3 = "GetSystemInfo" ascii wide
$string_4 = "GetProcessAffinityMask" ascii wide
$string_5 = "GetEnvironmentStrings" ascii wide
$string_6 = "GetConsoleMode" ascii wide
$string_7 = "math.Vr8NUS" ascii wide
$string_8 = "json:\"status\"" ascii wide
condition:
all of them
}'
查询 - Linux:
select * from yara where count > 0 and path like '/tmp' and rule = 'rule Uptycs_Infostealer_Cyclops
{
meta:
malware_name = "Infostealer"
description = "Infostealers are malwares that can steal credentials from browsers, FTP clients, email clients etc from victim machines."
author = "Uptycs Inc"
version = "1"
// All are moving patterns
strings:
$Infostealer_Cyclops_0 = {48 81 EC B0 00 00 00 48 89 AC 24 A8 00 00 00 48 8D AC 24 A8 00 00 00 48 BA 2F 70 DC 38 93 99 77 CB 48 89 54 24 6C 48 BA D8 1F 8E E2 21 03 59 E8 48 89 54 24 74 48 BA 21 03 59 E8 CB 81 2D E4 48 89 54 24 78 48 BA E6 FC 0D 2D D9 82 66 1D 48 89 94 24 80 00 00 00}
$Infostealer_Cyclops_1 = {48 BA 46 87 69 74 E3 8F F8 08 48 89 94 24 88 00 00 00 48 BA 73 62 58 40 B0 D3 FC 18 48 89 94 24 90 00 00 00 48 BA 57 FA 61 40 F0 D4 0D 2B 48 89 94 24 98 00 00 00 48 BA 36 0F 3B 23 74 94 3E B3 48 89 94 24 A0 00 00 00 44 0F 11}
$Infostealer_Cyclops_2 = {48 BA 64 42 44 53 31 6E 75 39 48 89 54 24 34 48 BA 2D 6F 3E 20 2C 2C 39 72 48 89 54 24 3C 48 BA 2C 2C 39 72 65 00 37 46}
$Infostealer_Cyclops_3 = {48 BA 6D 75 73 71 7A 6F 4C 20 48 89 54 24 1E 48 BA 73 6F 6F 20 72 6F 47 7F 48 89 54 24 26 48 BA 04 01 0F 01 05 08 05 03}
$Infostealer_Cyclops_4 = {49 3B 66 10 0F 86 EC 00 00 00 48 83 EC 50 48 89 6C 24 48 48 8D 6C 24 48 48 BA 73 54 74 75 63 74 75 7F 48 89 54 24 30 48 BA DF 20 6E F2 65 64 01 EB 48 89 54 24 38 48 BA CF 6C FE 49 06 CB F7 3C 48 89 54 24 40 48 BA 08 02 15 17 08 01 0F 01 48}
condition:
all of ($Infostealer_Cyclops*)
}’
结论与注意事项
提高用户意识和教育对于防止攻击得逞至关重要。用户在处理电子邮件附件、访问可疑网站或从不受信任的来源下载文件时应谨慎行事。实施强大的电子邮件过滤并提供网络钓鱼技术教育可以有效降低此类风险。
定期备份关键数据以减轻勒索软件攻击的影响。您的备份应安全存储并定期测试,以确保数据完整性和可用性。
定期更新您的安全软件并进行系统扫描有助于检测和预防此类威胁。
将窃取的数据传输到攻击者的服务器凸显了网络监控和入侵检测系统 (IDS) 的重要性。组织应投资于强大的网络安全措施,以识别和阻止可疑的出站流量。
组织应优先为关键系统和敏感数据访问实施多因素身份验证 (MFA)。MFA 添加了额外的安全层,使攻击者更难以通过要求额外的身份验证因素来获得未经授权的访问。
原文翻译自:
https://www.uptycs.com/blog/cyclops-ransomware-stealer-combo