貼り付ける前に秘密を墨消しする
秘密を墨消しするとは、テキストが共有される前に、その中の認証情報——API キー、トークン、パスワード、秘密鍵——をマーカーに置き換え、情報がアクセスなしに旅できるようにすることです。秘密が漏れる最も一般的な方法は攻撃ではなく貼り付けだから重要です:サポートチケットへのログ、チャットへの設定ファイル、フォーラム投稿へのデバッグコマンド。この記事は、なぜそれらの貼り付けが取り消しにくいのか、シークレット墨消しツールのようなスキャナが検出できるものとできないもの、そして親切な貼り付けが事故にならないための流れ——ローカルで墨消しし、墨消し済みコピーを共有し、すでに逃げたものはすべてローテーションする——を説明します。
なぜ秘密はチケット、チャット、ログに行き着くのか
誰もわざと秘密を貼りません。貼るのは秘密の周りのものです:たまたまリクエストヘッダを含むエラーログ、たまたま3セクション下にデータベースのパスワードを抱える設定ファイル、トークンが Authorization ヘッダの中に座っているターミナルからコピーされた curl コマンド。トラブルシューティングはコンテキストで走り、認証情報はコンテキストの中に住んでいます——だからサポートデスク、チャットチャネル、課題トラッカは、エラーメッセージを見ていてその上のヘッダを見ていなかった、急いでいる注意深い人々によって書かれた、生きているキー、セッショントークン、秘密鍵を静かに蓄積するのです。
受け取る側のシステムは次に、その貼り付けを送信者が決して見ない方法で永続化します。チケットは検索のために索引付けされ、ベンダへ転送され、レポートに書き出され、何年も保持されます。チャットメッセージは通知として電話にプッシュされ、スレッドで引用され、ボットに要約されます。ログは独自の保持期間とアクセスリストを持つアグリゲータへ送られます。そのようなシステムの中の秘密は一か所にはありません——システムが生成したすべてのコピー、バックアップ、プレビュー、通知の中にあり、そのほとんどは送信者が列挙することも、まして削除することもできません。貼るのは一秒、回収する確実な方法はなし、というこの非対称性こそが、墨消しが貼り付けの後片付けとしてではなく、貼り付けの前に、送信者のマシンで起きなければならない理由のすべてです。
スキャナが検出できるもの:形、チェックサム、構造
良い知らせは、本物の認証情報は高度にパターン化されており、パターン走査は決定的だということです:同じテキストは常に同じ検出結果を生み、その間にモデルの推測は入りません。プロバイダのキーは公開された形——接頭辞、固定長、制限された文字集合——を持つので、AWS アクセスキー、GitHub トークン、Stripe キー、Slack トークンは、段落の中の電話番号を人が見分けるように、一目で認識できます。秘密鍵は BEGIN と END の装甲行で自らを告知し、JSON Web Token は堅い3セグメント構造を持ち、最初の2セグメントは常には同じ始まり方をします。常に同じ種類の JSON をエンコードするからです。
二つのチェックがパターン層を正直に保ちます。カード番号は、すべての本物のカード番号に組み込まれた算術テストである Luhn チェックサムを通過した場合にだけフラグが立ち、本物のカードと、それらしく見えるだけの遥かに大きな長数字の集団——注文、請求書、タイムスタンプ——とを分けます。そして形が重なる場所では、具体的なパターンが汎用的なものに勝ち、変数に代入された既知のプロバイダキーは、その本物の種類の下で、適切なローテーション手順を付けて、一度だけ報告されます。下の最初の情報源である GitHub 自身のシークレット走査は、プラットフォームの規模で同じ原理で動きます:パートナがトークンの形式を公開し、プラットフォームがそれを正確に照合します。ローカルスキャナは同じ発想を、それがまだ役に立てる最後の瞬間に実行したものです——送信を押す前の、あなたのブラウザです。
スキャナが検出できないもの:エントロピーとコンテキスト
プロバイダの形の向こうでは、検出は確率的になります。汎用ルールは代入——password や api_key のような名前と値の並び——を探し、その値がシャノンエントロピーで測ってランダムらしく見えることを要求できます。それは変数に代入された生成キーを捕捉し、文の中の password という単語を無視しますが、境界は数字の服を着た判断です:強い人間のパスワードと弱いマシンのキーは同じ尺度の上に住み、フレーズとして綴られた本物の秘密は低く採点され、プレースホルダの文言のないランダムらしいビルドハッシュは高く採点されます。エントロピーは、文字列が驚くべきものであることは教えても、その文字列が認証情報であることは教えられません。
コンテキストはより大きな盲点です。値を危険にするもののほとんどは値の外にあるからです。セッション Cookie は、それがどのサービスを解錠するのかを知るまでは、ただの文字と数字です。データベースのパスワードは、3つの環境変数に分散した接続文字列の中では無害に見え、ワンタイムコードは10分間だけ機微です。スキャナは構造を通しても見られません:2行のログに折り返された秘密、blob の中に base64 エンコードされた秘密、画像に撮影された秘密は、テキストパターンがどれほど良くても見えません。正直なまとめは、スキャナは文書化された形の良い大多数を確実に捕捉するということ——そして、ヒットをその場でハイライトして示すプレビューは、それでもあなた自身の10秒の一目に値するということです。あなたの目は、パターンには知り得ないコンテキストを知っているからです。
スキャナが意図的に盲目であるもう一つのクラスがあり、それは罠のすぐ隣にあります:プレースホルダです。ドキュメントの値——example、test、dummy、your- のような単語を含むもの——は、マニュアルやチュートリアルが検出表を光らせないよう除外されます。しかし除外はすべて扉です:たまたまそれらの単語の一つを含む本物のキーや、プレースホルダらしく見える値に設定された怠惰な本物のパスワードは、静かに通過します。除外リストはノイズ制御として扱い、決して保証としては扱わず、スキャナを黙らせるために本物の認証情報にプレースホルダの文言を印付けすることは決してしないでください。
規範的な偽の例の問題
すべてのプロバイダはサンプルの認証情報を公開し、最も有名なもの——AKIAIOSFODNN7EXAMPLE を中心に作られた AWS ドキュメントのペア——は本物のキーとまったく同じ形をしています。本物らしく見えない例は何も教えないからです。スキャナはそこで、良いデフォルトのない分岐に直面します。規範的な例にフラグを立てれば、すべてのチュートリアル、教科書、研修ログが誤報になり、読者は検出結果を反射的に退けるようになります——アラーム疲労はそれ自体が脆弱性です。ホワイトリストに入れれば、どのスキャナも決して報告しない文字列のリストを公開したことになり、隠れ場所を求める者への招待状です:本物のキーが例と等しくなることはありませんが、本物のキーを取り巻くメモ、ファイル名、ラッパーは例のカモフラージュを借りることができます。
シークレット墨消しツールが取る実用的な答えは、形にフラグを立て、検出表に会話を始めさせることです。規範的な例はキー自体の中に example という単語を含んでいますが、それでも AWS キーとしてフラグが立ちます。プロバイダの形をした文字列は毎回人間の一目に値するからです——一目は安く、代替案は同じ形のすべてのものへの静かなフリーパスです。ドキュメントを書くときは、読者のスキャナと自分のスキャナの両方を助けてください:明らかに合成の値を使い、周囲の代入の中でプレースホルダの文言で印付けし、本物のキーをドキュメントに貼って数文字を編集することは決してしないでください——部分的に編集された本物のキーは、余分な手順を伴う認証情報の漏洩であり続け、スキャナもそれを本物と区別できません。
削除ではなくローテーションを——そして安全に共有する
本物の秘密がすでに墨消しなしで貼られてしまった場合、手順の順序が重要で、削除は最後、あるいは来なくても構いません。その値は——索引、通知、スクリーンショット、同僚の引用によって——コピーされたものと想定し、公開済みとして扱ってください:まずプロバイダへ行き、認証情報をローテーションして古いものを失効させ、漏れた文字列がどこに生き残っていても機能を止めさせます。それから初めて元のメッセージを削除または編集します。修正としてではなく衛生としてです。下に並ぶ OWASP の秘密管理ガイダンスと gitleaks プロジェクトは、この教訓の二つの半分のために存在します:秘密を短命で範囲の限られたものとして管理することと、貼り付けがすでに起きたという想定でリポジトリと履歴を走査することです。ブラウザのキャプチャに関するコンパニオンの問題はその HAR ファイルを送る前にでたどられています。
安全な共有の流れは、習慣になるほど短いものです。第一に、ローカルで、元のテキストを決してアップロードしないツールで墨消ししてください——走査はあなたのデバイスに属します。生のテキストをリモートの墨消しサービスに送ることは、防ごうとするまさにその行為の中で漏洩を繰り返すことだからです。第二に、墨消し済みのコピーをチケットやチャットで共有してください。そこにはトラブルシュータが必要なもの——エンドポイント、タイミング、エラーの形——が、アクセスを除いてすべて入っています。第三に、相手が本当に認証情報そのものを必要とするときは、シークレットマネージャか、有効期限つきの一度だけ閲覧できる共有リンク経由で、議論とは別のチャネルで送り、その旨をチケットに書いて、誰も貼り直さないようにしてください。この三つの手順を取り入れたチームは、警戒心——最終的には必ず失敗する唯一の制御——への依存をやめ、ルーチンへの依存を始めます。そしてルーチンこそが、注意深い月曜の貼り付けと同じ確実さで、疲れた金曜の貼り付けでも秘密をチケットの外に保つものです。