Go fuzzing 缺少了一半的工具集。我们分叉了工具链来... 笔记

Go fuzzing 缺少了一半的工具集。我们分叉了工具链来修复它。

Go 的原生模糊测试缺乏 Rust、C 和 C++ 生态系统中存在的先进功能,无法检测整数溢出和 goroutine 泄漏等常见漏洞。为应对这些局限性,开发了 gosentry,这是一个面向模糊测试的 Go 工具链分支。Gosentry 集成了 LibAFL,实现了原生结构体模糊测试、基于语法的模糊测试(通过 Nautilus),并能够检测此前被遗漏的漏洞类别。它保留了标准的 testing.F 工作流,允许现有的 Go 模糊测试 harness 配合新的命令行标志使用。Gosentry 通过结构感知的模糊测试提升输入质量,处理结构体、切片和指针等复合类型。它还支持基于语法的模糊测试,其中 Nautilus 生成并变异符合语法的输入,以应对 JSON 等复杂结构。该工具能够识别 Go 原生模糊器会遗漏的各种不良行为,包括整数溢出、数据竞争、goroutine 泄漏和执行超时。通过捕获模糊测试回调并将其交由基于 Rust 的 LibAFL 运行器执行,gosentry 改进了模糊测试引擎、调度机制和检测器。该项目已在 Optimism 和 Revm 等项目中发现了使用原生 Go 模糊测试难以发现的重大漏洞。该项目在 GitHub 上开源,并提供了其所有功能的完整文档。