エンド ツー エンドのソフトウェア サプライ チェーンを理解する
ソフトウェア サプライ チェーンを包括的に理解することは、セキュリティ体制と脅威サーフェスの理解に重要です。サプライ チェーン セキュリティが複雑な理由の 1 つは、依存性を理解してセキュリティで保護する必要があるだけではなく、一時的な依存性を理解してセキュリティで保護する必要もあることです。つまり、依存性の依存性であり、さらにそれらの依存性の依存性などです。Ruby や Node.js などの一部のプログラミング プラットフォームには、一時的な依存性を指定するロック ファイルが含まれています。しかし、そうでないプラットフォームもあります。
このガイドでは、GitHub Actions で GitHub Dependency Submission API を使用して一時的な依存関係のマップを作成し、それを依存関係グラフに渡すことで、Dependabot が全ての依存関係をスキャンして警告できるようにします。続いてソフトウェア部品表(SBOM)の作成方法を説明することにより、全ての依存関係を報告し、一貫性のある再現可能な形式でサプライ チェーン セキュリティの状態を関連する利害関係者と共有できるようにします。今回も、GitHub プリンシパル フィールド セキュリティ スペシャリストの Keith Hoodlet がご意見番として参加します。
このガイドの学習内容
GitHub Actions で依存関係のスナップショットを作成し、GitHub Dependency Submission API を使ってアップロードする方法
依存関係グラフで結果を表示する方法
GitHub Actions でソフトウェア部品表(SBOM)を自動的にエクスポートする方法
1. 現在の依存関係グラフを確認します。
Web Goat リポジトリで [インサイト] タブを選択し、サイドバーから [依存関係グラフ] を選択します。この時点で Web Goat の依存関係が 4 ページにわたってリストアップされているはずです。
2. GitHub Actions で依存関係のスナップショットを作成し、アップロードします。
依存関係マップは手作業でも作成できますが、今回は GitHub Actions で自動生成することにします。
最適なセキュリティを実現するには、依存関係グラフをできるだけ最新の状態に保つ必要があります。つまり、早い段階で頻繁に更新しなければなりません。致命的な脆弱性があるかどうかを判断するための構築を待ってはいられません。最新の状態を維持するには、自動化が一番です。
Web Goat リポジトリで [アクション] タブを選択します。
[新しいワークフロー] を選択し、次のように名前を付けます。upload-dependencies-of-dependenices.yml
.
以下のワークフローを upload-dependencies-of-dependenices.yml
ファイルに追加します。
name: "Dependency Submission API Upload"
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
schedule:
- cron: '26 18 * * 1'
jobs:
depSubmissionAPIUpload:
name: Analyze
runs-on: 'ubuntu-latest'
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Submit Dependency Snapshot
uses: advanced-security/maven-dependency-submission-action@v3
これにより、GitHub で作成された maven-dependency-submission-action というアクションが使用され、Maven で一時的な依存関係を含む全ての依存関係のスナップショットが取得され、Dependency Submission API を介して GitHub にアップロードされます。
同様のアクションは、他のビルドシステムやプラットフォーム (Go、Gradle、Mill、Scala など) でも見られます。
3. 結果をレビューします。
もう一度、Web Goat リポジトリの [インサイト] タブを選択して、次にサイドバーの [依存関係グラフ] を選択します。
今の時点で依存関係は 16 ページ前後になり、これらの依存関係とそのセキュリティ態勢に新たな可視性が得られているはずです。
SBOM を生成する
ソフトウェア部品表 (SBOM) のアイディアは、サプライ チェーン セキュリティに対する懸念の高まりや、ソフトウェア サプライ チェーンの透明性を高めようとする世界中の規制当局や政府機関の勧告や必須要件を受け、ますます重要となっています。SBOM の便利な点は、ソフトウェア サプライ チェーンのスナップショットとそのセキュリティ態勢を、エクスポート可能な標準形式で共有できることです。 幸いなことに、GitHub が皆さんのリポジトリごとに作成できる依存関係グラフは SBOM であり、業界標準の SPDX 形式でエクスポートできます。
1. 迅速かつ簡単なエクスポート。
Web Goat リポジトリで [インサイト] タブを選択し、サイドバーから [依存関係グラフ] を選択します。
[Export SBOM] ボタンを選択します。
これで完了です。
2. GitHub Actions を使用した SBOM のエクスポートとアップロードの自動化。
次はこのプロセスを自動化してみましょう。やり方は前述の一時的な依存関係の報告と同じです。
Web Goat リポジトリで [アクション] タブを選択します。
[新しいワークフロー] を選択し、次のように名前を付けます。SBOM.yml
.
name: SBOM Generator
on:
push:
branches: [ "main" ]
workflow_dispatch:
permissions: read-all
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: advanced-security/sbom-generator-action@v0.0.1
id: sbom
env:
GITHUB_TOKEN: ${{ github.token }}
- uses: actions/upload-artifact@v3.1.0
with:
path: ${{steps.sbom.outputs.fileName }}
name: "SBOM"
これにより、GitHub で作成されたファーストパーティアクション sbom-generator-action を使用して SBOM JSON ファイルを生成し、リポジトリのメインブランチに変更をプッシュするたびにアーティファクトとしてアップロードすることで、手元の SBOM を常に最新の状態に保つことができます。
次の項目: GitHub Advanced Security 上級モジュールのラップアップ
ここで、これまでに学んだことを復習し、GitHub Advanced Security で他に何ができるかを見てみましょう。