深入了解DoubleFeature的Post-Exploitation(上)
2021-12-31 11:55:0 Author: www.4hou.com(查看原文) 阅读量:21 收藏

01.png

今年早些时候,Check Point Research发表了一篇关于“Jian” 的文章。在这篇文章中,我们介绍了DanderSpritz框架。

DanderSpritz是什么?

DanderSpritz是Equation Group使用的一个功能齐全的开发后框架。这个框架通常是在利用设备并部署了PeddleCheap之后使用的。DanderSpritz是非常模块化的,包含各种各样的工具,用于持久性、侦察、横向移动、绕过防病毒引擎和其他此类可疑活动的各种工具。DanderSpritz 结构和执行流程

“Lost in Translation” 泄漏的目录树中,可以发现DanderSpritz逻辑被分为两部分:

1.png

dderspritz的核心功能包含在文件DszLpCore.exe中,该文件可以在windows/bin中找到。框架的插件和复杂组件,包括我们稍后将详细讨论的DoubleFeature,可以在windows/resources中找到。fuzzbunch、implants 和 windows 下的其他目录包含独立于 DanderSpritz 的模块,用于利用自身、控制受害者系统、初始数据收集等。

DanderSpritz 中的基本逻辑单元就是我们所说的“插件”,驻留在windows/resources中,大约有十几个,它们有一个非常特定的目录结构。

windows\\resources 下还有一些其他目录,它们不是插件,而是包含各种辅助脚本。

2.png

Aliases和Commands:它们都包含声明支持““aliases” 和“commands”的 XML 文件,它们分别提供类似的功能。当 DanderSpritz 框架的用户发出一个 shell 命令,DanderSpritz 将遍历每个插件,检查这些 XML 并验证他们是否声明支持用户输入的 shell 命令。如果命令出现在 Aliases 下,它将被简单地映射到现有脚本;命令通常会在幕后以某种方式调用插件的内部逻辑。这实际上意味着 DanderSpritz 的用户可以运行许多不同的 shell 命令来实现不同的结果。在 Commands(但不是 Aliases )下,除了 XML 之外,还有一个 XSL 文件,它指定返回给 DanderSpritz 用户的命令输出的格式。

Modules :大部分插件逻辑都包含在这个目录中。从名称可以看出,该逻辑被进一步划分为更小的功能“模块”。 descriptions子目录包含一个 XML 文件,它是一种“manifest”。它详细说明了应该在受害者设备和“LP”(“Listening Post”,攻击者控制的远程监控受害者的设备)上运行哪些脚本和二进制文件。它还列出了插件对其他模块的依赖、它的接口数据、它支持的计算架构以及它应该在受害设备上还是在 LP 上运行。一些插件还包含具有类似功能的有效载荷目录。

PyLp:包含 XML 文件,用于格式化从受害者设备中泄露的传入信息。对于每种“消息类型”(一种泄露的信息),XML 指定一个 Python 脚本,用于格式化数据以方便显示。此格式化脚本位于 PyScripts 目录中。

PyScripts:框架使用的所有杂项 Python 脚本都在此目录中。

Scripts:这个目录还包含杂项脚本,这些脚本是用一些重印记的脚本语言编写的,在 Python 崛起之前,这些脚本语言似乎可以合理使用。

Tools:开发者认为他们宁愿按原样包含和调用的自包含材料(PE、DLL、脚本、JAR、文本文件等)。

Uploads :由插件推送到受害者系统的独立二进制文件。

Version :包含一个包含插件版本的 XML 文件。

下面我们详细介绍调用插件Aliases或Commands时的典型控制流程。

DanderSpritz 用户在 DanderSpritz 用户界面中输入一个 shell 命令,该命令在幕后使用该特定插件实现。

3.webp.jpg

DanderSpritz 的用户界面及其 shell 命令

1.DanderSpritz 的主要逻辑遍历resources目录,一个接一个地查看插件目录。对于每个插件目录,DanderSpritz 查看 aliases 子目录和 commands 子目录,并仔细检查其中的 XML 文件,寻找与 shell 命令匹配的声明的导出功能。找到匹配项,并且匹配的 XML 元素指定插件的 pyscripts 目录中的路径。

2.DanderSpritz 计算调用脚本的完全限定路径(通过将匹配的 XML 元素中指定的路径附加到插件的 pyscripts 目录的路径)并执行该文件。这是显示调用的shell命令的用户界面的位置,插件可以说是正常运行的。

