
NOVA - Sistema de protección de código Claude contra ataques de inyección de prompts
Monitoreo de seguridad y defensa contra inyección de instrucciones para Claude Code usando el NOVA Framework.
# Clonar el repositorio
git clone https://github.com/fr0gger/nova-claude-code-protector.git
cd nova_claude_code_protector
# Instalar globalmente (registra hooks en ~/.claude/settings.json)
./install.sh
# Reiniciar Claude Code para activar los hooks
¡Eso es todo! Nova-tracer ahora protegerá todas tus sesiones de Claude Code.
brew install jq en macOS)./install.sh
El instalador hará lo siguiente:
~/.claude/settings.json./uninstall.sh
El desinstalador hará lo siguiente:
.nova-tracer/Nova-tracer registra cuatro hooks de Claude Code que trabajan juntos:
┌─────────────────────────────────────────────────────────────┐
│ Sesión de Claude Code │
├─────────────────────────────────────────────────────────────┤
│ │
│ 1. Hook SessionStart │
│ └── Crea archivo JSONL de sesión │
│ └── Inicializa seguimiento con ID de sesión │
│ │
│ 2. Hook PreToolUse (Bash, Write, Edit) [ACTIVO] │
│ └── Escanea comandos ANTES de la ejecución │
│ └── BLOQUEA operaciones peligrosas (rm -rf, etc.) │
│ │
│ 3. Hook PostToolUse (Read, Bash, WebFetch, etc.) [PASIVO] │
│ └── Escanea la SALIDA de la herramienta por inyección │
│ └── ADVIERTE a Claude si se detectan amenazas │
│ └── Registra evento con veredicto de NOVA │
│ │
│ 4. Hook SessionEnd │
│ └── Genera informe HTML interactivo │
│ └── Crea resumen de sesión impulsado por IA │
│ └── Guarda en .nova-tracer/reports/ │
│ │
└─────────────────────────────────────────────────────────────┘
Nova-tracer proporciona dos modos de protección:
Importante: La detección de inyección de instrucciones es pasiva. Cuando Nova-tracer detecta una inyección de instrucciones en un archivo o página web, el contenido ya ha sido leído por Claude. Nova-tracer envía un mensaje de advertencia a Claude indicándole que trate el contenido con sospecha, pero no impide que Claude vea el contenido malicioso.
Esta es una limitación de la arquitectura del hook PostToolUse: se ejecuta después de que la herramienta se ejecuta. El bloqueo activo de inyecciones de instrucciones requeriría escanear el contenido antes de que Claude lo lea, lo que implicaría leer los archivos dos veces (una para escanear, otra para Claude).
Lo que se bloquea activamente:
rm -rf /, sudo rm -rf, mkfsdd if=... of=/dev/, bombas forkcurl ... | sh, lectura de ~/.ssh/id_rsaLo que se advierte pasivamente:
Una vez instalado, Nova-tracer funciona automáticamente:
Los informes se guardan en el directorio .nova-tracer/reports/ de cada proyecto:
# Listar informes del proyecto actual
ls .nova-tracer/reports/
# Abrir un informe en el navegador
open .nova-tracer/reports/session-abc123.html
El informe HTML interactivo incluye:
Prueba la detección de Nova-tracer sin ejecutar Claude Code:
# Ejecutar pruebas de muestra de ataque
uv run hooks/test-nova-guard.py --samples
# Probar texto específico
uv run hooks/test-nova-guard.py --text "ignora las instrucciones anteriores"
# Probar un archivo
uv run hooks/test-nova-guard.py --file sospechoso.txt
# Modo interactivo
uv run hooks/test-nova-guard.py -i
Nova-tracer funciona con valores predeterminados sensatos, pero puedes personalizar el comportamiento.
Editar config/nova-tracer.yaml:
# Directorio de salida de informes
# Vacío = {proyecto}/.nova-tracer/reports/ (predeterminado)
# Ruta relativa = relativa al proyecto
# Ruta absoluta = ubicación exacta
report_output_dir: ""
# Resúmenes de sesión impulsados por IA
# Establecer en false para usar resúmenes solo de estadísticas (sin llamadas API)
ai_summary_enabled: true
# Tamaño máximo en KB para salidas de herramientas en informes
# Salidas más grandes se truncarán
output_truncation_kb: 10
# Directorio para reglas NOVA personalizadas
custom_rules_dir: "rules/"
Editar config/nova-config.yaml:
# Proveedor de LLM para detección de Nivel 3
llm_provider: anthropic
model: claude-3-5-haiku-20241022
# Niveles de detección (habilitar/deshabilitar)
enable_keywords: true
enable_semantics: true
enable_llm: true
# Umbrales (0.0 - 1.0)
semantic_threshold: 0.7
llm_threshold: 0.7
# Filtro de gravedad
min_severity: low # low, medium, o high
# Requerido para resúmenes IA y detección de nivel LLM
export ANTHROPIC_API_KEY=sk-ant-...
Crea archivos .nov en el directorio rules/:
rule MiReglaPersonalizada
{
meta:
description = "Detecta mi patrón de ataque específico"
author = "Tu nombre"
severity = "high"
category = "custom"
keywords:
$pattern1 = /mi patrón regex/i
$pattern2 = "coincidencia exacta de cadena"
semantics:
$sem1 = "descripción semántica del ataque" (0.75)
llm:
$llm1 = "Pregunta para que el LLM evalúe" (0.7)
condition:
any of ($pattern*) or $sem1 or $llm1
}
nova_claude_code_protector/
├── install.sh # Script de instalación global
├── uninstall.sh # Script de eliminación
├── config/
│ ├── nova-config.yaml # Configuración de escaneo NOVA
├── rules/
│ ├── instruction_override.nov # Reglas de ataque de anulación
│ ├── roleplay_jailbreak.nov # Reglas de ataque de jailbreak
│ ├── encoding_obfuscation.nov # Reglas de ataque de codificación
│ └── context_manipulation.nov # Reglas de ataque de contexto
├── hooks/
│ ├── session-start.py # Hook SessionStart
│ ├── pre-tool-guard.py # Hook PreToolUse (bloqueo)
│ ├── post-tool-nova-guard.py # Hook PostToolUse (escaneo)
│ ├── session-end.py # Hook SessionEnd (informes)
│ ├── test-nova-guard.py # Utilidad de prueba
│ └── lib/
│ ├── session_manager.py # Lógica de seguimiento de sesión
│ ├── report_generator.py # Generación de informes HTML
│ ├── ai_summary.py # Generación de resúmenes IA
│ └── config.py # Gestión de configuración
├── tests/ # Suite de pruebas completa (483 pruebas)
└── test-files/ # Archivos de inyección de muestra
cat ~/.claude/settings.json | jq '.hooks'ls -la hooks/*.pyls .nova-tracer/sessions/La primera ejecución descarga ~1GB de modelos. Si ocurren problemas:
# Limpiar caché de modelos y reintentar
rm -rf ~/.cache/huggingface/
uv run hooks/test-nova-guard.py --samples
echo $ANTHROPIC_API_KEYai_summary_enabled: true en la configuración# Ejecutar todas las pruebas
uv run pytest tests/ -v
# Ejecutar archivo de prueba específico
uv run pytest tests/test_report_generator.py -v
# Ejecutar con cobertura
uv run pytest tests/ --cov=hooks/lib
Licencia MIT - Ver LICENCIA
| Modo | Hook | Comportamiento | Caso de uso |
|---|
| ACTIVO | PreToolUse | Bloquea la ejecución antes de que ocurra | Comandos peligrosos (rm -rf /, sudo rm, etc.) |
| PASIVO | PostToolUse | Advierte a Claude después de que se lee el contenido | Inyección de instrucciones en archivos, páginas web, salida de comandos |
| Nivel | Método | Velocidad | Detecta |
|---|
| Palabras clave | Patrones regex | ~1ms | Patrones de ataque conocidos, frases exactas |
| Semántica | Similitud ML | ~50ms | Ataques parafraseados, variaciones |
| LLM | Evaluación IA | ~500-2000ms | Ataques sofisticados y novedosos |