Mespinoza 勒索软件攻击趋势分析(上)
2021-07-26 11:45:00 Author: www.4hou.com(查看原文) 阅读量:71 收藏

导语:为了进一步了解这个组织,Unit 42分析了它的基础设施,包括它用来管理攻击的命令和控制 (C2) 服务器和一个泄漏网站,它发布了那些拒绝支付大笔赎金的受害者的数据。

01.png

Mespinoza 勒索软件的目标已经涉及到了美国出版、房地产、工业制造和教育组织,赎金要求高达 160 万美元。为了进一步了解这个组织,Unit 42分析了它的基础设施,包括它用来管理攻击的命令和控制 (C2) 服务器和一个泄漏网站,它发布了那些拒绝支付大笔赎金的受害者的数据。以下是研究人员对 Mespinoza 勒索软件幕后组织的一些主要发现:

极度自律:在访问新网络后,该小组以研究人员认为的分类方式研究受感染的系统,以确定是否有足够有价值的数据来证明发起全面攻击是合理的。他们寻找的关键词包括秘密、欺诈、ssn、驾照、护照和 I-9 表(工作资格认证),这表明他们正在寻找泄露后影响最大的敏感文件。

针对许多行业:受害者组织被称为“合作伙伴”,使用该术语表明他们试图将该黑客组织作为一家专业企业运营,并将受害者视为为其利润提供资金的商业伙伴。该组织的泄密网站提供了据称属于教育、制造、零售、医疗、政府、高科技、运输和物流、工程和社会服务等行业的 187 个受害组织的数据。

具有全球影响力:受害者中有 55% 在美国。其余的则分散在全球 20 多个国家,包括加拿大、巴西、英国、意大利、西班牙、法国、德国、南非和澳大利亚。

Mespinoza 勒索软件使用了具有创意名称的攻击工具:一种创建网络隧道以抽取数据的工具称为“MagicSocks”。存储在其临时服务器上并可能用于结束攻击的组件名为“HappyEnd.bat”。

Palo Alto Networks Next-Generation Firewall 客户通过 DNS 安全、威胁防护、高级 URL 过滤和 WildFire 安全订阅保护免受这种威胁。客户还受到 Cortex XDR 的保护,并且可以使用 AutoFocus 来跟踪相关对象。 Cortex Xpanse 客户可以评估和管理他们的网络安全攻击面并清理他们的系统。可以在 Unit 42 ATOM 查看器中查看所观察到的技术及其相关行动过程的完整可视化。

通过 RDP 访问网络

研究人员已经对勒索软件运营商使用远程桌面协议 (RDP) 访问受影响组织的网络并利用各种开源和内置系统工具来帮助横向移动和收集凭据的事件做出响应。运营商利用双重勒索策略——在部署勒索软件之前泄露数据,以便他们以后可以威胁泄露数据,并安装一个新的后门,研究人员称之为 Gasket,(基于恶意软件的代码)来维持对网络的访问。 Gasket 还引用了一项名为“MagicSocks”的功能,该功能使用开源 Chisel 项目来创建用于持续远程访问网络的隧道。

在通过 PowerShell 脚本安装勒索软件之前,研究人员观察到 Mespinoza 勒索软件组织将文件泄露到远程服务器,其文件名与关键字列表匹配。关键字包括子串“secret,” “fraud” 和“SWIFT.”,这表明攻击者试图收集和泄露敏感文件,如果攻击者向公众发布文件,这些文件将对组织产生最大的影响。在撰写本文时,该组织的泄密网站列出并提供了全球各行业187家组织的信息。

chart.png

按国家划分的 Mespinoza受害者

chart-1.png

按行业划分的 Mespinoza 受害者

在许多描述中,攻击者将受影响的组织称为他们的“合作伙伴”。研究人员怀疑 Mespinoza 使用该术语是因为他们将自己的运营视为专业企业,而将“合作伙伴”视为为其业务提供资金的业务合作伙伴。

Gasket 和 MagicSocks 工具以及泄露网站上泄露的数据可以追溯到 2020 年 4 月,这表明 Mespinoza 勒索软件组织已经活跃了一年多。虽然有报告表明 Mespinoza 勒索软件组织采用了勒索软件即服务 (RaaS) 模型,但研究人员尚未根据研究人员调查的勒索软件案例观察到该组织的这种行为。

Gasket

在对 Mespinoza 勒索软件事件的分析过程中,研究人员观察到攻击者在传播勒索软件之前在系统上安装了一个用 Go 语言编写的后门。根据法国国家信息系统安全局 (ANSSI) 发布的一份报告,ANSSI 还观察到攻击者使用 Go 编写的有效载荷传送 Mespinoza 勒索软件。研究人员分析了 ANSSI 报告中提到的 Go 样本,发现它是研究人员在研究人员的案例中观察到的同一工具的较早且未混淆的版本。

