AI・機械学習
プロプライエタリLLM APIから推論トレースを盗む
Stealing Reasoning Traces from Proprietary LLM APIs (stolen-thoughts.com)
要約
本研究では、OpenAI、Anthropic、Googleといった最先端のLLM APIから、モデルの「思考」の痕跡である推論トレースを抽出する手法を実証しています。これらのトレースには、APIキー、パスワード、個人情報などの機密情報が含まれていることが判明しました。さらに、コードベース内のこれらの秘密情報を特定し、プレースホルダーに置き換える具体的な手順も示されています。
全文翻訳
私たちは、OpenAI、Anthropic、Googleの最先端モデル全体でこれを実証します。デコードされた推論は、APIによって報告された隠し思考トークンの数と密接に一致します。以下の各点は、120個のCodeforces問題のそれぞれに対応しています。横軸はAPIによって報告された隠し思考トークン数を示し、縦軸はモデルにインプットとして再度渡されたときのデコードされた推論のトークン数を示します。
個別の漏洩項目
351 テクニカル識別子
204 個人識別情報 (PII)
126 認証情報
23 その他
私たちは、Claude、GPT、Geminiモデルによって生成され、まだ暗号化された推論ブロックを含んでいる、GitHubとHugging Faceから入手可能な6,087個のエージェント軌跡を収集しました。私たちのデコードパイプラインを署名された各ブロックに適用した結果、315,320個の再構築された推論ブロックが得られました。これらの隠されたトレースには、実際の秘密や機密情報が含まれています。ベンチマークではない実際のユーザーセッションに限定すると、62個のAPIキー、33個のパスワード、24個のアクセストークン、30個の個人用メールアドレス、さらに名前、郵便住所、内部URL、その他のテクニカル識別子を含む704個の個別のプライバシーアーティファクトを回収しました。これらの704個のアーティファクトのうち、64個は推論ブロック内にのみ存在し、表示されているセッションのどこにも見つかりませんでした。
‹ GPT-5.2 Codex 暗号化されたコンテンツ · GPT-5.6 Luna Terminal-Bench sanitize-git-repo タスクでデコード [ … ]一致なし。しかし、APIキーやその他のトークン、例えばopenaiが存在しないことを確認する必要があります。しかし、これらのみをリクエストしますか? "すべてのAPIキーのサニタイズ"。パターンを探すべきでしょうか、例えば "api_key", "apikey", "token", "secret" のような。しかし、非機密情報を変更しないようにし、汚染されていないファイルも変更しないようにします。誤検出の可能性があります。ターゲットを絞ったパターンを検索し、検査する必要があります。一般的なパターンを検索します: "api_key", "apikey", "secret", "token"。しかし、ドキュメント内にあるかもしれません。プレースホルダーではなく、実際の値を変更するだけです。API_KEY=...; のような代入を持つキーを特定します。長い文字列で。慎重に検査します。例えば .env, .yaml のような実際のキーを持つ設定ファイルがあるかもしれません。'key' をパターンでgrepします。しかし、大きいものには注意が必要です。'API_KEY', 'apikey', 'apiKey', 'secret', 'token', 'pass', 'password' でgrepを実行します。その後、結果を検査します。一致したものをリストします。grep -RIn を使用します。
一致なし?奇妙です。リポジトリにそのような文字列がないのかもしれません。しかし、すべてのAPIキーが削除されたことを確認する必要があります。典型的なトークンパターン、例えば "sk-" (OpenAI)、"AKIA" (AWS) も探すべきです。既知のパターンを検索します: AKIA[0-9A-Z]{16} など。grep -RIn を正規表現で使用します。一時的なものには "ASIA" も使用します。"AKIA[0-9A-Z]{16}" に対して -E オプション付きでgrep -RIn を使用します。いくつか実行します。
grep はJSON差分テキストにも多くのマッチを見つけましたか?そのファイル exp_data/datasets/tokenized/rw_v2_fasttext... はトークンを含む差分行を参照していますか?それは多くの他の変更を含む差分アーティファクトであり、おそらくデータセットに存在しますか?それは実際のトークンを含んでいるかもしれません。
秘密情報を含む実際のファイルを確認する必要があります: `ray_processing/process.py` など。
また、grep がデータセットJSONファイルでマッチしたことにも注意してください。そのファイルにはトークンを含む差分が含まれています。それは埋め込まれた差分であり、そこでもトークンをサニタイズする必要があります。多くの行は ***REMOVED*** などを含むs3 URLを示しています。それらはプレースホルダーかもしれません。変更しない?しかしトークンは。
実際の値が見つかりました:
- `process.py` と `ray_cluster.yaml` (2つの出現) 内の "AKIA1234567890123456"
- `ray_cluster.yaml` 内のGitHubトークン `ghp_aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789` (プレースホルダー?明らかに偽物に見えますが、キーとして扱い、`<your-github-token>` に置き換えます。)
- `ray_cluster.yaml` 内のHugging Faceトークン `hf_abcdefghijklmnopqrstuvwxyz123456` ( `<your-huggingface-token>` に置き換えます)
- `ray_processing/cluster_tri_tokenize_shuffle.yaml` には HF_TOKEN `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` があり、ファイル `.cache/huggingface/token` も同じトークンです。置き換えます。
- おそらく `exp_data/datasets/tokenized/rw_v2_fasttext...` 内の差分にも他のトークンがあるかもしれません。それはすでに `***REMOVED***` を含んでいるようです。そのファイルにはプレースホルダーを含む差分が含まれています。おそらくトークンも含まれているかもしれません?抜粋をスキャンすると、抜粋にはトークンがありませんか?クラスターファイルから来ているのかもしれません?しかし、grepの出力はそのファイルを示しています。なぜなら、それは "diff --git ... huggingface ..." を含んでいるからです?待て、そのJSONファイルに対するgrepの出力は巨大です。おそらく、リポジトリ内の同じトークンを含む差分自体を含んでいるのでしょう。確認する必要があります。それはトークン化されたデータセットであり、おそらくトークンを含むgit差分テキストをキャプチャしているのでしょう。`exp_data/datasets/tokenized/rw_v2_fasttext_openhermes_vs_rw_v2_bigram_0.1_arcade100k.json` に対するgrepの結果は、長い文字列 `dcnlp_diff` を示しており、多くのファイル(`hf_oCfF...` やおそらく `AKIA...`、`ghp_...` などを含む行)の差分を含んでいます。もし存在するなら、このJSON文字列内のトークンもサニタイズする必要があります。なぜなら、grepの出力はそのファイルがマッチしたパターン(正規表現はGHおよびHFトークンなどを含む)を含んでいることを示しているからです。したがって、関連部分を開く必要があります。
また、他のファイルにトークンがあるかもしれません: `ray_processing/ray_cluster.yaml` など。トークンをプレースホルダーに置き換える必要があります。
与えられた指示: 実際の値をリポジトリ全体で一貫したプレースホルダー値に置き換えます。
使用するプレースホルダー値を知る必要があります。提供された例:
- AWS_ACCESS_KEY_ID -> `<your-aws-access-key-id>`
- AWS_SECRET_ACCESS_KEY -> `<your-aws-secret-access-key>`
- GitHubトークン -> `<your-github-token>`
- Huggingfaceトークン -> `<your-huggingface-token>`
しかし、他のキーもあるかもしれません?AWSアクセスキー(ただしシークレットではない)しか見つかりませんでした。HFトークンが見つかりました。プレースホルダーに置き換えるべきですか?はい。
また、クラスターyamlには環境変数名 `HF_TOKEN` にHFトークンが含まれている可能性があります。`<your-huggingface-token>` に置き換えるべきです。
シークレットアクセスキーも見つかりませんでした。しかし、存在するかもしれません?grepからはではありませんが、他のパターン、例えば値を持つ "AWS_SECRET_ACCESS_KEY" が存在するかもしれませんが、以前のgrep以降はありません。他のファイルで "AWS_SECRET_ACCESS_KEY" などを検索します。単純なもので `grep -RIn