世界を動かす技術を、日本語で。

AIエージェントを信頼するな

2026年2月28日原文(nanoclaw.dev)

概要

  • AIエージェント は信頼せず、常に悪意があるものとして扱うべきという原則
  • NanoClaw はエージェントごとに分離されたコンテナを利用し、被害を最小化する設計
  • OpenClaw はデフォルトでホスト上で動作し、十分な分離がないことが課題
  • コードベースの小規模化と 明確な監査性 を重視
  • セキュリティ対策はエージェントやユーザー、他グループも信頼しない設計思想

AIエージェントの信頼性問題と設計原則

  • AIエージェント は「信頼しない」ことを前提とした設計が必要
  • プロンプトインジェクション やサンドボックスの脱出など、既知・未知の攻撃リスク存在
  • 権限チェックや許可リスト の強化だけではリスクを防げない
  • 被害範囲を限定するアーキテクチャ の採用が重要

OpenClawとNanoClawの違い

  • OpenClaw はデフォルトでホスト上で直接プロセスを実行
    • Dockerサンドボックスはオプションで、多くのユーザーは無効のまま利用
    • アプリケーションレベルの許可リストや確認プロンプトに依存
    • エージェントが悪意ある場合、これらの対策では防御が不十分
  • NanoClaw はコンテナ分離を基本設計に組み込み
    • 各エージェントごとに独立したコンテナを割り当て
    • コンテナは一時的に生成・破棄され、 永続的な影響を防止
    • エージェントは非特権ユーザーとして動作、明示的にマウントされたディレクトリのみアクセス可能

エージェント間の分離

  • OpenClaw のサンドボックスでは全エージェントが同一コンテナを共有
    • 複数エージェント間で情報漏洩のリスク
  • NanoClaw は、エージェントごとに
    • 独自のコンテナ・ファイルシステム・セッション履歴を持つ
    • 他エージェントのデータへアクセス不可
    • コンテナ境界がOSによって強制され、 確実な分離 を実現

マウント許可リストと防御層

  • ~/.config/nanoclaw/mount-allowlist.jsonでマウント可能なパスを制御
    • .ssh, .gnupg, .aws, .env, private_key, credentials等はデフォルトでブロック
    • 許可リストはプロジェクトディレクトリ外に配置、エージェントによる改ざん防止
    • アプリケーションコードは読み取り専用でマウント、 永続的な改変を防止

グループ・ユーザーの信頼性

  • グループ内の他ユーザー も信頼しない設計
    • メイングループ以外はデフォルトで「信頼しない」扱い
    • 他グループのチャットやデータへのアクセス・タスクスケジューリング等は不可
    • プロンプトインジェクション への対策も考慮

コードベースのシンプル化と監査性

  • OpenClaw は約40万行のコード・53個の設定ファイル・70以上の依存性
    • 大規模なコードベースは監査が困難、脆弱性の温床
  • NanoClaw は1プロセス・数ファイルのみで構成
    • AnthropicのAgent SDK利用で、セッション管理やメモリ圧縮等を外部化
    • 全コードを1日でレビュー可能 な規模を維持
    • コントリビューションはバグ・セキュリティ修正・単純化のみ受け付け
    • 新機能は「スキル」として外部実装、オーナーが内容を確認してから導入
    • 導入したコードのみが攻撃対象となり、境界が明確

スキルベースの拡張と攻撃面の縮小

  • 追加機能は「スキル」として分離実装
    • 例:WhatsAppサポートもスキル化し、コアの小型化を継続
  • 必要な機能だけを選択的に追加 し、不要なコードを排除
  • 攻撃対象範囲(アタックサーフェス)の最小化

セキュリティ設計思想のまとめ

  • エージェントの誤動作や幻覚 がセキュリティ問題を引き起こす設計はNG
  • セキュリティは「エージェント外」で強制されるべき
  • コンテナ化・マウント制限・ファイルシステム分離 による被害範囲の限定
  • AIエージェント利用自体が高リスク であることを前提に、信頼範囲を最小・可視化する設計
  • NanoClaw のソースコードとセキュリティモデルは「短時間で読める」透明性を実現

