Goブログ

Goの脆弱性管理

GoセキュリティチームのJulie Qiu
2022年9月6日

Goの新しい脆弱性管理サポートを発表できることを嬉しく思います。これは、Go開発者が影響を受ける可能性のある既知の脆弱性について学ぶのを支援するための最初のステップです。

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

概要

Goは、コードベースを分析し、既知の脆弱性を表面化するツールを提供します。このツールは、Goセキュリティチームによって管理されているGo脆弱性データベースによってサポートされています。Goのツールは、コードが実際に呼び出している関数でのみ脆弱性を表面化することによって、結果のノイズを削減します。

Architecture diagram of Go's vulnerability management system

Go脆弱性データベース

Go脆弱性データベース(https://vuln.go.dev)は、公開されているGoモジュールでインポート可能なパッケージの既知の脆弱性に関する包括的な情報源です。

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

パッケージのメンテナの皆様には、ご自身のプロジェクトの公開されている脆弱性に関する情報を提供し、Goパッケージの脆弱性に関する既存の情報を更新していただくようお願いいたします。報告の手続きを簡素化することを目指しているため、改善点に関するご提案はお寄せください

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

govulncheckを使用した脆弱性検出

新しいgovulncheckコマンドは、Goユーザーがプロジェクトに影響を与える可能性のある既知の脆弱性について学ぶための、ノイズが少なく信頼性の高い方法です。Govulncheckはコードベースを分析し、コード内のどの関数が脆弱な関数を推移的に呼び出しているかに基づいて、実際に影響を与える脆弱性のみを表面化します。

go installを使用して、govulncheckの最新バージョンをインストールできます。

$ go install golang.org/x/vuln/cmd/govulncheck@latest

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

$ govulncheck ./...

govulncheckはスタンドアロンツールであるため、ユーザーからのフィードバックを収集する際に頻繁な更新と迅速な反復が可能です。長期的に見て、govulncheckツールをメインのGo配布物に統合する予定です。

統合

開発および展開プロセスのできるだけ早い段階で脆弱性について学ぶことが常に最善です。独自のツールやプロセスに脆弱性チェックを統合するには、govulncheck -jsonを使用します。

Goパッケージ検出サイトなどの既存のGoツールやサービスに脆弱性検出を統合しました。たとえば、このページには、golang.org/x/textの各バージョンで知られている脆弱性が表示されます。VS Code Go拡張機能を使用した脆弱性チェック機能も近日公開予定です。

今後のステップ

Goの脆弱性管理サポートが役立ち、改善に役立つことを願っています!

Goの脆弱性管理サポートは、現在開発中の新しい機能です。バグや制限があることをご承知おきください。

次の方法で貢献していただき、改善に役立てていただければ幸いです。

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

次の記事:Go開発者調査2022年第2四半期結果
前の記事:Go 1.19がリリースされました!
ブログインデックス