安全公司 Praetorian发布了GoffLoader,这是一种旨在简化 BOF 文件和非托管 Cobalt Strike PE 文件直接在内存中执行的工具,而无需将任何文件写入磁盘。
GoffLoader 是一款完全用 Go 实现的 COFF 和 PE 加载器,它使安全专业人员能够直接在内存中执行 BOF(Beacon 对象文件)和非托管 Cobalt Strike PE 文件。这种方法无需将文件写入磁盘,使其成为绕过传统安全防御的有力工具。
通过将 C/C++ 功能无缝集成到基于 Go 的工具中,GoffLoader 开启了广泛的安全功能。这种简化的方法消除了使用 CGO(Go 的 C 语言绑定)的复杂性,同时提供了对丰富的安全代码库的访问。
能够在内存中加载和执行代码而不在磁盘上留下痕迹,这在绕过静态签名检测方面具有显著优势。开发人员已成功演示了此功能,方法是运行著名的凭据收集工具 Mimikatz 的嵌入式版本,而无需诉诸复杂的规避技术。
GoffLoader 的用户友好设计使其易于与现有 Go 项目集成。go:embed 指令允许无缝加载 BOF 或 PE 文件,GitHub 存储库中提供的示例为其使用提供了清晰的指导。
示例用法
Goffloader 旨在通过使用标签尽可能简单地加载 BOF 或 PE 文件go:embed。例如,要运行嵌入式可执行文件并显示其控制台输出,代码如下:
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)
}
文件夹中可以找到运行BOF或PE 文件的完整示例cmd。运行 PE 文件的功能是通过No-Consolation BOF启用的,执行示例可在此处查看
为什么?
鉴于已经有许多非常出色的 C 实现此功能,为什么要在 Go 中这样做?
-
向 Go 添加 BOF 加载功能扩大了 Go 安全工具中可使用的开源安全项目的数量。现在,Go 工具可以通过此库访问所有有用的功能 存储库。
-
虽然从技术上来说你可以使用 COFF 加载器的 C 实现(例如,Sliver 就是这样做的),但是 CGO 很烦人。
-
Go 是一种很好的静态签名规避语言。您可以看到一个示例,我们能够运行嵌入版本的 mimikatz,而无需经历太多麻烦。
-
我们的开源违规和攻击模拟测试是用 Go 编写的......我们想要这个功能。
限制
-
目前,COFFLoader 实现仅适用于 x64 架构。32 位支持即将推出。
-
目前,PE 执行只是使用硬编码参数加载 BOF - 最终将支持几种不同的方法。
-
APIBeacon*实现是部分的 - 大多数 BOF 除了参数解析 + 输出函数之外没有太多用处,但仍有一部分beacon.h需要实现。这将在确定依赖于这些 API 的有用 BOF 后完成。
-
在当前状态下使用此库不会在 VT 上生成 0/N 检测文件。目前,它从常见的违规者 false+ mills 中生成 2 或 3 个检测,但用户应该注意这一点。
https://github.com/praetorian-inc/goffloader
原文始发于微信公众号(Ots安全):Goffloader - 内存中 COFFLoader(和 PE 加载器)的纯 Go 实现
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论