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分析, 日志审计, 端点可见性