# セキュリティ

> Agent NAS は、プロンプトインジェクションを防ぎません。注入されたあとに起きることを限定します。範囲の狭いリースで実行が触れられるものを区切り、ブランチで間違いを元に戻せるようにし、Rule of Two で、信頼できない内容を読んだセッションが機微なデータと外向きの経路を同時に持てないようにし、追跡できる記録を残します。

## 範囲と信頼の前提

- **守るもの：** NAS の中のデータと履歴、認可の境界、記録の完全性、記憶の追跡可能性。
- **守らないもの：** NAS の外でエージェントが行うこと、計算そのものの隔離（それはサンドボックスの仕事です）、モデル提供者の側で起きること。
- **信頼の前提：** 信頼できる計算基盤（TCB）は、NAS のゲートウェイ、ポリシーエンジン、記録サービスです。ホストは侵害されておらず、サンドボックスが計算を隔離しています。TCB が侵害されれば、このページの保証は成り立ちません。

## Rule of Two：セッションの不変条件

3 つの性質：**[A]** セッションが信頼できない内容を読んだ、**[B]** リースが機微なデータの読み取りを許す、**[C]** リースが保護された状態の変更や外向きの通信を許す。1 つのセッションでこの 3 つがそろったとき、C を起動する呼び出しは、自動では通りません。

| シナリオ | A | B | C | 結果 |
| --- | --- | --- | --- | --- |
| ウェブページを要約して、ブランチ上のノートにする | はい | はい | いいえ（ブランチのみ） | 自動：ブランチの中への書き込みは C に数えません。 |
| ウェブページを読んだあと、`main` へのマージを提案する | はい | はい | はい | Human Gate。 |
| 公開データだけを読み、作業用の領域に書く | はい | いいえ | いいえ | 自動。 |
| 外部のメールを読んだあと、メールを送る（外向きの送出） | はい | はい | はい | ゲート。`secret` が関わるなら拒否。 |

