
Claude Code 向けのセキュリティ監視およびプロンプトインジェクション防御ツール。NOVA Framework をベースにしています。
# リポジトリをクローン
git clone https://github.com/fr0gger/nova-claude-code-protector.git
cd nova_claude_code_protector
# グローバルインストール (~/.claude/settings.json にフックを登録)
./install.sh
# Claude Code を再起動してフックを有効化
これだけです!Nova-tracer がすべての Claude Code セッションを保護するようになります。
brew install jq でインストール)./install.sh
インストーラーは以下を行います:
~/.claude/settings.json に登録./uninstall.sh
アンインストーラーは以下を行います:
.nova-tracer/ ディレクトリをクリーンアップNova-tracer は4つのClaude Codeフックを登録し、連携して動作します:
┌─────────────────────────────────────────────────────────────┐
│ Claude Code セッション │
├─────────────────────────────────────────────────────────────┤
│ │
│ 1. SessionStart フック │
│ └── セッションJSONLファイルを作成 │
│ └── セッションIDで追跡を初期化 │
│ │
│ 2. PreToolUse フック (Bash, Write, Edit) [アクティブ] │
│ └── コマンド実行前にスキャン │
│ └── 危険な操作 (rm -rf など) をブロック │
│ │
│ 3. PostToolUse フック (Read, Bash, WebFetch など) [パッシブ] │
│ └── ツールの出力をプロンプトインジェクションスキャン │
│ └── 脅威を検出した場合 Claude に警告 │
│ └── NOVA判定結果とともにイベントを記録 │
│ │
│ 4. SessionEnd フック │
│ └── インタラクティブHTMLレポートを生成 │
│ └── AI駆動のセッションサマリーを作成 │
│ └── .nova-tracer/reports/ に保存 │
│ │
└─────────────────────────────────────────────────────────────┘
Nova-tracer は2つの保護モードを提供します:
| モード |
|---|
重要: プロンプトインジェクション検出は パッシブ です。Nova-tracer がファイルやWebページでプロンプトインジェクションを検出した場合、コンテンツはすでにClaudeによって読み取られています。Nova-tracer はClaudeに警告メッセージを送信し、そのコンテンツを疑って扱うようアドバイスしますが、Claudeが悪意のあるコンテンツを見るのを防ぐことはできません。
これはPostToolUseフックのアーキテクチャ上の制限です。フックはツールの実行 後 に実行されます。プロンプトインジェクションのアクティブブロックを行うには、Claudeが読み取る前にコンテンツをスキャンする必要があり、そのためにはファイルを2回読み取る(1回はスキャン用、もう1回はClaude用)ことになります。
アクティブにブロックされるもの:
rm -rf /, sudo rm -rf, mkfsdd if=... of=/dev/, fork爆弾curl ... | sh, ~/.ssh/id_rsa の読み取りパッシブに警告されるもの:
インストール後、Nova-tracer は自動的に動作します:
レポートは各プロジェクトの .nova-tracer/reports/ ディレクトリに保存されます:
# 現在のプロジェクトのレポート一覧
ls .nova-tracer/reports/
# ブラウザでレポートを開く
open .nova-tracer/reports/session-abc123.html
インタラクティブHTMLレポートには以下が含まれます:
Claude Codeを実行せずにNova-tracerの検出をテスト:
# サンプル攻撃テストを実行
uv run hooks/test-nova-guard.py --samples
# 特定のテキストをテスト
uv run hooks/test-nova-guard.py --text "ignore previous instructions"
# ファイルをテスト
uv run hooks/test-nova-guard.py --file suspicious.txt
# インタラクティブモード
uv run hooks/test-nova-guard.py -i
Nova-tracer は適切なデフォルト値で動作しますが、動作をカスタマイズできます。
config/nova-tracer.yaml を編集:
# レポート出力ディレクトリ
# 空 = {project}/.nova-tracer/reports/ (デフォルト)
# 相対パス = プロジェクトからの相対パス
# 絶対パス = 正確な場所
report_output_dir: ""
# AI駆動のセッションサマリー
# false に設定すると統計のみのサマリーを使用(API呼び出しなし)
ai_summary_enabled: true
# レポート内のツール出力の最大サイズ(KB)
# これを超える出力は切り詰められる
output_truncation_kb: 10
# カスタムNOVAルールのディレクトリ
custom_rules_dir: "rules/"
config/nova-config.yaml を編集:
# Tier 3 検出用のLLMプロバイダ
llm_provider: anthropic
model: claude-3-5-haiku-20241022
# 検出層(有効/無効)
enable_keywords: true
enable_semantics: true
enable_llm: true
# しきい値(0.0 - 1.0)
semantic_threshold: 0.7
llm_threshold: 0.7
# 重要度フィルター
min_severity: low # low, medium, high
# AIサマリーとLLM層検出に必要
export ANTHROPIC_API_KEY=sk-ant-...
rules/ ディレクトリに .nov ファイルを作成:
rule MyCustomRule
{
meta:
description = "特定の攻撃パターンを検出"
author = "あなたの名前"
severity = "high"
category = "custom"
keywords:
$pattern1 = /my regex pattern/i
$pattern2 = "exact string match"
semantics:
$sem1 = "攻撃のセマンティック記述" (0.75)
llm:
$llm1 = "LLMに評価させる質問" (0.7)
condition:
any of ($pattern*) or $sem1 or $llm1
}
nova_claude_code_protector/
├── install.sh # グローバルインストールスクリプト
├── uninstall.sh # 削除スクリプト
├── config/
│ ├── nova-config.yaml # NOVAスキャン設定
├── rules/
│ ├── instruction_override.nov # 命令オーバーライド攻撃ルール
│ ├── roleplay_jailbreak.nov # ジェイルブレイク攻撃ルール
│ ├── encoding_obfuscation.nov # エンコーディング攻撃ルール
│ └── context_manipulation.nov # コンテキスト攻撃ルール
├── hooks/
│ ├── session-start.py # SessionStartフック
│ ├── pre-tool-guard.py # PreToolUseフック(ブロッキング)
│ ├── post-tool-nova-guard.py # PostToolUseフック(スキャン)
│ ├── session-end.py # SessionEndフック(レポート)
│ ├── test-nova-guard.py # テストユーティリティ
│ └── lib/
│ ├── session_manager.py # セッション追跡ロジック
│ ├── report_generator.py # HTMLレポート生成
│ ├── ai_summary.py # AIサマリー生成
│ └── config.py # 設定管理
├── tests/ # 包括的なテストスイート(483テスト)
└── test-files/ # サンプルインジェクションファイル
cat ~/.claude/settings.json | jq '.hooks'ls -la hooks/*.pyls .nova-tracer/sessions/初回実行時に約1GBのモデルがダウンロードされます。問題が発生した場合:
# モデルキャッシュをクリアして再試行
rm -rf ~/.cache/huggingface/
uv run hooks/test-nova-guard.py --samples
echo $ANTHROPIC_API_KEYai_summary_enabled: true を確認# すべてのテストを実行
uv run pytest tests/ -v
# 特定のテストファイルを実行
uv run pytest tests/test_report_generator.py -v
# カバレッジ付きで実行
uv run pytest tests/ --cov=hooks/lib
MIT ライセンス - LICENSE を参照
| フック |
|---|
| 動作 |
|---|
| ユースケース |
|---|
| アクティブ | PreToolUse | 実行前にブロック | 危険なコマンド (rm -rf /, sudo rm など) |
| パッシブ | PostToolUse | コンテンツ読み取り後にClaudeに警告 | ファイル、Webページ、コマンド出力内のプロンプトインジェクション |
| 層 | 方法 | 速度 | 捕捉対象 |
|---|
| キーワード | 正規表現パターン | ~1ms | 既知の攻撃パターン、正確なフレーズ |
| セマンティクス | ML類似度 | ~50ms | 言い換えられた攻撃、バリエーション |
| LLM | AI評価 | ~500-2000ms | 高度で斬新な攻撃 |