Gasket 的开发人员在 Golang 中编写了这个后门,并使用开源的 Gobfuscate 工具来混淆有效载荷。研究人员称这个工具为 Gasket,作为在 ANSSI 报告(SHA256:9986b6881fc1df8f119a6ed693a7858c606aed291b0b2f2b3d9ed866337bdbde)中提到的这个工具的变体,指定为版本“001”,它具有以下两个控制功能,它具有以下两个功能:

◼main.checkGasket

◼main.connectGasket

研究人员相信攻击者使用这个后门作为 RDP 的备份来维持对网络的访问。

Gasket 解析传递给它的命令行参数,以确定它是否应该作为独立进程运行(无守护进程模式),将自身安装为服务(守护进程模式,无命令行参数)或控制先前安装的 Gasket 服务。 Gasket 支持以下命令行参数:

◼no-persist

◼service Restart|Install|Start|Run

当尝试将自己安装为守护进程时,Gasket 将创建一个服务并运行其功能代码。以下服务名称已从已知的Gasket样本中提取:

3.png

命令与控制

大多数版本的 Gasket 都配备了一个主要的 C2 通信通道,以及第二个后备通道。早期版本的 Gasket 仅依赖于使用 IP 地址作为其服务器的基于 HTTP 的 C2 通信,而后来的版本使用相同的基于 HTTP 的 C2 通道作为后备,并且主要依赖于 DNS 隧道 C2 通道。 DNS 隧道协议使用 DNS TXT 查询并基于名为 Chashell 的开源项目。例如,以下 DNS TXT 查询是由 Gasket 发出的:

98ca192722ba28e9b8fb34b0d789a00608a13aac2e8d5b420b8e2ae899777a4.5c91a5a50ca31d47ed0d1dbbd0b7d0633b8f816d0wikitranswiki

为了了解 Gasket 发出的出站 DNS 查询,研究人员分析了 Chashell 的服务器以确定它如何处理入站 DNS 查询并了解服务器如何构建其响应。 Chashell C2 服务器会将子域提升为 C2 的完全限定域名(来自上面的 transnet[.]wiki),并将子域标签连接在一起,而不会删除句点。然后服务器使用 XSalsa20 和 Poly1305 解密结果数据,其中的明文被视为序列化的 protobuf 消息。所有使用基于 Chashell 的 DNS 隧道 C2 通道的 Gasket 样本都使用唯一密钥 37c3cb07b37d43721b3a8171959d2dff11ff904b048a334012239be9c7b87f63 来解密传输的数据。

根据 Chashell 的 GitHub,chacomm.proto 文件描述了服务器将用于解析 Gasket 接收到的解密数据的 protobuf 消息结构以及它将如何构建其响应。消息的结构包括 clientguid 字段,它是受感染主机唯一的 GUID,以及 ChunkStart、ChunkData、PollQuery 或 InfoPacket 数据包类型。每种数据包类型的结构各不相同,但下表描述了每种数据包类型的用途:

4.png

Chashell 不同数据包类型的描述

C2 将使用 TXT 答案中的十六进制格式数据响应这些查询,这是一个序列化的 protobuf,它使用来自 Chashell 的 chacomm.proto 文件的相同消息结构。以下示例显示了 DNS 请求和响应以及通过 DNS 隧道 C2 通道将数据从 Chashell 服务器发送到 Gasket 有效载荷所需的消息内容:

5.png

Chashell 的 DNS 请求和响应流程示例

不幸的是,Gasket 不会将通过 Chashell 服务器提供的主机名数据作为命令运行,因为 Gasket 使用子协议和命令处理程序来确定如何处理服务器的响应,研究人员将在下一节中讨论。除了 Chashell 的 DNS 隧道协议之外,Gasket 还为其 DNS 请求使用子协议,该协议在消息类型之前加上加密数据以通知 C2 消息类型。这表明攻击者已经修改了 Chashell 服务器代码以支持这个修改后的通信渠道。以下消息类型可用:

6.png

Chashell 不同数据包类型的描述

如前所述,许多 Gasket 版本还具有基于 HTTP 的备份 C2 通道,如果 DNS 隧道通道中使用的域无法访问,它将使用该通道。载荷将直接向 IP 地址发出 HTTP 请求,这不需要任何 DNS 请求来操作。为了支持这个备份通道,有效载荷包括一个 IP 地址列表,它已经硬编码成四个两字节的二进制格式,有效载荷通过从每个两字节中减去 10 进行解码,并使用结果来创建点表示法 IP 地址。例如,二进制中的字节 37 00 9D 00 EF 00 27 00 将产生一个 0x37、0x9d、0xef 和 0x27 的列表,其中每个都减去 10 以产生 0x2d、0x93、0xe5 和 0x1d,结果是在 45、147、229 和 29 中,然后这些值用"."连接起来。字符使点符号 IP 为 45.147.229[.]29。

