Goffloader - 内存中 COFFLoader(和 PE 加载器)的纯 Go 实现

admin 2024年9月22日15:33:43评论78 views字数 1382阅读4分36秒阅读模式

Goffloader - 内存中 COFFLoader(和 PE 加载器)的纯 Go 实现

安全公司 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.exevar helloBytes []bytefunc main() {  output, _ := pe.RunExecutable(helloBytes, []string{"Arg1", "Arg2", "Arg3"})  fmt.Println(output)}

文件夹中可以找到运行BOF或PE 文件的完整示例cmd。运行 PE 文件的功能是通过No-Consolation BOF启用的,执行示例可在此处查看

为什么?

鉴于已经有许多非常出色的 C 实现此功能,为什么要在 Go 中这样做?

  1. 向 Go 添加 BOF 加载功能扩大了 Go 安全工具中可使用的开源安全项目的数量。现在,Go 工具可以通过此库访问所有有用的功能 存储库。

  2. 虽然从技术上来说你可以使用 COFF 加载器的 C 实现(例如,Sliver 就是这样做的),但是 CGO 很烦人。

  3. Go 是一种很好的静态签名规避语言。您可以看到一个示例,我们能够运行嵌入版本的 mimikatz,而无需经历太多麻烦。

  4. 我们的开源违规和攻击模拟测试是用 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 实现

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年9月22日15:33:43
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Goffloader - 内存中 COFFLoader(和 PE 加载器)的纯 Go 实现https://cn-sec.com/archives/3133938.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息