コンテンツにスキップ

3段階プログレッシブセキュリティ防御

階層型脅威フィルタリング——90%の攻撃をゼロコストで阻止。


たとえ話:空港のセキュリティチェック

Section titled “たとえ話:空港のセキュリティチェック”

空港のセキュリティを通過する際、全員が同じ扱いを受けるわけではありません:

  1. 金属探知ゲート——全員が通過。明らかな脅威を即座にキャッチ。人的コストゼロ。
  2. X線検査機——手荷物をスキャン。オペレーターが画面を確認。フラグが立った荷物のみ再検査。
  3. 個室検査——複数の警告をトリガーした乗客のみ。徹底した手動検査。

DuDuClawのセキュリティ防御はまさにこのパターンで機能します:段階的にコストが上がる3つのチェック層で、大多数の脅威が高コストの層に到達する前に捕捉されます。


最初の防衛線はシンプルで高速なパターンマッチャーです。既知の危険な操作を即座にブロック:

ツール呼び出しまたはコマンド到着
|
v
ブラックリストパターンと照合:
- 破壊的シェルコマンド
- 機密ファイルへの直接アクセス
- 既知のインジェクションパターン
|
+--+--+
| |
一致 不一致
| |
v v
ブロック Layer 2へ

この層はマイクロ秒で実行されます。ネットワーク呼び出しなし、モデル呼び出しなし、曖昧さなし。パターンが一致すればブロック。例外なし。

ブラックリストは最も一般的な攻撃ベクターをカバーします:データを削除するコマンド、環境変数を抽出するコマンド、ファイル権限のバイパスを試みるパターン。

Layer 2:難読化とデータ流出の検出

Section titled “Layer 2:難読化とデータ流出の検出”

Layer 1の存在を知る攻撃者は回避を試みます——コマンドをBase64エンコード、危険な文字列を複数の操作に分散、ペイロードを段階的に構築。

Layer 2は脅威レベルが上昇(YELLOW以上)した時に起動:

ツール呼び出しがLayer 1を通過
|
v
現在の脅威レベル >= YELLOW?
|
+--+--+
| |
はい いいえ --> パススルー(Layer 2スキップ)
|
v
難読化パターンをスキャン:
- Base64エンコードされたコマンド断片
- 異常なコンテキストでの環境変数参照
- 既知のデータ流出エンドポイントに一致するURL
- 再構成すると危険なコマンドになるエンコード文字
|
+--+--+
| |
検出 クリーン
| |
v v
ブロック Layer 3へ(REDの場合)

この層はまだルールベースです——LLM呼び出しなし——ただし、ルールはより高度です。直接的な危険コマンドではなく、回避の意図を検出します。

最も高コストの層。脅威レベルRED(攻撃行為が確認済み)でのみ起動:

ツール呼び出しがLayer 1と2を通過
|
v
現在の脅威レベル == RED?
|
+--+--+
| |
はい いいえ --> パススルー
|
v
コンテキストを軽量LLMに送信:
「このツール呼び出しのシーケンスとそのコンテキストから、
これは正当な操作か攻撃の試みか?」
|
+--+--+
| |
攻撃 正当
| |
v v
ブロック 許可

この層は、意味的には危険だが構文的には無害な攻撃をキャッチします——個別には正常に見えるが、組み合わせると悪意あるパターンを形成するもの。

3つの層は脅威レベルシステムによって制御されます:

GREEN(通常)
|
| 疑わしいパターンを検出
v
YELLOW(警戒)
|
| 攻撃指標を確認
v
RED(アクティブ脅威)
|
| 観察期間中にインシデントなし
v
YELLOW --> GREEN(段階的デエスカレーション)

重要な動作:

  • エスカレーションは高速:単一の確認済み攻撃指標でGREENからYELLOWに即座にジャンプ。
  • デエスカレーションは低速:システムは静かな観察期間を待ってからステップダウン。攻撃者がブロックをトリガーし、少し待ってから再試行することを防止。
  • 層の起動はレベルに連動:GREENではLayer 1のみ。YELLOWではLayer 1+2。REDでは3層すべて。