通过 HTTP C2 通道发送的初始信标涉及对 URL /cert/trust 的 POST 请求。 POST 请求使用默认的 Go-http-client/1.1 用户代理,并包含如下所示的加密数据

7.png

Gasket 初始信标通信示例

HTTP POST 请求中的数据使用滚动 XOR 算法加密,使用字符串 dick 作为密钥。指向/cert/trust的初始信标内的数据包含一个硬编码版本号021,一个系统的唯一标识符(MD5哈希或base64编码字符串),计算机名和用户名以///分隔,如下所示:

021///15c50b724a801417ef4143bb58b7178b///< computer name >///< user name >

在初始信标之后,Gasket 向 /time/sync 的 URL 发送补充请求,以从攻击者那里获取命令,如下所示:

8.png

Gasket补充请求示例

这些对 /time/sync 的后续请求使用相同的 XOR 算法和密钥,结果数据仅包含前两个字段,具体来说是:

021////15c50b724a801417ef4143bb58b7178b

对于具有远程日志记录功能的版本,Gasket 将 HTTP POST 请求发送到 /cert/dist 的 URL,如下所示:

9.png

示例 Gasket 远程日志记录请求

上面看到的远程日志请求使用与其他 HTTP 请求相同的 XOR 算法和密钥,数据的结构与发送的信息略有不同,包括版本号、系统的唯一标识符以及最终发送到服务器的消息,如以下示例中的远程错误日志所示:

002///< base64 username+computername >///[Control]:无法停止 Windows 保护系统:未知操作停止

功能

来自C2服务器的响应将提供///带分隔符的数据,该数据包含一个整数,有效载荷将其视为命令,以及命令的其他参数。下表提供了大多数和最新 (021) Gasket版本中的可用命令列表。

10.png

Gasket版本 021 中可用的命令

根据上表中的命令,Gasket 似乎不仅作为后门服务于攻击者,而且还提供隧道能力,允许攻击者使用 Gasket 作为将流量隧道传输到外部控制服务器的手段。在创建隧道时,Gasket 在其调试日志中引用了“magicSocks”,这似乎是使用“chisel”项目的隧道方法。研究人员有证据表明,该攻击者拥有此隧道工具的独立版本,研究人员将其称为 MagicSocks,并将在下一节中讨论。

Gasket的演变

研究人员在本博客的前几节中提到了几个版本的 Gasket,但研究人员只特别提到了 001 和 021。这两个版本号标志着已知的最旧和最新版本的 Gasket,研究人员在 2020 年 4 月到 2021 年 3 月期间首次看到该版本。表 4 提供了 Gasket 样本列表、它们各自的版本号和研究人员关联的第一个时间戳与样本。

11.1.png

11.2.png

已知的Gasket样本及其各自的版本

研究人员提取了 Gasket 样本用于基于 HTTP 和基于 DNS 的通道的 C2 位置以进行分析。表 5 中的硬编码域和 IP 地址并不是 Gasket 版本独有的,因为在具有不同版本号的 Gasket 样本中使用了多个域和 IP。

12.1.png

12.2.png

12.3.png

C2 域和 IP 地址及其相关的Gasket版本

如前所述,研究人员分析了攻击者使用的许多 Gasket 后门和 MagicSocks 版本,并收集了大量相关基础设施用于阻止和跟踪目的。下图中的 Maltego 图表有助于可视化上表中列出的 Gasket 示例、它们的版本和用于 C2 通信的相关基础设施。下图大致显示了两个主要集群,左侧显示更新的版本(012 到 021),右侧显示 012 之前的版本。

下图中显示的实体之间的绝大多数链接都与基础设施相关,即在研究人员的 WildFire 沙箱分析期间各个样本连接到或可以连接到的域名和 IP 地址,基于提取的 C2 配置信息。

13.png

Maltego 图显示了 Gasket 和 MicroSocks 基础设施和链接

一些不同集群之间的链接是有限的,通常涉及 C2 重用。但是,使用示例元数据(例如前面列出的常见 Windows 服务名称)可以提供一些额外的链接。

使用热图(如下图所示),研究人员能够进一步可视化所有 Gasket 样本中主要 C2 地址的重用和重叠量。一般而言,该表显示,早期版本的Gasket重用C2解决了相同版本的多个变体和使用较新的Gasket版本的不同变体的问题。热图显示,较晚的版本(大约从008开始)在版本内和跨版本中减少了主C2地址的重用,而在最新的版本中,主C2地址似乎没有被重用。

14.png

热图显示了针对主要 C2 的Gasket样本计数和版本

