OpenClawSkills
GitHub
Gateway / Operations • 5分で読める

Formal Verification (Security Models)

OpenClaw の高リスク経路に対して、機械的に検証するセキュリティモデル。

このページは OpenClaw の形式セキュリティモデル(現在は TLA+/TLC;必要に応じて追加)を追跡します。

Tutorial.alert.info

注意:一部の古いリンクは以前のプロジェクト名を参照している可能性があります。

目標(北極星): OpenClaw が明示的な仮定の下で、意図した

セキュリティポリシー(認証、セッション分離、ツールゲート、

誤設定の安全性)を強制することを機械的にチェックできる引数を提供する。

これが何であるか(現在):実行可能な、攻撃者駆動型のセキュリティ回帰スイート:

- 各主張は有限状態空間で実行可能なモデルチェックを持っています。

- 多くの主張は、現実的なエラークラスの反例トレースを生成できるペアの負のモデルを持っています。

これが何ではない: "OpenClaw がすべての面で安全である"または完全な TypeScript 実装が正しいことの証明。

Tutorial.step

モデルの場所

モデルは別のリポジトリで維持されています:''vignesh07/openclaw-formal-models''。

Tutorial.step

重要な注意事項

- これらはモデルであり、完全な TypeScript 実装ではありません。モデルとコード間のドリフトは可能です。

- 結果は TLC が探索した状態空間によって制限されます;"緑"はモデリングの仮定と境界を超えた安全性を意味しません。

- 一部の主張は明示的な環境仮定(正しいデプロイ、正しい構成入力など)に依存しています。

Tutorial.step

結果の再現

現在、モデルリポジトリをローカルにクローンして TLC を実行することで結果を再現します(下記参照)。今後の反復では提供される可能性があります:

- パブリックアーティファクト(反例トレース、実行ログ)を含む CI でモデルを実行

- 小規模な有界チェックのためのホストされた「このモデルを実行」ワークフロー

開始するには:

Bash
git clone https://github.com/vignesh07/openclaw-formal-models
cd openclaw-formal-models

make '<target>'
Tutorial.step

ゲートウェイの露出とオープンゲートウェイの誤設定

主張: 認証なしでループバックを超えてバインドすると、リモート侵害が可能になる/露出が増加します;トークン/パスワードは認証されていない攻撃者をブロックします(モデルの仮定に基づく)。

- 緑の実行:

- ''make gateway-exposure-v2''

- ''make gateway-exposure-v2-protected''

- Red (expected):

- ''make gateway-exposure-v2-negative''

参照:モデルリポジトリの ''docs/gateway-exposure-matrix.md''。

Tutorial.step

Nodes.run パイプライン(最もリスクの高い機能)

''主張:'' ''nodes.run'' には (a) ノードコマンド許可リストと宣言されたコマンド、および (b) 構成時のライブ承認が必要です;承認はリプレイを防ぐためにトークン化されます(モデル内)。

- 緑の実行:

- ''make nodes-pipeline''

- ''make approvals-token''

- Red (expected):

- ''make nodes-pipeline-negative''

- ''make approvals-token-negative''

Tutorial.step

ペアリングストア(DM ゲート)

主張: ペアリングリクエストは TTL と保留リクエストの上限を尊重します。

- 緑の実行:

- ''make pairing''

- ''make pairing-cap''

- Red (expected):

- ''make pairing-negative''

- ''make pairing-cap-negative''

Tutorial.step

イングレスゲート(メンション+制御コマンドのバイパス)

主張: メンションを必要とするグループ環境では、認可されていない「制御コマンド」はメンションゲートをバイパスできません。

- Green:

- ''make ingress-gating''

- Red (expected):

- ''make ingress-gating-negative''

Tutorial.step

ルーティング/セッションキーの分離

主張: 異なるピアからの DM は、明示的にリンク/構成されていない限り、同じセッションにマージされません。

- Green:

- ''make routing-isolation''

- Red (expected):

- ''make routing-isolation-negative''

Tutorial.step

v1++:追加の有界モデル(並行性、再試行、トレースの正確性)

これらは、現実世界の障害モード(非アトミック更新、再試行、メッセージファンアウト)の忠実度を強化するフォローオンモデルです。

Tutorial.step

ペアリングストアの並行性/べき等性

**Claim:** a pairing store should enforce `MaxPending` and idempotency even under interleavings (i.e., "check-then-write" must be atomic / locked; refresh shouldn't create duplicates).

これが意味するもの:

- Under concurrent requests, you can't exceed `MaxPending` for a channel.

- Repeated requests/refreshes for the same `(channel, sender)` should not create duplicate live pending rows.

- 緑の実行:

- ''make pairing-race''(アトミック/ロックされたキャップチェック)

- ''make pairing-idempotency''

- ''make pairing-refresh''

- ''make pairing-refresh-race''

- Red (expected):

- ''make pairing-race-negative'' (非アトミック開始/コミットキャップ競争)

- ''make pairing-idempotency-negative''

- ''make pairing-refresh-negative''

- ''make pairing-refresh-race-negative''

Tutorial.step

イングレストレースの相関/べき等性

主張: インジェストはファンアウト間でトレースの相関を保持し、プロバイダーの再試行下でべき等である必要があります。

これが意味するもの:

- 外部イベントが複数の内部メッセージになる場合、各部分は同じトレース/イベント ID を保持します。

- 再試行は二重処理を引き起こしません。

- プロバイダーイベント ID が欠落している場合、重複排除は異なるイベントを失わないように安全なキー(例:トレース ID)にフォールバックします。

- Green:

- ''make ingress-trace''

- ''make ingress-trace2''

- ''make ingress-idempotency''

- ''make ingress-dedupe-fallback''

- Red (expected):

- ''make ingress-trace-negative''

- ''make ingress-trace2-negative''

- ''make ingress-idempotency-negative''

- ''make ingress-dedupe-fallback-negative''

Tutorial.step

ルーティング dmScope 優先順位 + IdentityLinks

主張: デフォルトでは、ルーティングは DM セッションを分離したままにし、明示的に構成された場合にのみセッションを折りたたむ必要があります(チャネル優先順位 + ID リンク)。

これが意味するもの:

- チャネル固有の dmScope オーバーライドはグローバルデフォルトより優先する必要があります。

- IdentityLinks は明示的にリンクされたグループ内でのみ折りたたまれ、関連のないピア間では折りたたまれてはいけません。

- Green:

- ''make routing-precedence''

- ''make routing-identitylinks''

- Red (expected):

- ''make routing-precedence-negative''

- ''make routing-identitylinks-negative''