Go的全新漏洞检测工具govulncheck来了
前言
Go安全团队在2022.09.06发布了全新的漏洞检测工具govulncheck
,可以帮助我们发现Go程序里的安全漏洞。
本文详细介绍该工具目前的现状以及接下来的功能规划。
Go漏洞检测系统架构
上图是Go安全团队对于Go代码漏洞检测的系统架构图。
- 第1步,漏洞采集。Go安全团队会采集众多漏洞数据库,包括公开的漏洞数据库(例如National Vulnerability Database (NVD)和 GitHub Advisory Database)、社区反馈的Go package漏洞以及Go团队修复过的安全漏洞等。
- 第2步:更新Go的漏洞数据库。对于第1步里收集到的安全漏洞,Go安全团队会出具评估报告,对报告的漏洞做评审,如果确认是需要处理的会进入到Go的漏洞数据库里。这些漏洞存储的按照 Open Source Vulnerability (OSV) format 格式进行存储,并且可以通过API获取到。
- 第3步:工具集成。对于新的漏洞处理后,会相应更新 pkg.go.dev 上的漏洞说明以及发布漏洞检测工具 govulncheck的新版本。
govulncheck
可以分析扫描你的代码仓库,只展示那些真正影响到你程序执行的漏洞。govulncheck
工具非常可靠,很少误报,可以帮助你快速发现一些已知的安全漏洞。
Go漏洞数据库
Go安全团队维护了一个漏洞数据库,地址是https://vuln.go.dev,也就是上面第2步所说的漏洞数据库。
- 如果你发现了新漏洞,可以通过这个安全漏洞链接报告漏洞。
- 如果你认为已有的漏洞报告描述有问题,可以在这个链接进行反馈。
Go的漏洞数据库里包含的漏洞,可以在这个链接地址pkg.go.dev/vuln进行查看。
govulncheck
全新的govulncheck 命令可以帮助你发现代码里的安全漏洞。
安装和使用方法如下:
$ go install golang.org/x/vuln/cmd/govulncheck@latest
$ govulncheck ./...
govulncheck
是一个独立的工具,可能会频繁更新和迭代。Go安全团队对于govulncheck
的长期计划是把该工具集成到Go的发布版本里。
备注:
golang.org/x
下所有package的源码独立于Go源码的主干分支,也不在Go的二进制安装包里。如果需要使用golang.org/x
下的package,可以使用go get
来安装。govulncheck
工具就属于这种情况。golang.org/x/exp
下的所有package都属于实验性质或者被废弃的package,不建议使用。
golang.org/x/vuln这个仓库里包含有3个主要模块:
- vulncheck 包。为了方便把
govulncheck
的漏洞检测功能集成给其它工具或服务,vulncheck 里把govulncheck
的功能进行了封装,在vulncheck
这个package里提供了相应的Go函数,可以被直接调用。 govulncheck
命令。是命令行工具,对vulncheck
包里漏洞检测功能做了封装。- client包。该package封装了一个用于和Go漏洞数据库交互的client。
集成
为了方便Go开发者更早和更好地了解到漏洞信息,Go团队把漏洞检测也集成到了Go的工具链和服务里。
例如,大家可以在package.go.dev
网站的版本漏洞页面查看到golang.org/text
这个package各个版本的安全漏洞情况。
Go的VS Code扩展插件对于govulncheck
的支持也很快就可以发布。
总结
-
详细的
govulncheck
命令使用说明参考:官方文档。 -
目前
govulncheck
也有一些局限性,比如:- 扫描二进制文件的安全漏洞时,要求该二进制文件必须是使用Go 1.18或者更高版本编译的,不支持对低版本编译的二进制文件进行安全漏洞扫描。
-
对于函数指针和接口(interface)调用的分析比较保守,在某些情况下可能导致误报漏洞。
-
govulncheck
不能够展示Go二进制文件里扫描出来的安全漏洞的调用图(call graph),这是因为Go二进制文件并不包含详细的调用链信息。对于二进制文件里的代码也可能发生误报。 -
只会报告
govulncheck
当前执行的Go编译环境和配置(GOOS/GOARCH)下的漏洞。例如,- 假设一个漏洞如果只在Linux下才有,那在Windows下执行
govulncheck
的时候就不会报告该漏洞。对于跨平台开发的项目,比如Windows下开发,实际部署在Linux上,那就可能导致开发环境下不能检测出漏洞。 - 假设Go 1.18标准库里才有的漏洞,如果当前执行
govulncheck
所在的编译环境的Go版本是1.19,那也不会报告该漏洞。
- 假设一个漏洞如果只在Linux下才有,那在Windows下执行
更多关于govulncheck
的限制,可以参考govulncheck limitations。
开源地址
文章和示例代码开源在GitHub: Go语言初级、中级和高级教程。
公众号:coding进阶。
个人网站:Jincheng’s Blog。
知乎:无忌。
References
- https://go.dev/blog/vuln
- https://go.dev/security/vuln/
- https://go.dev/security/vuln/database
- https://pkg.go.dev/golang.org/x/vuln/cmd/govulncheck
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgfhkhc
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01