AIエージェントを信用してはいけない

2026年2月28日 · Gavriel Cohen

AIエージェントを使って開発する際、エージェントは信頼できない、潜在的に悪意あるものとして扱うべきです。プロンプトインジェクション、サンドボックスからの脱出を試みるモデル、あるいはまだ誰も思いついていない脅威、どのような脅威モデルであれ、エージェントを信用すべきではありません。正しいアプローチは、より優れた権限チェックやスマートな許可リストではなく、エージェントが不正な動作をすることを前提とし、その被害を封じ込めるアーキテクチャです。

これがNanoClawを設計する際の原則です。

プロセスを信用するな

OpenClawはデフォルトでホストマシン上で直接実行されます。オプトインのDockerサンドボックスモードがありますが、初期状態では無効化されており、大半のユーザーは有効にしません。サンドボックスなしでは、セキュリティは完全にアプリケーションレベルのチェックに依存します:許可リスト、確認プロンプト、「安全な」コマンドのセット。これらのチェックは、エージェントが不正なことをしないという暗黙の信頼の上に成り立っています。エージェントが潜在的に悪意あるものだという考え方を採用すれば、アプリケーションレベルのブロックでは不十分なことは明白です。完全なセキュリティを提供しません。意志のある、あるいは侵害されたエージェントはそれらを回避する方法を見つけ出します。

NanoClaw では、コンテナによる分離がアーキテクチャの中核です。各エージェントは自身のコンテナ内で実行されます。DockerまたはmacOS上のApple Containerです。コンテナは一時的で、呼び出しごとに新規作成され、終了後に破棄されます。エージェントは非特権ユーザーとして実行され、明示的にマウントされたディレクトリのみが見えます。コンテナ境界はOSによって強制されます。

他のエージェントを信用するな

OpenClawのサンドボックスが有効であっても、すべてのエージェントは同じコンテナを共有します。個人アシスタントと仕事用エージェントを、異なるWhatsAppグループやTelegramチャンネルで使い分けているかもしれません。しかし、すべて同じ環境にあるため、本来異なるデータにアクセスすべきエージェント間で情報が漏洩する可能性があります。

エージェント同士も、あなたがエージェントを信頼する以上に互いを信頼すべきではありません。NanoClaw では、各エージェントが独自のコンテナ、ファイルシステム、Claudeセッション履歴を持ちます。個人アシスタントは仕事用エージェントのデータを見ることができません。完全に別のサンドボックスで実行されるからです。

共有コンテナ パーソナル アシスタント 仕事用 エージェント ファミリーグループ エージェント 共有ファイルシステム すべての認証情報にアクセス可能 すべてのセッション履歴が閲覧可能 すべてのマウントデータが共有 すべてのエージェントがすべてを参照可能 エージェント別コンテナ パーソナルアシスタント /data/personal 専用セッション ro × 仕事用エージェント /data/work 専用セッション rw × ファミリーグループエージェント /data/family 専用セッション ro エージェントは互いに分離されている

コンテナ境界はハードなセキュリティレイヤーです。設定に関係なくエージェントはそこから脱出できません。その上に、~/.config/nanoclaw/mount-allowlist.jsonにあるマウント許可リストが多層防御の追加レイヤーとして機能します。これはユーザーが公開すべきでないものを誤ってマウントすることを防ぐためのものであり、エージェントの脱出を防ぐためのものではありません。機密パス(.ssh.gnupg.aws.envprivate_keycredentials)はデフォルトでブロックされています。許可リストはプロジェクトディレクトリの外にあるため、侵害されたエージェントが自身の権限を変更することはできません。ホストのアプリケーションコードは読み取り専用でマウントされるため、エージェントの操作はコンテナ破棄後に残ることはありません。

グループ内のメンバーも信頼すべきではありません。メイン以外のグループはデフォルトで信頼されません。他のグループやそのメンバーは、他のチャットにメッセージを送ったり、他のグループのタスクをスケジュールしたり、他のグループのデータを閲覧したりすることはできません。グループ内の誰もがプロンプトインジェクションを送信する可能性があり、セキュリティモデルはそれを考慮しています。

読めないものを信用するな

OpenClawには約50万行のコード、53の設定ファイル、70を超える依存関係があります。これはオープンソースセキュリティの基本的な前提を破っています。Chromiumは3500万行以上ありますが、Googleのレビュープロセスを信頼しているから成り立っています。ほとんどのオープンソースプロジェクトはその逆で、多くの目が実際にレビューできる程度に小さく保たれています。OpenClawの40万行をレビューした人は誰もいません。適切なレビュープロセスなしに数週間で書かれたものです。複雑さは脆弱性が潜む場所であり、Microsoftの分析もこれを確認しました:OpenClawのリスクは通常のAPI呼び出しを通じて発生し得る、なぜなら全体像を把握できる人がいないからです。

コード行数の比較:OpenClaw 約40万行 vs NanoClaw 約3,000行

NanoClaw は単一のプロセスと少数のファイルで構成されています。セッション管理、メモリ圧縮などの多くの機能において、車輪の再発明をする代わりに、Claude Codeのラッパーである Anthropic の Claude Agent SDK に大きく依存しています。有能な開発者なら午後の時間でコードベース全体をレビューできます。これは制約であり、制限ではありませんコントリビューションガイドラインでは、バグ修正、セキュリティ修正、および簡素化のみを受け付けています。

新機能はスキルを通じて追加されます。スキルとは、コーディングエージェントがコードベースにマージする完全な動作リファレンス実装を含む指示のことです。追加されるコードを事前に正確にレビューできます。そして、実際に必要な統合だけを追加します。すべてのインストールは、オーナーの正確な要件に合わせた数千行のコードになります。

これが本当の違いです。40万行のモノリシックなコードベースでは、2つの統合しか有効にしていなくても、残りのコードはそこにあります。ロードされ、攻撃対象の一部であり、プロンプトインジェクションや不正なエージェントから到達可能です。アクティブなものと休止しているものを切り離すことはできません。「自分のコード」の境界すら定義できないため、監査もできません。スキルでは、境界は明確です:数千行で、すべて自分で追加を選んだコードで、すべての行を読むことができます。コアは実際に時間とともに小さくなっています。例えば、WhatsAppサポートはスキルとして切り出されてパッケージ化されています。

不信を前提に設計する

ハルシネーションや不正な動作をするエージェントがセキュリティ問題を引き起こし得るなら、そのセキュリティモデルは壊れています。セキュリティはエージェントの表面の外側で強制されなければならず、エージェントが正しく動作することに依存してはいけません。コンテナ、マウント制限、ファイルシステム分離はすべて、エージェントが予期しない動作をした場合でも、影響範囲を封じ込めるために存在します。

これでリスクが完全になくなるわけではありません。データにアクセスできるAIエージェントは本質的にリスクの高い構成です。しかし、正しい対応は、その信頼をできるだけ狭く、検証可能にすることです。エージェントを信用するな。壁で囲め。

NanoClaw のソースコードセキュリティモデルの全文を読むことができます。午後の時間で読み切れる量です。