Grypeは、コンテナイメージとファイルシステムディレクトリ内の弱点を見つけるオープンソースの脆弱性スキャナーです。 GrypeはAnchoreによって開発されましたが、AnchoreEngineよりも理解しやすいスタンドアロンのバイナリとして機能します。
既知の脆弱性は、古いオペレーティングシステムパッケージ、プログラミング言語の依存関係の侵害、および安全でないベースイメージを介してソフトウェアに侵入します。アーティファクトを積極的にスキャンすることで、悪意のある攻撃者がアーティファクトを見つける前に、問題を常に把握できます。 Grypeを使用してコードとコンテナの問題を見つける方法は次のとおりです。
Grypeは、コンパイル済みのバイナリとしてdeb
で配布されます。 、rpm
、Linuxソース、およびMac形式。 GitHubから最新のリリースを取得して、システムのパッケージマネージャーを使用するか、パス内の場所にバイナリをコピーすることでインストールできます。または、インストールスクリプトを使用して、プロセスを自動化します。
curl -sSfL https://raw.githubusercontent.com/anchore/grype/main/install.sh | sh -s -- -b /usr/local/bin
grype
を実行して、バイナリが機能していることを確認します 指図。使用可能なコマンドに関するドキュメントが表示されます。
最も単純な形式では、Grypeは、スキャンするコンテナイメージまたはファイルシステムパスを指定する単一の引数を取ります。画像をスキャンするには、有効なレジストリタグを指定してください。 Grypeは、利用可能なDockerクレデンシャルを使用して、DockerHubおよびプライベートレジストリからイメージをプルします。
grype alpine:latest
Dockerからエクスポートされたイメージアーカイブをスキャンすることもできます:
grype saved-image.tar
Grypeは、最初に実行されたときに脆弱性データベースをダウンロードします。これは現在約90MBの重さがあります。データベースが利用可能になると、GrypeはDockerイメージをプルし、その中のソフトウェアをカタログ化し、データベースに存在する既知の脆弱性を解析します。
結果は端末内のテーブルに表示されます。各脆弱性には、CVE ID、影響を受けるパッケージの名前、および重大度レベルが含まれます。今後のリリースで問題にパッチが適用されると、そのアップデートのバージョン番号がFIXED-IN
に表示されます。 桁。これは、簡単なパッケージマネージャーの更新で脆弱性に簡単に対処できるかどうかを確認するのに役立ちます。
Grypeは、最も人気のあるすべてのLinuxディストリビューションのパッケージを処理できます。また、Ruby Gems、NPMおよびYarnパッケージ、Python Eggs、Wheels、Poetryの依存関係、JAR、WAR、EAR、JPI、およびHPI形式のJavaモジュールもサポートしています。
Grypeは、マシン上のファイルシステムパスをスキャンできます。これにより、イメージを作成する前に、ソースコードリポジトリの脆弱性を発見できます。この機能を使用するには、dir:
でディレクトリパスを指定します スキーム:
grype dir:/example-dir
Grypeは、指定されたディレクトリルートの下にネストされた互換性のあるファイルを探します。見つかった各ファイルにインデックスが付けられ、脆弱性がないかスキャンされます。
ファイルシステムスキャンは、コンテナイメージスキャンと同じタイプの脆弱性を表面化します。大きなディレクトリツリーで作業している場合、スキャンが完了するまでに数分かかる場合があります。
関心のある脆弱性または解決オプションのみにレポートをスコープするために、2つのフィルタリングフラグがサポートされています。
--only-fixed
–影響を受けるパッケージの今後のリリースでパッチが適用された脆弱性のみを表示します。--fail-on high
–high
の場合、エラーコードですぐに終了します -レベルの脆弱性が見つかりました。high
の代わりに、サポートされているエラーレベル(クリティカル、高、中、低)を置き換えることができます。 。
脆弱性を無視して、誤検知や対処しないことにした問題を隠すことができます。おそらく、パッケージの使用に関連していないためです。
脆弱性を無視するには、YAML形式のカスタムGrype構成ファイルを作成する必要があります。脆弱性のCVEをトップレベルのignore
の下に追加します フィールド:
ignore: - vulnerability: CVE-2021-12345
NPMパッケージに起因するすべての問題を無視するこのバリアントなど、他のフィールドもサポートされています:
ignore: - package: type: npm
設定ファイルを.grype.yaml
に保存します または.grype/config.yaml
作業ディレクトリにあります。次回Grypeスキャンを実行するときに自動的に使用されます。グローバル設定ファイル~/.grype.yaml
もサポートされています。作業ディレクトリ内のファイルは、実行時にグローバルファイルとマージされます。
脆弱性が無視されても、Grypeの終了コードには影響しません。 JSONレポートはそれらを別のignoredMatches
に移動します ターミナルテーブルレポートがそれらを完全に除外している間、フィールド。脆弱性を無視する場合は、すべての貢献者がリスクを理解できるように、脆弱性が受け入れられた理由を文書化することを忘れないでください。
SBOMの使用
Grypeは、Anchoreの別のプロジェクトであるSyftによって生成されたSBOMを処理できます。 Syftは、コンテナイメージにインデックスを付けて、コンテナに含まれる依存関係のリストを作成します。
Syftを使用して、JSON形式で画像のSBOMを作成します。
syft alpine:latest -o json > alpine-sbom.json
次に、SBOMを使用してGrypeスキャンを実行します。
grype sbom:/alpine-sbom.json
Grypeは、部品表から生じる新しい脆弱性について、参照された画像を検査します。 SBOMでGrypeを引き続き使用して、すでに監査およびインデックス作成した画像の依存関係の新たな問題を監視します。
Grypeには、-o
を使用して切り替えることができる4つの異なる出力フォーマッターが用意されています。 CLIフラグ:
table
–端末内で消費するためのデフォルトの人間が読める形式のテーブル。-
json
–スキャンに使用されるGrypeデータベースの詳細だけでなく、各脆弱性に関するより包括的な情報を含むJSON形式のレポート。 JSONファイルは、長期的なアーカイブと比較、またはCIビルドアーティファクトとしての使用に適しています。 -
cyclonedx
–SBOMおよび脆弱性リストをサポートする他のツールにフィードする準備ができているXML形式のCycloneDX互換レポート。 template
–この高度なフォーマッターを使用すると、任意の形式で独自のレポートを作成できます。
template
フォーマッターは、レポート出力のレンダリングに使用されるGoテンプレートを受け入れます。このフォーマッターを使用するには、名前で指定しないでください。代わりに、Goテンプレートを含むファイルへのパスを渡します。
grype alpine:latest -o output-template.tmpl
テンプレートは、Goテンプレート構文を使用して、Grypeが提供する変数を参照する必要があります。 HTMLページ、Markdownファイル、カスタムJSON構造など、必要なあらゆる種類のファイル形式を作成できます。 Grypeのドキュメントには、使用可能な変数からCSVファイルを作成する例が含まれています。
脆弱性データベースには、Grypeに知られているすべての脆弱性の詳細が格納されています。ダウンロードされると、キャッシュされたバージョンは、アップデートが利用可能になるまで再利用されます。通常、データベースを手動で操作する必要はありません。
状況によっては、データベースのダウンロードを強制する必要がある場合があります。これは、スキャンを実行する前にエアギャップサーバーを設定していることが原因である可能性があります。 grype db check
を使用します およびgrype db update
データベースの新しいバージョンを確認してダウンロードするためのコマンド。
データベースが利用可能になると、システムがオフラインのときにスキャンが機能します。 GRYPE_DB_AUTO_UPDATE
を設定することで、Grypeの自動データベース更新チェックを無効にできます。 false
への環境変数 シェルで。
Grypeは、コンテナ内およびファイルシステム上の脆弱性を警告します。スタンドアロンのCLIバイナリであるため、Anchoreの完全インストールよりも簡単に開始できます。
どちらを選択すべきか疑問に思っている場合、Anchoreの価値は、その拡張性と高度な構成オプションにあります。 Anchore Engineを使用すると、ゲート、トリガー、およびアクションに基づいて独自のポリシーセットを定義できます。これらにより、特定の環境に合わせてスキャンを正確に調整できます。 Grypeは、画像に既知の脆弱性のリストが必要な場合に、より合理化されたエクスペリエンスを提供します。
どちらを選択しても、何らかの形のアクティブな脆弱性スキャンを採用することで、ソフトウェアサプライチェーンの弱点を常に把握できます。完全に統合されたアプローチの場合、CIパイプラインの一部としてGrypeを使用すると、コードがコミットされるときに新しい脆弱性が通知されます。