3.现在,攻击者可以随时盯着他们调用的工具的 UI。最终,他们可能希望通过此 UI 调用某些功能。根据选择的功能,Python UI 构造一个远程进程调用。它将此 RPC 发送到受害设备上的 DanderSpritz 组件。受害者端的这个组件然后执行调用并返回结果。这样,RPC 就被用作 LP 上的组件访问的 API,以在受害设备上执行操作(例如收集屏幕截图或录制语音)。此 API 与这些操作在受害组件端实际实现的方式分离。

4.RPC 返回攻击者所需的宝贵信息,Python UI 在插件的 PyLP 目录中查询与结果的消息类型匹配的 XML。这个 XML 指定了如何在 LP 端显示返回的信息,UI 也是如此。

4.png

特定命令的 XML 文件(LP 和 Target)示例

DoubleFeature

为了更好地理解上述结构和流程,我们将研究重点放在了 DanderSpritz 的一个名为 Doublefeature(简称 Df)的组件上。根据它自己的内部文档,这个插件“生成关于可以部署在目标上的工具类型的日志和报告”;许多框架工具,在它们自己的内部文档中,声称DoubleFeature是唯一的方法来确认他们在一个被破坏的系统上的存在。经过一段时间的停顿,我们认为至少这意味着 DoubleFeature 可以用作一种 Rosetta Stone,以更好地理解 DanderSpritz 模块和受其影响的系统。

5.webp.jpg

strangeland.py 的代码指的是确认的唯一方法是使用 DF

不幸的是,由于 DoubleFeature 作为日志模块的独特功能,它收集了大量各种类型的数据。 RPC 返回值和 XSL 标记不适合在这种规模上传输和显示信息。

6.webp.jpg

DoubleFeature 主菜单

DoubleFeature PyScripts目录包含Python的UI界面(doublefeature.py),但是当攻击者从 UI 菜单中选择一个选项时,在幕后,脚本会变成一个“模板”DLL,DoubleFeatureDll.dll.unfinalized ,位于插件的上传目录中。 Python 调用插件工具目录中的外部工具 AddResource.exe ,将资源植入已编译的 DLL,使用新名称:DoubleFeatureDll.dll.configured。确切的命令运行是:

*local run -redirect  command " cmpf 6 1104  "*"

命令使用的标志解释如下。

c (compressed) ——Zlib 压缩数据;

m (munge) = 通过与伪随机字节异或来混淆资源。字节是通过运行 PRNG(32 位 LCG)并使用执行时间戳作为种子生成的;为了允许恢复,种子被添加到混淆的资源中;

p (place) = 将资源放入homebrew资源目录;

f (finalize) =私有资源目录;

6 = 资源类型(此时,枚举值 6 转换为 RT_STRING,一个字符串表条目);

1104 = 资源名称。

在主插件 DLL ** 被赋予这个新资源后,Python UI 使用 DanderSpritz dllload shell 命令将其加载到受害设备上:

dllload -ordinal 1 -library

一旦受害者端的 DLL 完成运行并将报告写入受害者设备上的日志文件,Python UI 就会使用以下 DanderSpritz shell 命令将日志文件提取回攻击者设备:

foreground get  -name DFReport

虽然DanderSpritz 命令的大部分输出是根据 XSL 规范查看的,但 DoubleFeature 的输出太大且变化太多,因此这种方法不可行。相反,攻击者通常使用为此目的编写的专门程序——DoubleFeatureReader.exe,查看日志文件,该程序可以在插件的工具目录中找到。

DoubleFeature 将其所有日志数据写入名为 ~yh56816.tmp 的调试日志文件吗,此日志文件使用 AES 算法加密。除非用户手动更改密钥,否则使用的默认密钥是 badc0deb33ff00d。

DoubleFeature 的主 DLL

当修复的 DLL ( DoubleFeatureDll.dll.configured ) 首次加载到受害设备上时,它会在自制软件资源目录中查找名为“106”的资源。该目录位于实际代码之后的“.text”部分,DLL 能够通过搜索不同的魔法值来找到它。 homebrew 资源目录具有以下结构:

7.png

这个资源(与之前通过调用AddResource.exe移植到DLL的资源不同)在静止状态下是加密的,为了使用它,必须对它进行解密和解压缩。

8.png

资源 106 解压缩后,是一个名为 hidsvc.sys 的驱动程序。它通过调用 CVE-2017-0005 的 EpMe 漏洞加载到内核中。加载驱动程序后,DLL 开始使用 DeviceIoControl 与其通信。驱动程序支持的最有趣的 IOControlCode 是 0x85892408,它允许用户模式代码通过简单地指定功能名称和参数来直接调用内核功能。驱动程序希望使用此代码的传入消息与以下结构捆绑在一起:

