freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

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

绕过 YARA 规则 | 自定义可扩展 C2进行EDR规避
a'ゞ403Forbidden 2023-10-24 16:36:54 211361

什么是自定义可扩展 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使操作员可以轻松绕过BeaconEyeHunt-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,我们意识到字符串被标识为“坏字节”:obfuscatemsvcrt这确实是在 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
可试读前30%内容
¥ 50 全文查看
9.9元开通FVIP会员
畅读付费文章
最低0.3元/天
# 渗透测试 # 绕过杀软 # 红队攻防 # EDR绕过 # shellcode免杀
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 a'ゞ403Forbidden 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
a'ゞ403Forbidden LV.2
这家伙太懒了,还未填写个人描述!
  • 4 文章数
  • 2 关注者
恶意软件攻击技术大揭秘——直接系统调用
2023-10-27
带你深入了解YARA
2023-10-25
攻防演练 | 详细分析某红队钓鱼样本
2023-10-24
文章目录