Cuba勒索软件(又名Tropical Scorpius)的最新攻击策略

2022-9-28 11:30:0 Author: www.4hou.com(查看原文) 阅读量:21 收藏

微信截图_20220810144112.png

从2022年5月初开始,Unit42观察到攻击者使用新工具和技术部署Cuba勒索软件。根据Unit42的命名模式,Cuba勒索软件又被命名为Tropical Scorpius。

Tropical Scorpius概述

该勒索软件家族于2019年12月首次被发现。此后,该勒索软件家族背后的攻击者改变了其攻击策略和工具,在2022年成为更普遍的威胁。该勒索软件历来通过Hancitor传播,通常通过恶意附件传播。Hancitor,也被称为Chanitor或Tordal,是一个基于宏的恶意软件,通过分布在垃圾电子邮件活动中的Microsoft Office文档传播。研究人员还观察到Tropical Scorpius利用MicrosoftExchangeServer中的漏洞,包括ProxyShell和ProxyLogon。

该勒索软件组织使用双重勒索和一个泄露网站,该网站暴露了据称已被入侵的组织(图1a和1b)。也就是说,该组织在2019年首次观察时没有泄漏网站,研究人员怀疑这个灵感来自其他勒索软件,例如Maze和REvil。Cuba勒索软件泄漏网站还包括一个付费部分。

1.png

泄漏网站的屏幕截图,重点关注该组织免费提供的内容

2.png

泄漏网站的屏幕截图,该网站提供数据出售

受害者分析

最新的Unit42勒索软件威胁报告包括对Cuba勒索软件影响33个组织的观察。截至2022年7月,Tropical Scorpius已经影响了27个跨多个领域的组织,例如专业和法律服务、州和地方政府、制造、运输和物流、批发和零售、房地产、金融服务、医疗保健、高科技、公用事业和能源、建筑和教育。自该组织于2019年首次出现以来,该组织总共泄漏了60个组织的信息。

不过受害者的数量比泄漏网站显示的要多,因为如果受害者支付赎金,勒索软件运营商通常不会公开发布数据。

3.png

泄露网站上出现的组织,按行业分布

这个勒索软件组织的泄密网站并不像目前正在运营的其他勒索软件组织那样包括全球范围内的目标组织分布。虽然泄密网站并不能反映受此勒索软件组织影响的实际受害者数量,但它们仍让我们大致了解该组织的目标和目的。我们注意到,有40个位于美国。

工业间谍和Tropical Scorpius

2022年5月,BleepingComputer报告称,“工业间谍”(Industrial Spy)市场正在进入勒索软件业务。在2022年4月出现后,“工业间谍”成为了一个众所周知的网站,攻击者可以在该网站注册,从被入侵的公司购买窃取的数据。勒索软件的扩展虽然是一种相关类型的恶意活动,但似乎也与Tropical Scorpius有关。

5.png

工业间谍登陆页面

BleepingComputer报告称,工业间谍勒索软件使用的勒索信与Cuba勒索信非常相似,两份勒索信都包含完全相同的联系信息。Unit42观察到有效载荷用于加密受感染系统上的文件,将.cuba扩展名附加到文件中,但随后观察到泄露的数据已在Industrial Spy市场上发布出售。

我们仍然不确定为什么Tropical Scorpius攻击者利用工业间谍市场而不是他们自己的泄密网站。

勒索软件功能

虽然很明显,Tropical Scorpius攻击者不断开发和更新他们的工具包,但其核心有效载荷自2019年被发现以来基本保持不变。加密算法仍取自WolfSSL的开源存储库,特别是用于文件加密的ChaCha和RSA用于密钥加密。

6.png

Tropical Scorpius和WolfSSL的RSA加密函数之间的代码重叠

类似于大多数勒索软件家族,Tropical Scorpius根据文件大小对文件进行不同的加密。如果文件长度小于0x200000字节,则对整个文件进行加密。如果没有,Tropical Scorpius会以0x100000字节的块对文件进行加密,加密块之间的中断根据整体大小而有所不同。例如,大小在0x200000字节和0xA00000字节之间的文件将被修改为0x400000字节的块,直到文件结束。

7.png

在文件加密之前确定块间距

8.png

Tropical Scorpius中基于文件大小的块间距

