绕过 YARA 规则 | 自定义可扩展 C2进行EDR规避 | xxx绕过 YARA 规则 | 自定义可扩展 C2进行EDR规避 – xxx
菜单

绕过 YARA 规则 | 自定义可扩展 C2进行EDR规避

十月 29, 2023 - FreeBuf

什么是自定义可扩展 C2

Malleable C2 是 Cobalt Strike 的一项功能, 意为 “可定制的” 的 C2 服务器。Malleable C2 允许通过修改c2配置文件,改变 Beacon 与 C2 通信时的流量特征与行为,伪造正常的通信的流量,实现一些 IDS 入侵检测防火墙的绕过。在 (https://github.com/xx0hcd/Malleable-C2-Profiles/) 中找到的配置文件用作参考配置文件。

profile的基本组成

绕过 YARA 规则 | 自定义可扩展 C2进行EDR规避现有的配置文件足以绕过大多数防病毒产品以及EDR解决方案;但是,可以进行更多改进,以使其成为OPSEC安全的配置文件并绕过一些最流行的YARA规则。

让我们开始进行规避

内存扫描绕过

最新版本的Cobalt Strike使操作员可以轻松绕过BeaconEyeHunt-Sleeping-Beacons等内存扫描仪。以下选项将使此绕过成为可能:

set sleep_mask "true";

通过启用此选项, Cobalt Strike 将在休眠之前对其信标的堆和内存部分进行 XOR 操作, 在信标的内存中不会留下任何未受保护的字符串或数据.因此,上述任何工具都不会进行检测。

绕过 YARA 规则 | 自定义可扩展 C2进行EDR规避

绕过 YARA 规则 | 自定义可扩展 C2进行EDR规避

虽然它绕过了内存扫描仪,交叉引用了内存区域,但我们发现它直接将我们引导到内存中的信标有效载荷。

绕过 YARA 规则 | 自定义可扩展 C2进行EDR规避

这表明,由于信标是 API 调用的发起位置,一旦函数完成,执行将返回到那里。引用内存地址而不是导出的函数是一个危险信号。自动工具和手动分析都可以检测到这一点。WaitForSingleObjectEx

强烈建议使用项目工具包启用“堆栈欺骗”,以防止此类 IOC。即使此选项不是可延展轮廓的一部分,也值得启用此选项。必须通过将第五个参数设置为 true 来启用欺骗机制:

绕过 YARA 规则 | 自定义可扩展 C2进行EDR规避在编译过程中,将生成CNA文件,该文件必须在cobaltstrike中导入。导入后,更改将应用于新生成的有效负载。让我们再次分析信标:

绕过 YARA 规则 | 自定义可扩展 C2进行EDR规避

差异非常明显。线程堆栈是欺骗性的,不会留下内存地址引用的痕迹。

还应该提到的是,Cobalt Strike 在 2021 年为武器库套件添加了堆栈欺骗。但是,发现调用堆栈欺骗仅适用于使用工件工具包创建的exe / dll工件,而不适用于通过注入线程中的shellcode注入的信标。因此,它们不太可能有效地掩盖内存中的信标。

绕过静态特征

是时候测试信标对静态签名扫描程序的性能了.启用以下功能将删除存储在信标堆中的大部分字符串:

set obfuscate "true";

将配置文件应用于Cobalt Strike后,生成原始shellcode并将其放入Shellcode加载器的代码中。编译 EXE 后,我们分析了存储字符串的差异:

绕过 YARA 规则 | 自定义可扩展 C2进行EDR规避

原始有效负载(右)和分析有效负载(左)之间的字符串差异

绕过 YARA 规则 | 自定义可扩展 C2进行EDR规避原始有效负载(右)和分析有效负载(左)之间的字符串差异

在许多测试用例中,我们意识到即使信标使用大量自定义配置文件(包括)。使用 ThreadCheck,我们意识到字符串被标识为“坏字节”:obfuscatemsvcrt这确实是在 Beacon 的堆中找到的字符串。混淆选项不会完全删除每个可能的字符串:

绕过 YARA 规则 | 自定义可扩展 C2进行EDR规避因此,让我们稍微修改一下我们的配置文件以删除此类可疑字符串:

strrep "msvcrt.dll" ""; strrep "C:\Windows\System32\msvcrt.dll " "";

这并没有多大帮助,因为字符串仍然在堆中找到。我们可能需要采取不同的方法来解决这个问题。

使用Clang++来解决上述问题

由于每个编译器都有其独特的优化策略和特性,使用不同的编译器可以生成具有不同特征的可执行文
件。这种独特性可能使得这些文件更难以被安全检测系统识别,从而实现绕过检测
例如,Clang++提供了多种优化标志,可以帮助减小编译后代码的大小,而GCC(G++)则以其高性能优化
能力而闻名,Clang下载地址:https://github.com/mstorsjo/llvm-mingw/releases。
以下是在MingW中编译和在Clang++中编译的beacon对比图,可以发现Clang++编译的beacon明显字符
串少了许多

绕过 YARA 规则 | 自定义可扩展 C2进行EDR规避再次使用ThreatCheck检测Clang++编译的beacon,没有检测到字符串msvcrt.dll

绕过 YARA 规则 | 自定义可扩展 C2进行EDR规避删除堆中的字符串

尽管我们在Profile文件中启用了obfuscate功能,但是仍然能够在Beacon堆中检测到大量的字符串

绕过 YARA 规则 | 自定义可扩展 C2进行EDR规避因此我们需对Profle文件进行一些修改,添加以下选项删除上图所见的所有字符串

transform-x64 {     prepend "x90x90x90x90x90x90x90x90x90"; # prepend nops     strrep "This program cannot be run in DOS mo

本文作者:, 转载请注明来自FreeBuf.COM

# 渗透测试 # 绕过杀软 # 红队攻防 # EDR绕过 # shellcode免杀

Notice: Undefined variable: canUpdate in /var/www/html/wordpress/wp-content/plugins/wp-autopost-pro/wp-autopost-function.php on line 51