此模式的异常值是上面图8中的第9、11和12行。第9行和第11行与图7中右上方的集群相关,而第12行与右下方的集群相关。它们是异常值,因为Gasket版本相对较旧,但它们的C2重用不存在。此外,图7中从包括第9行和第11行中列出的c2在内的集群到Gasket映射的其余部分的链接仅仅是因为它们是已知的Gasket示例,并且它们与来自其他集群的其他示例共享相同的Windows Service名称。研究人员认为这些异常值可能是由于特定的活动涉及Gasket恶意软件与定制的攻击基础设施。

研究人员在早期版本的Gasket中看到了对基础架构的重复使用,以及对感染期间创建的Windows服务名称的几处更改。然而,最新的 Gasket 版本似乎采用了更多的一次性和短期基础设施,(至少对于他们的主要 C2)使用一致的 Windows 服务名称,即 JavaJDBC。

上图还通过公共IP地址89.44.9[.]229突出了Gasket和MagicSocks工具之间的重叠区域,同时也托管了Gasket (SHA256: aa2faf0f41cc1710caf736f9c966bf82528a97631e94c7a5d23eadcbe0a2b586),MagicSocks样本(SHA256:d49a69be32744e0af32ad622aa22ba480d68253287c99f5a888feb9f2409e46f)和一些与MagicSocks相关的PowerShell组件。从其他 MagicSocks 示例中提取的 PowerShell 脚本哈希值和其他 C2 地址在后面的 IOC 部分中列出。

MagicSocks

Gasket 工具引用了称为 MagicSocks 的代理和隧道功能,该功能基于开源 Chisel 项目。攻击者 们还创建了一个独立版本的 MagicSocks,除了 Gasket 之外,他们还将使用该版本。独立的 MagicSocks 工具以动态链接库 (DLL) 形式出现,该攻击者也是用 Golang 编写的。 MagicSocks 的开发人员使用来自 Chisel 项目的代码将流量从本地系统传输到外部攻击者控制的 Chisel 服务器。该工具将构建字符串R:0.0.0.0:50000:socks,它将提供给Chisel客户端代码,该代码将生成以下JSON,客户端使用它作为配置:

1.png

该工具还构建了一个字符串,表示外部攻击者控制的 Chisel 服务器,该服务器托管在:http://creatordampfe[.]xyz:443

运行 MagicSocks 工具时,MagicSocks 使用 Chisel 客户端连接到位于 creatordampfe[.]xyz 的 Chisel 服务器。这从一个 HTTP 请求和响应开始,如下所示:

15.png

MagicSocks 初始请求和响应示例

使用 Chisel 的目的是将流量从本地系统传送到creatordampfe[.]xyz,它充当出站流量真实位置的代理。不幸的是,研究人员无法访问位于 creatordampfe[.]xyz 的 Chisel 服务器来确定流量的最终目的地,这突出了MagicSocks提供给攻击者的隐藏功能。

研究人员发现了另外五个 MagicSocks 独立样本,全部在 2021 年 2 月至 2021 年 4 月期间编译。研究人员从五个样本中的每一个中提取了远程 Chisel 服务器的位置,并找到了以下三个唯一的 C2 位置:

104.168.164[.]195

172.96.189[.]86

142.79.237[.]163

这些样本也用 Gobfuscate 进行了混淆,但早期编译的样本是在以下位置编译的,这表明它们是由名为 solar 的用户在 Linux 系统上创建的:

/home/solar/c/go/magic-dll/src/sokos/

研究人员发现的其中一个MagicSocks独立样本是由另一个文件名为run64.exe的工具提供并执行的(SHA256: f2dcad28330f500354eb37f33783af2bcc22d205e9c3805fed5e919c6853649c)。这个工具只是运行MagicSocks DLL (timex.dll),具体地通过运行以下rundll32命令调用Debug导出函数:

C:\Windows\System32\rundll32.exe

研究人员相信此示例与 MagicSocks 示例是同一个人创建的,因为 Go 项目的源位于以下具有相同solar用户名的文件夹中:

/home/solar/c/go/exec-dll/src/

研究人员发现了 2020 年 9 月的另一个 MagicSocks 样本(SHA256:d49a69be32744e0af32ad622aa22ba480d68253287c99f5a888feb9f2409e46f),它没有被 Gobfuscate 混淆。此样本托管在 89.44.9[.]229/info.txt,这与托管 Gasket 样本的 IP 相同(SHA256:aa2faf0f41cc1710caf736f9c966bf82528a97631e94c7a5d23eadcbe0a2b5)。这个版本的 MagicSocks 使用了一个 socks5 库来创建一个远程服务器的代理,特别是 23.227.206[.]158:443。 89.44.9[.]229 IP 托管了其他感兴趣的文件。

本文翻译自:https://unit42.paloaltonetworks.com/gasket-and-magicsocks-tools-install-mespinoza-ransomware/如若转载,请注明原文地址


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