Gosec:Go語言源碼安全分析工具

來源:互聯網
上載者:User

gosec是一個Go語言源碼安全分析工具,其通過掃描Go AST(抽象文法樹)來檢查原始碼是否存在安全問題。

許可證

根據Apache 2.0版本的License;除非符合許可,否則你將不能使用該檔案。你可以在這裡擷取到一個許可證的副本。

安裝

$ go get github.com/securego/gosec/cmd/gosec/...

使用

我們可以將Gosec配置為僅運行某個規則子集,如排除某些檔案路徑,產生不同格式的報告等。在預設情況下,Gosec將對提供的輸入檔案運行所有規則。要從目前的目錄遞迴掃描,你可以提供’./…’ 作為輸入參數。

選擇規則

預設情況下,gosec將針對提供的檔案路徑運行所有規則。但如果你要指定運行某個規則,則可以使用 ‘-include=’ 參數,或者你也可以使用 ‘-exclude=’來排除那些你不想啟動並執行規則。

可用規則

G101:尋找寫入程式碼憑證

G102:綁定到所有介面

G103:審計不安全區塊的使用

G104:審計錯誤未檢查

G105:審計math/big.Int.Exp的使用

G106:審計ssh.InsecureIgnoreHostKey的使用

G201:SQL查詢構造使用格式字串

G202:SQL查詢構造使用字串串連

G203:在HTML模板中使用未轉義的資料

G204:審計命令執行情況

G301:建立目錄時檔案許可權分配不合理

G302:chmod檔案許可權分配不合理

G303:使用可預測的路徑建立臨時檔案

G304:作為汙點輸入提供的檔案路徑

G305:提取zip存檔時遍曆檔案

G401:檢測DES,RC4或MD5的使用方式

G402:尋找錯誤的TLS串連設定

G403:確保最小RSA密鑰長度為2048位

G404:不安全的隨機數源(rand)

G501:匯入黑名單列表:crypto/md5

G502:匯入黑名單列表:crypto/des

G503:匯入黑名單列表:crypto/rc4

G504:匯入黑名單列表:net/http/cgi

# Run a specific set of rules$ gosec -include=G101,G203,G401 ./...# Run everything except for rule G303$ gosec -exclude=G303 ./...

注釋代碼

與所有自動偵查工具一樣,gosec也會出現誤判的情況。如果gosec報告已手動驗證為安全的,則可以使用“#nosec”來注釋代碼。

注釋將導致gosec停止處理AST中的任何其他節點,因此可以應用於整個塊或應用於單個運算式中。

import "md5" // #nosecfunc main(){    /* #nosec */    if x > y {        h := md5.New() // this will also be ignored    }}

在某些情況下,你可能還需要重新訪問已使用#nosec注釋的位置。那麼你可以執行以下命令來運行掃描程式以及忽略#nosec注釋:

$ gosec -nosec=true ./...

build標籤

gosec能夠將Go構建標籤傳遞給分析器。它們可以以逗號分隔的列表提供,如下所示:

$ gosec -tag debug,ignore ./...

輸出格式

gosec目前支援text,json,yaml,csv和JUnit XML的輸出格式。預設情況下,結果將以stdout(標準輸出)。但我們也可以使用 ‘-fmt’參數指定輸出格式,以及’-out’來指定輸出檔案。

# Write output in json format to results.json$ gosec -fmt=json -out=results.json *.go

開發

按照此處的說明安裝dep:https://github.com/golang/dep 

安裝最新版本的golint:https://github.com/golang/lint

Build

make

Tests

make test

發布版本

確保你已安裝了goreleaser,然後你可以按以下方式發布gosec:git tag 1.0.0 export GITHUB_TOKEN= make release

dist檔案夾中提供了該工具的發行版本。build資訊應該會被展示在usage文本中。

./dist/darwin_amd64/gosec -hgosec  - Golang security checkergosec analyzes Go source code to look for common programming mistakes thatcan lead to security problems.VERSION: 1.0.0GIT TAG: 1.0.0BUILD DATE: 2018-04-27T12:41:38Z

注意,所有發行的存檔也會被同步到GitHub上。

Docker image

你可以執行一個發布版本並build docker鏡像:

git tag <VERSION>export GITHUB_TOKEN=<Your GitHub token>make image

在容器中運行gosec:

docker run -it -v <YOUR LOCAL WORKSPACE>:/workspace gosec /workspace

產生TLS規則

可以從Mozilla的TLS ciphers建議產生TLS規則配置。

首先,你需要安裝generator工具:

go get github.com/securego/gosec/cmd/tlsconfig/...

現在你可以在項目的根目錄中調用go generate:

go generate ./...

這將產生一個rules/tls_config.go檔案,其中包含來自Mozilla的當前ciphers建議。

 *參考來源:github,FB小編 secist 編譯,轉載請註明來自FreeBuf.COM

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.