GitHubなどのコード管理プラットフォームに「シークレットスキャンツールでは検知できないシークレット漏えい」のリスク Aqua Security Softwareが解説:「リポジトリの履歴」が見過ごされている可能性を指摘
Aqua Security Softwareは公式ブログで、「GitHub」「GitLab」「Bitbucket」「Azure Repos」などのソースコード管理プラットフォームに、従来のシークレットスキャンツールでは見落とされる可能性のあるシークレット漏えいのリスクがあるとして注意を喚起した。
Aqua Security Softwareは2024年6月23日(米国時間)に公式ブログで、「GitHub」「GitLab」「Bitbucket」「Azure Repos」といったソースコード管理(SCM)プラットフォームに、従来のシークレット(機密情報)スキャンツールでは見落とされる可能性のあるシークレット漏えいのリスクがあるとして注意を喚起した。
Aqua Security Softwareは、GitHubの上位100組織にある5万2268個のリポジトリを対象に、Gitリポジトリ内のシークレットをチェックする「Gitleaks」と、同社が明らかにした手法に基づいた調査を比較した結果、Gitleaksのようなシークレットスキャンツールでは漏えいしているシークレットの約18%を見逃す可能性があると明らかにしている。
この調査の過程では、Mozillaの従業員が利用するファジングツールのAPIトークンや、テレメトリーサービス用のAPIトークン、あるFortune 500企業が使用している「CIsco Meraki」のAPIトークン、ヘルスケア企業が利用する「Microsoft Azure」の認証用シークレットが含まれていたことも判明したという。
Aqua Security Softwareは「一度でもコードにシークレットを記述すると、一見削除したように見えてもそのシークレットが永久に公開されてしまう可能性がある」とした上で、シークレットが漏えいするシナリオや、GitHubなどのSCMプラットフォームにおけるシークレットの漏えい対策を解説している。
Aqua Security Softwareが明らかにしたシークレット漏えいのシナリオ
Aqua Security Softwareによると、作業者が以下のような手順でシークレットの削除を試みるケースで、表面上はシークレットが消えているように見えても、「git clone --mirror」コマンドを使用することでシークレットを確認できてしまう状態に陥るという。
- ローカルブランチを作成する
- シークレットを誤ってローカルブランチにコミットする
- ローカルブランチをGitHubのリモートリポジトリにプッシュする
- 間違いに気付き、ローカルブランチを削除する
- git push --mirrorコマンドを実行し、リモートブランチを削除する
git checkout -b new-branch work work work git commit -m 'a mistake/secret' git push origin new-branch"
git checkout master && git branch -D new-branch git push --mirror origin
「この問題は、git clone --mirrorコマンドではなく通常のgit cloneコマンドを使用してリポジトリのシークレットをスキャンすると、リモートに存在するブランチのみがスキャン対象となり、リモートリポジトリの参照(refs)などにあるシークレットを見逃すリスクがあることを浮き彫りにしている。大多数のユーザーやワークフローが通常のgit cloneコマンドを使用しているため、この発見は非常に重要だ」と、Aqua Security Softwareは述べている。
シークレットの漏えい対策
Aqua Security Softwareは上記のようなシナリオを含むシークレットの漏えい対策について、GitHubを例に、次のように解説している。
- 誤ってSCMプラットフォームにシークレットをプッシュしてしまった場合は、すぐにシークレットをローテーションする。ツールを使用してシークレットを含むコミットを隠したり削除したりしたとしても、SCM上のキャッシュビューを使用してコミットを取得し、アクセスする方法が存在する
- GitHubからシークレットを完全に削除するには、GitHubのサポートに連絡する必要がある。これは、ほとんどのSCMプラットフォームに当てはまる
- プッシュ保護を使うなど、SCMプラットフォームの内部機能を採用する
- SCMプラットフォームが提供する「誤ってシークレットをコミットしないためのベストプラクティス」に従う
- コミット前のフックを設定し、コミット前にシークレットをスキャンする
- Gitleaksや「TruffleHog」のようなシークレットスキャンツールを活用する
- git clone --mirrorコマンドを使用して、リポジトリにシークレットが含まれているかどうかをスキャンする
- git cloneとgit clone --mirrorの結果の差分をスキャンする
- Pull Request参照からシークレットを削除する(GitHub.comのリポジトリのPull Requestからシークレットを削除したい場合は、GitHubサポートに問い合わせる必要がある)
- git ls-remoteコマンドを使用してリモート追跡ブランチの参照を全てリストアップする。「refs/remotes/origin/{branch_name}」で始まる参照を見つけたら、シークレットが含まれていないかどうかをチェックする。含まれている場合は「git push origin :refs/remotes/origin/{branch_name}」でリモート追跡ブランチのシークレットを削除する
- キャッシュビューからのみアクセス可能なシークレットの漏えい対策として、GitHubの履歴データセットを利用するか、Pull Requestをスキャンして強制プッシュされたコミットがないかどうか確認する
Aqua Security Softwareは「私たちは自分たちのリポジトリの履歴も含めてシークレットがないかどうかをチェックする必要がある。特にパブリックリポジトリの場合は、攻撃者が悪用する可能性のあるシークレットやその痕跡を完全に排除するために、慎重に確認しなければならない」と述べている。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- GitHub、個人アカウントにプッシュ保護設定を追加 管理者向けのメトリクス機能も
GitHubは、シークレットの漏えい防止を支援するプッシュ保護機能の強化を発表した。個人アカウントにプッシュ保護の設定が追加され、組織の管理者はプッシュ保護の統計を確認できる。 - GitHub、全ての公開リポジトリに対して無料の「Secret scanningアラート」を提供開始
GitHubは2023年2月28日、全ての公開リポジトリを対象に、無料で利用できる「Secret scanningアラート」の一般提供(GA)を開始した。有効化の方法や約1万4000のリポジトリで1000件を超えるシークレットの発見例なども公開している。 - 進化したKubernetesのシークレット管理「External Secrets Operator」――シークレットを外部ツールで管理してGit上でもセキュアに使おう
Kubernetesやクラウドネイティブをより便利に利用する技術やツールの概要、使い方を凝縮して紹介する連載。今回は、外部のシークレット管理ツールと連携して、KubernetesのSecretオブジェクトを管理する「External Secrets Operator」を紹介する(External Secrets Operator 0.10.4、Kubernetes 1.30に合うように更新)。