廣東省建設(shè)安全監(jiān)督站的網(wǎng)站識(shí)圖
Golang
Golang作為一款近年來最火熱的服務(wù)端語(yǔ)言之一,深受廣大程序員的喜愛,筆者最近也在用,特別是高并發(fā)的場(chǎng)景下,golang易用性的優(yōu)勢(shì)十分明顯,但筆者這次想要介紹的并不是golang本身,而且golang代碼的漏洞掃描工具,畢竟作為服務(wù)端的程序,安全性一直是一個(gè)不同忽視的地方
Go安全團(tuán)隊(duì)在2022.09.06發(fā)布了全新的漏洞檢測(cè)工具 govulncheck
,可以幫助開發(fā)者發(fā)現(xiàn)Go程序里的安全漏洞。
在2023.07.13, govulncheck
終于有了1.0.0的發(fā)布版本,在官方文檔中https://go.dev/blog/govulncheck
中,一起發(fā)布的還有一份官方的安全最佳實(shí)踐指引 ****:里面包含了以下幾個(gè)方面:
1.定期掃描源代碼和二進(jìn)制庫(kù) ——推薦用govulncheck
2.更新golang版本和依賴庫(kù)版本
3.通過模糊測(cè)試發(fā)現(xiàn)邊緣情況漏洞**
4.#Go的race detector檢查多協(xié)程競(jìng)爭(zhēng)的情況
5.使用Vet命令檢查代碼潛在的問題
看的出來golang安全團(tuán)隊(duì)在這里是下了大的功夫,這里主要介紹下第一個(gè)工具:govulncheck
govulncheck
govulncheck介紹
govulncheck是一個(gè)命令行工具,幫助Go用戶在項(xiàng)目依賴中查找已知的漏洞。該工具可以分析代碼庫(kù)和二進(jìn)制文件,并通過優(yōu)先考慮實(shí)際調(diào)用你代碼的函數(shù)中的漏洞來減少干擾。
原理
go 安全團(tuán)隊(duì)和社區(qū)成員共同維護(hù)了一個(gè)漏洞庫(kù) govulndb,收集了從 2018 年推出 go module 后 go 相關(guān)的漏洞信息。
這意味著,go vender形式的項(xiàng)目不能使用它
govulncheck 首先會(huì)找出代碼中使用的模塊和包的版本信息,然后通過接口調(diào)用漏洞庫(kù)的最新數(shù)據(jù),最后進(jìn)行數(shù)據(jù)對(duì)比,將受影響的包或模塊列舉輸出。
針對(duì)漏洞數(shù)據(jù)庫(kù)的來源也有好幾個(gè):
1.National Vulnerability Database
( NVD
)
2.GitHub Advisory Database
- 社區(qū)反饋
- 官方自己發(fā)現(xiàn)的漏洞
通過上面的信息來源,go的安全團(tuán)隊(duì)進(jìn)行分析和評(píng)估,把確認(rèn)有效的放在go漏洞數(shù)據(jù)庫(kù),然后govulncheck會(huì)基于這個(gè)漏洞數(shù)據(jù)庫(kù)進(jìn)行掃描
這意味著,govulncheck要經(jīng)常更新漏洞數(shù)據(jù)庫(kù)
關(guān)于數(shù)據(jù)庫(kù)信息
Go漏洞數(shù)據(jù)庫(kù)地址https://vuln.go.dev,該數(shù)據(jù)庫(kù)提供了關(guān)于公共Go模塊中已知漏洞的詳盡信息,開發(fā)者可以在pkg.go.dev/vuln上瀏覽數(shù)據(jù)庫(kù)中的條目
為了提高性能并確保長(zhǎng)期的可擴(kuò)展性。官方更新數(shù)據(jù)庫(kù)API。同時(shí),提供了一個(gè)實(shí)驗(yàn)性工具來生成您自己的漏洞數(shù)據(jù)庫(kù)索引,位于golang.org/x/vulndb/cmd/indexdb
關(guān)于使用
第一步:安裝
go install golang.org/x/vuln/cmd/govulncheck@latest
這里的go版本要跟項(xiàng)目的go版本對(duì)應(yīng)
第二步:增加Path地址
export PATH=$PATH:$GOPATH/bin
第三步:在項(xiàng)目目錄下使用:
govulncheck ./...
需要在go.mod同級(jí)目錄
參數(shù)設(shè)置:
govulncheck -h
這里主要用到的是
-mode選擇二進(jìn)制文件還是源代碼
-json 輸出的產(chǎn)物格式
關(guān)于集成
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
關(guān)于注意的點(diǎn):
- 二進(jìn)制文件必須使用1.18或更高版本
- 二進(jìn)制文件掃描沒有調(diào)用圖
- 在哪編譯,在哪掃描,不同平臺(tái)的掃描結(jié)果不同
- 工程使用哪個(gè)go版本,就用對(duì)應(yīng)go版本的govulncheck
- 在函數(shù)指針和接口(interface)調(diào)用的分析、反射調(diào)用的分析比較保守,可能會(huì)出現(xiàn)誤報(bào)
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