セキュリティモデル
致死的な3要素(The Lethal Trifecta)保護の技術アーキテクチャ。
Edison Watchは、攻撃に必要な能力の組み合わせを検出し、ブロックすることで、データ持ち出しを防止します。
脅威:プロンプトインジェクション
AIエージェントは、プロンプトインジェクション(Webページやファイルなどの外部コンテンツに隠された悪意のある指示)に対して脆弱であり、AIを操作して機密データを持ち出させます。
致死的な3要素(The Lethal Trifecta)
持ち出しには3つの能力が必要です。Edison Watchは、セッションごとの単調増加フラグを介してこれらを追跡します:
| 能力 | セキュリティフラグ | アクション |
|---|---|---|
| プライベートデータアクセス | read_private_data | AIが内部ファイル、DB、またはドキュメントを読み取ります。 |
| 信頼できないコンテンツ | read_untrusted_public_data | AIがインターネットからデータを取得します。 |
| 外部通信 | write_operation | AIが外部にデータを送信します(Slack、メール、API)。 |
強制ロジック: セッションがプライベートデータと信頼できないコンテンツの両方にアクセスした場合、その後の外部通信は、人間の承認のために一時停止されます。
セッション状態
状態はEdisonサーバーで追跡され、単調増加です:フラグが設定されると(例:プライベートデータにアクセス)、そのセッションでは解除できません。これにより、「リセット」攻撃が防止されます。
アクセス制御レベル(ACL)
ACLは、3要素の状態に関係なく、機密データが機密度の低い宛先に流れるのを防ぎます。
| レベル | ルール |
|---|---|
| PUBLIC | どこにでも流れることができます。 |
| PRIVATE | PUBLICには流れません。 |
| SECRET | PRIVATEまたはPUBLICには流れません。 |
例: エージェントがSECRETとマークされたデータベースを読み取った場合、PUBLIC Slackチャンネルへの投稿はすぐにブロックされます。
データ追跡
| データタイプ | ログ | 保持期間(デフォルト) |
|---|---|---|
| ツール呼び出し | メタデータとパラメータ | 90日 |
| 結果 | 切り捨てられた出力 | 90日 |
| セキュリティイベント | フラグ変更とブロック | 1年 |
| 承認 | ユーザーの決定 | 1年 |
プライバシー: 生のファイルコンテンツと完全な会話履歴は、Edisonサーバーで追跡または保存されません。
資格情報の暗号化
Edisonは、保存された資格情報にゼロ知識暗号化を使用します。暗号化キーはサーバーに保存されません。
| 資格情報タイプ | 暗号化に使用するもの | キー保存? |
|---|---|---|
| ユーザー資格情報 | ユーザーの個人キー | 決して保存されません -- ハッシュのみ |
| 管理者資格情報 | ドメインキー(オプション) | 決して保存されません -- ハッシュのみ |
ユーザーのキーは、タイプされたセグメントの複合体です:user:{personal_key}.admin:{domain_key}。各セグメントは、異なるプレフィックスを持つHKDFを介して暗号化キーを導出し、暗号化の分離を保証します。設定手順については、管理者ガイド:資格情報の暗号化を参照してください。
トランスポートと認証
- 認証: HMAC署名付きAPIキーまたはSAML 2.0/OIDC。
- トランスポート: TLS 1.2+ 必須。
- 分離: クライアントはEdisonサーバーとのみ通信します。MCPバックエンドへの直接クライアントアクセスはありません。
依存関係の固定
Edison Watchは、初回実行時にMCPサーバーの依存関係を自動的に固定することで、サプライチェーン攻撃を防ぎます。
目的
パッケージランナー(npx、uvx)を介してインストールされたMCPサーバーは、依存関係が悪意を持って更新された場合、サプライチェーン攻撃に対して脆弱になる可能性があります。固定により、以下が保証されます:
- 再現可能な実行: 毎回まったく同じコードが実行されます
- 改ざん防止: ロックファイルは安全に保存され、管理者のアクションなしに変更できません
- バージョン管理: 正確なパッケージバージョンがロックされ、予期しない更新が防止されます
仕組み
-
初回実行時の解決:
npxまたはuvxを使用するサーバーが最初にマウントされると、Edison Watchは以下を行います:- 完全な推移的依存関係グラフを解決します
- ロックファイル(npm:
package-lock.json、Python:uv.lock)を生成します - ロックファイルをローカルデータベースに安全に保存します
-
一時的なランタイム: 各マウント時に:
- 一時的なランタイムディレクトリを作成します
- (パッケージレジストリからではなく)保存されたロックファイルから依存関係をインストールします
- 隔離されたランタイム環境からサーバーを実行します
-
フェイルクローズ: 固定に失敗した場合(ネットワークの問題、破損したロックファイル)、サーバーは起動しません。これにより、固定されていないコードが実行されないことが保証されます。
管理者コントロール
すべての固定管理は、管理者ダッシュボードを通じて行われます:
- ステータスの表示: サーバー概要で固定されたパッケージバージョンと日付を表示します
- 固定のクリア: キャッシュされたロックファイルを削除して再固定を強制します(パッケージ更新後に役立ちます)
- すべての固定をクリア: すべてのサーバーの固定をクリアする一括操作
コマンドラインまたは環境変数の設定は必要ありません。すべてのコントロールは、セキュリティと監査可能性のためにUI駆動です。