9.png

在接收到这个结构体后,驱动程序遍历 ntoskernl.exe 的每个导出函数,计算结果校验和并将结果与提供的 export_func_hash 进行比较。一旦找到匹配项,驱动程序就会得出结论,它已找到正确的函数。这是混淆 API 调用的标准方法,在许多其他恶意软件中都可以看到。

校验和计算逻辑如下所示:

10.png

一些校验和值示例:

11.png

这还不是唯一的困难,DoubleFeature 中使用的字符串是解密的,这本身就是非常标准的,但按需对每个函数进行解密,一旦函数执行完成,它们就会重新加密,这比平常更令人沮丧,DoubleFeature 还支持其他混淆方法,例如简单的替换密码:

12.png

以及一个基于简单自制线性PRNG的流密码:

13.png

如上所述,凭借其函数,DoubleFeature 是与Equation Group工具相关的唯一知识来源。毕竟,整个日志记录模块依赖于在受害系统上查询这些工具并验证哪些工具存在的能力。下面我们列出了日志模块探测到的一些工具,其中一些是未知的。

除了在 DLL 的执行流程中使用的资源 106 和 1104 外,主 DLL 的homebrew资源目录还包含以下资源:

资源 1004:UnitedRake 重新启动 DLL。

资源 1005:UnitedRake 关闭 DLL。

资源 1006:StraitBiZarre 重新启动 DLL。

资源 200:与 BCD 分区数据进行比较的已知引导管理器的哈希值。

资源 1007:升级 KillSuit 模块 DLL,在代码中可以找到对它的引用,但在目录中不再物理找到它。可能它存在于 DLL 的早期版本中,后来被删除了。

DoubleFeature 监控的插件

UnitedRake

UnitedRake (UR) 是一种远程访问工具,可用于针对 Windows 设备。它是一个可扩展的模块化框架,提供了大量执行不同信息收集功能的插件。

UnitedRake 指标如下:

1.MSNDSRV.sys:内核模式阶段 0 和 rootkit。实现用于过滤网络流量的 NDIS 驱动程序。直到 UR 4.0 版。

2.ATMDKDRV.sys :网络嗅探器/修复程序。从 UR 4.1 版开始。

3. “Software\Classes\CLSID\{091FD378-422D-A36E-8487-83B57ADD2109}\TypeLib” or “\Registry\Machine\SOFTWARE\Classes\CLSID\{091FD378-422D-A36E-8487-83B57ADD2209}\TypeLib”: 包含 UR 的 GUID,特殊项注册表项

4. “\Registry\Machine\System\CurrentControlSet\Control\Session Manager\MemSubSys\{95FFB832-8B00-6E10-444B-DC67CAE0118A-F6D58114}”: KillSuit记录与注册表相关的数据。

5. “Global\64322D88-0CEA-4ce0-8562-67345B70C655” :在 TipOff 命令中创建的文件映射。

6. “*Global\*6F27089A-3482-4109-8F5B-CB3143A1AB9A” 和“*Global\*667FBF02-F406-4C0A-BA65-893747A0D372” :在 UR 关闭时创建的事件。

7.{A0CCDC61-7623-A425-7002-DB81F353945F-5A8ECFAD}: UnitedRake 3/4 配置数据和传输信息 CLSID;

8.{30F3976F-90F0-B438-D324-07E031C7507E-981BE0DD}:UnitedRake 插件信息 CLSID;

9.{95FFB832-8B00-6E10-444B-DC67CAE0118A-F6D58114}:UnitedRake 记录数据 CLSID;

10.{01C482BA-BD31-4874-A08B-A93EA5BCE511} :UnitedRake 的互斥锁名称。

StraitBizarre

StraitBizarre (SBZ) 是一种用于隐秘数据泄露的植入程序,它通过 FriezeRamp 执行——一种类似于 IPSEC 的自定义网络协议。这是一个跨平台项目,存在支持 Windows、Linux 和移动平台的不同版本(例如 iPhone 的 DROPOUTJEEP,甚至 Windows Mobile 的 TOTEGHOSTLY)。

14.webp.jpg

StraitBizzare 信息

我们在 DoubleFeature 中发现了以下 StraitBizarre 指标:

{1B8C5912-8BE4-11D1-B8D3-F5B42019CAED} :用于GUID,版本和特殊状态项的SBZ CLSID。

本文翻译自:https://research.checkpoint.com/2021/a-deep-dive-into-doublefeature-equation-groups-post-exploitation-dashboard/如若转载,请注明原文地址


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