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

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

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.

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

Avatar for Satoshi Kaneyasu

Satoshi Kaneyasu

December 08, 2023

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の⼿始めとしておすすめ