The Hacker Newsは2023年11月24日(現地時間)、「Tell Me Your Secrets Without Telling Me Your Secrets」において、開発者の機密情報を開示せずに機密情報がGitHubに漏洩しているかどうかを確認できるサービス「HasMySecretLeaked - Leak Detection In The DevOps Pipeline」について伝えた。

  • Tell Me Your Secrets Without Telling Me Your Secrets

    Tell Me Your Secrets Without Telling Me Your Secrets

HasMySecretLeakedはGitGuardianのプロジェクトの一つで、GitHubの公開リポジトリ、gist、issueに開発者の機密情報(パスワード、APIキー、秘密鍵、証明書、データベースの認証情報など)が漏洩しているかどうかを確認できる。サービスの利用はHasMySecretLeakedの公式サイトまたはCLIツールのggshieldから行える。GitGuardianは2017年からGitHub上の機密情報の収集を開始し、これまでに機密情報だけで1,000万件以上、その他合計で2,000万件以上のデータベースを構築したという。

このサービスは機密情報の漏洩の有無を確認できるという点で便利と考えられるが、確認する際に機密情報をGitGuardianに提供しなければならないという問題がある。GitGuardianはこの問題を解決するために、専用のフィンガープリントプロトコルを開発している。このプロトコルの基本的な動作は次のとおり。

  1. 機密情報を256ビット長のハッシュ値に変換する
  2. ハッシュ値の先頭5文字を抽出する(抽出する長さは将来的に変更の可能性がある)
  3. HasMySecretLeakedに先頭5文字を送信する
  4. HasMySecretLeakedは先頭5文字と同一のハッシュ値を持つ機密情報の一覧をデータベースから抽出する。機密情報の存在するリポジトリの場所(URL)をハッシュ値で暗号化し、「ハッシュ値のハッシュ値」と共に応答する
  5. 受け取った応答の中に「ハッシュ値のハッシュ値」が同じものがある場合は、機密情報が漏洩している可能性がある。暗号化された場所をハッシュ値で復号化し、場所(URL)から実際に漏洩しているか確認することができる
  • HasMySecretLeakedで使用されるフィンガープリントプロトコルの例 - 提供:GitGuardian

    HasMySecretLeakedで使用されるフィンガープリントプロトコルの例 引用:GitGuardian

このプロトコルではハッシュ値の先頭5文字と、「ハッシュ値のハッシュ値」、「ハッシュ値で暗号化された場所」のみを通信データとしてやり取りする。このため、中間者攻撃(MITM: Man-in-the-middle attack)などで通信データを窃取された場合において、元の機密情報やそのハッシュ値を取得することはできないとされる。GitGuardianはこのプロトコルの詳細を「HasMySecretLeaked - Building a Trustless and Secure Protocol」にて公開している。

GitHubを利用しているユーザーまたはプロジェクトの責任者で機密情報の漏洩を確認したい場合は、このサービスを活用することでGitHub全体から漏洩の有無を確認できる。現在、GitGuardianはHasMySecretLeakedを無償で提供しており、Webサイトからの利用またはアカウント未登録者は1日5回まで、GitGuardianアカウント登録者は1日30回まで、GitGuardianのビジネスプラン利用者は1日1,000回まで使用できる。