当前位置: 首页 > news >正文

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,那么也不会报告该漏洞。

http://www.lryc.cn/news/154792.html

相关文章:

  • 强化学习算法总结 2
  • 修改node_modules避免更新覆盖 patch-package
  • Elasticsearch安装,Springboot整合Elasticsearch详细教程
  • OJ题库:计算日期到天数转换、打印从1到最大的n位数 、尼科彻斯定理
  • 混合动力汽车耐久测试
  • useRef 定义的 ref 在控制台可以打印但是页面不生效?
  • 【Java 动态数据统计图】动态数据统计思路案例(动态,排序,动态数组(重点推荐))七(129)
  • Cell Reports | 揭开METTL14在介导m6A修饰中的神秘面纱
  • 297. 二叉树的序列化与反序列化
  • 肖sir__设计测试用例方法之边界值03_(黑盒测试)
  • 功能测试常用的测试用例大全
  • css利用flex分配剩余高度出现子组件溢出问题
  • Java中的网络编程------基于Socket的TCP编程和基于UDP的网络编程,netstat指令
  • 【【STM32-29正点原子版本串口发送传输实验】
  • 【面试题精讲】什么是websocket?如何与前端通信?
  • unity tolua热更新框架教程(2)
  • 【0904作业】QT 完成登陆界面跳转到聊天室+完成学生管理系统的查找和删除功能
  • ceph源码阅读 buffer
  • 基本介绍——数据挖掘
  • Navicat连接postgresql时出现‘datlastsysoid does not exist‘报错
  • 冯诺依曼体系结构/什么是OS?
  • SD卡/TF卡简记
  • Dockerfile COPY的奇怪行为:自动解包一级目录
  • 【每日一题Day311】LC1761一个图中连通三元组的最小度数 | 枚举
  • 前端日期减一天的笑话
  • 高效能,一键批量剪辑,AI智剪让创作更轻松
  • 手写Mybatis:第15章-返回Insert操作自增索引值
  • 【数据结构】动态数组(vector)的基本操作,包括插入、删除、扩容、输出、释放内存等。以下是代码的解释和注释:
  • [unity]三角形顶点顺序
  • 【python爬虫】14.Scrapy框架讲解