0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
什么是自定义可扩展 C2
Malleable C2 是 Cobalt Strike 的一项功能, 意为 "可定制的" 的 C2 服务器。Malleable C2 允许通过修改c2配置文件,改变 Beacon 与 C2 通信时的流量特征与行为,伪造正常的通信的流量,实现一些 IDS 入侵检测防火墙的绕过。在 (https://github.com/xx0hcd/Malleable-C2-Profiles/) 中找到的配置文件用作参考配置文件。
profile的基本组成
现有的配置文件足以绕过大多数防病毒产品以及EDR解决方案;但是,可以进行更多改进,以使其成为OPSEC安全的配置文件并绕过一些最流行的YARA规则。
让我们开始进行规避
内存扫描绕过
最新版本的Cobalt Strike使操作员可以轻松绕过BeaconEye和Hunt-Sleeping-Beacons等内存扫描仪。以下选项将使此绕过成为可能:
set sleep_mask "true";
通过启用此选项, Cobalt Strike 将在休眠之前对其信标的堆和内存部分进行 XOR 操作, 在信标的内存中不会留下任何未受保护的字符串或数据.因此,上述任何工具都不会进行检测。
虽然它绕过了内存扫描仪,交叉引用了内存区域,但我们发现它直接将我们引导到内存中的信标有效载荷。
这表明,由于信标是 API 调用的发起位置,一旦函数完成,执行将返回到那里。引用内存地址而不是导出的函数是一个危险信号。自动工具和手动分析都可以检测到这一点。WaitForSingleObjectEx
强烈建议使用项目工具包启用“堆栈欺骗”,以防止此类 IOC。即使此选项不是可延展轮廓的一部分,也值得启用此选项。必须通过将第五个参数设置为 true 来启用欺骗机制:
在编译过程中,将生成CNA文件,该文件必须在cobaltstrike中导入。导入后,更改将应用于新生成的有效负载。让我们再次分析信标:
差异非常明显。线程堆栈是欺骗性的,不会留下内存地址引用的痕迹。
还应该提到的是,Cobalt Strike 在 2021 年为武器库套件添加了堆栈欺骗。但是,发现调用堆栈欺骗仅适用于使用工件工具包创建的exe / dll工件,而不适用于通过注入线程中的shellcode注入的信标。因此,它们不太可能有效地掩盖内存中的信标。
绕过静态特征
是时候测试信标对静态签名扫描程序的性能了.启用以下功能将删除存储在信标堆中的大部分字符串:
set obfuscate "true";
将配置文件应用于Cobalt Strike后,生成原始shellcode并将其放入Shellcode加载器的代码中。编译 EXE 后,我们分析了存储字符串的差异:
原始有效负载(右)和分析有效负载(左)之间的字符串差异
原始有效负载(右)和分析有效负载(左)之间的字符串差异
在许多测试用例中,我们意识到即使信标使用大量自定义配置文件(包括)。使用 ThreadCheck,我们意识到字符串被标识为“坏字节”:obfuscate
msvcrt
这确实是在 Beacon 的堆中找到的字符串。混淆选项不会完全删除每个可能的字符串:
因此,让我们稍微修改一下我们的配置文件以删除此类可疑字符串:
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明显字符
串少了许多
再次使用ThreatCheck检测Clang++编译的beacon,没有检测到字符串msvcrt.dll
删除堆中的字符串
尽管我们在Profile文件中启用了obfuscate功能,但是仍然能够在Beacon堆中检测到大量的字符串
因此我们需对Profle文件进行一些修改,添加以下选项删除上图所见的所有字符串
transform-x64 { prepend "\x90\x90\x90\x90\x90\x90\x90\x90\x90"; # prepend nops strrep "This program cannot be run in DOS mo
畅读付费文章
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)