これは Meta の [Agents Rule of Two](https://ai.meta.com/blog/practical-ai-agent-security/) を **ストレージの境界** に実装したものです。Meta 自身も、これはリスクを減らすための経験則であって終着点ではなく、最小権限の代わりにもならないと強調していて、私たちも同じように使います。仕組みは [Trust Labels](https://agentnas.com/ja/concepts/trust-labels/) にあります。

## 脅威モデル

| 脅威 | NAS が強制できること | NAS にできないこと | 残るリスク |
| --- | --- | --- | --- |
| T1 間接プロンプトインジェクション（ファイル、ウェブページ、メール経由） | Rule of Two、リースによる限定、ブランチ、ゲート。 | インジェクションが起きること自体の阻止、起きたあとにリースの範囲内で行われる悪意ある動作の阻止。 | リースの範囲内での悪用。 |
| T2 認証情報の漏えい（エージェントが長期の鍵を読む） | 長期の認証情報は実行の手元に置かない。シークレットスキャナーが `secret` をマークする。短い TTL。 | エージェントが、リースの範囲内のデータを、承認された外向きの経路へ送ることの阻止。 | リースの範囲内のデータの流出。 |
| T3 広すぎる権限と操作ミス | 範囲の狭いリース、ブランチ、ソフト削除、どのリースの外にもあるスナップショット。 | NAS の外の副作用を元に戻すこと。 | NAS の外への影響。 |
| T4 記憶への毒入れ（ロールをまたぐ拡散を含む） | 出どころと汚染、隔離、レビュー済みのものだけ自動読み込み、ロールバック。 | もっともらしく見える誤った事実の見分け。 | レビュアーが通してしまった毒。 |
| T5 リースの盗難や再利用 | 短い TTL、失効できる、任意の保持者バインド（DPoP、mTLS）。 | TTL の間の悪用の阻止。 | TTL の窓。 |
| T6 承認疲れと、ろくに見ない承認 | まれなゲート、NAS が差分を描画、承認をダイジェストに束縛、承認率の監視。 | 人間に注意深く見させること。 | 人為的なミス。 |
| T7 ログの改ざん | ハッシュチェーン、任意の外部アンカー。 | アンカーがないとき、root がログを壊すのを防ぐこと。 | 悪意のある管理者。 |
| T8 データの持ち出し（外向きの送出、共有、検索結果） | 外向きの送出にはリースの操作とゲートが必要。`secret` は外へ出せない。導出物はラベルを引き継ぐ。 | 人間が承認したあとの漏えいの防止、隠れチャネル。 | 承認後の漏えい。 |
| T9 サプライチェーン（スキル、MCP サーバー、プラグイン、モデル） | スキルや外部 MCP サーバーの内容は `external` として扱う。スキルのディレクトリは特定のコミットに固定できる。ランタイムのマニフェストは記録に書く。 | サードパーティのコードが無害だと保証すること。 | 固定してしまった悪意あるバージョン。 |
| T10 リソースの枯渇（ブランチ爆弾、予算の枯渇、読み取りのループ） | クォータ、TTL、予算、ブレーカー。 | 正当な大きなタスクと暴走の区別。 | 局所的なサービス拒否。 |

## 対策

- **ポリシーエンジン：** 決定的（Cedar や Rego 形式）、既定は拒否、拒否するときは読める理由と該当したルールを返す。**LLM は呼び出さない**。
- **認証情報ブローカー：** 長期の鍵はブローカーが持つ。承認された外向きの操作の中でだけ、実行のために短命の下流トークンを発行する。
- **隔離と鍵：** ロールごとに 1 つの Home とパス空間を持つ。`sensitive` の保持クラスは別の鍵ドメインを使う。
- **サプライチェーン：** スキル、MCP サーバー、プラグインの内容は `external` として扱う。実行の開始時に、使うスキルとバージョンを記録に書く。

## 正直な限界

1. これはプロンプトインジェクションへの防御では **ありません**。被害を限定し、見えるようにします。
2. リースの範囲内の正当な権限は、依然として悪用されうる。
3. NAS の外の副作用には何もできない。すでに送ったメール、すでに呼び出した API など。
4. 隠れチャネルとサイドチャネルは対象外。
5. TCB が侵害されれば、保証は成り立たない。
6. 人間は間違える。ゲートはそのリスクを下げるが、なくすことはできない。
7. 汚染は保守的で、摩擦と誤検知を生む。調整が必要で、拒否の理由が見えることも必要。
8. 暗号粉砕が守るのは、私たちが管理できるコピーだけ。

## インシデント対応

- **ブレーカー：** `revoke_run` と `revoke_role` が、リースをただちに失効させ、ブランチを凍結する。
- **ロールバック：** 影響を受けたツリーを、以前のコミットに戻す。
- **追跡：** 読み取りマニフェストと記録チェーンで、実行が何を読み、何を書き、どのノートに触れたかを調べる。
- **後始末：** [Cascade Forget](https://agentnas.com/ja/concepts/cascade-forget/) で、影響を受けた導出物を削除し、報告を出す。

## 可観測性と監査

- **3 種類のデータ：** 記録（イベント）、読み取りマニフェスト（入力の集合）、メトリクスとトレース。
- **`explain(commit)`：** そのコミットを生んだ実行とリース、通過したゲート、読んだもの、依存する入力を返す。
- **既存の可観測性基盤との統合：** 1 回の実行は 1 つの OpenTelemetry GenAI スパンに対応し、リースとゲートはイベントとして付く。記録は JSON Lines としてエクスポートするか、SIEM に流せる。
- **メトリクス：** リースの発行率と拒否率、ゲートのキューの長さ、承認率、承認にかかる時間、ブランチの数と年齢、索引の鮮度、予算の消費、記録チェーンの検証結果。
- **プライバシーと保持：** 既定ではメタデータだけを記録し、内容は記録しない。記録の保持と内容の削除は独立している。記録そのものを読むにもリースが必要。

---

正規 URL: https://agentnas.com/ja/security/
更新日: 2026-11-11 · 仕様ドラフト v0.2 · CC BY 4.0
