漏洩シークレットスキャナー

漏洩シークレットスキャナーは、決して公開されるべきでないファイルや認証情報が、誰にでもあなたのウェブサイトから取得できる状態になっていないかを確認します。データベースのパスワードが入った .env ファイル、ソース履歴全体を引き渡す .git フォルダ、ウェブルートに残されたバックアップアーカイブ、JavaScript バンドルの中の本物の API キーなどです。URL を入力すると、このスキャナーは既知の公開パスを探り、応答したものの内容を検証し、ページとそのスクリプトから既知のシークレットパターンを探します。表示されるのはマスクされた値だけで、シークレットそのものは決して表示されません。関連ガイド公開された .env ファイルと漏洩キーでは、こうした公開がどう起きるのか、そしてファイルを削除するだけでは決して不十分な理由を説明しています。応答の堅牢化にはセキュリティヘッダーチェック、他者から読み込むスクリプトにはサードパーティスクリプト監査と併せてご利用ください。

最終更新:

継続的に監視しますか?myeventwatch で無料監視——期限切れとダウンタイムのアラート、カード不要。

公開とみなされるもの — みなされないもの

スキャナーは、公開された既知パスのリスト——/.env とその一般的な変種、/.git/HEAD と /.git/config、設定ファイル、バックアップアーカイブ、キーファイル——を、攻撃者や検索エンジン、好奇心旺盛な訪問者でも送れるのとまったく同じ、通常の公開 GET リクエストで探ります。パスが公開とみなされるのは、応答内容がそのファイル本来の姿と一致する場合だけです。env ファイルはキーと値の行として解析できなければならず、Git の HEAD は Git 参照らしくなければなりません。多くのサーバーはあらゆるパスに 200 を返します——シングルページアプリのフォールバック、カスタムエラーページ、キャッチオールのリライトなど——そしてトップページの HTML が入った 200 は漏洩ではありません。そうしたパスは結果の中で応答したが未確認として別に列挙され、ご自身で判断できます。このツールが未確認の 200 を漏洩と呼ぶことは決してありませんし、あなたが使うどのスキャナーもそうすべきではありません。

ファイルの探査に加えて、スキャナーはページ自体と最大で約15個の JavaScript バンドルを取得し、既知のシークレットの形を探します。クラウドアクセスキー ID、秘密鍵ヘッダー、一般的な API キーやトークンの代入、データベース接続文字列などの信号の強いパターンです。クライアント側のコードは定義上公開です——ブラウザに送られたものはすべての訪問者が読めます——そのため、ファイルの設定ミスがなくても、バンドル内で見つかった本物の認証情報は公開されています。発見は種類、ソースファイル、出現回数ごとに報告され、値は先頭最大4文字までにマスクされます。どのキーかを見分けるには十分ですが、レポートの読者がそれを使うには決して不十分です。完全なシークレットがこのレポートに取得、保存、表示されることは決してありません。

限界を、はっきりと

これは既知パスに対する公開の読み取り専用プローブであり、その限界は結果の一部です。探るのは公開リスト上のパスだけで、珍しい名前のファイルにあるシークレットは見つかりません。スキャンするのはランディングページと約15個のスクリプトバンドルであり、大規模サイトのすべてのアセットではありません。ログインはせず、認証の向こう側をクロールせず、ファイル名を総当たりせず、未認証 GET でそもそも届かないものはテストしません。スキャンは訪問者あたり1時間に5回に制限され、結果は10分間キャッシュされるため、その時間内の再スキャンではキャッシュされた判定が表示される場合があります。スキャンには時間予算もあります。遅いターゲットがそれを使い切ると、結果は部分とマークされ、その旨が明記されます。部分的なクリーン結果は「クリーン」ではなく「完全には確認できていない」と扱ってください。

スキャンで何か見つかった場合、削除の速さよりも作業の順序が重要です。まず認証情報をローテーションしてください——公開されたキーを失効させ、新しいものを発行します——コピーはすでにキャッシュ、アーカイブ、他人の手に渡っている可能性があるためです。ファイルを削除しても新しいダウンロードが止まるだけで、すでに出てしまったキーには何の効果もありません。その後、サーバーでファイルを削除するかパスをブロックし、コピーを保持している可能性のある CDN やプロキシのキャッシュを消去し、同じパスへの過去の取得がないかアクセスログを確認してください。関連記事公開された .env ファイルと漏洩キーでは、攻撃者が使う最初の1時間の手順と、完全な復旧手順を順番にたどります。

