https://www.netspi.com/blog/technical-blog/adversary-simulation/the-future-of-beacon-object-files/
https://github.com/NetSPI/BOF-PE
摘要
本文讨论了 Beacon 对象文件 (BOF) 的未来设计,提出了一种新的 BOF 可移植可执行 (PE) 参考设计,以解决当前开发中的限制和问题。新设计旨在提高代码的可维护性、灵活性,并支持现代 C++ 功能,同时保持与 C2 平台的集成。
关键点
- 自 Cobalt Strike 4.1 推出以来,BOF 支持已成为现代 C2 平台的核心功能,但其设计缺陷逐渐显现。
- 提议的新 BOF PE 设计支持 C++20 功能,能够独立运行或在 C2 环境中运行,解决了符号解析问题并简化了代码维护。
- 与传统的内存 PE 加载器不同,BOF PE 能直接利用 Beacon API,无需额外的输出捕获或参数处理。
- BOF PE 通过信标库实现兼容层,支持独立执行和 C2 环境下的执行。
- 新设计允许通过 BeaconInvokeStandalone API 调用独立执行功能,支持复杂参数的定义和打包。
- BOF PE 完全支持 SEH/C++ 异常,解决了传统 BOF 缺乏异常支持的问题。
- 设计中通过动态链接库的反转函数表机制,增强了异常处理的兼容性,特别是对 x86 和 x64 架构的支持。
- 新设计支持标准 Windows API 导入格式,简化了 API 的使用。
- BOF PE 允许代码模块化和重用,支持多个编译单元和预编译静态库,从而提升开发效率。
- 相较于传统 COFF 文件,BOF PE 提供了更简单的加载器设计,避免了未解析符号问题。
- 提供了三种参考示例 PE 文件,展示了不同的功能和文件大小,以满足不同开发需求。
- 参考设计包含一个概念验证加载器,为 C2 框架实现 BOF PE 支持提供了起点。