Golang程序漏洞检测器govulncheck的安装和使用

 更新时间:2023年09月01日 09:47:04   作者:路多辛  
govulncheck 是一个命令行工具,可以帮助 Golang 开发者快速找到项目代码和依赖的模块中的安全漏洞,该工具可以分析源代码和二进制文件,识别代码中对这些漏洞的任何直接或间接调用,本文就给大家介绍一下govulncheck安装和使用,需要的朋友可以参考下

govulncheck 是什么?

govulncheck 是一个命令行工具,可以帮助 Golang 开发者快速找到项目代码和依赖的模块中的安全漏洞。该工具可以分析源代码和二进制文件,识别代码中对这些漏洞的任何直接或间接调用。

默认情况下,govulncheck 通过 Go 漏洞数据库 https://vuln.go.dev 提供的接口查询相关的模块是否包含漏洞(查询接口的请求只包含模块路径,不包含程序的代码或其他属性)。

安装和使用方法

安装之前需要将 Go 版本升级到1.18及以上,使用如下命令安装最新版本的 govulncheck:

$ go install golang.org/x/vuln/cmd/govulncheck@latest

在项目的主目录(包含 go.mod 文件的目录)执行如下命令进行漏洞扫描:

$ govulncheck ./...

govulncheck 也可以集成到自己的 CI/CD 系统里面,govulncheck 考虑到这方面的需求,所以输出结果可以选择 json 方式,例如:

$ govulncheck -json ./...

如果使用 govulncheck 扫描编译好的二进制文件,需要使用参数 -mode=binary 并跟上二进制文件的路径,例如:

$ govulncheck -mode=binary $HOME/go/bin/my-go-program

默认情况下,项目如果不存在漏洞,govulncheck 将成功退出(状态码为0),如果存在漏洞,则返回非0的状态码。如果提供了 -json 参数,无论检测到多少漏洞,都会成功退出,即状态码为0。

使用 govulncheck 需要注意的点如下:

  • 被扫描的二进制文件要求是使用 Go 1.18 或者更高版本构建的。
  • 对于函数指针和接口调用的分析比较保守,在某些情况下可能会误报或者打印不够准确的堆栈信息。
  • 使用包反射对函数的调用对静态分析来说是不可见的。对于仅通过这些调用方式可访问到的有漏洞的代码也不会报告漏洞,使用 unsafe 包也可能产生误报。
  • 因为 Go 二进制文件不包含详细的调用信息,所以 govulncheck 也无法显示检测到的漏洞的调用链。对于二进制文件中存在的但无法访问到的代码,也可能产生误报。
  • 只会给出当前执行环境和配置(GOOS/GOARCH)下的漏洞。假设一个漏洞只在 Linux中才有,那么在 Windows 则不会报告该漏洞。所以需要注意跨平台开发的情况,需要在不同的平台做漏洞扫描。另外需要注意的一点时,执行扫描的 go 版本需要和运行环境的 go 版本保持一致,假设 Go 1.18 标准库里才有的漏洞,如果执行扫描使用的 Go 版本是1.19,那么也不会报告该漏洞。

到此这篇关于Golang程序漏洞检测利器govulncheck的安装和使用的文章就介绍到这了,更多相关Golang govulncheck安装和使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Golang中使用Date进行日期格式化(沿用Java风格)

    Golang中使用Date进行日期格式化(沿用Java风格)

    这篇文章主要介绍了Golang中使用Date进行日期格式化,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • Go语言中关闭带缓冲区的频道实例分析

    Go语言中关闭带缓冲区的频道实例分析

    这篇文章主要介绍了Go语言中关闭带缓冲区的频道,实例分析了带缓冲区频道的原理与用法,以及关闭带缓冲区频道的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02
  • Go中RPC远程过程调用的实现

    Go中RPC远程过程调用的实现

    本文主要介绍了Go中RPC远程过程调用的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • Golang设计模式之工厂方法模式讲解和代码示例

    Golang设计模式之工厂方法模式讲解和代码示例

    工厂方法是一种创建型设计模式, 解决了在不指定具体类的情况下创建产品对象的问题,本文将通过代码示例详细给大家介绍一下Golang工厂方法模式,感兴趣的同学可以参考一下
    2023-06-06
  • 浅析Go语言中包的介绍与初始化

    浅析Go语言中包的介绍与初始化

    这篇文章主要为大家详细介绍了Go语言中包的介绍与初始化,从而搞清Go程序的执行次序,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起了解下
    2023-10-10
  • Golang实现Java虚拟机之解析class文件详解

    Golang实现Java虚拟机之解析class文件详解

    这篇文章主要为大家详细介绍了Golang实现Java虚拟机之解析class文件的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-01-01
  • Go语言的os包中常用函数初步归纳

    Go语言的os包中常用函数初步归纳

    这篇文章主要介绍了Go语言的os包中常用函数初步归纳,用于一些和系统交互功能的实现,需要的朋友可以参考下
    2015-10-10
  • Go语言中字符串的查找方法小结

    Go语言中字符串的查找方法小结

    这篇文章主要介绍了Go语言中字符串的查找方法小结,示例的main函数都是导入strings包然后使用其中的方法,需要的朋友可以参考下
    2015-10-10
  • Golang 内存模型The Go Memory Model

    Golang 内存模型The Go Memory Model

    这篇文章主要为大家介绍了Golang 内存模型The Go Memory Model实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • golang中字符串和数字转换方法

    golang中字符串和数字转换方法

    在Golang中,可以使用strconv包中的Itoa()和Atoi()函数进行字符串与数字之间的转换,Itoa()用于将数字转换为字符串,Atoi()则用于将字符串转换回数字,本文介绍golang中字符串和数字转换方法,感兴趣的朋友一起看看吧
    2024-09-09

最新评论