Go 官方新玩具:漏洞管理和扫描,看看自己项目有没有坑?

Go的全漏洞检测工具govulncheck来了 前言 Go安全团队在2022.09.06发布了全漏洞检测工具govulncheck,可以帮助我们发现Go程序里的安全漏洞。 本文详细介绍该工具目前的现状以及接下来的功能规划。 Go漏洞检测系统架构 上图是Go安全团队对于Go代码漏洞检测的系统架构图。 第1步,漏洞采集。Go安全团队会采集众多漏洞数据库,包括公开的漏洞数据库(例如National Vulnerability Database (NVD)[1] GitHub Advisory Database[2])、社区反馈的[Go package 阅读详情

大家好,我是煎鱼。

业务系统的安全问题一直是各企业的 “头号” 问题(被发现时)。不知道有多少读者朋友们经历了刚刚结束的 HW 行动。

最近发现有厂商已经可以对 Go 开始做检测了,这又是一大进步。

这不,最近发现 Go 官方自己推出了新的工具,作用是漏洞管理,告诉你已报告的漏洞,并告知你应该如何升级到什么版本。

47e25fb83fa68f6197161e6c784ab4c9.png

今天这篇文章就是分享这个安全工具。前置的版本要求是:Go >= 1.18。

govulncheck 是什么

Go 安全团队在 2022 年 9 月,正式推出了 govulncheck 工具,可以根据背后的 Go 漏洞数据库去分析 Go 代码,对已知的问题发出警告,提醒开发者进行修复。

以下是 govulncheck 的架构图:

324139cad39beb47d540c84d642876f2.png

Go 漏洞管理由以下几个部分组成:

  • 数据源来自各个来源,例如:National Vulnerability Database (NVD)、GitHub Advisory Database,以及直接从 Go 软件包维护者处收集。

  • 漏洞数据库会基于上述第一点来做数据录入,所有的报告均由 Go Security 团队审核和整理。报告采用开源漏洞(OSV)格式,可通过 API 访问。

  • pkg.go.dev 与 govulncheck 集成,让开发人员能发现项目中的漏洞。

最简 Demo

准备有缺陷的项目

根据 Go 官方的示例,我们需要模拟一个例子来验证安全功能。创建一个 Go 项目 vuln-tutorial,写入如下代码:

import (
 ...
 "golang.org/x/text/language"
)

func main() {
 for _, arg := range os.Args[1:] {
  tag, err := language.Parse(arg)
  if err != nil {
   fmt.Printf("%s: error: %v\n", arg, err)
  } else if tag == language.Und {
   fmt.Printf("%s: undefined\n", arg)
  } else {
   fmt.Printf("%s: tag %s\n", arg, tag)
  }
 }
}

拉取相关依赖:

$ go mod tidy 
go: finding module for package golang.org/x/text/language
go: downloading golang.org/x/text v0.13.0
go: found golang.org/x/text/language in golang.org/x/text v0.13.0

将 golang.org/x/text 版本降级至 v0.3.5。这个版本存在已知的问题:

$ go get golang.org/x/text@v0.3.5
go: downloading golang.org/x/text v0.3.5
go: downgraded golang.org/x/text v0.13.0 => v0.3.5

快速运行 govulncheck

安装 govulncheck:

$ go install golang.org/x/vuln/cmd/govulncheck@latest
go: downloading golang.org/x/vuln v1.0.1
go: downloading golang.org/x/tools v0.12.1-0.20230815132531-74c255bcf846
go: downloading golang.org/x/sys v0.11.0

对比一下,查看是否正常:

$ govulncheck -version
Go: go1.20.5
Scanner: govulncheck@v1.0.1
DB: https://vuln.go.dev
DB updated: 2023-09-13 19:45:03 +0000 UTC

No vulnerabilities found.

Share feedback at https://go.dev/s/govulncheck-feedback.

一切就绪,接下来正式开始。

我们回到上一节创建的 vuln-tutorial 项目,在根目录执行如下命令:

➜  vuln-tutorial govulncheck ./...
Scanning your code and 46 packages across 1 dependent module for known vulnerabilities...

Vulnerability #1: GO-2021-0113
    Out-of-bounds read in golang.org/x/text/language
  More info: https://pkg.go.dev/vuln/GO-2021-0113
  Module: golang.org/x/text
    Found in: golang.org/x/text@v0.3.5
    Fixed in: golang.org/x/text@v0.3.7
    Example traces found:
      #1: main.go:12:29: vuln.main calls language.Parse

=== Informational ===

Found 1 vulnerability in packages that you import, but there are no call
stacks leading to the use of this vulnerability. You may not need to
take any action. See https://pkg.go.dev/golang.org/x/vuln/cmd/govulncheck
for details.

Vulnerability #1: GO-2022-1059
    Denial of service via crafted Accept-Language header in
    golang.org/x/text/language
  More info: https://pkg.go.dev/vuln/GO-2022-1059
  Module: golang.org/x/text
    Found in: golang.org/x/text@v0.3.5
    Fixed in: golang.org/x/text@v0.3.8

Your code is affected by 1 vulnerability from 1 module.

Share feedback at https://go.dev/s/govulncheck-feedback.

整个输出信息分两大块。

第一块区域是 Vulnerability(漏洞),上述例子的扫描结果是发现了漏洞 #GO-2021-0113,告知了具体的原因、触发函数、发现的版本和修复的版本(方式):

Vulnerability #1: GO-2021-0113
    Out-of-bounds read in golang.org/x/text/language
  More info: https://pkg.go.dev/vuln/GO-2021-0113
  Module: golang.org/x/text
    Found in: golang.org/x/text@v0.3.5
    Fixed in: golang.org/x/text@v0.3.7
    Example traces found:
      #1: main.go:12:29: vuln.main calls language.Parse

第二块区域是 Informational(信息),可以理解为进一步的修复建议。上述例子的建议是基于漏洞 #GO-2022-1059,建议升级更新的版本:

Vulnerability #1: GO-2022-1059
    Denial of service via crafted Accept-Language header in
    golang.org/x/text/language
  More info: https://pkg.go.dev/vuln/GO-2022-1059
  Module: golang.org/x/text
    Found in: golang.org/x/text@v0.3.5
    Fixed in: golang.org/x/text@v0.3.8

当然,这部分是建议修复。因为不存在实际涉及到此漏洞的调用堆栈内容。可能仅是该包的漏洞进行了展示。

最后部分在开头和结尾对本次扫描结果的统计输出和代码行数的描述性输出了。告诉你都扫描和识别了多少内容。

govulncheck 作者是谁

这是一个我比较感兴趣的问题。

因为你看,感觉这个 govulncheck。好像 rsc 也没有出来站台过,Go 核心团队里似乎也没人发过声。但就是出现了。

好在 govulncheck 是 “开源” 的(只是个镜像仓库),项目地址:golang/vuln。我们可以看到一些蛛丝马迹:

f043ec619f18215d759349d94453bb79.png

目前 Go 是有一个安全团队,由 @Julie Qiu 带队。她的个人 About:

2c24570bf3d083566a7b8223fd4d6374.png

相当于是个小组,大概 2~5 个有阶段性大量提交代码。也承担 pkg.go.dev 的相关开发。参与的成员都是 Google 公司的人。与核心团队有职责上的区分。

(Google 为 Go 输送人才...)

总结

Go 近年来感觉加大了对周边生态组件的一些小建设,虽然达不到齐全。但起码有了。本次 Go 安全工具 govulncheck 就是一个很好的开始。

对日常应用程序有安全要求的小伙伴们,也可以将 govulncheck 加入 CI/CD 流程中,自动的扫描识别,按时升级。可以避免一些已知的漏洞风险。

推荐阅读

关注和加煎鱼微信,

一手消息和知识,拉你进技术交流群👇

8d051999973afd4d1b3cc63bca8e201b.jpeg

d3aea171c058d74c9ff7bbbe2861f9a2.png

你好,我是煎鱼,出版过 Go 畅销书《Go 语言编程之旅》,再到获得 GOP(Go 领域最有观点专家)荣誉,点击蓝字查看我的出书之路

日常分享高质量文章,输出 Go 面试、工作经验、架构设计,加微信拉读者交流群,和大家交流!

Nuclei——一款基于YAML语法模板的快速漏洞扫描工具 Nuclei是一款基于YAML语法模板的开发的定制化快速漏洞扫描器。它使用Go语言开发,具有很强的可配置性、可扩展性易用性。目前该项目在Github上已经有6.6k个stars。Nuclei项目地址:​​​​​​​​​​​​​​​​​​​​​Nuclei提供了扫描结果输出功能,用户可以根据自己的需求,自定义输出各种类型的报告格式,包括文本、JSON、Markdown等。 阅读详情

相关推荐

Burp Suite扫描配置与Golang高频考点实战解析

Web安全测试与后端开发是当前IT领域的两大核心技能方向。在安全测试中,漏洞扫描是评估应用安全性的基础环节,其核心在于通过主动与被动扫描相结合的方式,精准识别SQL注入、XSS等常见漏洞。而在后端开发领域,Golang凭借其高并发模型简洁语法,成为构建高性能云原生应用的首选语言之一。理解其切片底层数组、并发安全Map、Channel通信机制等核心原理,对于编写健壮、高效的代码至关重要。本文聚焦于Burp Suite的扫描范围配置、主动/被动扫描策略,以及Golang刷题中遇到的切片陷阱、并发编程等高频考点

afhu47033的博客 478

Golang那些事】Golang代码漏洞扫描工具介绍——govulncheck

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

killer1989的博客 1277

在 Ubuntu 22.04 上部署 Vuls 漏洞扫描工具教程

Vuls 是一个轻量级的无代理漏洞扫描程序,它可以扫描 Linux、FreeBSD、容器镜像其他目标,并报告它们的漏洞信息。Vuls 可以扫描已安装的软件包、本地配置远程服务,并能生成详细的报告。本教程将手把手教你如何在 Ubuntu 22.04 服务器上安装配置 Vuls。

2501_90150039的博客 917

Golang 程序漏洞检测利器 govulncheck(一):安装使用方法

govulncheck 是一个命令行工具,可以帮助 Golang 开发者快速找到项目代码依赖的模块中的安全漏洞。该工具可以分析源代码二进制文件,识别代码中对这些漏洞的任何直接或间接调用。默认情况下,govulncheck 通过 Go 漏洞数据库 https://vuln.go.dev 提供的接口查询相关的模块是否包含漏洞(查询接口的请求只包含模块路径,不包含程序的代码或其他属性)。

路多辛的所思所想 2199

Golang漏洞管理体系以及govulncheck漏洞检测工具介绍

govulncheck根据不同的分析目标会有不同的分析策略,例如在分析Go源码文件(*.go)时,会使用当前本地环境变量中默认的Go配置信息;govulncheck是前文提到的Go官方编写的Go项目漏洞检测二进制工具,开发者运行该工具就可以检查Go项目中的漏洞漏洞检测工具govulncheck文档:https://pkg.go.dev/golang.org/x/vuln/cmd/govulncheck。其中govulncheck是一个Go编写的二进制工具,开发者运行该工具就可以检查Go项目中的漏洞

TomCN0803的博客 1799

golang漏洞扫描工具,看看自己项目有没有

golang漏洞扫描工具

猛犸象 670

【K8s】GitLab 实现 Golang 代码漏洞扫描

GitLab 实现 Golang 代码漏洞扫描

运维、实施交付领域知识交流 1501

Go语言漏洞扫描

安全是软件开发中不可或缺的一部分,尤其是在Go语言逐渐成为众多开发者首选的情况下。通过及时的漏洞扫描规范的开发流程,可以有效降低软件中的安全风险。随着技术的不断演进,的安全威胁也在不断出现,因此我们不仅要关注当前的安全风险,同时也要具备前瞻性,预判未来可能出现的安全问题。希望本文能够为Go语言开发者提供一些有价值的思路,帮助大家在软件开发过程中更好地应对安全挑战。

2501_91226653的博客 860

推荐开源项目Go漏洞数据库

在软件开发领域,安全始终是首要考虑的问题,尤其是在使用开源组件时。为了帮助开发者更好地理解管理Go语言的生态系统中的安全漏洞,我们推荐一个强大的开源项目:[Go Vulnerability Database](https://vuln.go.dev)。 ## 项目介绍 Go Vulnerability Database 是一个由Golang官方维护的项目,它提供了对Go生态系统的公开漏洞信息

gitblog_00020的博客 610

Go 开发者安全最佳实践 Go 官方安全指南《Security Best Practices for Go Developers》解读

在云计算与微服务蓬勃发展的当下,Go 语言凭借其高效的并发模型简洁的语法,成为构建高性能后端服务的首选。然而,随着网络安全威胁的复杂化,开发者需在代码设计与开发阶段融入系统性的安全实践。本文结合 Go 官方安全指南《Security Best Practices for Go Developers》提炼出六大核心实践,助力开发者打造健壮且安全的 Go 应用。

Tekin 是深耕技术 20 年的全栈实战派专家,精通 Go/Python/Java 等多语言开发。博客专注技术原理与实战结合,深度解析 Python 高阶编程、Go 语言架构、数据库优化等硬核内容。涵盖并发编程、机器学习、云原生等前沿领域,通过真实案例拆 2003

Go项目依赖安全实战:使用govulncheck进行精准漏洞扫描与修复

在软件开发中,依赖管理是构建现代应用的基础环节,它直接关系到项目的稳定性安全性。其核心原理是通过版本锁定依赖解析来确保构建的一致性,但这也引入了潜在的安全风险——第三方库中的已知漏洞可能被引入项目。从技术价值看,自动化依赖安全扫描已成为保障软件供应链安全的关键实践,它能显著降低因开源组件漏洞导致的安全事件。在Go语言生态中,这一需求尤为突出,因为其简洁的依赖管理机制可能掩盖间接依赖的风险。应用场景涵盖从个人项目到企业级CI/CD流水线,开发者需要工具来识别真正影响代码的漏洞,而非淹没在无关警报中。本文聚

weixin_34203832的博客 539

Go漏洞管理工具: govulncheck

我们很高兴地宣布 Go漏洞管理的最支持,这是我们为帮助 Go 开发者了解可能影响他们的已知漏洞而迈出的第一步。这篇文章概述了这个项目的当前状况后续计划。概览Go 提供的工具可以分析你的代码库并展示出已知的漏洞,该工具由 Go 安全团队设计维护的 Go 漏洞数据库提供支持。Go 只展示代码调用函数中的漏洞,从而减少结果中的噪音。Go 漏洞数据库Go 漏洞数据库(https://vuln.go...

Go中国 704

Vuls漏洞扫描终极指南:全量扫描与增量扫描效率深度对比

Vuls是一款功能强大的无代理漏洞扫描工具,支持Linux、FreeBSD、容器、WordPress、编程语言网络设备的漏洞检测。本文将深入对比Vuls的全量扫描与增量扫描特性,帮助你选择最适合的漏洞检测方案,提升系统安全防护效率。 ## Vuls漏洞扫描工作原理 Vuls通过收集目标系统的软件信息,与漏洞数据库进行匹配,从而识别潜在的安全风险。其核心架构包括数据收集、漏洞匹配结果通知三

gitblog_00716的博客 1109

afrog-漏洞扫描(挖洞)工具【了解安装使用详细】

一文详细了解漏洞扫描(挖洞)工具afrog,安装及异常解决方案,使用说明包含有/无漏洞区别,怎么查看漏洞报告。

1万+

Go语言开发的Web漏洞扫描器实战指南.zip

Go语言,也称为Golang,是由Google开发的一种静态类型、编译型语言。它以简洁、高效、安全著称,特别适合用于并发编程。自2009年首次发布以来,Golang已在云计算、微服务、网络服务等领域广泛应用。网络爬虫,也称为网络蜘蛛、网络机器人或网络爬取器,是一种自动获取网页内容的程序或脚本。其基本原理是模拟人类用户访问网页,通过解析网页内容,提取出有用的数据,然后根据链接解析出的URL,并向这些URL发起请求,如此循环往复,形成一个遍历网络的过程。

weixin_32445049的博客 616

Go 官方安全指南实战攻略:从漏洞检测到部署的全链路防护手册(附代码示例)

Go 语言凭借高效并发与跨平台特性成为关键基础设施首选,但复杂的安全威胁要求开发者构建全生命周期防护体系。本文结合 Go 官方安全指南(https://go.dev/doc/security/),系统解析漏洞检测(govulncheck)、依赖管理(pkg.go.dev)、模糊测试、密码学实践等核心技术,通过实战代码示例演示如何从开发到部署全链路抵御依赖漏洞、输入攻击、并发风险等安全隐患,助力开发者打造健壮且安全的 Go 应用。用 VS Code 插件实时检测依赖漏洞,写代码时避免硬编码密钥、弱哈希算法。

Tekin 是深耕技术 20 年的全栈实战派专家,精通 Go/Python/Java 等多语言开发。博客专注技术原理与实战结合,深度解析 Python 高阶编程、Go 语言架构、数据库优化等硬核内容。涵盖并发编程、机器学习、云原生等前沿领域,通过真实案例拆 1109

Go-goscan:高效IPv4网络扫描器实战

Go-goscan 是一款使用Go语言编写的网络扫描工具,旨在为网络安全专家提供一个高效、灵活且易于使用的扫描环境。它支持广泛的扫描类型,从简单的端口扫描到复杂的漏洞检测,能适应不同规模的网络环境。网络扫描是指使用特定的软件工具来探测网络中主机的活动与开放的服务。它通过发送数据包并分析响应来获取信息,例如某个IP地址上运行的网络服务、开放的端口、系统类型、存在的漏洞等。网络扫描是网络安全中一个至关重要的环节,它是防御网络攻击、发现系统弱点评估网络安全状态的基础。

weixin_35916518的博客 928

30分钟上手nuclei SDK:Go语言漏洞扫描引擎集成指南

你是否还在为如何将漏洞扫描功能集成到现有系统而烦恼?是否因复杂的配置陡峭的学习曲线而却步?本文将带你快速掌握nuclei SDK的使用,通过简单几步即可在Go语言项目中集成强大的漏洞扫描能力。读完本文,你将能够: - 理解nuclei SDK的核心功能架构 - 快速搭建基础扫描环境 - 实现自定义扫描逻辑结果处理 - 掌握多线程扫描高级配置技巧 ## 核心概念:nuclei SDK架构...

gitblog_01032的博客 483
上一篇: Go 常量为什么只支持基本数据类型?
下一篇: 免费送书!实时互动应用场景解析专业书籍《实时万象》
煎鱼(EDDYCJY)
博客等级 码龄12年 1818粉丝 505原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值