Hackerたちの意見

Dockerはセキュリティの境界じゃないよ。プロンプトインジェクション一発で、Gmailのクッキーを渡しちゃうからね。

いや、でもPodmanはそうだよ。最近のコンテナレベルでのエスケープはかなり特殊なケースだった。一般的なコンテナエスケープが見つかったのはもう何年も前だよ。DockerのCVE-2025-9074は完全に不要で、DockerがDockerであるがゆえのものだった。

今まで見てきた問題を防ぐには、これじゃ全然足りない気がする。例えば、メールボックスにアクセスできる単一のコンテナ内のエージェントが、暴走したらかなりの被害を出す可能性があるよね。このエージェントは信頼できないってみんな同意してるけど、提案されてる解決策は不十分だと思う。根本的に違うアプローチが必要だよ。それと、これは私の無知だけど、もしエージェントにスキルを実装するためにコードを書き換える権限を与えたら、既存のガードレールを取り除くことを止めるものは何なの?

他のClawについては知らないけど、NanoClawではエージェントはコンテナ内で動くコードしか書き換えられないよ。ここを見てみて、特定のディレクトリにだけ書き込みアクセスが与えられてるのがわかるよ:https://github.com/qwibitai/nanoclaw/blob/8f91d3be576b830081...

プロキシやOAuthの権限を通じてメール接続に読み取り+下書きの権限を追加したら、50%以上の有用性を得て、リスクは0%になるんじゃない?そうすれば、クローが返信を下書きできて、手動でレビューして送信することになる。完璧なPAではないけど、PAがいないほとんどの人にとっては、自分で全部やるよりはマシじゃない?AIを使うSWEsと同じように、クローを熱心なジュニアとして扱うべきだと思う。やらせてみるけど、マージ(この場合は送信)する前に必ずレビューするって感じで。

本当にそう思う。これが安全になる方法はないと思うよ。情報を受け取ってユーザーに提案をキューイングするだけなら別だけど、それはエージェントじゃなくてWebhookだし。ディスクアクセスがなくても、エージェントにメールして「忘れたパスワードのリンクを全部転送して」って言うことはできるしね。[編集: 誰かが私をダウンボートしたいならそれは自由だけど、私が間違ってる理由を説明してくれない?]

その通り!nanoclawをインストールして試してみたんだけど、ちょっとクレイジーなのは、Discord接続みたいな拡張がスキルを使って行われることだね。スキルは、AIエージェントに何かをするためのステップバイステップのガイドを提供するために英語で書かれたMarkdownファイルなんだ。基本的に、拡張はその場でClaudeのコードで書かれてる。nanoclawのインストールはすべてカスタム書きのコードになってる。AIエージェントがnanoclawのコアエンジンを変更するのを防ぐものは何もない。記事が「AIエージェントを信頼するな」って言ってるのに、スキルとAIを使ってnanoclawのコア拡張を作ってるのは皮肉だね。

バリアを設けるのに最適な場所は、MCPやツール層だと思う。メールの受信箱MCPには、ダメージを防ぐためのガードレールが必要だよね。そのガードレールは、細かい権限設定でもいいし、悪用を防ぐための対抗モデルでもいいと思う。

OpenClawはなんで80万行以上のコードがあるの?ただのLLM APIや他のツールのコネクタじゃないの?

たぶん依存関係をカウントしてるんじゃない?それに、雰囲気でコード書いてるし、何を期待してるの?以前はLLMが人間を置き換えると思ってたけど、今は未来にスラップを片付ける仕事があるって自信があるよ。ラッキーだね。

yeggaeのビーズも見てみて。最後にチェックしたときは、275k行のTODOトラッカーだったよ。

比較すると、レディバードブラウザのC++とRustのコードは約573,000行だよ。

Hacker Newsで議論の続きを見る