Secret Gate
実際のシークレットを把握したリリースゲート:何も見つからなければ、何も出荷されない。
- Linux or macOS
- Python 3.9+
- Git hooks
- CI

機能
Secret Gateは、リリース用zip、顧客向けのコピー、オープンソースへのプッシュ、次のコミットなど、あなたの元を離れるものすべてに対して、最初にたった一つの質問に答えます。『これは私の秘密情報を含んでいないか?』。秘密情報がどこにあるかを示すファイルを読み込むため、何が秘密情報かを知っています。そして、秘密情報を一度も表示しません。検出結果には、ファイル名、行番号、値の出所のみが示されます。
- 正確な値。envファイル、JSONおよびYAML設定、
.netrc、キーファイル内のすべての値を、そのままの表記、Base64エンコード、URLエンコードの状態で検索します。一般的な単語に見えるパスワードや、既知のプレフィックスを持たない内部トークンも、他の秘密情報と同様に検出されます。 - 稼働マシン以外のマシンにある秘密情報。ノートPCで指紋を作成します。ビルドサーバーは、実際の値を保持することなく、それらの値を検出します。
- 他のマシンは自身の秘密情報と照合します。ファイルはSSH経由で各マシンに送られ、そこでスキャンされた後、削除されます。秘密情報は移動せず、応答できないマシンがあればリリースがブロックされます。
- 形状、名前、ノイズも。25種類のトークン形式、あなたの名前、ホスト、ドメイン、アカウントID、プライベートIPアドレス、個人メールアドレス、電話番号、IBAN、ホームフォルダのパス、そして秘密情報らしき名前の隣にあるランダムな文字列。
- 毎回、自らを検証します。各スキャンの開始時に、あらゆる種類のカナリアを仕込みます。もしどのチェックでもカナリアを検出できなかった場合、スキャンは実行されません。
- すでに作業している場所で。フォルダ、zipおよびtarアーカイブ、gitのpre-commitまたはpre-pushフック、CI用の終了コード、JSONレポート。
出荷前にテスト済み
- 販売中のすべてのキット:リリース済みの8つのアーカイブを、ビルドマシン上の133個の秘密情報値と、ノートPCからの16,259個の指紋に対してスキャンしました。すべて合格し、合計5.4秒で完了しました。
- リリースのコピーに仕込んだ実際の秘密情報は、そのままの状態でもBase64エンコードの状態でも検出され、毎回、元のファイル名が特定されました。値は出力にもレポートにも一切現れませんでした。
- SSH経由のリモートスキャンは、リリースをセカンドマシンの499個の秘密情報値に対して1.4秒でチェックし、そのマシン上にのみ存在するコピーに仕込まれたトークンを検出しました。
中身
ゲート
4つのチェック、自己テスト、アーカイブおよびgitステージング領域のスキャン、可読性の高いレポートとJSONレポート。
指紋
あるマシンの秘密情報の指紋を用いて、別のマシン上で値を渡さずにスキャンします。
リモートスキャン
シークレットを保持するすべてのマシンで同じファイルを確認し、プロジェクトのルールも一緒に送信します。
セットアップとCI
シークレットファイルの検出ツール、gitフック、そしてリリースアーカイブ用のGitHub Actionsワークフロー。
動作環境
- LinuxまたはmacOSでPython 3.9以上。pipからのインストールは不要です。
- フックにはGit、リモートスキャンにはSSHが必要です。
よくあるご質問
- 現在の状態のファイルを読み取ります。git履歴に既に存在するシークレットはそのまま残ります。ローテーションしてください。
- スキャン対象フォルダ内のアーカイブは展開されません。各アーカイブを個別にスキャンしてください。
- 指紋ファイルはシークレットと同様に非公開にしてください。16文字以上の値の先頭4文字を保持します。
よくある質問
gitleaksやTruffleHogとの違いは何ですか?
それらは一般的なシークレットの形状を検出し、その点では優れています。Secret Gateは、あなたのシークレットが実際には何かを知っています。独自のシークレットファイルを読み取り、その正確な値を検索するため、認識可能な形状を持たないデータベースパスワードや内部トークンも検出できます。これは出荷直前の1つの瞬間のために設計されており、失敗時は閉じる(fail closed)動作をします。
シークレットはどこかに送信されますか?
いいえ。値はスキャンのためにファイルからメモリに読み込まれますが、出力、書き込み、送信はされません。指紋ファイルを作成する場合、ハッシュと各値の先頭4文字のみを保持します。リモートスキャンでは、出荷予定のファイルをあなたのマシンに送信します。そのマシンのシークレットはマシン内に留まります。
誤検知はどうなりますか?
検出結果は「ここを確認してください」という意味です。問題がなければ、プロジェクトの設定でその種の検出に対する狭い許可ルールを追加してください(例:独自のサポートアドレス)。チェックを無効化するスイッチはありません。
git履歴をスキャンできますか?
いいえ。出荷予定のものを確認します:フォルダ、アーカイブ、または次のコミットです。既に履歴にあるシークレットについては、シークレットをローテーションしてください。
更新済み: