用汇编和C语言编写的Cobalt Strike用户定义的反射加载器,具有高级规避能力
作者:Sec-Labs | 发布时间:
项目地址
https://github.com/boku7/BokuLoader
BokuLoader - Cobalt Strike 反射加载器
Cobalt Strike 用户定义的反射加载器,用 Assembly & C 编写,具有高级规避功能。
贡献者:Bobby Cooke @0xBoku和Santiago Pecin @s4ntiago_p
特征
- Stomp MZ 魔术字节
- Find-Self EggHunter
- 通过 HellsGate 和 HalosGate 的直接 NT 系统调用
- PE 标头混淆
- PE字符串替换
- NOHEADERCOPY - 加载程序不会将标头复制到信标。取消提交通常保存标头的第一个内存页面
- NoRWX - 反射加载器写入具有读写权限的信标,并在解析 Beacons 导入表和重定位后,将 Beacon 的 .TEXT 代码部分更改为读取和执行权限
- 用于解析符号的 XGetProcAddress
- 100k UDRL 大小
- 用于字符串混淆的凯撒密码
- 前置 ASM 指令
项目起源
- 基于 Stephen Fewer 令人难以置信的 Reflective Loader 项目:
- 最初是在学习来自Sektor7 恶意软件开发人员中级 (MDI) 课程的 Renz0h 的反射 DLL 视频时创建的
用法
- 编译 BokuLoader 对象文件
make - 启动你的 Cobalt Strike Team 服务器
- 在 Cobalt Strike 中,导入
BokuLoader.cnaAggressor 脚本 - 生成 x64 信标(攻击 -> 程序包 -> Windows 可执行文件 (S))
- 使用脚本控制台确保在信标构建中实现了 BokuLoader
- 不支持 x86 选项。x86 bin 是原始的 Reflective Loader 目标文件。
- 生成
RAW信标开箱即用。将 Artifact Kit 用于信标加载程序时,stagesize变量必须大于默认值。- 有关更多信息,请参阅Cobalt Strike 用户定义的反射加载器文档
检测指导
- BokuLoader 不支持 Cobalt Strike
sleep_mask选项。- 这是由于支持的
userwx false设置硬编码到 BokuLoader 中。 - 由于内存部分是
RW或RX,这将导致在尝试写入.text信标部分时睡眠加密失败。 - 分析信标进程内存将揭示 Cobalt Strike 共有的字符串。
- 这是由于支持的
- BokuLoader 将一些经常检测到的字符串更改为新的硬编码值。这些字符串可用于对 BokuLoader 进行签名:
| 原始 Cobalt Strike 琴弦 | BokuLoader Cobalt Strike 弦 |
|---|---|
| ReflectiveLoader | djoiqnfkjlnslfmn |
| Microsoft Base Cryptographic Provider v1.0 | 12367321236742382543232341241261363163151d |
| (admin) | (tomin) |
| beacon | beacon |
- BokuLoader 调用以下 NT 系统调用来设置加载的可执行信标内存:
NtAllocateVirtualMemory,,NtProtectVirtualMemoryNtFreeVirtualMemory- 这些是直接从 BokuLoader 可执行内存调用的。这些系统调用不受 NTDLL 内存支持。
- 设置 userland 挂钩
ntdll.dll将不会检测到这些系统调用。 - 可以使用内核驱动程序注册内核回调来监视上述系统调用,并在它们未被调用时检测它们的使用情况
ntdll.dll。 - BokuLoader 本身将
mov eax, r11d; syscall; ret在其可执行内存中包含汇编指令。
- 将信标加载到新内存位置的原始信标内存将保留在内存中。
- 这个原始内存将包含混淆的信标 DLL 标头和信标本身。
- 可执行信标内存将不包含信标 DLL 标头。
- 扫描内存以检测这些重复的内存区域是可能的。
- 加载的信标内存被硬编码为
Private: Commit内存区域,并且是292KB.- 原始信标内存会更大,因为它还包含
0x1000字节信标 DLL 头,用于将信标 DLL 加载到内存中。 - 内存部分将以
+0x1000偏移量加载。这是由于内存的前 0x1000 个字节在 BokuLoader 中被释放。
- 原始信标内存会更大,因为它还包含
- BokuLoader 源代码在存储库中提供,可用于创建内存签名。
- 如果您有其他检测指南,请随时通过提交拉取请求来做出贡献。
贡献/参考
反射加载器
- https://github.com/stephenfewer/ReflectiveDLLInjection
- 如果您对 Reflective DLL 感兴趣,请查看这些视频:
HalosGate 系统调用程序
- 来自 @SEKTOR7net 的 Reenz0h
- 查看 Reenz0h 的精彩课程和博客!
- 我参加过的最好的恶意软件开发课程。
- 光环门技术的创造者。他的工作最初是这项工作的动力。
- Sektor7 HalosGate 博客
HalosGate SysCaller
- @smelly__vx & @am0nsec(地狱之门技术的创造者/发行者)
- 没有他们我不可能实现 HellsGate :)
- 这种方法很棒,我自己也很喜欢。谢谢!
- https://github.com/am0nsec/HellsGate
- HalosGate论文的链接:https://vxug.fakedoma.in/papers/VXUG/Exclusive/HellsGate.pdf
Cobalt Strike 用户定义的反射加载器
学习英特尔 ASM 的好资源
ETW 和 AMSI 旁路
- @mariuszbit - 在反射加载器中实现绕过的好主意!
- @ XPN隐藏你的 .NET – ETW
- ajpc500/转炉
- 进攻性安全 OSEP
使用 GCC 在 C 代码中实现 ASM
- https://outflank.nl/blog/2020/12/26/direct-syscalls-in-beacon-object-files/
- https://www.cs.uaf.edu/2011/fall/cs301/lecture/10_12_asm_c.html
- http://gcc.gnu.org/onlinedocs/gcc-4.0.2/gcc/Extended-Asm.html#Extended-Asm
Cobalt Strike C2 配置文件生成器
标签:工具分享, 免杀工具