Slide 1

Slide 1 text

OSSツールのTrivyでSBOM出⼒と脆弱性検査をしてみた Satoshi Kaneyasu 2023.12.10 OSC2023 Yamaguchi

Slide 2

Slide 2 text

2 ⾃⼰紹介 ⽒名︓兼安 聡 在住︓広島 所属︓株式会社サーバーワークス(ʼ23/05〜) 趣味︓サックス、筋トレ、CS ゲーム 資格︓ X(Twitter)︓@satoshi256kbyte 最近のお仕事︓DevOpsの推進 など

Slide 3

Slide 3 text

3 最近の気になるニュース グーグル系企業が三原の本郷産業団地に進出、1000億円でデータセン ター建設へ 広島県が全区画売却

Slide 4

Slide 4 text

⽬次 1. 今回の発表の⽬的 2. SBOMとは 3. SBOMを取り巻く状況 4. OSSのTrivyでSBOM出⼒と脆弱性検査してみる 5. Trivyは何を⾒て脆弱性を判定しているのか︖ 6. GitHub ActionsとTrivy 7. まとめ

Slide 5

Slide 5 text

5 今回の発表の⽬的 • DevSecOpsを始めたくて、SBOMに着⽬しました。 • OSSのTrivyを使って脆弱性検査とSBOM出⼒について調べたので、 その知⾒を共有します。 <本資料執筆に⽤いた環境> • Amazon Linux 2023 • Trivy 0.48.0

Slide 6

Slide 6 text

SBOMとは

Slide 7

Slide 7 text

7 SBOMとは • Software Bill of Materials • ソフトウェアコンポーネントやそれらの依存関係をリスト化したもの • 国際的な標準規格あり • SPDX(Software Package Data Exchange) • CycloneDX • SWID タグ(Software Identification タグ) • 機械処理可能

Slide 8

Slide 8 text

8 SBOMを使⽤する⽬的 • ソフトウェアコンポーネントの脆弱性管理 • ソフトウェアコンポーネントのライセンス管理 • 管理コストの削減 • 脆弱性の少ない製品が増えることで、サイバー衛⽣を向上させる <参考> 経済産業省 - ソフトウェア管理に向けたSBOM(Software Bill of Materials)の導 ⼊に関する⼿引 Ver. 1.0

Slide 9

Slide 9 text

9 SBOMを使⽤する⽬的 • ソフトウェアコンポーネントの脆弱性管理 • ソフトウェアコンポーネントのライセンス管理 • 管理コストの削減 • 脆弱性の少ない製品が増えることで、サイバー衛⽣を向上させる <参考> 経済産業省 - ソフトウェア管理に向けたSBOM(Software Bill of Materials)の導 ⼊に関する⼿引 Ver. 1.0

Slide 10

Slide 10 text

SBOMを取り巻く状況

Slide 11

Slide 11 text

11 SBOMを取り巻く状況 • SBOMの対応状況は、業界ごとによって異なる • 公共性の強い業界ほど、SBOMの議論が進んでおり、 医療業界がもっとも進んでいる模様 • 経済産業省 - サイバー・フィジカル・セキュリティ確保に向けたソフトウェア管 理⼿法等検討タスクフォースの検討の⽅向性 「本事業の成果物を活⽤したSBOM普及促進策案」(P33)より 基準・ガイドラインに関連付いた業界の解説⽂書、業界セミナーなどでSBOMガイダンスの参照・ 推奨を受けデファクト化を推進。 (規制当局・認証機関におけるSBOMガイダンスの活⽤促進)

Slide 12

Slide 12 text

12 薬事法とSBOM • 今年の春に薬事法が改正、SBOMの記載が追記 • 1年間の経過措置期間あり • 2024年に向けて、医療業界ではSBOM対応が進んでいると思われる • 厚⽣労働省 - 医療機器の基本要件基準第12条第3項の適合性の確認に ついて (4) JIS T 81001―5―1の箇条8のソフトウェア構成管理プロセスについて 構成管理プロセスは、 当該医療機器のソフトウェア部品表(SBOM)を適切に作成することによって確認すること。

