MysterySnail APT组织利用Windows最新0 day漏洞
2021-11-23 12:45:00 Author: www.4hou.com(查看原文) 阅读量:89 收藏

0x01 背景描述

2021 年  9 月初,我们发现有攻击者在多个 Microsoft Windows 服务器上使用特权提升漏洞进行网络攻击。该漏洞有许多和CVE-2016-3309相同的调试字符串,但仔细分析显示,这是一个0 day漏洞。我们发现,样本在 Win32k 驱动程序中利用了未知漏洞,漏洞利用使用了泄漏内核模块基地址技术。微软给此Win32k 内核驱动程序中的UAF漏洞分配了CVE-2021-40449编号 ,并作为 10 月补丁星期二的一部分,于 2021 年 10 月 12 日发布了补丁版本。

https://github.com/siberas/CVE-2016-3309_Reloaded/
https://msrc.microsoft.com/update-guide/vulnerability/CVE-2021-40449

除了在野外发现此0 day漏洞,我们还分析了此0 day漏洞一起使用的恶意软件载荷,并发现在对 IT 公司、国防承包商和外交实体的广泛间谍活动中发现了恶意软件的变体。

我们将这一系列活动称之为"MysterySnail"。

0x02 特权提升漏洞利用

已发现的漏洞利用工具支持以下 Windows 产品:

Microsoft Windows Vista

Microsoft Windows 7

Microsoft Windows 8

Microsoft Windows 8.1

Microsoft Windows Server 2008

Microsoft Windows Server 2008 R2

Microsoft Windows Server 2012

Microsoft Windows Server 2012 R2

Microsoft Windows 10 (build 14393)

Microsoft Windows Server 2016 (build 14393)

Microsoft Windows 10 (build 17763)

Microsoft Windows Server 2019 (build 17763)

CVE-2021-40449 是 Win32k NtGdiResetDC 函数中的UAF漏洞。与许多其他 Win32k 漏洞一样,此漏洞的根本原因是能够设置用户模式回调并在执行这些回调时执行恶意的 API 函数。当ResetDC 函数在执行其回调,第二次执行相同的句柄时将触发 CVE-2021-40449。此漏洞的利用过程如下:

1、ResetDC 的用户模式调用执行系统调用 NtGdi ResetDC 及其内部函数GreResetDCInternal。此函数将指向 PDC 对象,然后执行调用函数 hdcOpenDCW。

2、函数 hdcopenDCW 执行用户模式回调,可用于第二次执行相同句柄的重置处理。

3、如果漏洞在回调期间执行ResetDC,则 NtGdi ResetDC和GreResetDCInternal内部将再次执行为同一 DC 执行。

4、如果漏洞利用在第二次调用GreResetDCInternalDC内部时忽略所有回调,此函数将按预期执行。它将创建一个新的 DC 。

5、在回调中,在第二次ResetDC 调用完成后,漏洞利用可以恢复 PDC 对象的释放内存并完成回调执行。

6、执行回调后,函数 hdcOpenDCW 返回到 GreResetDC 内部,但分步检索的指针现在是一个悬空指针, 它指向以前被破坏的 PDC 对象的内存。

7、在 GreResetDC 内部执行的后期阶段,一个畸形的 PDC 对象可用于执行具有受控参数的任意内核函数的调用。

在已发现的漏洞利用中,攻击者能够使用 GDI 调色板对象实现所需的内存状态,并使用单个调用到内核函数来构建用于读取和编写内核的原始存储器。此步骤很容易完成,因此可以使用公开的技术泄漏当前加载的驱动程序/内核模块的内核地址。

0x03 MysterySnail RAT样本

我们深入到MysterySnail RAT家族开始分析一个以前未知的远程shell类型的木马。我们分析的样本是在 2021 年 8 月 10 日上传VT的。样本很大 , 8.29MB。文件大小的原因之一是,它是与 OpenSSL 库静态编译的,包含属于该库的未使用的代码和数据。但其大小的主要原因是存在两个非常大的函数,会消耗CPU处理器的时钟周期。这些函数还使用了随机生成的字符串,这些字符串也存在于二进制文件中。

https://www.virustotal.com/gui/file/b7fb3623e31fb36fc3d3a4d99829e42910cad4da4fa7429a2d99a838e004366e

反分析函数使用的随机字符串

反编译函数使用的随机字符串

我们先假设这两个函数是用于免杀的,随后这一理论得到其他代码逻辑和大量的导出函数的证实,实际工作仅由其中一个函数执行。

img

导出函数的名称,实际业务逻辑是从函数"GetInfo"执行

样本中有两个硬编码网址,以纯文本形式存在 。“www[.]disktest[.]com” 和 “www[.]runblerx[.]com” 。它们被放入类变量中使用,但从未使用:真正的 C2 地址由单字节 xor 解码 - “http[.]ddspadus[.]com” 。

恶意软件枚举"Software\Microsoft\Windows\CurrentVersion\Internet Settings\ProxyServer"注册表密钥下的值,并使用它们请求通过代理服务器进行隧道处理,以防止无法直接连接到 C2。

恶意软件本身不是很复杂,其函数类似于许多其他远程shell程序。有一些特殊功能,如监控插入的磁盘驱动器、代理中转。

命令具有与下面相同格式,所有通信都通过 SSL 加密。

bb44140a283c91cd6dbcb4a02d9a9c7.png

通信命令格式

在收到任何命令之前,恶意软件会收集并发送有关受害者机器的一般信息。此信息包括:

◼计算机名称

◼当前 OEM 代码页、默认标识符

◼Windows 产品名称

◼本地 IP 地址

◼登录用户名

◼活动名称(Campaign name)

一个有趣的事实是,默认情况下,“Campaign name”被设置为"windows"。此名称被覆盖,但它可能表示有为其他平台编译的相同 RAT 版本。

RAT 总共执行 20 个命令,命令描述和命令 ID 在下面的表格中。

c0e2820f9615c789de8e3cbbe90db4f.png

RAT 支持的命令列表

0x04 IOCs

www[.]disktest[.]com www[.]runblerx[.]com http[.]ddspadus[.]com

MD5 e2f2d2832da0facbd716d6ad298073ca SHA1 ecdec44d3ce31532d9831b139ea04bf48cde9090 SHA256 b7fb3623e31fb36fc3d3a4d99829e42910cad4da4fa7429a2d99a838e004366e

本文翻译自:https://securelist.com/mysterysnail-attacks-with-windows-zero-day/104509/如若转载,请注明原文地址


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