隣接するチェックで全体像が完成します。サードパーティスクリプト監査はページが読み込む外部スクリプトを対象とし——それは自分のファイルの漏洩とは別のサプライチェーンリスクです——、セキュリティヘッダーチェックは応答が備えるブラウザ保護を評価します。手法についての注意:クリーンな結果とは、スキャン時点にチェッカーのネットワーク位置から見て、探ったパスのどれも一致する内容で応答せず、スキャンしたファイルに既知のシークレットパターンが現れなかったという意味です。それはそれらのパスとファイルについての証拠であり、サーバー全体の保証ではありません。そもそもファイルをウェブルートの外に置き、サーバーが公開する内容に触れるデプロイ変更のたびに再スキャンしてください。

公開されたプローブリスト

/.env とその変種データベースのパスワード、メール認証情報、API キーを保持する環境ファイル(.env、.env.local、.env.production など)。本文がキーと値の行として解析できる場合にのみ確認されます。
/.git/HEAD と /.git/config配信されている .git フォルダはリポジトリを明らかにします。HEAD が構造を証明し、config はしばしばリモートを名指しします。両方があれば、ソース履歴全体は通常再構築できます。
設定ファイル平文の認証情報を含む既知の設定パス(wp-config のバックアップ、config.php のコピー、フレームワークの設定ファイルなど)。
バックアップとアーカイブのファイルウェブルートに残されたデータベースダンプ、.zip / .tar.gz のサイトアーカイブ、エディタのバックアップコピー——多くの場合、認証情報を含むサイトの完全なコピーです。
キーと証明書のファイルウェブからアクセスできては決してならない秘密鍵の形をしたファイル(.pem、.key、id_rsa 形式の名前)。配信されている秘密鍵は、それだけで重大な発見です。
JavaScript バンドルページと最大約15個のスクリプトバンドルを、クラウドキー ID、秘密鍵ヘッダー、トークンの代入、接続文字列について検索します。値は先頭最大4文字までにマスクされます。
確認ルールプローブが公開とみなされるのは、応答内容が期待されるファイルの形と一致する場合だけです。素の 200 は応答したが未確認として列挙され、漏洩として報告されることは決してありません。
予算とキャッシュ公開 GET プローブのみ、読み取り専用、訪問者あたり1時間に5回のスキャン、結果は10分間キャッシュ。時間予算を使い切ったスキャンは部分とマークされます。

よくある質問

スキャンでパスが「応答したが未確認」と出ました。これは漏洩ですか?

この証拠では違います。そのパスが HTTP 200 で応答したが、内容が探っていたファイルの形と一致しなかったという意味です。通常の原因は、あらゆる URL にトップページやアプリの外枠で応答するキャッチオールのルートやフォールバックページです。プライベートウィンドウでそのパスを自分で開き、実際に何が返ってくるかを見てください。本物のファイル内容が見えれば公開として扱い、通常のサイトが見えればフォールバックです。

スキャナーが私のキーを見つけました。まず何をすべきですか?

他の何よりも先にローテーションしてください——公開された認証情報を失効させ、代替を発行します。公開ファイルのコピーはキャッシュ、アーカイブ、スキャナーのデータベースへと素早く逃げていくため、ファイルを削除してもキーの「漏洩解除」にはなりません。その後、ファイルを削除するかブロックし、CDN とプロキシのキャッシュを消去し、そのパスのアクセスログを調べ、同じ認証情報が他で使われていないか確認してください。

スキャナーは見つけた完全なシークレットを保存したり表示したりしますか?

しません。チェッカーはシークレットの種類、見つかったファイル、出現回数を報告し、値は先頭最大4文字までにマスクされます。どの認証情報かを見分けるには十分ですが、使うには決して不十分です。レポートには盗む価値のあるものが意図的に含まれていません。漏洩レポートが第二の漏洩になってはならないからです。

ステージングサイトやログインの向こうのページをスキャンできますか?

できません。スキャナーが送るのは未認証の公開 GET リクエストだけなので、ログイン、VPN、IP 許可リストの向こうにあるものには届きません——それは意図的です。このツールが答える問いは、インターネット上の見知らぬ人が何を取得できるかだからです。このサイト自身のインフラアドレスを含むブロック対象は、きっぱりと拒否されます。

なぜ私の結果はキャッシュされていたり部分的だったりするのですか?

結果は10分間キャッシュされ、繰り返しの確認を安くし、ターゲットサーバーの礼儀正しい客でいられるようにします。結果にはキャッシュかどうかが明記されます。部分的な結果とは、スキャンがすべてのプローブを終える前に時間予算に達したという意味です——通常は遅いターゲットや大きなバンドルが多数ある場合です——バナーがその旨を示します。部分的なクリーン結果は、完全にクリーンだと信じるのではなく再実行すべきです。