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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/133287.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

重数和众数问题——C语言实现

题还是很简单的,理清思路就可以了♪(・ω・)ノ 问题描述: 给定含有n个元素的多重集合S,每个元素在S中出现的次数称为该元素的重数。多重集S中重数最大的元素称为众数。 例如,S{1,2&…

基于ntchat的微信群聊同步机器人

微信群有500人上限的限制,建立多个群的话又有信息无法互通的不便,此机器人通过自动将消息转发到同一个同步组内的所有群,消除这一不便性,间接达成扩大群成员数的目的。 效果演示: 项目地址: https://gith…

Python综合案例(数据计算)

filter算子 接受一个函数,可用lambda快速编写;函数对RDD 数据逐个处理,得到True的保留到返回值的RDD中 """ filter成员方法的使用 """ from pyspark import SparkConf, SparkContext import os os.environ[P…

WebStorm使用Element组件库

文章目录 WebStorm使用Element组件库1. webstorm使用组件库1.1 webstorm使用vue文件1.2 首先需要安装Element Plus 2. 项目完成引入---按钮组件3. 引入日历组件4. 引入走马灯组件5. image组件5.1 懒加载滚动5.2 大图预览 6. Collapse 折叠面板手风琴组件8. Descriptions 描述列…

代理HTTP使用不当会出现哪些问题?如何正确使用代理服务?

代理HTTP是一种常见的网络代理方式,它为客户端和服务器之间提供中间层,转发上下游的请求和响应。正确使用代理HTTP可以提高采集效率、增加网络安全性、加速网络速度、保护用户隐私。但是,使用不当就难以达到预期的效果,在使用代理…

Linux使用docker安装elasticsearch-head

一、elasticsearch-head的安装启动 #下载镜像 docker pull alivv/elasticsearch-head #启动 docker run -d --name eshead -p 9100:9100 alivv/elasticsearch-head 查看日志 docker logs -f eshead 出现如下证明启动成功 浏览器访问9100端口,出现以下页面也说明启动…

芯科蓝牙BG27开发笔记8-片上Flash读写

目标 熟悉片上Flash的特点,知道如何使用,最好找到示例代码,有完整例程那是最好的 查找参考手册 除了768K的主空间,还包含: 1. USERDATA区域,用户定义数据,可以读写。大小只有1K。 2. 设备特…

国际版腾讯云/阿里云:全站加快有哪些功用?有哪些优势?适用于什么场景?

腾讯云全站加快有哪些功用?有哪些优势?适用于什么场景? 产品功用 全站加快 ECDN 经过在全球各区域部署加快节点,有用下降跨国拜访推迟,保证全球加快作用。 最优链路 各加快节点两两相连,实时勘探&#xff0…

初识操作系统

1.操作系统的概念 操作系统(Operating System,OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配; 以提供给用户和其他软件方便的接口和环境; 它是计算机系统中最基本的系统软件。 操作系统的特…

1-FPGA硬件加速-YUV_YCbCr

这是对《基于Matlab与FPGA的图像处理教程》的学习笔记,代码和内容摘取自书中。 心得: 使用FPGA进行硬件加速的重点是消除或者减少浮点数运算,转换为定点运算,然后通过pipeline流水设计转为并行实现加速。 原理和方法 RGB与&…

【Spring面试】四、Bean的生命周期、循环依赖、BeanDefinition

文章目录 Q1、Bean有哪些生命周期回调方法?有哪几种实现方式?Q2、Spring在加载过程中Bean有哪几种形态Q3、解释下Spring框架中Bean的生命周期Q4、Spring是如何解决Bean的循环依赖的Q5、Spring是如何帮我们在并发下避免获取不完整的Bean的?Q6、…

基于springboot+vue的大学生智能消费记账系统

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

【电源专题】案例:异常样机为什么只在40%以下电量时与其他样机显示电量差异10%,40%以上电量差异却都在5%以内。

本案例发生在一个量产产品的测试中,因为产品带电池,所以需要测试产品对于电池电量显示的精确程度。产品使用的是最简单的开路电压查表法进行设计。 案例测试报告的问题在于不同样机之间电量百分比存在差异,大部分是在3%~4%之间。但在7.2V电压时,能够差异10%左右。 在文章:…

ESIM实战文本匹配

引言 今天我们来实现ESIM文本匹配,这是一个典型的交互型文本匹配方式,也是近期第一个测试集准确率超过80%的模型。 我们来看下是如何实现的。 模型架构 我们主要实现左边的ESIM网络。 从下往上看,分别是 输入编码层(Input Ecoding) 对前…

【Android知识笔记】进程通信(二)

一、Binder对象是如何跨进程传递的 binder传递有哪些方式?binder在传递过程中是怎么存储的?binder对象序列化和反序列化过程?binder对象传递过程中驱动层做了什么?总结 Binder 对象的跨进程传递主要靠 Parcel 的两个关键方法 writeStrongBinder() 和

nvm 一个nodejs版本管理工具

nvm 一个nodejs版本管理工具 NVM是什么 nvm全英文也叫node.js version management,是一个nodejs的版本管理工具。nvm和n都是node.js版本管理工具,为了解决node.js各种版本存在不兼容现象可以通过它可以安装和切换不同版本的node.js NVM下载 可在点此在…

vueshowpdf 移动端pdf文件预览

1、安装 npm install vueshowpdf -S2、参数 属性说明类型默认值v-model是否显示pdf--pdfurlpdf的文件地址String- scale 默认放大倍数 Number1.2 minscale 最小放大倍数 Number0.8 maxscale 最大放大倍数 Number2 3、事件 名称说明回调参数closepdf pdf关闭事件-pdferr文…

jmeter接口测试及详细步骤以及项目实战教程

在接口测试项目实战中,JMeter是一款非常强大和流行的自动化测试工具,它可以测试各种类型的应用程序,并通过采样和报告来识别性能瓶颈和API的问题。本文将为你提供一个基于实际项目的JMeter接口测试项目实战教程,指导你如何使用JMe…

潍坊科技学院图书馆藏《乡村振兴战略下传统村落文化旅游设计》许少辉八一新书

潍坊科技学院图书馆藏《乡村振兴战略下传统村落文化旅游设计》许少辉八一新书

金融行业的软件测试分析

随着金融行业的业务不断增加,金融交易模式的不断变化,金融机构对信息化的要求也越来越高,高质量的金融软件对于金融机构来说显得尤为重要。如何保证金融行业软件的质量,对金融行业软件的测试人员来说,也提出了更高的要…