GitHubは、リポジトリ数が10億件を突破するなどコードのバージョン管理やチーム開発のプラットフォームとして広く活用されています。しかし、リポジトリが外部に存在する以上、セキュリティ管理には細心の注意が必要です。 本稿では、組織レベルでGitHubを安全に運用するためのセキュリティ設定の強化策および監査体制の構築方法についてご紹介します。
2FAの適用
GitHubアカウントには必ず二要素認証(2FA)を設定し、可能であればFIDO2準拠のハードウェアキーを使用することが推奨されます。GitHubは2023年末までに全アカウントへの2FA適用を義務化すると発表しましたが、現在も様々な理由により2FAが未設定のアカウントが存在しています。
GitHubで右上のプロフィールアイコンをクリックし、「Your organizations(所属組織)」メニューを選択します。次に対象の組織をクリックし、左メニューから 「People」を選択すると、 以下のように、 組織に所属するアカウントの一覧と2FAの適用状況を確認できます。
2FA(二要素認証)が未設定のアカウントが存在する場合は、必ず有効化するよう対応する必要ががあります。 エンドポイントが侵害された場合、コードの流出は避けられない可能性がありますが、少なくとも認証情報の漏洩による被害は防ぐことが可能です。
IPアクセス制御
会社のオフィスのグローバルIPアドレスや指定されたIPアドレスからのみ、GitHubリポジトリへのアクセスを許可するように制限する必要があります。万が一セキュリティインシデントが発生した場合でも、ネットワークファイアウォールやエンドポイントセキュリティソリューションのトラフィックログを通じて侵害や情報漏洩の経路を追跡できるようにするためには、リポジトリへのアクセス可能な場所をセキュリティ監査の対象範囲内に限定しておく(する)ことが重要です。 GitHubで、画面右上のプロフィールアイコンをクリックし、「Your organizations( 所属組織 )」を選択します。 次に、組織の一覧から対象の(該当する)組織名の横にある「Settings(設定)」ボタンをクリックすると、設定画面に移動します。 ここで、左側の「Security(セキュリティ)」カテゴリ内にある「Authentication security(認証セキュリティ)」を選択すると、「IP allow list(許可(された)IPリスト)」という項目で、以下のように特定のIPアドレスからのアクセスのみを許可する設定が可能です。
- 画面下部のリストに「IP address(IPアドレス)」と「Description(説明)」を入力し、オフィスのグローバルIPアドレスを追加します。
- 「Enable IP allow list(IP許可リストを有効にする)」チェックボックスをオンにし、「Save(保存)」ボタンをクリックします。
監査ログのモニタリング
Organizationの「Settings」メニューの左側にある「Logs」カテゴリを展開すると、「Audit log(監査ログ)」メニューが表示されます。 この「Audit log」をクリックすると(こどで)、以下のように監査ログを確認することができます。
ただし、監査ログにおいて最も重要なのは、操作を行ったユーザーの送信元IPアドレスです。 この情報を表示するためには、Enterpriseプランの利用有無にかかわらず、GitHub営業担当との契約を通じて年額契約のEnterpriseアカウントへ移行する必要があります。 その上で、以下のように送信元IPアドレスの表示機能を有効化することが可能になります。
Logpresso Cloudを基盤とした監視
しかし問題なのは(は)、SaaSのセキュリティをこのように手作業で管理するのは、現実的に難しいという点です。 セキュリティ担当者は、数十種類のセキュリティ機器やSaaSサービスを同時にモニタリングする必要があります。
Logpresso Cloudを導入し、GitHubアプリを設置することで、以下のように、誰がコードリポジトリに対して git clone や git fetch を実行したのか、あるいはGitHubのウェブサイト上でZIPファイルをダウンロードしたのかを、 一目で確認することが可能になります。
Dependabotが有効化されている場合、組織全体におけるソフトウェアサプライチェーンのセキュリティリスク状況を可視化することができます。
Logpressoのクエリ(機能)を活用することで、GitHubの監査ログに対して多様な統計分析を容易に実行することができます。
table duration=12mon GITHUB
| eval country = valueof(actor_location, "country_code")
| search actor == "ACME-*" and country == "VN"
| stats count by actor, actor_ip
ダッシュボード以外にも、リアルタイムまたはバッチ型の検知シナリオを通じて、以下のような多様な脅威の検出を行うことができます。
- Organizationのオーナーが追加・削除された場合
- 組織管理者権限がアカウントに付与または剥奪された場合
- 新しいアカウントが組織に追加された場合
- 特定のGitHubアカウントにおけるアクセス元IPアドレスが変更された場合
- チームに所属するアカウントの追加・削除など、権限の変更が行われた場合
- APIキーまたはOAuthアプリケーションが追加・削除された場合
- 同一のAPIキーを使用して、短時間で多数のリポジトリコードがダウンロードされた場合
以下は、アカウントおよびPATトークンごとにアクセスされたリポジトリの統計情報を算出するクエリの一例です。
table duration=12mon GITHUB
| eval country = valueof(actor_location, "country_code")
| search programmatic_access_type == "Personal access token (classic)" and isnotnull(token_id)
| stats dc(repo) as repo_count, values(country) as country, values(repo) as repos, min(_time) as first_seen, max(_time) as last_seen by actor, token_id
| sort -repo_count
| eval country = strjoin(", ", country), repos = strjoin(", ", repos)
GitHubセキュリティは選択ではなく必須事項です
GitHubは、開発の生産性とチームの共同作業を最大化するための強力なプラットフォームであるからこそ、 セキュリティを損なうことなく、持続可能な保護体制を設計する必要があります。セキュリティ対策は一度きりのチェックではなく、定期的なレビュー、ユーザー教育、自動化された統制および可視化の仕組みを伴ってこそ、実効性を持つものとなります。
特にSaaSベースで運用されるGitHub環境においては、エンドポイントセキュリティ、ユーザー認証、アクセス制御、監査ログの分析など、複数のセキュリティ要素を統合的かつ一貫して管理することが重要です。 そのためには、組織のセキュリティポリシーに準拠したツールとプロセスを導入し、継続的な改善活動を行うことが求められます。
GitHubのセキュリティを強化するための追加のリソースやガイドが必要な場合は、お気軽にお問い合わせください。