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

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.lryc.cn/news/167353.html

相关文章:

  • 第31章_瑞萨MCU零基础入门系列教程之WIFI蓝牙模块驱动实验
  • arkworks工具栈概览
  • 华为云云服务器云耀L实例评测 | 在华为云耀L实例上搭建电商店铺管理系统:一次场景体验
  • sqlserver存储过程报错:当前事务无法提交,而且无法支持写入日志文件的操作。请回滚该事务。
  • 二刷力扣--字符串
  • 如何将 OBJ 模型转换和压缩为 GLTF 以与 AWS IoT TwinMaker 配合使用
  • 零基础学前端(四)重点讲解 CSS
  • 类和对象【初始化列表与友元】
  • ActiveRecord::Migration.maintain_test_schema!
  • 逆向-beginners之helloworld
  • 如何微调甜甜圈模型——使用示例
  • 小程序中如何查看指定会员的付款记录
  • LeetCode_贪心算法_困难_630.课程表 III
  • Drozer安装
  • 752. 打开转盘锁
  • Bearly:基于人工智能的AI写作文章生成工具
  • 详解哈希,理解及应用
  • 解决js加减乘除精度丢失问题
  • 八股——const 关键字
  • QT object元对象
  • 互斥锁,条件变量,信号量的三个小demo
  • 【UE 材质】力场护盾和冲击波效果
  • 类和对象三大特性之多态
  • 为何红黑树在B/B+树之上仍然占据重要地位?
  • 【算法专题突破】滑动窗口 - 水果成篮(13)
  • Peppercontent.io:人工智能驱动的内容生成工具
  • docker镜像管理-实操
  • SpringMVC-----JSR303以及拦截器
  • 基于若依框架实现markdown在线编辑
  • CentOS7上从0开始搭建Zookeeper集群