pard0p/Remote-BOF-Runner

GitHub: pard0p/Remote-BOF-Runner

基于 Havoc C2 的远程 BOF 执行框架,通过进程隔离和 PIC loader 实现 .NET 程序集的隐蔽加载执行。

Stars: 91 | Forks: 5

# 远程 BOF Runner 一个用于远程执行 Beacon Object Files (BOFs) 的 Havoc 扩展框架,使用 Crystal Palace 制作的 PIC loader 实现。 ## 概述 Remote BOF Runner 通过利用 Crystal Palace PIC loader,实现在任意进程中安全执行 BOF。该框架通过命名管道 (named pipes) 实现了复杂的进程间通信 (IPC) 机制,以便将注入进程中的 beacon 输出透明地转发回命令与控制 (C2) 服务器。 ## 设置与安装 ### 扩展安装 确保扩展已安装在 Havoc 扩展目录中: ``` YOUR_HAVOC_FOLDER + /data/extensions/ ``` ### 依赖项 要编译 PIC loader,您的系统必须安装以下工具和库: - **MinGW-w64**: Windows 目标的交叉编译器 - **Make**: 构建自动化工具 - **OpenJDK 11**: Java Development Kit(Crystal Palace 编译所需) - **Zip**: 压缩实用程序 有关详细的设置说明,请参阅 [WSL 设置指南](https://tradecraftgarden.org/wslsetup.html)。 #### 安装命令 ``` sudo apt-get update sudo apt-get install mingw-w64 sudo apt-get install make sudo apt-get install openjdk-11-jdk sudo apt-get install zip ``` ## 架构 ### 组件 #### 1. BOF Injector BOF 组件负责: - 创建并挂起一个虚拟进程。 - 将 Crystal Palace loader + 目标 BOF 注入到虚拟进程中。 - 建立用于输出通信的 IPC 通道(命名管道)。 - 接收并聚合来自远程 BOF 执行的输出。 #### 2. PIC Loader (Crystal Palace) PIC loader 包含: - **Crystal Palace Loader**: 处理内存分配、BSS 节管理和安全执行上下文初始化。 - **Remote BOF Payload**: 实际要执行的 BOF 代码(whoami、ipconfig、cacls、reg-query 等)。 - **Argument Marshalling**: 通过 loader 传递的序列化参数,用于远程 BOF 执行。 ### 执行流程 ``` ┌───────────────────────────────────────────────────────────────────┐ │ 1. Beacon Process (Havoc) │ │ ├─ Execute BOF Injector │ │ ├─ Create dummy process (suspended) │ │ ├─ Inject PIC Loader + Remote BOF │ │ └─ Create IPC named pipe │ └────────────┬──────────────────────────────────────────────────────┘ │ ▼ ┌───────────────────────────────────────────────────────────────────┐ │ 2. PIC Loader Execution │ │ ├─ Crystal Palace loader │ │ ├─ Performs BSS section allocation │ │ ├─ Initializes UI context (for .NET compatibility) │ │ └─ Hooks beacon functions (BeaconPrintf, BeaconOutput, etc.) │ └────────────┬──────────────────────────────────────────────────────┘ │ ▼ ┌───────────────────────────────────────────────────────────────────┐ │ 3. Remote BOF Execution │ │ ├─ Execute target BOF (whoami, ipconfig, etc.) │ │ ├─ BOF calls hooked beacon functions │ │ ├─ Hooked functions redirect output to IPC pipe │ │ └─ Output accumulates in beacon process via pipe │ └────────────┬──────────────────────────────────────────────────────┘ │ ▼ ┌───────────────────────────────────────────────────────────────────┐ │ 4. Output Collection & Transmission │ │ ├─ Beacon waits for remote process termination │ │ ├─ Accumulates all output from IPC pipe │ │ ├─ Aggregates fragmented messages (8KB buffer) │ │ ├─ Filters protocol delimiters (@START@, @END@) │ │ └─ Transmits consolidated output to Team Server │ └───────────────────────────────────────────────────────────────────┘ ``` ## 主要特性 ### 1. 进程隔离 - BOF 执行发生在独立的隔离进程中。 - 最大限度地减少对 beacon 进程稳定性的影响。 - 允许在任意进程上下文中执行。 ### 2. IPC 输出转发 - 基于命名管道的通信通道。 - 远程 BOF 的透明输出重定向。 - 消息分片处理(8KB 累积缓冲区)。 - 协议分隔符过滤。 ### 3. .NET 进程执行 主要用例是在原生 .NET 进程中执行 BOF: **为何在 Beacon 中直接加载 CLR 有风险:** 在 beacon 进程中直接加载 .NET assemblies 本质上是不安全且可检测的: - beacon 进程(通常是原生二进制文件,如 cmd.exe 或 rundll32.exe)通常不会启动 CLR。 - 当 CLR 被加载到非 .NET 进程时,会立即触发 EDR/XDR 警报。 **一种可能的解决方案:原生 .NET 进程注入:** 与其将 CLR 加载到 beacon 中,不如将我们的 inline-execute-assembly BOF 注入并执行到一个已经是 .NET 原生的进程中: ``` // ❌ DETECTABLE: Direct execution in beacon beacon.exe (native) → load ClrCreateInstance → load .NET assembly → EDR ALERT // ✅ STEALTHY: Execution in native .NET process dotnet.exe (native .NET) → inject BOF → inline-execute-assembly → execute .NET assembly in already-CLR context → normal behavior ``` 这种方法利用了这样一个事实:在 .NET 进程内执行 .NET 与正常的应用程序行为无法区分。 ### 4. Crystal Palace 集成 - 位置无关的代码执行。 - 通过基于哈希的函数查找进行动态 API 解析。 - 无导入地址表依赖。 - 适用于深度注入场景。 ## 执行模式 ### 本地执行 ``` remote-bof-runner whoami remote-bof-runner ipconfig remote-bof-runner cacls C:\Windows\System32 ``` ### 远程主机执行 ``` remote-bof-runner reg-query DC01 HKLM SYSTEM\CurrentControlSet ``` ### 注册表查询 ``` remote-bof-runner reg-query HKLM SYSTEM\CurrentControlSet\Control\Lsa remote-bof-runner reg-query HKLM SYSTEM\CurrentControlSet\Control\Lsa RunAsPPL ``` ### .NET Assembly 执行 ``` remote-bof-runner execute-assembly --dotnetassembly "/Payloads/Rubeus.exe" --assemblyargs "triage" ``` **示例输出:** ![execute-assembly](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/d03058d2d6140255.png) ## 可用的 BOF - **whoami** - 显示当前用户和组信息。 - **ipconfig** - 显示网络适配器配置。 - **cacls** - 列出文件权限。 - **reg-query** - 查询 Windows 注册表。 - **execute-assembly** - 将 .NET assembly 加载到实际进程中。 - **bof** - 执行自定义 BOF 二进制文件。 ## 操作安全考量 ⚠️ **重要**:本项目是一个 **概念验证 (Proof-of-Concept)**,默认情况下**不**优先考虑 OPSEC。 ### 建议的修改 BOF Injector 和 PIC Loader 都需要进行大量加固才能用于对手模拟: #### BOF Injector 加固 - 实施自定义进程创建方法(而非 CreateProcessW)。 - 使用标准 WriteProcessMemory 之外的替代注入技术。 - 混淆 IPC 管道命名(随机化标识符)。 #### PIC Loader 加固 - 加密通信协议(管道消息)。 - 实施针对已知签名的 YARA 规则规避。 - 添加规避进程钩子的方法(间接系统调用、脱钩方法等)。 - 添加加密方法以存储目标 BOF + Args。 ## 参考 - [Crystal Palace](https://tradecraftgarden.org/) - [LibIPC](https://github.com/pard0p/LibIPC) - Crystal Palace 共享库,用于基于命名管道的进程间通信。 - [PatchlessInlineExecute-Assembly](https://github.com/VoldeSec/PatchlessInlineExecute-Assembly) - BOF InlineExecute-Assembly,用于在进程中加载 .NET assembly,但利用硬件断点实现无补丁的 AMSI 和 ETW 绑过。 - [CS-Situational-Awareness-BOF](https://github.com/trustedsec/CS-Situational-Awareness-BOF) - 使用 Beacon Object Files 实现的态势感知命令。 ## 免责声明 本工具仅供教育和授权安全测试目的使用。未经授权访问计算机系统是非法的。用户有责任确保遵守所有适用法律和法规。
标签:Beacon Object Files, BOF, C2框架, Crystal Palace, EDR绕过, Havoc, IPC, MinGW, PIC Loader, SSH蜜罐, UML, 中高交互蜜罐, 位置无关代码, 命名管道, 安全学习资源, 客户端加密, 恶意软件开发, 数据展示, 欺骗防御, 红队, 跨进程通信, 进程注入, 远程执行, 高交互蜜罐