OpenShell: 安全な LLM エージェントのためのプロセス外強制

OpenShell: 安全な LLM エージェントのためのプロセス外強制

OpenShell はプロセス外強制により安全なエージェントランタイムを実現

OpenShell は、LLM エージェントを信頼境界内でデプロイできるようにするセキュリティおよびランタイム層です。従来のエージェント安全手法がシステムプロンプトに依存するのに対し、OpenShell は「スーパーバイザー」を使用してエージェントプロセスの外部からポリシーを強制し、プロンプトインジェクションやジャイルブレイクによってエージェントが侵害された場合でもセキュリティ制約が維持されます。

NemoClaw ブループリントパターン

NemoClaw は、特化型エージェントを構築するためのオープンブループリントです。完全な NemoClaw ブループリントは、次の 3 つの入れ替え可能なコンポーネントで構成されます。

  1. ハーネス: 計画とツール呼び出しを担当するエージェントループ(例: OpenClaw、Hermes、または LangChain DeepAgents)。
  2. モデル: 推論エンジンで、通常は NVIDIA Nemotron モデルが使用されます。
  3. ランタイム: OpenShell。サンドボックス化、ポリシー強制、ネットワーク分離を処理します。

ハーネスとモデルはユースケースに応じて入れ替え可能ですが、OpenShell はエージェントが定義されたセキュリティパラメータ内で動作することを保証する一定のランタイムとして機能します。

ハーネスとしての LangChain DeepAgents

LangChain の Deep Agent フレームワークは、長期タスク向けに設計されたモデル非依存のハーネスです。以下のような本番向けエージェントパターンを実装しています。

  • プランニングループ: To‑Do リストを用いた作業追跡の構造化プロセス。
  • サブエージェント: メインエージェントがサブタスク用に専門エージェントを生成できる機能。
  • 統合ファイルシステム: 状態やデータ管理のためにファイルの読み書きが可能。

OpenShell と組み合わせることで、これらの機能は信頼境界内に制限され、エージェントがホストマシンの機密データにアクセスすることを防ぎます。

プロセス外強制 vs. プロンプトベースの安全性

従来のエージェント安全性はシステムプロンプト(例: "You must not do X")に依存しています。LLM は条件付き確率マシンであるため、プロンプトインジェクションによりこれらのルールを無視させることが可能です。

OpenShell はこれを プロセス外強制 に置き換えます。スーパーバイザーコンポーネントはエージェントより先に起動し、エージェントを制限された子プロセスとして起動します。スーパーバイザーはネットワーク接続、ファイル書き込み、推論呼び出しなどのすべてのアクションをポリシーに照らし合わせて評価し、実行前に許可します。強制がエージェントのプロセス外で行われるため、エージェントは内部状態や指示に関わらずこれらのルールを回避できません。

スーパーバイザー制御の四本柱

OpenShell スーパーバイザーは以下の攻撃面を管理します。

1. ネットワーク分離

OpenShell は "default deny" の姿勢を取ります。サンドボックスから外部へトラフィックを送出できるのは、宛先が明示的に許可リストに追加された場合(例: 特定の検索 API や推論エンドポイント)だけです。これにより、コンプライアンスチームはデータが不正な外部サーバへ流出しないことを検証可能な形で保証できます。

2. ファイルシステムサンドボックス

エージェントは専用のワークスペース内で動作します。ホストディレクトリはサンドボックスにマウントされていないため、エージェントはホストのホームディレクトリ、SSH 鍵、環境ファイルなどにアクセスできません。

3. 管理された推論呼び出し

すべてのモデル呼び出しは管理された内部エンドポイント (inference.local) を経由します。スーパーバイザーが実際のルーティング先を決定し、外部 LLM API のプロバイダー認証情報がエージェントに露出しないようにします。

4. 資格情報管理

API キーはサンドボックス内のディスクに保存されません。ゲートウェイがスーパーバイザーを通じて実行時に注入し、設定されたポリシーパスに沿ってのみ利用可能です。エージェントが侵害された場合でも、ディスク上に永続的なシークレットは残らないため、盗まれるリスクがありません。

OpenShell ポリシーの実装

OpenShell のポリシーは YAML ファイルとして定義され、コードとして扱われます(リポジトリでバージョン管理され、プルリクエストでレビュー可能)。

  • ネットワークおよび推論ポリシー: サンドボックスを再起動せずにホットリロード可能。
  • ファイルシステムポリシー: サンドボックス起動時にロックされ、変更にはサンドボックスの再作成が必要。

ポリシーをサンドボックスにデプロイするには、openshell policy set コマンドを使用し、サンドボックス名と対象の YAML ポリシーファイルを紐付けます。

Sources