重要な設計判断:上記のいずれもClaude Code自体を変更しません

セキュリティシステム全体は、.claude/hooks/ディレクトリ内のシェルスクリプトとして実装されています。これらのフックはClaude Codeが提供する標準的な拡張メカニズムで、特定のツール呼び出しの前後に実行され、ツールのパラメータを受け取り、許可/拒否の判断を返します。

Claude Codeがツールを呼び出す
|
v
フックシステムがインターセプト(PreToolUse)
|
v
セキュリティスクリプトが3層チェックを実行
|
+--+--+
| |
許可 拒否
| |
v v
ツール ツール呼び出しが
実行 説明付きでブロック

これは:

  • DuDuClawのセキュリティが任意のClaude Codeバージョンで動作
  • fork、パッチ、モンキーパッチ不要
  • セキュリティ層をClaude Codeとは独立して更新可能

を意味します。


3つの層に加え、フックシステムは対象を絞った保護も提供します:

パーソナリティファイル保護 — エージェントのアイデンティティファイルは無許可の読み取りと書き込みから保護されます。進化エンジン(特定の環境フラグ下で実行)のみが変更可能。

シークレットスキャナー — すべてのファイル書き込みがスキャンされ、APIキー、パスワード、トークン、その他の認証情報に見えるパターンがないか検査。検出された場合、書き込みがブロックされアラートが発生。

監査ロガー — すべてのツール呼び出し(許可または拒否)がappend-onlyログファイルに記録。インシデント調査のための完全なフォレンジック証跡を提供。

設定ガード — 重要な設定ファイルが無許可の変更を監視。承認されたチャネル外で設定ファイルが変更された場合、アラートを発行。

Unicode正規化 — すべての入力は処理前にNFKC正規化され、ホモグラフ攻撃(ラテン文字に見えるキリル文字の使用など)を検出します。これにより視覚的ななりすましによる回避を防ぎます。

Action Claim Verifier — ツール実行の申告に付与された暗号署名を検証し、申告されたツール結果が実際に期待されたツールから来たものであることを保証します。

RBAC(ロールベースアクセス制御) — ロールベースのアクセス制御マトリクスが、各ユーザー/エージェントが何をできるかを規定します。異なるロール(admin、operator、viewer)はそれぞれ異なる権限セットを持ち、APIレイヤーで強制されます。


AI判定を最もレアなケース(REDレベルのみ)に限定することで、セキュリティシステムは通常操作にほぼゼロのコストを追加します。ほとんどの脅威はマイクロ秒単位のLayer 1ブラックリストでキャッチされます。

単一の層がすべてのセキュリティを担うわけではありません。Layer 1をバイパスした(難読化)攻撃者はまだLayer 2(パターン分析)に直面します。Layer 2をバイパスした攻撃者はまだLayer 3(意味的AI判定)に直面します。

Layer 1のブラックリストは意図的に保守的です——確実に危険なものだけをブロック。曖昧なケースはより高い層に委ねられ、それらの層にはより正確な判断のためのコンテキストがあります。

JSONL監査ログにより、すべてのセキュリティ判断が記録され、レビュー可能です。セキュリティインシデントが発生した場合(または誤検知が報告された場合)、運用者は何が起きたか、何がブロックされたか、なぜかを正確に再構成できます。


  • CONTRACT.toml:行動規約がエージェントがしてはならないことを定義。セキュリティフックがツール呼び出しレベルでその実施方法を強制。
  • 進化エンジン:セキュリティ層がパーソナリティファイルを無許可の変更から保護し、GVUパイプラインだけがエージェントを進化できることを保証。
  • ダッシュボード:脅威レベルと最近のセキュリティイベントがWebインターフェースで表示。
  • 監査システム:コンプライアンスのための広範なJSONL監査証跡と統合。

セキュリティは高コストである必要はありません。高コストのAI判定の前に安価な決定的チェックを層状に配置することで、DuDuClawはほぼゼロのコストで大多数の脅威をキャッチしつつ、真に曖昧なケースのためにAI判定を利用可能に保ちます。