🔒

TrivyをGitHub Actionsで動かす際のTips

2021/09/21に公開

ワークフローの作り方の紹介記事は多かったが運用時の話が少なかったので、気になった点を整理してみようと思う。

環境

  • VCS:GitHub
  • Workflows:GitHub Actions
  • Trivy:0.19.2
  • trivy-action: 0.0.20

前提

運用ケースは以下の通りと想定する。

  1. ワークフロー構築
  2. 影響調査
  3. 対応方法決定
  4. 修正・解消

内容

ワークフロー構築

aquasecurity/trivy-action#usageにある通り。

OSパッケージ

Supported OSに一覧がある。注意点としては、 Detection of unfixed vulnerabilities がNoであれば修正済みの脆弱性のみを検出する点。

言語パッケージ

Language-specific Packagesにあるように、各種ファイルが存在している必要がある。
Vulnerability typesに指定し、ファイルが存在しなくても警告は出ないので注意。

脆弱性管理

検知された脆弱性をGitHub上でどのように管理するか。

  • 手動
    • ワークフロー結果から起票
  • 自動
    • GitHub Issue
    • GitHub Code Scanning

GitHub Issue

GitHub ActionでIssueを自動作成する方法。

  • lazy-actions/gitrivyは、Trivyで検知した結果でGitHub Issueを作成・更新してくれるアクション。

GitHub Code Scanning

SARIF 形式をサポートしている GitHub Code Scanning を利用する方法。ワークフローの書き方は (using-trivy-with-github-code-scanning) から参照できる。
ただし注意点として、 コードスキャンニングについて にあるようにプライベートリポジトリでは GitHub Advanced Securityのライセンスが必要であり、コスト面の心配がある。

影響調査

検知された脆弱性について、どのように影響調査をするか。基本的にはTrivyが脆弱性と判断したデータソースのURLを出力してくれるので、それを読むことになる。(各ライブラリのデータソースはこちらに一覧化されている。)

osライブラリについてはCVE、NVDも関係してくるが、これは別途まとめる。

対応方法決定

検知された脆弱性が現在使っている技術に影響があるのか、その脆弱性が修正済みかによってその後の対応方法が異なる。以下、簡易な表を作成してみた。

影響/脆弱性 fixed unfixed
あり バージョンアップ ベンダー・ライブラリ対応待ち
なし バージョンアップ、または無視 無視
  • 対象脆弱性の無視は、 .trivyignore で管理できる。詳細はBy Vulnerability IDsから参照。
  • 修正されていない脆弱性のフィルタリングは、 --ignore-unfixed オプションを有効にすることで実現できる。

まとめ

運用ケースを仮定して、各ステップ毎に気になる点を整理した。今後使う中で気づきがあったら更新していこうと思う。

参考

Discussion