不知道大家在开发 go
项目中有没有遇到过一些第三方包或者官方包中出现漏洞的问题,这些漏洞可能会影响到代码的功能、性能或者安全性。
现在针对这一问题,go
团队提供了 govulncheck
工具,帮助开发者快速地发现和修复这些漏洞。
govulncheck
是 go
官方提供的一个二进制工具,用于检查 go
代码或二进制文件是否存在已知的安全漏洞。
go
安全团队和社区成员共同维护了一个漏洞库 govulndb,收集了从 2018
年推出 go module
后 go
相关的漏洞信息。
govulncheck
首先会找出代码中使用的模块和包的版本信息,然后通过接口调用漏洞库的最新数据,最后进行数据对比,将受影响的包或模块列举输出。
上图是 go
官博 提供的系统架构图
go
安全团队会从多种渠道采集漏洞数据,如公开的漏洞数据库 National Vulnerability Database
(NVD
) 和 GitHub Advisory Database
、社区反馈的 https://go.dev/s/vulndb-report-new(咱们也可以通过这里将在自己发现的漏洞上报)和 go
团队自己修复过的安全漏洞等。go
漏洞数据库。搜集到安全漏洞后,go
安全团队会作出评估,若是需要处理的会直接进入漏洞数据库。govulncheck
工具。安装使用相对来说比较简单。
通过命令行下载最新版本的工具
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
,那也不会报告该漏洞。详情可见:官博 。
govulncheck
是 go
官方提供的一个漏洞检查工具。go
团队从多处采集漏洞并存入自己的漏洞库,然后通过 govulncheck
工具对代码或二进制文件进行漏洞扫描。
很棒的一款工具,建议在日常的开发流程中(CI/CD
,代码审查等)引入漏洞检查,能够帮助我们通过 go
来构建高质量、高安全性的程序。