検索
ニュース

GitHubなどのコード管理プラットフォームに「シークレットスキャンツールでは検知できないシークレット漏えい」のリスク Aqua Security Softwareが解説「リポジトリの履歴」が見過ごされている可能性を指摘

Aqua Security Softwareは公式ブログで、「GitHub」「GitLab」「Bitbucket」「Azure Repos」などのソースコード管理プラットフォームに、従来のシークレットスキャンツールでは見落とされる可能性のあるシークレット漏えいのリスクがあるとして注意を喚起した。

Share
Tweet
LINE
Hatena

 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」コマンドを使用することでシークレットを確認できてしまう状態に陥るという。

  1. ローカルブランチを作成する
  2. シークレットを誤ってローカルブランチにコミットする
  3. ローカルブランチをGitHubのリモートリポジトリにプッシュする
  4. 間違いに気付き、ローカルブランチを削除する
  5. git push --mirrorコマンドを実行し、リモートブランチを削除する
git checkout -b new-branch
work work work
git commit -m 'a mistake/secret'
git push origin new-branch"
プロジェクトをクローンし、シークレットを誤ってコミットする例 この時点でローカルには「refs/heads/new-branch」と「refs/remotes/origin/new-branch」がある。リモートには「refs/heads/new-branch」がある。いずれにもシークレットが含まれている
git checkout master && git branch -D new-branch
git push --mirror origin
シークレットをコミットしたことに気付き、コマンドでローカルとリモートから削除しようと試みる例 ローカルとリモートにある「refs/heads/new-branch」は削除される。だが、mirrorオプションを利用すると、ローカルリポジトリの状態がリモートに同期されるため、「refs/remotes/origin/new-branch」の内容がリモートにプッシュされてしまう。ユーザーはgit clone --mirrorを使用することで、シークレットを含む全ての履歴にアクセスできる

 「この問題は、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.

Security & Trust 記事ランキング

ページトップに戻る