
这是一个概念验证的用户自定义反射加载器(UDRL),旨在重现、集成并增强 Cobalt Strike 的规避功能!
| 贡献者 | 主要贡献 | |
|---|---|---|
| Bobby Cooke | @0xBoku | 项目原作者与维护者 |
| Santiago Pecin | @s4ntiago_p | 反射加载器重大增强 |
| Chris Spehn | @ConsciousHacker | Aggressor 脚本编写 |
| Joshua Magri | @passthehashbrwn | IAT 挂钩 |
| Dylan Tran | @d_tranman | 反射调用栈欺骗 |
| James Yeung | @5cript1diot | 间接系统调用 |
内置的 Cobalt Strike 反射加载器非常健壮,能够处理 Cobalt Strike 所提供的所有 Malleable PE 规避功能。使用自定义 UDRL 的主要缺点是,Malleable PE 规避功能可能无法开箱即用地得到支持。
BokuLoader 公开项目的目标是帮助红队创建自己的内部 Cobalt Strike UDRL。该项目旨在支持所有有价值的 CS Malleable PE 规避功能。部分规避功能利用 CS 集成实现,部分已完全重新实现,还有一些则不受支持。
在以任何形式使用本项目之前,你应当充分测试规避功能是否按预期工作。在 C 代码与 Aggressor 脚本之间,使用不同版本的操作系统、编译器以及 Java 进行编译可能会产生不同的结果。
NtProtectVirtualMemory 完成obfuscate "true"。0x1000 字节将为空。XGetProcAddress 解析符号
Kernel32.GetProcAddressxLoadLibrary 解析 DLL 的基址并加载 DLL
TEB->PEB->PEB_LDR_DATA->InMemoryOrderModuleList 获取 DLL 基址Kernel32.LoadLibraryA| 命令 | 选项 | 是否支持 |
|---|---|---|
allocator | HeapAlloc、MapViewOfFile、VirtualAlloc | 全部通过 BokuLoader 实现支持 |
module_x64 | 字符串(DLL 名称) | 通过 BokuLoader 实现支持。与 CS 实现相同的 DLL 踩踏要求适用 |
obfuscate | true/false | HTTP/S beacon 已通过 BokuLoader 实现支持。目前 SMB/TCP 不支持 obfuscate true。详情见 issue。如果你能修复,欢迎提供帮助 :) |
entry_point | 十进制数字形式的 RVA | 通过 BokuLoader 实现支持 |
cleanup | true | 通过 CS 集成支持 |
userwx | true/false | 通过 BokuLoader 实现支持 |
sleep_mask | (true/false) 或 (Sleepmask Kit+true) | 支持。使用默认的 "sleepmask true"(不使用 sleepmask kit)时,设置 "userwx true"。使用支持 RX beacon.text 内存(src47/Ekko)的 sleepmask kit 时,设置 "sleepmask true" 且 "userwx false"。 |
magic_mz_x64 | 4 字符字符串 | 通过 CS 集成支持 |
magic_pe | 2 字符字符串 | 通过 CS 集成支持 |
transform-x64 prepend | 转义十六进制字符串 | BokuLoader.cna Aggressor 脚本修改 |
transform-x64 strrep | 字符串 字符串 | BokuLoader.cna Aggressor 脚本修改 |
stomppe | true/false | 不支持。BokuLoader 不会复制 beacon DLL 的头部。虚拟 beacon DLL 的前 0x1000 字节为 0x00 |
checksum | 数字 | 实验性。BokuLoader.cna Aggressor 脚本修改 |
compile_time | 日期时间字符串 | 实验性。BokuLoader.cna Aggressor 脚本修改 |
image_size_x64 | 十进制值 | 不支持 |
name | 字符串 | 实验性。BokuLoader.cna Aggressor 脚本修改 |
rich_header | 转义十六进制字符串 | 实验性。BokuLoader.cna Aggressor 脚本修改 |
stringw | 字符串 | 不支持 |
string | 字符串 | 不支持 |
make 编译 BokuLoader 目标文件BokuLoader.cna Aggressor 脚本Script Console 确认 BokuLoader 已集成到 beacon 构建中RAW beacon 开箱即用。当使用 Artifact Kit 作为 beacon 加载器时,stagesize 变量必须大于默认值。
| 原始 Cobalt Strike 字符串 | BokuLoader 的 Cobalt Strike 字符串 |
|---|---|
| ReflectiveLoader | BokuLoader |
| Microsoft Base Cryptographic Provider v1.0 | 12367321236742382543232341241261363163151d |
| (admin) | (tomin) |
| beacon | bacons |
Kernel32.LoadLibraryExA 将 DLL 从磁盘映射到内存Kernel32.LoadLibraryExA 的第 3 个参数是 DONT_RESOLVE_DLL_REFERENCES (0x00000001)
RX 或 RWX 内存。Kernel32.CreateFileMappingA 和 Kernel32.MapViewOfFile 为虚拟 beacon DLL 分配内存。NtAllocateVirtualMemory、NtProtectVirtualMemoryntdll.dll 中设置用户态挂钩无法检测到这些系统调用。mov eax, r11d; mov r11, r10; mov r10, rcx; jmp r11 汇编指令。0x1000 字节为零。