Upgrade to Pro — share decks privately, control downloads, hide ads and more …

OSSツールのTrivyでSBOM出力と脆弱性検査をしてみた

 OSSツールのTrivyでSBOM出力と脆弱性検査をしてみた

Satoshi Kaneyasu

December 08, 2023
Tweet

More Decks by Satoshi Kaneyasu

Other Decks in Programming

Transcript

  1. ⽬次 1. 今回の発表の⽬的 2. SBOMとは 3. SBOMを取り巻く状況 4. OSSのTrivyでSBOM出⼒と脆弱性検査してみる 5.

    Trivyは何を⾒て脆弱性を判定しているのか︖ 6. GitHub ActionsとTrivy 7. まとめ
  2. 7 SBOMとは • Software Bill of Materials • ソフトウェアコンポーネントやそれらの依存関係をリスト化したもの •

    国際的な標準規格あり • SPDX(Software Package Data Exchange) • CycloneDX • SWID タグ(Software Identification タグ) • 機械処理可能
  3. 11 SBOMを取り巻く状況 • SBOMの対応状況は、業界ごとによって異なる • 公共性の強い業界ほど、SBOMの議論が進んでおり、 医療業界がもっとも進んでいる模様 • 経済産業省 -

    サイバー・フィジカル・セキュリティ確保に向けたソフトウェア管 理⼿法等検討タスクフォースの検討の⽅向性 「本事業の成果物を活⽤したSBOM普及促進策案」(P33)より 基準・ガイドラインに関連付いた業界の解説⽂書、業界セミナーなどでSBOMガイダンスの参照・ 推奨を受けデファクト化を推進。 (規制当局・認証機関におけるSBOMガイダンスの活⽤促進)
  4. 12 薬事法とSBOM • 今年の春に薬事法が改正、SBOMの記載が追記 • 1年間の経過措置期間あり • 2024年に向けて、医療業界ではSBOM対応が進んでいると思われる • 厚⽣労働省

    - 医療機器の基本要件基準第12条第3項の適合性の確認に ついて (4) JIS T 81001―5―1の箇条8のソフトウェア構成管理プロセスについて 構成管理プロセスは、 当該医療機器のソフトウェア部品表(SBOM)を適切に作成することによって確認すること。
  5. 15 サンプルコード . ├── Pipfile ├── Pipfile.lock └── app.py [[source]]

    url = https://pypi.org/simple verify_ssl = true name = "pypi” [packages] flask = "*” [dev-packages] [requires] python_version = "3.11"
  6. 17 出⼒したSBOMを使って脆弱性検査 trivy sbom spdx-json-by-trivy.json [ec2-user@ip-10-192-10-35 flask-trivy]$ trivy sbom spdx-json-by-trivy.json

    2023-12-10T00:35:07.929Z INFO Vulnerability scanning is enabled 2023-12-10T00:35:07.930Z INFO Detected SBOM format: spdx-json 2023-12-10T00:35:07.934Z INFO Number of language-specific files: 1 2023-12-10T00:35:07.934Z INFO Detecting pipenv vulnerabilities... 脆弱性なし
  7. 18 脆弱性のあるライブラリに変える . ├── Pipfile ├── Pipfile.lock └── app.py [[source]]

    url = https://pypi.org/simple verify_ssl = true name = "pypi” [packages] flask = ”2.3.1” [dev-packages] [requires] python_version = "3.11" CVE-2023-30861 Flask vulnerable to possible disclosure of permanent session cookie due to missing Vary: Cookie header
  8. 19 脆弱性のあるライブラリに変えてから再度SBOM出⼒ Pipfileを修正後、Pipfile.lockを出し直し pipenv install SBOMを再出⼒ { "name": "flask", "SPDXID":

    "SPDXRef-Package-1900dc034389c35b", "versionInfo": "3.0.0", "supplier": "NOASSERTION", "downloadLocation": "NONE", "filesAnalyzed": false, "licenseConcluded": "NONE", "licenseDeclared": "NONE", { "name": "flask", "SPDXID": "SPDXRef-Package-2b8b83ad929a375a", "versionInfo": "2.3.1", "supplier": "NOASSERTION", "downloadLocation": "NONE", "filesAnalyzed": false, "licenseConcluded": "NONE", "licenseDeclared": "NONE", 1回⽬ 2回⽬ trivy fs ./ --format spdx-json --output spdx-json-by-trivy.json 出⼒結果
  9. 23 Trivyの脆弱性データベース 12時間ごとに更新 Trivy - Datasource Nam / OS Source

    National Vulnerability Database NVD Arch Linux Vulnerable Issues Alpine Linux secdb Amazon Linux Amazon Linux Security Center Debian Security Bug Tracker OVAL Ubuntu Ubuntu CVE Tracker RHEL/CentOS OVAL Security Data 以下略
  10. 26 GitHub Actionsとは • ビルド、テスト、デプロイのパイプラインを⾃動化できる継続的イン テグレーションと継続的デリバリー (CI/CD) のプラットフォーム • ソース内に.github/workflowフォルダを作り、yamlを書くことで、

    プッシュ時に指定した⼀連のプロセスを⾛らせることができる . ├── .github │ └── workflows │ └── trivy-scan-fs.yml ├── Pipfile ├── Pipfile.lock └── app.py
  11. 27 ワークフローにTrivyによる脆弱性検査を⼊れる name: Trivy Vulnerability Scan on: push: branches: -

    main pull_request: jobs: build: name: Build runs-on: ubuntu-20.04 steps: - name: Checkout code uses: actions/checkout@v3 - name: Run Trivy vulnerability scanner in fs mode run: | # https://aquasecurity.github.io/trivy/v0.18.3/installation/ sudo apt-get install wget apt-transport-https gnupg lsb-release wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | sudo apt-key add - echo deb https://aquasecurity.github.io/trivy-repo/deb $(lsb_release -sc) main | sudo tee –a /etc/apt/sources.list.d/trivy.list sudo apt-get update sudo apt-get install trivy trivy fs ./ --exit-code 1 Trivyのインストール Trivyの実⾏ --exit-code 1で脆弱性ありなら、 異常終了させる
  12. 29 trivy-actionを⽤いればもっとスマート • trivy-action name: Trivy Vulnerability Scan by trivy-action

    on: push: branches: - main pull_request: jobs: build: name: Build runs-on: ubuntu-20.04 steps: - name: Checkout code uses: actions/checkout@v3 - name: Run Trivy vulnerability scanner in fs mode uses: aquasecurity/trivy-action@master with: scan-type: 'fsʼ scan-ref: '.ʼ trivy-config: trivy-config.yaml
  13. 32 Dependency graphの対象はデフォルトブランチ • 現時点では、Dependency graphの対象はデフォルトブランチ • 結果的にだいたいmainブランチ • 複数ブランチ、プルリク時など、

    ソフトウェアコンポーネント検出と脆弱性検査のタイミングをコント ロールしたいなら、GitHub Actions+Trivyで棲み分け
  14. 34 まとめ • SBOMはソフトウェアコンポーネントの管理表 • ⽬的は管理コストの削減 • SBOMから脆弱性検査可能 • SBOM出⼒、脆弱性検査をCI/CDに組み込むことも可能

    • Trivyの脆弱性検知はNVDを使⽤、⼤元を辿ればCVE • Trivy⾃体は、シンプルなツールで、DevSecOpsの⼿始めとしておすすめ