Golang代码漏洞扫描工具介绍——govulncheck

2023-09-15 22:46:04

Golang

Golang作为一款近年来最火热的服务端语言之一,深受广大程序员的喜爱,笔者最近也在用,特别是高并发的场景下,golang易用性的优势十分明显,但笔者这次想要介绍的并不是golang本身,而且golang代码的漏洞扫描工具,毕竟作为服务端的程序,安全性一直是一个不同忽视的地方

Go安全团队在2022.09.06发布了全新的漏洞检测工具 govulncheck ,可以帮助开发者发现Go程序里的安全漏洞。

在2023.07.13, govulncheck 终于有了1.0.0的发布版本,在官方文档中https://go.dev/blog/govulncheck中,一起发布的还有一份官方的安全最佳实践指引 ****:里面包含了以下几个方面:

1.定期扫描源代码和二进制库 ——推荐用govulncheck

2.更新golang版本和依赖库版本

3.通过模糊测试发现边缘情况漏洞**

4.#Go的race detector检查多协程竞争的情况

5.使用Vet命令检查代码潜在的问题

看的出来golang安全团队在这里是下了大的功夫,这里主要介绍下第一个工具:govulncheck

govulncheck

govulncheck介绍

govulncheck是一个命令行工具,帮助Go用户在项目依赖中查找已知的漏洞。该工具可以分析代码库和二进制文件,并通过优先考虑实际调用你代码的函数中的漏洞来减少干扰。

原理

go 安全团队和社区成员共同维护了一个漏洞库 govulndb,收集了从 2018 年推出 go module 后 go 相关的漏洞信息。

这意味着,go vender形式的项目不能使用它

govulncheck 首先会找出代码中使用的模块和包的版本信息,然后通过接口调用漏洞库的最新数据,最后进行数据对比,将受影响的包或模块列举输出。

针对漏洞数据库的来源也有好几个:

1.National Vulnerability Database ( NVD )

2.GitHub Advisory Database

  1. 社区反馈
  2. 官方自己发现的漏洞

通过上面的信息来源,go的安全团队进行分析和评估,把确认有效的放在go漏洞数据库,然后govulncheck会基于这个漏洞数据库进行扫描

在这里插入图片描述

这意味着,govulncheck要经常更新漏洞数据库

关于数据库信息

Go漏洞数据库地址https://vuln.go.dev,该数据库提供了关于公共Go模块中已知漏洞的详尽信息,开发者可以在pkg.go.dev/vuln上浏览数据库中的条目

为了提高性能并确保长期的可扩展性。官方更新数据库API。同时,提供了一个实验性工具来生成您自己的漏洞数据库索引,位于golang.org/x/vulndb/cmd/indexdb

关于使用

第一步:安装

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

这里的go版本要跟项目的go版本对应

第二步:增加Path地址

export PATH=$PATH:$GOPATH/bin

第三步:在项目目录下使用:

govulncheck ./...

需要在go.mod同级目录

在这里插入图片描述

参数设置:

govulncheck -h

在这里插入图片描述

这里主要用到的是

-mode选择二进制文件还是源代码

-json 输出的产物格式

在这里插入图片描述

关于集成

1.在Visual Studio Code集成:

参考:https://go.dev/doc/tutorial/govulncheck-ide

在这里插入图片描述

2.在CI/CD集成:

参考

2.1.https://semaphoreci.com/blog/govulncheck

2.2.https://github.com/marketplace/actions/golang-govulncheck-action

在这里插入图片描述

关于注意的点:

  1. 二进制文件必须使用1.18或更高版本
  2. 二进制文件扫描没有调用图
  3. 在哪编译,在哪扫描,不同平台的扫描结果不同
  4. 工程使用哪个go版本,就用对应go版本的govulncheck
  5. 在函数指针和接口(interface)调用的分析、反射调用的分析比较保守,可能会出现误报

6.参考https://pkg.go.dev/golang.org/x/vuln/cmd/govulncheck

里面的Limitations

参考资料:

1.https://www.cnblogs.com/lianshuiwuyi/p/17602778.html

2.https://semaphoreci.com/blog/govulncheck

3.https://blog.csdn.net/DisMisPres/article/details/132018530

4.https://zhuanlan.zhihu.com/p/563369267

更多推荐

内存管理之虚拟内存

