govulncheck 是什么?
govulncheck 是一個(gè)命令行工具,可以幫助 Golang 開(kāi)發(fā)者快速找到項(xiàng)目代碼和依賴的模塊中的安全漏洞。該工具可以分析源代碼和二進(jìn)制文件,識(shí)別代碼中對(duì)這些漏洞的任何直接或間接調(diào)用。
默認(rèn)情況下,govulncheck 通過(guò) Go 漏洞數(shù)據(jù)庫(kù) https://vuln.go.dev 提供的接口查詢相關(guān)的模塊是否包含漏洞(查詢接口的請(qǐng)求只包含模塊路徑,不包含程序的代碼或其他屬性)。
安裝和使用方法
安裝之前需要將 Go 版本升級(jí)到1.18及以上,使用如下命令安裝最新版本的 govulncheck:
$ go install golang.org/x/vuln/cmd/govulncheck@latest
在項(xiàng)目的主目錄(包含 go.mod 文件的目錄)執(zhí)行如下命令進(jìn)行漏洞掃描:
$ govulncheck ./...
govulncheck 也可以集成到自己的 CI/CD 系統(tǒng)里面,govulncheck 考慮到這方面的需求,所以輸出結(jié)果可以選擇 json 方式,例如:
$ govulncheck -json ./...
如果使用 govulncheck 掃描編譯好的二進(jìn)制文件,需要使用參數(shù) -mode=binary 并跟上二進(jìn)制文件的路徑,例如:
$ govulncheck -mode=binary $HOME/go/bin/my-go-program
默認(rèn)情況下,項(xiàng)目如果不存在漏洞,govulncheck 將成功退出(狀態(tài)碼為0),如果存在漏洞,則返回非0的狀態(tài)碼。如果提供了 -json 參數(shù),無(wú)論檢測(cè)到多少漏洞,都會(huì)成功退出,即狀態(tài)碼為0。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-687262.html
使用 govulncheck 需要注意的點(diǎn)如下:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-687262.html
- 被掃描的二進(jìn)制文件要求是使用 Go 1.18 或者更高版本構(gòu)建的。
- 對(duì)于函數(shù)指針和接口調(diào)用的分析比較保守,在某些情況下可能會(huì)誤報(bào)或者打印不夠準(zhǔn)確的堆棧信息。
- 使用包反射對(duì)函數(shù)的調(diào)用對(duì)靜態(tài)分析來(lái)說(shuō)是不可見(jiàn)的。對(duì)于僅通過(guò)這些調(diào)用方式可訪問(wèn)到的有漏洞的代碼也不會(huì)報(bào)告漏洞,使用 unsafe 包也可能產(chǎn)生誤報(bào)。
- 因?yàn)?Go 二進(jìn)制文件不包含詳細(xì)的調(diào)用信息,所以 govulncheck 也無(wú)法顯示檢測(cè)到的漏洞的調(diào)用鏈。對(duì)于二進(jìn)制文件中存在的但無(wú)法訪問(wèn)到的代碼,也可能產(chǎn)生誤報(bào)。
- 只會(huì)給出當(dāng)前執(zhí)行環(huán)境和配置(GOOS/GOARCH)下的漏洞。假設(shè)一個(gè)漏洞只在 Linux中才有,那么在 Windows 則不會(huì)報(bào)告該漏洞。所以需要注意跨平臺(tái)開(kāi)發(fā)的情況,需要在不同的平臺(tái)做漏洞掃描。另外需要注意的一點(diǎn)時(shí),執(zhí)行掃描的 go 版本需要和運(yùn)行環(huán)境的 go 版本保持一致,假設(shè) Go 1.18 標(biāo)準(zhǔn)庫(kù)里才有的漏洞,如果執(zhí)行掃描使用的 Go 版本是1.19,那么也不會(huì)報(bào)告該漏洞。
到了這里,關(guān)于Golang 程序漏洞檢測(cè)利器 govulncheck(一):安裝和使用方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!