コードモードセキュリティ(ベータ版)
サンドボックス化、AST分析、およびテイント追跡による安全なMCP-as-code実行。
コードモードを使用すると、エージェントは個々のツール呼び出しを行うのではなく、TypeScriptコードを実行して複数のMCPツールを連鎖させることができます。このアプローチはレイテンシとトークン使用量を大幅に削減しますが、新たなセキュリティ上の考慮事項をもたらします。
ベータ機能: コードモードセキュリティは現在ベータ版です。機能とAPIは変更される可能性があります。
Edison Watchは、サンドボックス化された実行、静的分析、およびテイント認識データ追跡を組み合わせた多層防御アーキテクチャでコードモードを保護します。
なぜコードモードなのか?
従来のエージェントは、コンテキストの腐敗に悩まされています。すべてのツール呼び出しの入力と出力は、LLMのコンテキストウィンドウに追加する必要があります。エージェントを多くのMCPサーバーに接続すると、アクションが実行される前であってもツール定義がトークンを消費するため、コンテキストの腐敗につながります。複雑なデータ処理(例:「これら20個のファイルを要約する」)の場合、データを移動するだけで数十万トークンを消費する可能性があります。
コードモードは、エージェントが安全な環境_内部_でデータを処理するスクリプトを作成できるようにすることでこれを解決します。LLMは最終結果のみを参照するため、トークン使用量が90%以上削減されることがよくあります。
セキュリティアーキテクチャ
Edison Watchは、エンタープライズデプロイメント向けにコードモードを安全にするために、3層の防御を採用しています。
1. Denoサンドボックス(RCE保護)
コードは、厳格な権限を持つ安全なDenoサンドボックスで実行されます:
- ネットワークアクセスなし: スクリプトは任意のHTTPリクエストを行うことはできません。許可されたMCPツールのみを呼び出すことができます。
- ファイルシステム書き込みなし: スクリプトはホストファイルシステムを変更できません。
- リソース制限: 実行時間(90秒)、メモリ(256MB)、および出力サイズ(10MB)の固定制限。
2. AST分析(分析可能性)
実行前に、Edison Watchはスクリプトの抽象構文木(AST)を解析して、TypeScriptの厳格なサブセットを強制します。これにより、攻撃者が悪意のある動作を隠すために使用する難読化手法が防止されます。
厳格モード: eval()、new Function()、および動的インポート(例:import(variable))のような動的機能をブロックします。コードは実行するために静的に分析可能である必要があります。
3. テイント認識3要素(データ保護)
バニラの「致死的な3要素」モデル(プライベートデータ+信頼できないコンテンツ+外部通信のブロック)は、コード実行には攻撃的すぎる可能性があります。コードモードでは、より正確にするためにテイント追跡を使用します。
「メス」アプローチ
機密ツールが呼び出されたときにセッション全体にフラグを立てるのではなく、Edison Watchはスクリプト内のデータ変数の実際の流れを追跡します。
例:カレンダーの問題 エージェントがカレンダーの招待状を読んで空き状況を確認するとします。招待状の本文には信頼できないコンテンツ(プロンプトインジェクションの可能性)が含まれていますが、開始/終了時間は安全なメタデータです。
- バニラ3要素: エージェントが時間を出力しただけであっても、「カレンダー」(プライベート)と「招待状本文」(信頼できない)にアクセスされたため、アクションをブロックします。
- コードモードテイント追跡: スクリプトを分析します。コードが
console.log(event.startTime)を実行するが、event.bodyをログに記録しない場合、Edisonは信頼できないコンテンツがサンドボックスから出ていないことを知っています。アクションは許可されます。
この精度により、厳格なセキュリティ保証を維持しながら誤検知が減少します。
可観測性
すべてのコードモード実行は完全に監査されます。システムは以下を記録します:
- エージェントによって生成された正確なTypeScriptコード。
- 検証結果とASTエラー。
- コンソール出力と戻り値。
- テイントとしてマークされた特定のデータパス。
これらの詳細は、安全な監査ログに保存されます。
運用制限
サービス拒否(DoS)と乱用を防ぐために、コードモードはハードリミットを強制します:
| メトリクス | 制限 |
|---|---|
| 実行時間 | 90秒 |
| メモリ | 256 MB |
| 出力サイズ | 10 MB |