本篇遵循内存管理->地址空间->虚拟内存的顺序描述了内存管理、地址空间与虚拟内存见的递进关系,较为详细的介绍了作为在校大学生对于虚拟内存的理解。内存管理引入RAM(内存)是计算机中非常重要的资源,由于造价的昂贵,我们家用的计算机一般是8/16G。对于如此紧俏的资源我们当然需要对它好好管理,尽力做到不浪费,高效压榨它的每

助力工业物联网,工业大数据之服务域:Shell调度测试【三十三】

文章目录知识点07:Shell调度测试知识点08:依赖调度测试知识点09:Python调度测试知识点10:Oracle与MySQL调度方法知识点11:大数据组件调度方法知识点07:Shell调度测试目标:实现Shell命令的调度测试实施需求:使用BashOperator调度执行一条Linux命令代码创建#默认的Airf

TorchLens--可视化任何PyTorch模型

0.简介PyTorch是一个深度学习框架,它使用张量(tensor)作为核心数据结构。在可视化PyTorch模型时,了解每个张量运算的意义非常重要。张量运算作为神经网络模型中的基本操作。它们用于处理输入数据、执行权重更新和生成预测结果。同时张量运算还用于计算损失函数。损失函数衡量了模型预测与真实标签之间的差异。通过使用

docker network

一、默认的三种网络模式:Bridge模式:这是Docker默认创建的网络模式。在Bridge模式下,Docker会为每个容器创建一个虚拟网络接口,并分配独立的IP地址。容器之间可以相互通信,而且可以通过端口映射让容器内部的服务可以通过主机的IP地址和端口进行访问。Host模式:在Host模式下,容器与主机共享同一个网络

代码随想录算法训练营第46天| 单词拆分,背包问题总结

139.单词拆分给你一个字符串s和一个字符串列表wordDict作为字典。请你判断是否可以利用字典中出现的单词拼接出s。注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。示例1:输入:s=“leetcode”,wordDict=[“leet”,“code”]输出:true解释:返回true因为“le

内网隧道代理技术(二十七)之 DNS隧道介绍

DNS隧道介绍DNS协议介绍域名系统(DomainNameSystem,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCP和UDP端口53。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。DNS协议是用来将域名转

Linux磁盘挂载及扩容操作

Linux磁盘扩容操作全介绍1.新增磁盘分区后挂载至新建/data目录下1.1新增磁盘打开Vmware右键需要添加磁盘的虚拟机,点击设置,选择磁盘添加即可,这里我新增了一块20G的磁盘在当前虚拟机下;fdisk-l#列出指定的外围设备的分区表状况#列出所有可用块设备的信息,而且还能显示他们之间的依赖关系#可以看到新增磁

2023:生成式AI与存储最新发展和趋势分析(下)

1.存储新发展概述近两年存储领域最大的里程碑事件应该是闪存赢得过半市场,Gartner连续几个季度的市场分析数据中也多次都确认了这一点,固态存储取代机械硬盘的趋势不可逆转。在这一大背景下,有三个新发展方向日益引起更多关注,分别是存储新介质,可计算存储(存算一体)和进一步的极致性能追求。2.介质Intel曾经用傲腾推动了

SpringMVC学习笔记——2

SpringMVC学习笔记——2一、SpringMVC的拦截器1.1、拦截器Interceptor简介1.2、拦截器快速入门1.3、拦截器执行顺序1.4、拦截器执行原理二、SpringMVC的全注解开发2.1、spring-mvc.xml中组件转化为注解形式2.1.1、消除spring-mvc.xml2.1.2、消除w

Kubernetes学习篇之对象

Kubernetes学习篇之对象文章目录Kubernetes学习篇之对象前言期望状态对象规约(spec)对象状态(status)描述对象创建对象字段验证前言对象是k8s系统中持久化的实体,k8s中用这些实体表示系统的状态,该博客是从k8s官网消化吸收后总结提炼的期望状态k8s的对象是你期望k8s达到的状态,k8s会逐渐

《Linux操作系统实战》| 面试了两个实习生,Linux 基本命令都不会(一)

😄作者简介:小曾同学.com,一个致力于测试开发的博主⛽️,主要职责:测试开发、CI/CD如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。😊座右铭:不想当开发的测试,不是一个好测试✌️。如果感觉博主的文章还不错的话,还请点赞、收藏哦!👍文章目录一、前言二、初识LinuxLinux诞生Linux

热文推荐