4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Golang】Go 公式の脆弱性チェッカー govulncheck 【Goのための脆弱性管理】

Last updated at Posted at 2023-01-22

Go 言語(以下 golang)公式の脆弱性チェッカー「govulncheck」が 2022/09/06 に発表されました。

govulncheck」は、go get した golang のモジュールのうち、パッケージの脆弱性をローカルでチェックできる公式ツールです。

いままでも Snyk などの CI で似たようなチェックはできました。目的が若干違うものの、golang 公式のツールであり、golang に特化したグループが脆弱性情報をメンテしていること、なにより golangci-lint run と同じ感覚で、ローカルで手軽にチェックできるのが良いですね。

まだ experimental (golang.org/x/ 下の準標準パッケージ)ですが、将来的に go test-cover -fuzz -bench と似た使い勝手で統合されることに期待です。

以下は基本的な使い方で、リリース情報の翻訳は TS; DR をご覧ください。

TL; DR (今北産業、基本的な使い方)

  1. インストールとアップグレード:

    ツールのインストール&アップグレード(要Go1.18以降)
    $ go install golang.org/x/vuln/cmd/govulncheck@latest
    

    go install した golang アプリのアップデートには gup がオススメです。

  2. 脆弱性のテスト実行:

    ツールの実行
    $ govulncheck ./...
    govulncheck is an experimental tool. Share feedback at https://go.dev/s/govulncheck-feedback.
    
    Scanning for dependencies with known vulnerabilities...
    No vulnerabilities found.
    $ echo $?
    0
    
    $ govulncheck -json ./...
    {
    	"Vulns": null
    }
    
  3. 使い方:

    $ govulncheck -h
    usage:
    	govulncheck [flags] package...
    	govulncheck [flags] binary
    
      -json
        	output JSON
      -tags list
        	comma-separated list of build tags
      -test
        	analyze test files. Only valid for source code.
      -v	print a full call stack for each vulnerability
    
    For details, see https://pkg.go.dev/golang.org/x/vuln/cmd/govulncheck.
    

注意点として、すべての脆弱性を表示するのではなく、危険度によって表示結果が異なります

危険度の測定には、脆弱性のあるパッケージに、どれだけ自分のアプリが依存しているかなども加味されます。例えば、脆弱性の報告されているパッケージであっても、脆弱性に該当する関数を利用していない場合は報告しない、などです。

つまり「パスした == 脆弱性は発見されなかった」と言うよりは「パスした == クリティカル致命的な脆弱性は発見されなかった」という意味合いが強い気がします。

とは言え、go testユニット・テストgolangci-lint静的解析や構文チェック などとセットで「最低限のチェック」として使える手軽さがあります。govulncheck 単体で完結させるよりは、CI の愉快な仲間たちに加えて使うのがいいと思いました。


以下は 2022/09/06 に発表された、"Vulnerability Management for Go" の日本語訳です。ライセンスは原文と同じ CC BY 4.0 です。
【文責】 原文: 2022/09/06, Julie Qiu (Go セキュリティチーム)/翻訳: 2023/01/22, @KEINOS

Go のための脆弱性管理

この度、Go 言語(以下 Go)の脆弱性管理のための新しいサポート・ツールをリリースしました。これは、Go 開発者が影響を受けるであろう「既知の脆弱性を知るための手助け」の最初のステップです。

この記事では、現在利用可能なものの概要と、このプロジェクトの次のステップについて説明します。

概要

Go のツールに、既知の脆弱性についてコードを解析するためのツールが加わりました。これらのツールは、Go セキュリティ・チームによって維持されている Go の脆弱性データベースに依存しています。新しいツールは、コードから実際に呼び出された関数の脆弱性だけを表示することによって、出力結果のノイズを低減しています。

Go 脆弱性データベース

Go 脆弱性データベース (Go Vulnerability Database, https://vuln.go.dev) は、一般にインポート可能な Go モジュールのパッケージにおける既知の脆弱性についての包括的な情報源です。

脆弱性データは、既存のソース(CVEGHSA など)と、Go パッケージのメンテナから直接受けた報告から得たものです。この情報は、Go セキュリティ・チームによってレビューされ、データベースに追加されます。

Go パッケージのメンテナには、自身のパッケージで公表した新たな脆弱性情報を提供したり、既存の脆弱性情報を更新することを推奨しています。私たちの目標は、報告の過程で摩擦を少なくすることですので、このプロセスに改善点があればぜひ提案を送ってください

Go の脆弱性データベースは、pkg.go.dev/vuln でブラウザからも利用可能です。データベースの詳細については、go.dev/security/vuln/database を参照してください。

govulncheck による脆弱性の検出

新しい govulncheck コマンドは、ソースコードを分析し、コード内のどの関数が脆弱な関数を過渡的に呼び出すかに基づいて、本当に影響を与える脆弱性のみを表示します。これにより、自身の Go プロジェクトに影響を与える可能性のある「既知の脆弱性」について、出力ノイズの少ない信頼できる情報を得られます。

govulncheck は、go install で最新版をインストールすることができます。

ツールのインストール
$ go install golang.org/x/vuln/cmd/govulncheck@latest

次に、プロジェクトのディレクトリで govulncheck を実行します。

ツールの実行
$ govulncheck ./...

govulncheck は単体で実行できるツール(スタンドアロンのバイナリ)であるため、ユーザーからのフィードバックを収集している間にも、頻繁な更新やツールのアップデートを可能にします。将来的に govulncheck ツールはメインの Go ディストリビューションに統合される予定です。

統合

脆弱性については、開発やデプロイメントといったプロセスの、できるだけ早い段階で認識することが最善です。脆弱性チェックを独自のツールやプロセスに統合するには、govulncheck -json が使用できます。

私たちは、この脆弱性検出を、既存の Go ツールやサービス(Go パッケージの検索サイトなど)に統合しました。たとえば、このページでは golang.org/x/text の各バージョンにある既知の脆弱性を表示しています。また、VSCode の Go 拡張による脆弱性チェック機能も近々利用できるようになる予定です。

次のステップへ

この Go の新しい機能のサポートが脆弱性管理のお役に立てたり、改善にご協力いただけると幸いです。

Go の脆弱性管理のサポートは、現在活発に開発が行われている新機能です。また、いくつかのバグや制限があることをご承知おきください。

皆様には、次のような改善へのご協力をお願いいたします。

より良く、より安全な Go のエコシステムを構築するために、皆さんと協力できることを楽しみにしています。

(原文: "Vulnerability Management for Go" | blog @ go.dev)

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?