使用 NOVA Framework 为 Claude Code 提供安全监控和提示注入防御。
# 克隆仓库
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 中注册四个 Nova-tracer 钩子./uninstall.sh
卸载程序将:
.nova-tracer/ 目录Nova-tracer 注册了四个协同工作的 Claude Code 钩子:
┌─────────────────────────────────────────────────────────────┐
│ Claude Code 会话 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 1. SessionStart 钩子 │
│ └── 创建会话 JSONL 文件 │
│ └── 使用会话 ID 初始化追踪 │
│ │
│ 2. PreToolUse 钩子 (Bash, Write, Edit) [ACTIVE] │
│ └── 在执行前扫描命令 │
│ └── 阻止危险操作 (rm -rf, 等) │
│ │
│ 3. PostToolUse 钩子 (Read, Bash, WebFetch, 等) [PASSIVE] │
│ └── 扫描工具输出以检测提示注入 │
│ └── 如果检测到威胁,向 Claude 发出警告 │
│ └── 记录事件并附上 NOVA 判定 │
│ │
│ 4. SessionEnd 钩子 │
│ └── 生成交互式 HTML 报告 │
│ └── 创建 AI 驱动的会话摘要 │
│ └── 保存到 .nova-tracer/reports/ │
│ │
└─────────────────────────────────────────────────────────────┘
Nova-tracer 提供两种保护模式:
| 模式 | 钩子 |
|---|
重要提示: 提示注入检测是被动的。当 Nova-tracer 在文件或网页中检测到提示注入时,Claude 已经读取了该内容。Nova-tracer 会向 Claude 发送一条警告消息,建议其对该内容持怀疑态度,但不会阻止 Claude 看到恶意内容。
这是 PostToolUse 钩子架构的限制——它在工具执行之后运行。主动阻止提示注入需要在 Claude 读取内容之前扫描内容,这需要读取文件两次(一次用于扫描,一次供 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:
# 三级检测的 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, or 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
| 行为 |
|---|
| 使用场景 |
|---|
| 主动 (ACTIVE) | PreToolUse | 在执行前阻止 | 危险命令(rm -rf /、sudo rm 等) |
| 被动 (PASSIVE) | PostToolUse | 内容被读取后向 Claude 发出警告 | 文件、网页、命令输出中的提示注入 |
| 层级 | 方法 | 速度 | 捕获范围 |
|---|
| 关键词 | 正则模式 | ~1ms | 已知攻击模式、精确短语 |
| 语义 | ML 相似度 | ~50ms | 释义攻击、变体 |
| LLM | AI 评估 | ~500-2000ms | 复杂、新颖的攻击 |