Slide 13

Slide 13 text

OSSのTrivyでSBOM出⼒と脆弱性検知してみる

Slide 14

Slide 14 text

14 Trivyとは • OSSのツール • コンテナイメージやアプリのソフトウェアコンポーネントを検査 • SBOMを出⼒可能 • 脆弱性を検知可能 • 脆弱性DBは⾃動更新 • Trivy公式

Slide 15

Slide 15 text

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"

Slide 16

Slide 16 text

16 TrivyでSBOMを出⼒する trivy fs ./ --format spdx-json --output spdx-json-by-trivy.json 出⼒結果

Slide 17

Slide 17 text

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... 脆弱性なし

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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 出⼒結果

Slide 20

Slide 20 text

20 出⼒したSBOMを使って再検査 trivy sbom spdx-json-by-trivy.json 脆弱性が⾒つかる CVEも想定通り

Slide 21

Slide 21 text

21 TrivyによるSBOM出⼒と脆弱性検査、ここまでのまとめ • SBOMを出⼒することが可能 • これをいつでも提⽰可能にすることが、SBOM⽤いたソフトウェア コンポーネント管理のゴールの⼀つ • SBOMを受け取って、それを元に脆弱性検査が可能 • Trivyはホントは⾃前で⼀気に脆弱性検査をすることが可能 trivy fs ./

Slide 22

Slide 22 text

Trivyは何を⾒て脆弱性を判定しているのか︖

Slide 23

Slide 23 text

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 以下略

Slide 24

Slide 24 text

24 CVEとNVDとJVN 我々⽇本⼈がよく⽬にするのは、JVNだが、NVDもベースは同じなので⼤丈夫︕ CVE 共通脆弱性識別⼦ NVD National Vulnerability Database アメリカ国⽴標準技術研究所(NIST) JVN Japan Vulnerability Notes JPCERT/CCとIPAが共同で運営 連携 連携

Slide 25

Slide 25 text

GitHub ActionsとTrivy

Slide 26

Slide 26 text

26 GitHub Actionsとは • ビルド、テスト、デプロイのパイプラインを⾃動化できる継続的イン テグレーションと継続的デリバリー (CI/CD) のプラットフォーム • ソース内に.github/workflowフォルダを作り、yamlを書くことで、 プッシュ時に指定した⼀連のプロセスを⾛らせることができる . ├── .github │ └── workflows │ └── trivy-scan-fs.yml ├── Pipfile ├── Pipfile.lock └── app.py

Slide 27

Slide 27 text

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で脆弱性ありなら、 異常終了させる

Slide 28

Slide 28 text

28 脆弱性を検知した時点で、ワークフローを中断可能

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

[脇道]GitHubのDependency graph

Slide 31

Slide 31 text

31 GitHubのDependency graph Dependency graphを有効にすると、 Trivyなしでもソフトウェアコンポーネントの検出と、 SBOM出⼒は可能

Slide 32

Slide 32 text

32 Dependency graphの対象はデフォルトブランチ • 現時点では、Dependency graphの対象はデフォルトブランチ • 結果的にだいたいmainブランチ • 複数ブランチ、プルリク時など、 ソフトウェアコンポーネント検出と脆弱性検査のタイミングをコント ロールしたいなら、GitHub Actions+Trivyで棲み分け

Slide 33

Slide 33 text

まとめ

Slide 34

Slide 34 text

34 まとめ • SBOMはソフトウェアコンポーネントの管理表 • ⽬的は管理コストの削減 • SBOMから脆弱性検査可能 • SBOM出⼒、脆弱性検査をCI/CDに組み込むことも可能 • Trivyの脆弱性検知はNVDを使⽤、⼤元を辿ればCVE • Trivy⾃体は、シンプルなツールで、DevSecOpsの⼿始めとしておすすめ

Slide 35

Slide 35 text

ご清聴ありがとうございました。

Slide 36

Slide 36 text

No content