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安装和使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Go实现凯撒密码加密解密

    Go实现凯撒密码加密解密

    这篇文章主要为大家介绍了Go实现凯撒密码加密解密示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Go简单实现协程方法

    Go简单实现协程方法

    本文主要介绍了Go简单实现协程的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-12-12
  • Go 自定义error错误的处理方法

    Go 自定义error错误的处理方法

    这篇文章主要介绍了Go 自定义error错误的处理方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • Go gorilla/sessions库安装使用

    Go gorilla/sessions库安装使用

    这篇文章主要为大家介绍了Go gorilla/sessions库安装使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • go语言中的map如何解决散列性能下降

    go语言中的map如何解决散列性能下降

    近期对go语言的map进行深入了解和探究,其中关于map解决大量冲突的扩容操作设计的十分巧妙,所以笔者特地整理了这篇文章来探讨一下go语言中map如何解决散列性能下降,文中有相关的代码示例供大家参考,需要的朋友可以参考下
    2024-03-03
  • Golang优雅保持main函数不退出的办法

    Golang优雅保持main函数不退出的办法

    很多时候我们需要让main函数不退出,让它在后台一直执行,下面这篇文章主要给大家介绍了关于Golang优雅保持main函数不退出的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • 一文详解kubernetes 中资源分配的那些事

    一文详解kubernetes 中资源分配的那些事

    这篇文章主要为大家介绍了kubernetes 中资源分配的那些事,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • go语言使用pipe读取子进程标准输出的方法

    go语言使用pipe读取子进程标准输出的方法

    这篇文章主要介绍了go语言使用pipe读取子进程标准输出的方法,实例分析了Go语言针对进程操作的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • 关于go-micro与其它gRPC框架之间的通信问题及解决方法

    关于go-micro与其它gRPC框架之间的通信问题及解决方法

    在之前的文章中分别介绍了使用gRPC官方插件和go-micro插件开发gRPC应用程序的方式,都能正常走通。不过当两者混合使用的时候,互相访问就成了问题,下面通过本文给大家讲解下go-micro与gRPC框架通信问题,一起看看吧
    2022-04-04
  • 详解Go中gin框架如何实现带颜色日志

    详解Go中gin框架如何实现带颜色日志

    当我们在终端上(比如Goland)运行gin框架搭建的服务时,会发现输出的日志是可以带颜色的,那这是如何实现的呢?本文就来和大家简单讲讲
    2023-04-04

最新评论