GitHub でのサプライ チェーンのセキュリティについて
ソフトウェア プロジェクトを開発する場合、他のソフトウェアを使用して、オープンソース ライブラリ、フレームワーク、その他のツールなど、アプリケーションをビルドして実行することがあります。 これらのリソースは、プロジェクトが適切に機能するために依存しているため、総称で "依存関係" と呼びます。 プロジェクトは、これらの数百もの依存関係に依存する可能性があり、"サプライ チェーン" 呼ばれるものを形成します。
サプライ チェーンがセキュリティ上の問題を引き起こすことがあります。 依存関係の 1 つに既知のセキュリティ上の弱点やバグがある場合、悪意のあるアクターはこの脆弱性を悪用して、悪意のあるコード ("マルウェア") を挿入したり、機密データを盗んだり、プロジェクトに各種中断を引き起こしたりすることがあります。 この種の脅威は、"サプライ チェーン攻撃" と呼びます。 サプライ チェーンに脆弱な依存関係があると、独自のプロジェクトのセキュリティが損なわれ、ユーザーも危険にさらされます。
サプライ チェーンを保護するために実行できる最も重要なことの 1 つとして、脆弱性のある依存関係に対してパッチを適用し、マルウェアを置き換えることが挙げられます。
依存関係をサプライ チェーンに直接追加するときは、マニフェスト ファイルまたはロックファイルで指定します。 依存関係は推移的に含めることもできます。つまり、特定の依存関係を指定しなくても、使用している依存関係が別の依存関係を使用している場合は、その依存関係にも依存することになります。
GitHub には、環境内の依存関係を理解し、それらの依存関係の脆弱性を把握し、それらに修正プログラムを適用するのに役立つさまざまな機能が用意されています。
GitHubのサプライ チェーン機能は次のとおりです。
* 依存関係グラフ * 依存関係レビュー
- Dependabot alerts
- Dependabot malware alerts
- Dependabot updates
- Dependabot security updates
- Dependabot version updates
-
**変更できないリリース** -
**成果物の証明書**
依存関係グラフは、サプライ チェーンのセキュリティの中心です。 依存関係グラフによって、リポジトリまたはパッケージについて、すべてのアップストリーム依存関係とパブリック ダウンストリーム依存関係が識別されます。 リポジトリの依存関係グラフでは、その依存関係と、それらのプロパティの一部 (脆弱性情報など) が追跡され、表示されます。
GitHubに関する次のサプライ チェーン機能は、依存関係グラフによって提供される情報に依存します。
- 依存関係レビューは、依存関係グラフを使用して依存関係の変更を特定し、ユーザーが pull request を確認するときにそれらの変更がセキュリティに及ぼす影響を理解するのに役立ちます。
-
Dependabot 依存関係グラフによって提供される依存関係データと、 GitHub Advisory Databaseで公開されているアドバイザリの一覧を相互参照し、依存関係をスキャンし、潜在的な脆弱性が検出されたときに Dependabot alerts を生成します。 -
Dependabot security updates 依存関係グラフと Dependabot alerts を使用して、リポジトリ内の既知の脆弱性による依存関係の更新に役立ちます。 Dependabot version updates 依存関係グラフを使用せず、代わりに依存関係のセマンティック バージョン管理に依存してください。 Dependabot version updates は、脆弱性がない場合でも、依存関係を更新し続けるのに役立ちます。
個人アカウント、コードおよびビルド プロセスの保護を含む、エンド ツー エンドのサプライ チェーンのセキュリティに関するベスト プラクティス ガイドについては、「AUTOTITLE」を参照してください。
機能の概要
依存関係グラフとは何かを確認します。
依存関係グラフを生成するには、 GitHub マニフェストとロックファイルで宣言されているリポジトリの明示的な依存関係を確認します。 有効にすると、依存関係グラフはリポジトリ内のすべての既知のパッケージ マニフェスト ファイルを自動的に解析し、これを使用して既知の依存関係の名前とバージョンを含むグラフを作成します。
- 依存関係グラフには、"直接" 依存関係と "推移的" 依存関係の情報が含まれます。
- 依存関係グラフは、コミットをプッシュして、サポートされているマニフェストまたはロック ファイルを既定のブランチに変更または追加する GitHub にプッシュし、だれかが依存関係の 1 つのリポジトリに変更をプッシュすると、自動的に更新されます。
- 依存関係グラフには、プロジェクトが GitHub Actionsを使用してビルドするときに指定した情報を含めることもできます。 一部のパッケージ エコシステムは、推移的な依存関係のほとんどをビルド時に取り込むため、ビルドの実行中に依存関係情報を送信すると、サプライ チェーンのより完全なビューが提供されます。
- 依存関係グラフを表示するには、 GitHubでリポジトリのメイン ページを開き、[ 分析情報 ] タブに移動します。
- 少なくともリポジトリへの読み取りアクセス権がある場合は、GitHub UI または GitHub REST API を使って、リポジトリの依存関係グラフを SPDX 互換のソフトウェア部品表 (SBOM) としてエクスポートできます。 詳しくは、「リポジトリのソフトウェア部品表のエクスポート」をご覧ください。
依存関係送信 API を使用すれば、マニフェストまたはロックファイル分析のための依存関係グラフでサポートされていないエコシステムであっても、パッケージマネージャーや使用したいエコシステムから依存関係を送信できます。 依存関係送信 API を使ってプロジェクトに送信された依存関係には、提出にどの検出機能が使われたか、いつ送信されたかが表示されます。 依存関係送信 API について詳しくは、「依存関係サブミッション API を使用する」をご覧ください。
依存関係グラフの詳細については、「AUTOTITLE」を参照してください。
依存関係レビューとは
依存関係レビューは、レビュー担当者と共同作成者が、すべての pull request における依存関係の変更とそのセキュリティへの影響を理解するのに役立ちます。
- 依存関係レビューでは、pull request で追加、削除、または更新された依存関係がわかります。 リリース日、依存関係の評判、脆弱性情報を使用して、変更を受け入れるかどうかを判断できます。
- pull request の依存関係レビューは、 Files Changed タブの詳しい差分を表示すると確認できます。
依存関係レビューの詳細については、「AUTOTITLE」を参照してください。
Dependabot とは
Dependabot では、依存関係のセキュリティの脆弱性を通知し、依存関係をアップグレードするための pull request を自動的に開くことで、依存関係を最新の状態に保ちます。
Dependabot pull requests は、 Dependabot アラートがトリガーされたときに次に使用可能なセキュリティで保護されたバージョンをターゲットにするか、リリースが発行されたときに最新バージョンを対象とします。
"Dependabot" という用語には、次の機能が含まれます。 * Dependabot alerts: リポジトリの [ Security and quality ] タブとリポジトリの依存関係グラフに通知が表示されました。 アラートには、プロジェクト内で影響を受けるファイルへのリンクと、修正バージョンに関する情報が含まれています。 * Dependabot updates: * Dependabot security updates: アラートがトリガーされたときに依存関係をセキュリティで保護されたバージョンにアップグレードするためにトリガーされた更新。 * Dependabot version updates: 最新バージョンで依存関係を最新の状態に保つためにスケジュールされた更新。
Dependabotによって開かれたプル要求は、アクションを実行するワークフローをトリガーできます。 詳細については、 [AUTOTITLE を](/code-security/dependabot/working-with-dependabot/automating-dependabot-with-github-actions)参照してください。
既定では、次の手順を実行します。
-
リポジトリGitHub Actionsが有効になっている場合は、GitHubはGitHub ActionsでDependabot updatesを実行します。
-
GitHub Actionsがリポジトリに対して有効になっていない場合、GitHubは組み込みのDependabot alerts アプリケーションを使用してDependabotを生成します。
詳しくは、「GitHub Actions ランナーの Dependabot について」をご覧ください。
Dependabot security updates を使うと、GitHub Actions の脆弱な依存関係を修正できます。 セキュリティ更新プログラムが有効になっている場合、ワークフローで使用されている脆弱な GitHub Actions を修正プログラムが適用された最小バージョンに更新するための pull request が、Dependabot によって自動的に生成されます。 詳細については、 [AUTOTITLE を](/code-security/dependabot/dependabot-security-updates/about-dependabot-security-updates)参照してください。
Dependabot アラートとは
Dependabot alerts は、依存関係グラフと、既知の脆弱性に関するアドバイザリを含む GitHub Advisory Databaseに基づいて、新しく検出された脆弱性の影響を受けるリポジトリを強調表示します。
* Dependabot は、スキャンを実行して安全でない依存関係を検出し、次の場合に Dependabot alerts を送信します。
- 新しいアドバイザリがGitHub Advisory Database
- リポジトリの依存関係グラフの変更
-
Dependabot alerts は、リポジトリの [ **<svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-shield" aria-label="shield" role="img"><path d="M7.467.133a1.748 1.748 0 0 1 1.066 0l5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667Zm.61 1.429a.25.25 0 0 0-.153 0l-5.25 1.68a.25.25 0 0 0-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.196.196 0 0 0 .154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.251.251 0 0 0-.174-.237l-5.25-1.68ZM8.75 4.75v3a.75.75 0 0 1-1.5 0v-3a.75.75 0 0 1 1.5 0ZM9 10.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path></svg> Security and quality** ] タブとリポジトリの依存関係グラフに表示されます。 アラートには、プロジェクト内で影響を受けるファイルへのリンクと、修正バージョンに関する情報が含まれています。
詳しくは、「Dependabot アラートについて」をご覧ください。
Dependabot malware alertsとは
Dependabot malware alerts リポジトリ内の悪意のある依存関係にフラグを設定します。
Dependabot は、既知の脆弱性と悪意のあるパッケージに関するアドバイザリを含む GitHub Advisory Databaseを使用してアラートを生成します。
Dependabot 悪意のあるパッケージをスキャンし、次の場合にアラートを送信します。
- システムに新しいアドバイザリが追加されます。 GitHub Advisory Database
- リポジトリの依存関係グラフの変更
リポジトリの malware alerts を表示できます。
- [ Security and quality ] タブから
- 依存関係グラフ内
各アラートには、プロジェクト内の影響を受けるファイルへのリンクと、パッケージのパッチ バージョン番号 (使用可能な場合) が含まれます。
Dependabot 更新プログラムとは
Dependabot updatesには、Dependabot_セキュリティ_更新プログラムと_バージョン_更新プログラムの 2 種類があります。
Dependabot では、どちらの場合も依存関係を更新するための自動プル要求が生成されますが、いくつかの違いがあります。
Dependabot security updates:
* Dependabot アラートによってトリガーされる
-
既知の脆弱性を解決する最小バージョンに依存関係を更新します。
-
依存関係グラフがサポートするエコシステムでサポートされます。
-
構成ファイルは必要ありませんが、既定の動作をオーバーライドするために使用できます
Dependabot version updates: -
構成ファイルが必要です
-
構成したスケジュールに従って実行します。
-
構成と一致する最新バージョンに依存関係を更新します。
-
さまざまな一連のエコシステムでサポートされます。
Dependabot updatesの詳細については、「[AUTOTITLE](/code-security/dependabot/dependabot-security-updates/about-dependabot-security-updates)」および[「AUTOTITLE](/code-security/dependabot/dependabot-version-updates/about-dependabot-version-updates)」を参照してください。
変更できないリリースとは
リポジトリを使用すると、変更できないリリースを有効にして、リリースのアセットと関連する Git タグが発行後に変更されないようにすることができます。 これにより、攻撃者が使用するリリースに脆弱性が挿入されるのを防ぐことで、サプライ チェーン攻撃のリスクが軽減されます。 また、特定のリリースに依存するプロジェクトが中断する可能性が低くなることも意味します。
変更できないリリースを作成すると、リリースの構成証明が自動的に生成されます。 この構成証明を使用して、リリースとその成果物が公開された情報と一致することを確認できます。
アーティファクトの構成証明とは
ソフトウェア プロバイダーは、 GitHub Actionsで構築されたソフトウェアの構成証明を生成できます。 アテステーションは、ビルドの由来(ビルドに使用されるソースコードとワークフローの実行)や関連ソフトウェア部品表(SBOM)を確立するための暗号的に署名された主張です。
依存関係の構成証明を確認することで、サプライ チェーンのセキュリティを強化できます。 構成証明ではセキュリティは保証されませんが、ソフトウェアのビルド場所と方法に関する情報が提供されるため、依存関係が改ざんされていないことをより確実に確認できます。 Kubernetes アドミッション コントローラーなどのツールを使用してデプロイをゲートし、未フォーマットのビルドがデプロイされないようにすることができます。
GitHub Actionsを使用して組織独自のビルドの構成証明を生成すると、ビルドされた成果物がlinked artifacts pageに自動的にアップロードされます。 このプラットフォームを使用すると、リンクされたすべての成果物のストレージとデプロイ レコードを表示できるため、成果物の構築やデプロイ コンテキストに基づくセキュリティ アラートのフィルター処理に使用されるソース コードとワークフローの実行を見つけることができます。
使用可能な機能
パブリック リポジトリ: * 依存関係グラフ: 既定で有効になっており、無効にできません。 * 依存関係レビュー: 既定で有効になっており、無効にできません。 * ** Dependabot alerts:** 既定では有効になっていません。 GitHub では、安全でない依存関係が検出され、依存関係グラフに情報が表示されますが、既定では Dependabot alerts は生成されません。 リポジトリの所有者または管理者アクセス権を持つユーザーは、 Dependabot alertsを有効にすることができます。 また、ユーザーは自らのユーザー アカウントまたは組織が所有するすべてのリポジトリでも、Dependabot アラートを有効化または無効化できます。 詳細については、「セキュリティと分析機能の管理」または「組織のセキュリティおよび分析設定を管理する」を参照してください。 * 成果物の構成証明: すべてのパブリック リポジトリで使用できますが、ビルド ワークフローで構成証明を明示的に生成する必要があります。 「アーティファクトの構成証明を使用してビルドの出所を確立する」を参照してください。
プライベート リポジトリ: * 依存関係グラフ: 既定で有効になっていません。 この機能は、リポジトリ管理者が有効にすることができます。 詳しくは、「リポジトリの依存関係を調べる」をご覧ください。 * **依存関係の確認:GitHub TeamまたはGitHub Enterprise Cloudを使用し、GitHub Code Security or GitHub Advanced Securityのライセンスを持つ組織が所有するプライベート リポジトリで使用できます。 詳細については、「GitHub Advanced Security について」および「リポジトリの依存関係を調べる」を参照してください。 * ** Dependabot alerts: 既定では有効になっていません。 プライベート リポジトリの所有者、または管理者アクセス権を持つユーザーは、リポジトリの依存関係グラフとDependabot alertsを有効にすることで、Dependabot alertsを有効にすることができます。 また、ユーザーは自らのユーザー アカウントまたは組織が所有するすべてのリポジトリでも、Dependabot アラートを有効化または無効化できます。 詳細については、「セキュリティと分析機能の管理」または「組織のセキュリティおよび分析設定を管理する」を参照してください。 * 成果物の認証はGitHub Enterprise Cloudのプライベートリポジトリでのみ利用可能です。
すべての種類のリポジトリ: * ** Dependabot security updates:** 既定では有効になっていません。 Dependabot security updatesと依存関係グラフを使用する任意のリポジトリに対してDependabot alertsを有効にすることができます。 セキュリティ更新プログラムの有効化については、「AUTOTITLE」を参照してください。 * ** Dependabot version updates:** 既定では有効になっていません。 リポジトリへの書き込みアクセス許可を持つユーザーは、 Dependabot version updatesを有効にすることができます。 バージョン アップデートの有効化については、「AUTOTITLE」を参照してください。 * 変更できないリリース:* 既定では有効になっていません。 リポジトリまたは組織のリリース不変性を有効にすることができます。 「リリースに対する変更の防止」を参照してください。