go 中的代码漏洞检查

前言

不知道大家在开发 go 项目中有没有遇到过一些第三方包或者官方包中出现漏洞的问题,这些漏洞可能会影响到代码的功能、性能或者安全性。

现在针对这一问题,go 团队提供了 govulncheck 工具,帮助开发者快速地发现和修复这些漏洞。

什么是 govulncheck

govulncheckgo 官方提供的一个二进制工具,用于检查 go 代码或二进制文件是否存在已知的安全漏洞。

原理

go 安全团队和社区成员共同维护了一个漏洞库 govulndb,收集了从 2018 年推出 go modulego 相关的漏洞信息。

govulncheck 首先会找出代码中使用的模块和包的版本信息,然后通过接口调用漏洞库的最新数据,最后进行数据对比,将受影响的包或模块列举输出。

上图是 go 官博 提供的系统架构图

  1. 漏洞采集。go 安全团队会从多种渠道采集漏洞数据,如公开的漏洞数据库 National Vulnerability Database(NVD) 和 GitHub Advisory Database、社区反馈的 https://go.dev/s/vulndb-report-new(咱们也可以通过这里将在自己发现的漏洞上报)和 go 团队自己修复过的安全漏洞等。
  2. 更新 go 漏洞数据库。搜集到安全漏洞后,go 安全团队会作出评估,若是需要处理的会直接进入漏洞数据库。
  3. 工具集成。对于新的漏洞处理后,会相应更新 pkg.go.dev 上的漏洞说明、发布新的 govulncheck 工具。

基本使用

安装使用相对来说比较简单。

通过命令行下载最新版本的工具

shell 复制代码
go install golang.org/x/vulndb/cmd/govulncheck@latest

然后在需要检查的目录下执行

复制代码
govulncheck ./...

执行后输出结果如下,会给出漏洞信息以及如何修复的建议。

一些局限

  • 扫描二进制文件的安全漏洞时,要求该二进制文件必须是使用 go 1.18 或者更高版本编译的,不支持对低版本编译的二进制文件进行安全漏洞扫描。
  • 不能够展示 go 二进制文件里扫描出来的安全漏洞的调用图(call graph),这是因为 go 二进制文件并不包含详细的调用链信息。对于二进制文件里的代码也可能发生误报。
  • 只会报告 govulncheck 当前执行的 go 编译环境和配置(GOOS/GOARCH)下的漏洞。例:漏洞只在 linux 下存在,但是开发环境是 windows 的跨平台开发,那就可能导致开发环境下不能检测出该漏洞。
  • 假设 go 1.18 标准库里才有的漏洞,如果当前执行 govulncheck 所在的编译环境的 go 版本是 1.19,那也不会报告该漏洞。

详情可见:官博

总结

govulncheckgo 官方提供的一个漏洞检查工具。go 团队从多处采集漏洞并存入自己的漏洞库,然后通过 govulncheck 工具对代码或二进制文件进行漏洞扫描。

很棒的一款工具,建议在日常的开发流程中(CI/CD,代码审查等)引入漏洞检查,能够帮助我们通过 go 来构建高质量、高安全性的程序。

参考

相关推荐
脆皮炸鸡755几秒前
库制作与原理~动态链接
linux·开发语言·经验分享·笔记·学习方法
XMYX-02 分钟前
26 - Go recover 捕获错误:优雅恢复的真正意义
开发语言·golang
小白学大数据2 分钟前
基于大模型的Python智能爬虫:语义识别与数据清洗实践
开发语言·爬虫·python·数据分析
迷渡21 分钟前
聊一聊 Bun 用 Rust 重写这件事
开发语言·后端·rust
古怪今人30 分钟前
Gradle构建工具 Groovy/Kotlin DSL的现代化自动化构建工具
开发语言·kotlin·自动化
赏金术士31 分钟前
Kotlin 协程与挂起函数(Coroutines & suspend)入门到实战
android·开发语言·kotlin
y = xⁿ1 小时前
Java并发八股学习日记
java·开发语言·学习
xifangge20251 小时前
【深度排障】从 OS 底层寻址剖析 javac 不是内部或外部命令 核心报错:变量空间隔离与自动化部署终极范式
java·开发语言·jdk·自动化
肖恩想要年薪百万1 小时前
JSP中常用JSTL标签
java·开发语言·状态模式
l1t1 小时前
在aarch64机器上安装clang来生成codonjit python模块
开发语言·python