
2026/08/11 19:40
GitHub Copilot を MITM プロキシの背後に置いたことで学んだこと
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
この原文のサマリーは高品質かつ包括的であり、以下を繰り返します:
サマリー:
本テキストの中核的なメッセージは、現代の AI 開発ツールである VS Code や Copilot が、コード、エディット、会話履歴を単一のデータストリームに統合する複雑な「ステートフルシステム」として機能するという点にあります。研究員たちは、技術的なプロキシを使ってネットワークトラフィックをインターセプトすることで、機密のあるユーザーのプロンプトや応答が、適切な削除処理なくプレーンテキストとしてローカルの SQLite データベース内に保存されていることが明らかになりました。このアーキテクチャは、企業ポリシーが
.env ファイルなどの機密ディレクトリを明示的に除外することを明確にしておらず、ハードコードされた最近のファイル数の制限により意図せず秘密情報が漏洩するリスクを生み出します。クローズドソースモデルとは異なり、オープンソースの代替ツールにおいてもコンテキストアッセンブリ中のデータ漏洩を防ぐために厳格なエンジニアリングが必要です。これらのツールがローカルのワークスペースデータを大量に統合するよう進化していく中、業界の焦点はモデルそのものの能力から、安全なコンテキスト注入戦略へとシフトする必要があります。したがって、ユーザーも企業も、機密情報を能動的にフィルタリングする厳格なリポジトリポリシーを実装することが不可欠であり、AI ネイティブの開発環境においてプライバシー管理が後付けのものではなく基盤となる要件として確立される必要があります。本文
逆転エンジニアリングで解明:VS Code Copilot の「状態管理」の正体と課題
記事概要
ラファエル氏が公開している週刊ニュースレターの内容です。 既存の AI アプリから内部動作やアーキテクチャを学ぶ重要性、および VS Code Copilot の逆転エンジニアリング(リバース・エンジニアリング)を通じて明らかになった「ステートフルなシステムへの変化」について解説しています。
- 目的: 公開されている AI 機能だけでなく、裏側でどう動いているかを理解し、開発者にとっての教訓を得ること。
- 手法: VS Code のソースコード(オープンソースだが大規模)への直接アクセスは難しかったため、ネットワークトラフィックのパッシブ監視から推測するアプローチを採用。
- 結論: 「AI コーディングツールはステートフルなシステムへ移行している」。
1. なぜ Electron なのか:逆転エンジニアリングの鍵
AI アプリの多くはElectronという JavaScript フレームワークを使用しています。 これは開発者が単一のコードベースでマルチプラットフォーム(Windows, macOS, Linux)アプリケーションを構築することを可能にする仕組みです。
Electron の特徴と利点
- アーキテクチャ: Node.js ランタイム + HTML/CSS/JS アセットをパッケージ化し、Chromium でレンダリング。
- 開発効率: 異なるプラットフォームそれぞれに独立したコードベースを維持する必要がない。主要なロジックは共有される。
- 調査の利点: アプリ同士でアーキテクチャが共通しているため、一つのアプリから得た知見を他のアプリへ転移しやすくする。
調査対象:VS Code Copilot
- VS Code はオープンソース(リポジトリ公開)だが、Claude や Slack などは非公開。
- ソースコードは数百万行規模であり、特定の挙動を検索するには時間的・コスト的に困難なため、ネットワーク監視で情報を集約。
2. ネットワークトラフィックのキャプチャ:mitmproxy を使った設定
アプリとサーバー間での通信(HTTPS)を傍受するため、**MITM(マン・イン・ザ・ミドル)**のプロキシサーバー「mitmproxy」を使用します。
インストール手順(macOS)
-
Homebrewでツールをインストール。
brew install mitmproxy mitmweb -
VS Code の設定変更
→Cmd+Shift+P
を開き、以下の設定を追加・修正する。User Settings JSON設定項目 値 理由 http.proxy http://localhost:8080mitmproxy の接続先を指定 http.proxyStrictSSL
(チェックオフ)falsemitmproxy 発行の証明書を検証除外 http.proxySupport override拡張機能も含め全てプロキシ経由にする -
mitmproxy の起動と監視
- コマンド実行後、数秒でトラフィックがキャプチャされる。
- Web UI (
) を起動し、フィルタ機能でリクエストを絞り込む(例:mitmweb
で Marketplace API 関連を探す)。marketplace
⚠️注意点: キャプチャされない場合、「拡張機能ホストプロセス」が古い状態(stale)になっている可能性があります。
- 解決策:
→Cmd+Shift+Pを実行。Developer: Restart Extension Host
3. Copilot の動作分析:起動と意図分類
Copilot が起動後、ユーザーの操作をどのように処理しているかを実証しました。
認証フロー(OAuth)
- 初期化時に標準的な OAuth フローでトークンを取得・更新。
- ユーザーの特権レベルを確認する。
モデルとエージェント機能の選択
モデル呼び出し前に行われる重要なチェックプロセスです。
- 一般モデルの確認:
エンドポイントへリクエストを送信し、利用可能なモデル一覧を取得。/models - SWE エージェントの確認:
へリクエストを送り、ソフトウェアエンジニアリングタスクに特化した専用モデルを選択。/agents/swe/models
「意図分類(Intent Classification)」の仕組み
ユーザーがメッセージを入力すると、まずは以下のフローを行います。
- プロンプトを「コード生成」「デバッグ」「推論」「ツール使用」などの意図に対してスコアリング。
- スコアに基づいて、どのモデルがタスクを実行すべきか決定する(
)。/models/session/intent
graph LR A[ユーザー入力] --> B{意図分類} B -- コード生成 --> C[コード生成用モデル] B -- デバッグ --> D[デバッグ用モデル] B -- ツール使用 --> E[ツール実行用モデル]
重要な発見:ステートフルな動作の証拠
-
機密情報の漏洩テスト:
ファイルに偽の機密情報を記述しても、編集操作そのものがトリガーされない場合がある。.env- ただし、**
**のような他のファイルで入力を行うと、即座にリクエストが送信される(インライン補完が有効なため)。.pyproject.toml - 結論: 機密情報のフィルタリングは意図的に実装されていない可能性が高い。
-
セッションストアの存在 (
):session_store_sql- Copilot が内部で使用するローカル SQLite DB (
) にアクセスしている。session-store.db - ここにはすべてのプロンプト、LLM レスポンス、ツール実行履歴が保存されている。
- スキーマの可視化:
とuser_message
がプレーンテキスト(暗号化・マスキングなし)で保存されることが確認された。assistant_response
- Copilot が内部で使用するローカル SQLite DB (
4. コード検証:なぜ「状態」は永続化されているのか
逆転エンジニアリングの結果、VS Code Copilot のコード(
sessionStore.ts など)を確認しました。
プレーンテキスト保存の意図
- コード調査結果: データ流入時にスクレイブ(削除)やマスキングのロジックは存在しない。
- 書き込みパスにおいて、改行、安全性フィルタリングなどが行われていないことを示す。
- これはバグではなく、意図的な実装である。
コンテキストの肥大化
- recentEdits.tsx: 最近の編集ファイル(最大 20 ファイル)をコンテキストに含めるようハードコードされている。
- これにより、触れていない行に含まれる潜在的な機密情報も API に送信されるリスクがある。
5. 結論:AI コーディングツールの将来と課題
今回の調査から、現在の AI ツールが抱える本質的な問題点が浮き彫りになりました。
主要な発見
- 「コンテキストこそが製品となる」: モデルの精度だけでなく、適切なコンテキストのアセンブリ(コード、履歴、会話など)が差別化要因である。
- ステートフルなシステムへ移行: ユーザーの状態(State)を保持する仕組みが標準化しつつある。
2 つの重大な課題
- エンジニアリングの問題
- コンテキストが増えるほど、関連性のある情報を選別するのが難しくなる。
- プロンプト肥大化を防ぎつつ、軽量でキャッシュフレンドリーな設計が必要。
- プライバシーと機密性
- ハネス(フレームワーク)が大量のデータを収集・永続化するため、境界を越えたデータ流出への対策が不可欠。
開発者への提言
- モデル自体の学習よりも、モデルを取り巻くハネス(アーキテクチャ)を理解することが重要です。
- AI アプリを開発する際、「ステートフルな設計」や「コンテキスト管理」をどう考えるかが、最も重要な課題の一つとなっています。
Lighthouse ニュースレター(本記事の元ネタ)は無料で購読可能です。興味がある場合はご検討ください。 [購読リンク]