GHAS と、その不可欠な機能の重要性を定義する
このユニットでは、以下について説明します。
- シークレット スキャン
- コード スキャン
- Dependabot
- 重要な機能を備えた、より安全なソフトウェア開発ライフサイクルの作成
まずは、GHAS について簡単に確認してみましょう。
GHAS とは
GitHub Advanced Security (または GHAS) は、開発者がワークフローを中断することなくコードをセキュリティで保護し、リスクを管理するのに役立つアプリケーション セキュリティ ソリューションです。
GHAS には、GitHub Secret Protection と GitHub Code Security という 2 つの異なる製品として提供される機能が含まれています。 この分離により、組織はセキュリティの優先順位とライセンスに最も一致する機能を有効にすることができます。
Advanced Security はワークフローに直接組み込まれているため、開発を遅らせることなく、脆弱性と資格情報の漏洩を防ぐことができます。 GitHub Advanced Security は、専属のセキュリティ コンサルタントに、世界中のセキュリティ専門家の分析情報を使って、すべてのコード行を確認してもらうようなものです。
アプリケーションとソフトウェア サプライ チェーンのセキュリティを確保することは、かつてないほど重要になっています。 Gartner は、2025 年までに世界の組織の 45% がサプライ チェーン攻撃の影響を受けると予測しています。 2022 年の Verizon Data Breach Investigation Report によると、アプリケーションは引き続き主要な攻撃ベクトルであり、全データ侵害の 40% 以上がアプリケーションを標的にしています。
ソフトウェア開発プロセスにセキュリティを組み込むことは、気が遠くなるようなプロセスのように思えるかもしれません。そこで、GHAS の 3 つの主要な機能と、最新のセキュリティ上の脅威をチームが常に把握し続けるために、その機能をどのように利用できるかを見てみましょう。シークレット スキャン、コード スキャン、Dependabot。
シークレット スキャン
シークレット スキャンは、ソース コード内で API キーやトークンなどの機密情報が誤って公開されるのを識別し、防止するのに役立つ重要な GitHub セキュリティ機能です。 シークレット スキャンは、すべてのパブリック リポジトリで無料で利用でき、GitHub Advanced Security (GHAS) ライセンスを使用してプライベート リポジトリでも有効にすることができます。
これにより、不正アクセスを防ぎ、機密データを保護できます。 シークレット スキャンは、機密情報を示す事前に定義されたパターンと署名を検索することで動作し、潜在的なセキュリティ リスクに迅速に対処します。 既定では、シークレット スキャンでは、GitHub パートナーによって提供された非常に正確なパターンが検索されます。 ただし、カスタム パターンは、他のユース ケースに対して作成できます。
シークレット スキャンには以下が含まれます。
- プッシュ保護。コミット時にコードをスキャンし、シークレットが存在する場合はプッシュをブロックすることで、シークレットの漏洩を未然に防ぎます。
- GitHub から離れることなく、簡単にアラートを確認して修正する機能。
セキュリティで保護されたソフトウェア開発ライフサイクルでは、シークレット スキャンによって公開されたシークレットが検出され、チームはできるだけ早くそれらを取り消したりローテーションしたりできるようになります。多くの場合、悪意のある目的で使用できるようになる前に、データ侵害のリスクが軽減され、開発全体の機密性が維持されます。
次に、コード スキャンについて説明します。
コード スキャン
コード スキャンは、ソース コードを分析してセキュリティの脆弱性やコーディング エラーがないかを確認する GHAS の不可欠な機能です。 スタティック分析手法が採用され、SQL インジェクション、クロスサイト スクリプティング、バッファー オーバーフローなどの、潜在的な問題を特定します。 コード スキャンを使うと、pull request ワークフロー内で自動フィードバックが直接提供されるので、開発者は開発プロセスの早い段階で脆弱性に対処できます。
コード スキャンは、開発ライフサイクルの早い段階で問題を特定して対処することで、コードの品質を向上させ、セキュリティの脅威を最小限に抑えるのに役立ちます。 スキャン ルールは継続的に更新されるため、コード スキャンでは、運用環境に既に存在する可能性のある脆弱性を検出することもできます。
Dependabot
Dependabot は自動化された依存関係管理ツールであり、プロジェクトの依存関係を最新の状態に保つ役割を担っています。 プロジェクトで使われているライブラリとフレームワークの更新を定期的に確認し、pull request を自動的に開いて、依存関係を最新のセキュリティで保護されたバージョンに更新することができます。
Dependabot には次のものが含まれます。
- 既知の脆弱性のアラート
- 脆弱なパッケージのセキュリティ更新プログラム
- 依存関係を最新の状態に保つためのバージョン更新
Dependabot は Dependency Graph と密接に連携して、使用中の依存関係を特定し、GitHub Advisory Database に対して相互参照して脆弱性を検出します。
GitHub Advanced Security を使用すると、Dependency Review によって Dependabot の機能が強化され、プル要求で導入された脆弱なパッケージをプレビューし、マージする前に安全でない依存関係が追加されないようにすることができます。
シークレット スキャン、コード スキャン、Dependabot のアラートを有効にする場所
リポジトリ レベルからいずれかのアラートを有効にするには、まずリポジトリのセキュリティ タブに移動します。
次に、[セキュリティの概要] でアラートを有効にします。
GHAS の 3 つの不可欠な機能をすべて確認し、有効にしたので、次は、それらすべてを実装し、より安全なソフトウェア開発ライフ サイクルを作成する方法について説明します。
3 つの機能すべてを使ってより安全なソフトウェア開発ライフ サイクルを作成する
シークレット スキャン、コード スキャン、Dependabot を組み合わせることで、より安全なソフトウェア開発ライフ サイクルを作成できます。 シークレット スキャンにより、機密情報の不慮の露出を防ぎます。 コード スキャンにより、コードベースのセキュリティの脆弱性を特定し、対処します。 そして、Dependabot により、依存関係管理を自動化します。
これらの機能を統合することで、開発チームは開発ライフ サイクルの各段階でセキュリティ上の懸念に事前に対処できます。 この予防的なアプローチにより、セキュリティ インシデントが運用環境に影響を与える可能性を最小限に抑え、その結果、回復性が高く、安全で効率的なソフトウェア開発プロセスが実現することができます。
こうした不可欠な機能の複合的影響により、セキュリティは単独で考慮するものではなく、開発ワークフロー全体に不可欠な要素として組み込まれるようになります。
オープン ソース プロジェクトのセキュリティ機能
GitHub 上のパブリック プロジェクトは、シークレット スキャンや依存関係グラフなど、特定の既定のセキュリティ機能を利用できます。 GitHub は、パブリック リポジトリを自動的にスキャンしてパートナー パターンを見つけ、リポジトリ管理者にアラートを提供します。 また、パブリック プロジェクトでは、GitHub Advanced Security ライセンスがなくても、コード スキャン、Dependabot、依存関係レビューを有効にできます。
ただし、これらの機能は基礎的なものであり、より複雑なプロジェクトやエンタープライズ環境に必要な高度な保護を実現できない場合があります。
GitHub Advanced Security (GHAS) を GitHub Enterprise Cloud (GHEC) と組み合わせると、包括的なセキュリティ機能セットを内部およびプライベート プロジェクトにも使用できるようになります。
- コード スキャン - コード内の潜在的なセキュリティの脆弱性とコーディング エラーを検索します。
- シークレット スキャン - プライベート リポジトリにチェックインされたキーやトークンなどのシークレットを検出します。 GitHub.com 上のパブリック リポジトリの場合、ユーザーとパートナー向けのシークレット スキャン アラートを無料で使用できます。 プッシュ保護が有効な場合、シークレットがリポジトリにプッシュされたときにも検出されます。
- 依存関係の確認 - pull request をマージする前に、依存関係に対する変更の影響をすべて示し、脆弱なバージョンの詳細を表示します
次の表は、パブリック リポジトリとプライベート リポジトリの GitHub Advanced Security 機能の使用可否をまとめたものです。
| 特徴 | パブリック リポジトリ | Advanced Security を使わないプライベート リポジトリ | Advanced Security を使うプライベート リポジトリ |
|---|---|---|---|
| コード スキャン | ✅ | ❌ | ✅ |
| シークレット スキャン | ✅ | ❌ | ✅ |
| 依存関係の確認 | ✅ | ❌ | ✅ |