praetorian-inc/goffloader

GitHub: praetorian-inc/goffloader

一个纯 Go 实现的内存 COFF/PE 加载器库,使 Go 安全工具无需 CGO 即可执行 Cobalt Strike BOF 和未托管 PE 文件。

Stars: 281 | Forks: 48

# Goffloader - 一个纯 Go 实现的内存 COFFLoader(和 PE 加载器) Goffloader 是一个库,允许轻松地在内存中执行 [Cobalt Strike BOFs](https://hstechdocs.helpsystems.com/manuals/cobaltstrike/current/userguide/content/topics/beacon-object-files_main.htm) 和非托管 PE 文件。 # 示例用法 Goffloader 旨在通过使用 `go:embed` 标签,使加载 BOFs 或 PE 文件变得尽可能简单。例如,要运行一个内嵌的可执行文件并显示其控制台输出,代码如下: ``` import "github.com/praetorian-inc/goffloader/src/pe" //go:embed hello.exe var helloBytes []byte func main() { output, _ := pe.RunExecutable(helloBytes, []string{"Arg1", "Arg2", "Arg3"}) fmt.Println(output) } ``` 运行 [BOFs](https://github.com/praetorian-inc/goffloader/blob/main/cmd/bof_example/whois_bof.go) 或 [PE 文件](https://github.com/praetorian-inc/goffloader/blob/main/cmd/pe_example/hello_pe.go) 的完整示例可以在 `cmd` 文件夹中找到。运行 PE 文件的功能是通过 [No-Consolation BOF](https://github.com/fortra/No-Consolation) 启用的,您可以在此处查看执行它的示例[这里](https://github.com/praetorian-inc/goffloader/blob/main/src/pe/pe_windows.go) # 为什么? 鉴于目前已经有许多非常出色的 C 语言实现此功能,为什么还要用 Go 来做呢? 1. 将 BOF 加载功能引入 Go,扩大了可以在 Go 安全工具中使用的开源安全项目的数量。通过这个库,现在 Go 工具可以访问[整个](https://github.com/trustedsec/CS-Situational-Awareness-BOF)[代码库](https://github.com/trustedsec/CS-Remote-OPs-BOF)的有用功能。 2. 虽然从技术上讲,您可以直接使用 C 语言实现的 COFF 加载器(例如,[Sliver 就是这样做的](https://github.com/sliverarmory/COFFLoader)),但 CGO 令人烦恼。 3. Go 是一种非常适合用于静态签名规避的语言。您可以查看[我们运行内嵌版 mimikatz 的示例](https://github.com/praetorian-inc/chariot-client/blob/main/cmd/bas/1e247e041d7f404cbfba1a4c67d62aa4.go),而无需费太大周折。 4. 我们的[开源入侵与攻击模拟](https://github.com/praetorian-inc/chariot-client?tab=readme-ov-file#bas)测试是用 Go 编写的……而我们正需要这个功能。 # 限制 # 致谢 * Ne0nD0g 的 [go-coff 项目](https://github.com/Ne0nd0g/go-coff/tree/dev) * 项目开始时并没有意识到 go-coff 的开发分支实际上已经完善了。Beacon 函数的 Golang 实现是 `lighthouse` 代码的基础,同时还借鉴了使用 windows.NewCallback 来避免 CGO 的想法。 * TrustedSec 的 [COFFLoader 博客文章](https://trustedsec.com/blog/coffloader-building-your-own-in-memory-loader-or-how-to-run-bofs) * OtterHacker 非常出色的 [COFFLoader 博客文章](https://otterhacker.github.io/Malware/CoffLoader.html) * Fortra 的 [No-Consolation BOF](https://github.com/fortra/No-Consolation) * [(现已归档的) Go pecoff 库](https://github.com/RIscRIpt/pecoff) 的开发者们。 * [@parzel](https://github.com/parzel) 找出了 PE 加载器进程输出捕获问题的修复方法。
标签:EVTX分析, 日志审计, 端点可见性