每个加密文件还带有一个初始的1024字节标头,其中包含魔法值FIDEL.CA(可能是指Fidel Castro,然后是包含文件特定ChaCha密钥的RSA-4096加密块和随机数。成功加密文件后,扩展名.cuba会附加到文件名中。

9.png

FIDEL.CA魔术值后跟加密的RSA blob

目前,Tropical Scorpius的开发人员已经建立了将在运行时终止的目标进程和服务列表,并增加了目录和扩展名的数量以避免加密。

目标流程和服务:

10.png

避免加密的目录:

11.png

避免加密的扩展:

12.png

另一个重大更新可以在勒索软件释放的勒索信中找到,他们不仅依赖于Tor网站,还通过TOX提供通信,由于其安全的消息传播功能,它在勒索软件领域中慢慢变得越来越流行。

13.png

Tropical Scorpius组织释放的勒索信

逃避检测

Tropical Scorpius使用一些有趣的工具和技术来逃避检测,它利用一个释放程序将内核驱动程序写入名为ApcHelper.sys的文件系统。这可以终止了安全产品,但内核驱动程序是使用在LAPSUSNVIDIA泄漏中找到的证书进行签名的。

14.png

内核驱动程序数字签名

在执行内核驱动程序释放程序/加载程序时,内核释放程序使用多个WindowsAPI来查找资源部分并加载称为驱动程序的资源类型名称。这是一个嵌入式PE文件,是在后续API调用中最终写入文件系统的驱动程序。

15.png

内核释放程序部分

在内核驱动程序加载到文件系统之后,加载程序将首先通过cmd.exe为文件路径运行一个释放命令参数。

16.png

之后,它将使用cmd.exe创建一个新服务,并运行以下参数为内核驱动程序设置一个服务。

17.png

然后加载程序将负责终止安全产品的内核驱动程序复制到文件系统上。

18.png

释放和加载的内核驱动程序的核心功能是解析额外的内核API以执行功能并针对要终止的安全产品列表。

附加API使用所需API名称的字符串常量解析,下面的每个WindowsAPI都用于对MmGetSystemRoutineAddress的函数调用,以返回指向该函数的指针。下面是在示例中找到的已解析的其他内核API的列表。

19.png

内核驱动程序运行时API

目标安全产品列表与之前在名为“BURNTCIGAR”的工具中观察到的目标列表重叠。这个特定的内核驱动程序是Mandiant观察到的变体。

20.png

解析附加API后,就开始了以安全产品为目标的解析过程。设置了一个do-while循环,目的是检查系统上运行的进程,以查看它们是否与目标安全产品中的项目匹配。这种命名检查是通过查找每个ThreadID并调用函数PsLookupThreadByThreadId来执行的,该函数将用于查找指向线程的ETHREAD结构的指针。ETHREAD结构是一个内核对象,维护对重要进程/线程结构和对象的各种引用,这些引用是操作系统为CPU分配任务和执行所需的。返回的指向ETHREAD的指针用于函数PsIsThreadTerminating,目的是确保线程没有终止。

然后如果存在线程对象,为了找到该线程所属的进程,使用函数PsGetThreadProcess,返回值为PEPROCESS。PEPROCESS是一个进程对象的内核对象表示,它维护着指向存储进程相关信息的指针。如果相关线程中存在PEPROCESS,则ImageFileName偏移量将分配给反编译输出实例中的变量,这是下图中名为“v3”的变量。变量“v3”将具有循环中当前线程/进程的进程映像文件名,它可以是计算机系统上的任何活动进程。

接下来是在strstr函数中使用两个参数的内部if-then语句。第一个参数是来自PEPROCESS结构的ImageFileName的进程映像文件名。第二个参数是安全产品名称的子字符串搜索,以便与第一个参数进行比较。例如,名称Sophos是否存在于ImageFileName进程名称字符串中。

如果匹配,则下一个名为sub_140001BE0的函数(如下图所示)将检查线程的状态代码是否设置为挂起状态。如果此值为真,则将使用ZwTerminateProcess调用子例程来终止。线程对象将被取消引用,循环将继续到下一个线程

21.png

反编译的内核驱动程序示例

此次Tropical Scorpius的改变策略是利用过期的合法NVIDIA证书,以及使用自己的驱动程序针对安全产品进行终止。与之前版本易受攻击的BURNTCIGAR驱动程序中未被公开发现的IOCTL(输入/输出控制系统调用)相比,这是一个值得注意的变化。

本地权限提升

Tropical Scorpius利用的本地权限提升工具最初是使用PowerShell的Invoke-WebRequest从网络托管平台tmpfiles[.]org下载的。

Unit42观察到攻击者利用了一个滥用CVE-2022-24521的二进制文件,这是通用日志文件系统(CLFS)中的一个漏洞。该漏洞利用了CLFS.sys中的一个逻辑错误,特别是在CClfsBaseFilePersisted::LoadContainerQ()函数中。格式错误的BLF文件用于破坏具有用户模式地址的容程序上下文对象的pContainer字段,以获取代码执行。代码执行用于窃取系统令牌并提升权限。PixiePointSecurity的SergeyKornienko于2022年4月25日提供了有关此漏洞和利用策略的详细记录。

横向传播

Tropical Scorpius攻击者利用各种工具进行初始系统侦察。ADFind和NetScan是使用PowerShell的Invoke-WebRequest从网络托管平台tmpfiles[.]org下载的。这两种工具都被放到了同一个系统上,并使用了缩短的名称,以模糊它们的用途。

使用基于PowerShell的脚本GetUserSPNs.ps1执行低权限系统上的凭据准备和收集。在三个不同的系统上都观察到了这个特定的脚本,其中它标识了作为服务帐户使用的用户帐户。攻击者使用此过程来查明值得针对其关联的ActiveDirectoryKerberos勒索信的帐户,以便通过称为Kerberoasting的技术离线收集和破解Kerberos勒索信。

在使用GetUserSPNs.ps1大约一周后,观察到与凭据盗窃相关的其他活动,用户工作站上的Mimikatz被作为压缩文件写入用户的文档文件夹。Mimikatz是一个著名的凭据盗窃工具,它包含各种选项,用于针对可能找到凭据的操作系统部分。

就在Mimikatz被发现的时候,在另一个工作站上发现了一个自定义黑客工具。这个工具用于从主机的LSASS内存中提取缓存的Kerberos勒索信,它被放置到用户的文档文件夹中。

Unit 42将Tropical Scorpius使用的Kerberos工具命名为KerberCache。

22.png

KerberCache勒索信提取示例

在后台,KerberCache将调用APILsaConnectUntrusted以获取用于后续调用的句柄。在返回的句柄之后,对LsaLookupAuthenticationPackage的调用将被赋予名为Kerberos的包以及来自先前对LsaConnectUntrusted的API调用的句柄。如果函数成功,它将调用APILsaCallAuthenticationPackage。下面是调用后的函数流的一个片段,调用后将进行反编译格式化和解析。

23.png

勒索信解析反编译示例

成功检索缓存的Kerberos勒索信后,勒索信将被传播给对数据进行base64编码的函数,并将写入执行该工具的当前工作目录。该工具的命名约定输出可以分为以下几个部分:[[email protected]]_[encryption_type].[ticket_number].kirbi。在写入文件系统时,实际的票据命名约定显示为以下示例输出:[email protected]_18.0.kirbi。

24.png

勒索信编码反编译示例

域管理

Tropical Scorpius利用的域管理工具最初是使用PowerShell的Invoke-WebRequest从网络托管平台tmpfiles[.]org下载的。该示例是使用Themida的Anti-VM功能打包的,Themida是一种著名的商业打包工具。它还伪装成文件名Filezilla。

执行时,如果在虚拟化环境中运行,打包程序将显示以下消息:

25.png

Themida Anti-VM示例

与黑客工具相关的独特命令提供了高可信度的Zero.exe是ZeroLogon黑客工具。ZeroLogon黑客工具被用于滥用CVE-2020-1472,通过从域控制程序请求NTLM哈希来获得域管理员(DA)权限。

26.png

ZeroLogon黑客工具打包

命令与控制

除了上述工具外,Unit42还发现了一个自定义远程访问木马/后门,其中包含一个独特的命令和控制(C2)协议。根据二进制文件中的字符串和功能,我们选择将其命名为ROMCOM RAT。

ROMCOM RAT可以通过使用它的两个导出中的一个来执行:

ServiceMain;

startWorker;

两个导出都导致执行相同的函数,但是,不同之处在于作为参数传播的字符串:ServiceMain传播字符串_inet,而startWorker传播字符串_file。仅基于此字符串,示例中的执行流程就完全不同,ServiceMain导致示例向其C2服务器发送信标,而startWorker导致示例在系统上打开后门并等待连接。

ServiceMain导出

执行ServiceMain导出后,ROMCOM将执行以下命令行:

C:\\Windows\\System32\\rundll32.exe
C:\\Windows\\System32\\comDll.dll,startWorker

这将导致startWorker导出的执行,这意味着两个导出都将在机程序上处于活动状态,假设ROMCOM最初是通过服务执行的。

27.png

使用带有startWorker参数的rundll32.exe执行ROMCOM示例

这样ROMCOM将收集系统和用户信息,并尝试通过WinHTTPAPI将其发送到硬编码的C2服务器。如果成功,则相应地解析和处理响应。

28.png

ROMCOM内部提供的ICMP函数

29.png

对从C2接收的数据包的命令处理

如果连接失败,ROMCOM将尝试使用ICMP请求连接到C2服务器并与之通信。使用诸如IcmpCreateFile()和IcmpSendEcho()这样的Windows API函数,它将尝试重新发送系统和用户信息到服务器,直到收到响应。一旦接收到响应,就会按照解析HTTP响应的方式对其进行解析。

30.png

ICMP请求函数

如果响应的第四个字节等于9,ROMCOM将休眠120000毫秒。如果第四个字节设置为5,则响应将包含后续数据的大小,因此在向C2发出第二个请求之前分配内存,根据使用的最后一个协议使用HTTP或ICMP。

然后,从第二个请求接收到的数据被传递到一个函数,该函数首先通过5555和5600之间的端口连接到本地地址127.0.0[.]3,然后发送C2接收到的数据。然后该函数返回,然后ROMCOM绑定到127.0.0[.]2:5555,它将等待连接,并将从该连接接收到的任何数据转发到其C2服务器。

31.png

连接到由ROMCOM startWorker进程托管的本地套接字服务器

startWorker导出

startWorker导出将字符串_file传播给ROMCOM的主函数,这导致ServiceMain导出执行的代码被跳过。相反,startWorker首先打开一个套接字对象并尝试绑定到IP127.0.0[.]3和端口5555。但是,如果端口已在使用中,ROMCOM将增加端口值,并尝试再次绑定。这个循环一直持续到ROMCOM绑定到一个未使用的端口,或者直到端口值达到5600,此时它被设置为5554,然后循环重新启动。

32.png

设置本地套接字服务器

一旦ROMCOM成功绑定到端口,它就会开始监听传入的连接,这将由执行ServiceMain导出的进程来完成。当接收到一个传入连接时,将产生一个线程,该线程将处理来自已连接客户机的任何请求。

33.png

命令处理程序

可接受的命令及其用途的列表如下所示:

34.png

本质上,这种特殊的执行结构导致ROMCOM示例作为一个服务运行,通过HTTP/ICMP请求接收来自C2服务器的命令,然后将这些命令传递给通过rundll32.exe执行的ROMCOM示例。命令被执行,结果被传递回服务执行的ROMCOM有效负载。最后,通过HTTP或ICMP请求将结果发布到C2服务器。

ROMCOM 2.0

ROMCOM 似乎正在积极开发中,因为我们能够在 2022 年 6 月 20 日发现上传到 VirusTotal (VT) 的类似示例,该示例正在与同一个 C2 服务器通信。

原始示例的日期为 2022 年 4 月 10 日,而此示例的文件标头时间戳为 2022 年 5 月 28 日,大约大 400 kb。它共享相同的 startWorker 和 ServiceMain 导出;但是,它还包含第三个导出,称为 startInet。示例中发现的调试字符串的增加可能表明该示例在开发完成之前被防病毒软件捕获; VT 上传者 ID (22b3c7b0) 过去上传了数百万个文件,这排除了任何人个人上传文件的可能性。

在这个版本中,ServiceMain将执行两次ROMCOM 2.0示例,最初执行startInet导出,然后继续执行startWorker导出。然而,比起像最初的ROMCOM示例那样简单地调用CreateProcessA,开发人员将更多的精力放在使用COM对象执行上。

35.png

执行startnet和startWorker导出

使用task Scheduler提供的各种COM接口,每个进程都作为系统上的一个任务生成。ROMCOM 2.0将首先通过调用ITaskService->GetFolder来获取任务根文件夹。然后,它删除与将使用ITaskFolder->DeleteTask创建的任务名称相同的任何现有任务。

36.png

通过Task Scheduler COM接口注册的任务名称

使用ITaskService->NewTask创建一个空任务,然后使用IPrincipal->put_Id修改安全主体,将标识符设置为NT AUTHORITY\\SYSTEM,使用IPrincipal->LogonType将登录类型设置为TASK_LOGON_INTERACTIVE_TOKEN,并使用IPrincipal->put_RunLevel将运行级别设置为TASK_RUNLEVEL_HIGHEST。

37.png

使用SYSTEM权限创建任务

为任务设置了0秒的延迟,使用IRegistrationTrigger->PutDelay,由字符串PT0S表示,导致任务在创建后立即执行。

38.png

创建任务触发器,延迟设置为0秒

最后,为任务设置一个操作,操作路径设置为rundll32.exe,参数设置为C:\\Windows\\system32\\mskms.dll, argument,其中argument是startWorker或startInet,这取决于所传递的导出。

39.png

创建任务动作,导致rundll32.exe执行msk .dll

一旦注册,任务就会被触发,这将导致ROMCOM 2.0主要功能的执行。这与原始示例的结构相同,startInet进程连接到硬编码的C2服务器,并将任何响应传递给startWorker进程以进行相应的处理。开发人员还扩展了已处理命令列表,在现有10个命令的基础上增加了10个命令。这包括下载专门用于对系统进行单个或多个截图的有效载荷,以及提取所有已安装程序的列表,并将其发送回C2。

40.png

下载描述的SCREENSHOOTER有效载荷

41.png

ROMCOM 2.0支持命令

本文翻译自:https://unit42.paloaltonetworks.com/cuba-ransomware-tropical-scorpius/如若转载,请注明原文地址


文章来源: https://www.4hou.com/posts/vJDX
如有侵权请联系:admin#unsafe.sh