最終更新: 2026年3月 · ソース: openclaw-security
ガバナンスとセキュリティ
JavaScript ブリッジ経由で OpenClaw フックシステムに統合された 6 つの Python モジュールで構成されるセキュリティ強化プラグイン — プロンプトインジェクション防御、最小権限の強制、監査ログ、エージェント間メッセージ署名、メモリアクセス制御を提供。
概要
openclaw-security は OpenClaw の 4 つのライフサイクルポイントにフックする 6 モジュール構成のセキュリティレイヤーです。各モジュールは特定の AI エージェントの脅威に対処します:外部データがエージェントに命令を注入すること、エージェントが不正なコマンドを実行すること、エージェント間メッセージが偽造されること、メモリエントリが汚染されること。モジュールは独立しており、個別にまたはまとめてデプロイできます。
目的
シェルアクセスを持ちながら追加制御のない素の OpenClaw エージェントは、大きな攻撃面を持ちます。ウェブコンテンツを取得するエージェントはプロンプトインジェクションにさらされます:悪意あるページがエージェントをオペレーターからの指示として扱うような命令を埋め込む可能性があります。制限のないシェルアクセスを持つエージェントは、データ流出、ファイル削除、外部ネットワーク呼び出しを指示される可能性があります。エージェント間メッセージには真正性の保証がなく、侵害されたエージェントが信頼できるピアからのメッセージを偽造する可能性があります。
このモジュールは AI エージェントセキュリティ研究からの防御策を適用します:外部データを隔離するスポットライティング、最小権限を強制するコマンドホワイトリスト、エージェント間の信頼のための HMAC 署名、フォレンジクスのための監査ログ。設計は実用的で、全脅威を一度に解決しようとするのではなく、優先度順に防御を積み重ねます。
アーキテクチャ
実装優先度順の 6 モジュール:
| 優先度 | モジュール | 機能 |
|---|---|---|
| P0 | スポットライティング | 外部データ(ウェブ・メール・Webhook)を境界タグで囲んでシステム指示から隔離 |
| P0 | 監査ロガー | ファイルロック・リダクション・組み込みアラートルール付きの JSONL ツール呼び出しログ |
| P1 | 最小権限 | エージェントごとのコマンドブラックリストとファイルパスホワイトリスト — 不正な exec 呼び出しをハードブロック |
| P1 | LLM ガード | LLM 入出力のインジェクション・シークレット・悪意ある URL を正規表現/llm-guard でスキャン(警告のみ) |
| P1 | エージェント通信 | エージェント間通信の HMAC-SHA256 メッセージ署名 — メッセージ偽造を防止 |
| P2 | メモリ ACL | メモリレイヤーの書き込み時インジェクション検出と署名付きストレージ |
OpenClaw フック統合 — Python モジュールはブリッジレイヤー経由で JS フックシステムから呼び出されます:
| フック | Python モジュール | 効果 |
|---|---|---|
| before_tool_call | permission_checker.py | 不正な exec 呼び出しをブロック(ハードブロック) |
| after_tool_call | audit_logger.py | JSONL 監査レコードを書き込み + アラートルールを評価 |
| llm_input | llm_guard_wrapper.py | インジェクション / シークレットをスキャン(警告のみ) |
| llm_output | llm_guard_wrapper.py | シークレット / 悪意ある URL をスキャン(警告のみ) |
フェイルオープン設計
全ブリッジ呼び出しはフェイルオープンです:Python が欠けているか、クラッシュするか、タイムアウトした場合、呼び出しは許可されて警告がログに記録されます。これにより誤検知によるブロックを回避しますが、セキュリティはベストエフォートであり保証されません。
主要な設計上の決定
優先度階層 — 全防御が平等ではない
P0 モジュール(スポットライティング、監査ログ)は工数対価値比率が最も優れています:実装コストが低く、即座の可観測性と基本的なインジェクション耐性を提供します。P1 モジュールはより多くの設定が必要です。P2 はあれば望ましい程度。P0 のみのデプロイでもセキュリティポスチャーは意味のある改善をします。
フェイルオープン — セキュリティより可用性を優先
Python セキュリティレイヤーがクラッシュした場合、エージェント呼び出しは続行されます。これは明示的なトレードオフです:正当なエージェント操作をブロックする壊れたセキュリティレイヤーは、一時的に不在のセキュリティレイヤーより悪い。監査ログはアクティブなブロックが失敗しても事後フォレンジクスを可能にします。
LLM ガードは警告するだけで llm_input/llm_output ではブロックしない
現在の OpenClaw フック API は llm_input/llm_output フックでのハードブロックをサポートしていません。LLM ガードの検出は警告としてログに記録されます。検出されたインジェクションのブロックを強制するには、エージェントアプリケーションレイヤーで処理します — LLM ガードはシグナルを提供し、アプリケーションがアクションを決定します。
JavaScript ブリッジ — 薄いレイヤー、ロジックは Python で
OpenClaw フックシステムは JavaScript ですが、セキュリティロジックは Python です。ブリッジは意図的に薄く作られています — シリアライゼーション、サブプロセス呼び出し、エラー処理のみ。全セキュリティロジックは Python モジュールに残り、OpenClaw から独立してテストできます。
自分でビルドする方法
1. スポットライティングと監査ログから始める(P0)
スポットライティングはコストが低いです:外部から取得したコンテンツをエージェントのコンテキストに入る前に境界マーカーで囲みます。[EXTERNAL_DATA_START] ... [EXTERNAL_DATA_END] を見る LLM は、このコンテンツが信頼できないという構造的シグナルを持ちます。監査ログもコストが低く、エージェント ID・ツール名・入力(リダクション済み)・タイムスタンプを含む JSONL レコードを全ツール呼び出し後に書き込みます。
2. コマンドブラックリストは正規表現で、完全一致ではなく
完全一致コマンドブロックは些細なバイパス(スペースの追加、パスプレフィックスの使用)が可能です。マイナーな変形に関わらず危険な操作にマッチする正規表現パターンを使用します。必須パターン:rm\s+-rf\s+/、curl\s+.*(?!localhost)、wget\s+、mkfs\b。
3. アラートルールはセキュリティモジュールではなく監査ロガーに組み込む
アラートルール(機密ファイルアクセスで発火、外部ネットワーク呼び出しで発火)は個々のモジュールに散在させず、監査ロガーに属します。監査ロガーは全ツール呼び出しを見て、横断的なルールを一箇所で適用できます。最低 3 つのルール:機密パスアクセス、外部ネットワーク呼び出し、クロスエージェント機密コンテンツ。
4. エージェント間署名には HMAC-SHA256、ペアごとの対称鍵
単一マシンのマルチエージェントデプロイでは、ペアごとの対称鍵を使った HMAC で十分かつシンプルです。各エージェントペア(送信者、受信者)は鍵マネージャーに保存された秘密鍵を共有します。受信者はエージェント間メッセージを処理する前に HMAC を検証します。これにより侵害されたエージェントが信頼できるピアを騙ることを防ぎます。
5. 各モジュールをスタンドアロンかつ独立してテスト可能に保つ
各セキュリティモジュールは OpenClaw を実行せずにインポートしてテストできるべきです。これにより完全なエージェントスタックなしにセキュリティロジックのユニットテストが可能になります。OpenClaw 統合は薄いブリッジのみ — モジュール自体は OpenClaw 依存のない純粋な Python です。
既知の制限
- LLM ガードは警告のみ: llm_input / llm_output フックは OpenClaw の現在のフック API でハードブロックをサポートしていません。検出された脅威は警告を生成し、ブロックはアプリケーションレイヤーでの処理が必要です。
- before_tool_call は exec のみをチェック: JS ブリッジは現在 exec ツールに対してのみ権限チェッカーを呼び出します。他のツール(shell、write_file)はブリッジのチェックリストを拡張しない限り PermissionChecker をバイパスします。
- 正規表現ルールはバイパス可能: LLM ガードの正規表現フォールバックにはセマンティックな理解がありません。複雑なプロンプトインジェクションの変形は検出を回避する可能性があります。本番環境では正規表現とモデルレベルのスキャンを組み合わせてください。
よくある質問
「スポットライティング」とは何で、なぜ重要なのですか?
スポットライティングは外部から取得したデータ(ウェブ結果・メール・Webhook)を、信頼できない外部コンテンツとして識別する構造タグで囲みます。これにより悪意あるウェブページがエージェントをユーザーやシステムプロンプトからの指示として扱うような命令を埋め込むことを難しくします — 一般的なプロンプトインジェクションのベクター。
監査ロガーに組み込まれているアラートルールは何ですか?
3 つの組み込みルール:(1) 機密ファイルパスアクセス(.ssh、.aws、id_rsa、/etc/passwd)、(2) localhost 以外をターゲットにした curl/wget/nc を含むシェルコマンド、(3) 機密キーワードを含むクロスエージェントメッセージ。全てが「critical」または「warning」重要度でトリガーされ JSONL 監査ログに書き込まれます。
OpenClaw をインストールせずにテストを実行できますか?
はい。Python モジュールはスタンドアロンでテストが独立して実行されます。OpenClaw プラグイン統合はライブフックテストにのみ必要です。
Authors: Qiushi Wu & Orange 🍊