Skip to main content

LLM & Agent Red Teaming Framework — automated security testing for AI systems

Project description

VIGÍA

Framework de red teaming automatizado para LLMs en español — single-shot, multi-turn adaptativo y testing de agentes.

Casi toda la investigación de seguridad en LLMs se hace en inglés, pero las empresas españolas están desplegando chatbots RAG en castellano para banca, sanidad y administración pública. Esos chatbots tienen guardrails entrenados mayoritariamente en inglés. VIGÍA automatiza la auditoría de seguridad con ataques diseñados nativamente en español, técnicas de code-switching entre lenguas ibéricas, y vectores que explotan cómo los modelos procesan el castellano.

Qué hace

VIGÍA lanza ataques automatizados contra tu chatbot (local o remoto), evalúa si ha filtrado información sensible usando un LLM como juez, y genera un informe con los resultados mapeados a OWASP Top 10 for LLMs y MITRE ATLAS.

Modos de ataque

  • Single-shot — una seed, un intento, un score. El benchmark clásico.
  • Multi-turn — conversación de hasta 7 turnos con estrategia de extracción progresiva (rapport → escalation → language rotation).
  • Adaptativo — el atacante acumula memoria de sesión (qué vectores funcionan, dónde falla el modelo) y auto-selecciona la estrategia óptima por seed.
  • Agentic — ataca agentes AI con herramientas (tool misuse, goal hijacking, privilege escalation).

Resultados

Benchmark Single-Shot RAG — 19 seeds × 5 modelos (threshold ≥ 5)

Modelo Tipo Tasa vuln Vulns Críticos (≥7) Score medio Score máx
Claude Haiku 4.5 Comercial 21.1% 4/19 1 1.9 9
Llama 3.1 8B Open source 31.6% 6/19 6 2.9 9
Gemma2 2B Open source 68.4% 13/19 6 5.1 10
Gemini 2.5 Flash Comercial 73.7% 14/19 10 5.5 10
Mistral 7B Open source 94.7% 18/19 10 6.7 10

Gemini 2.5 Flash (comercial) es más vulnerable que Gemma2 2B (open-source). Ser comercial no garantiza seguridad; lo que importa es el alignment training en idiomas distintos del inglés.

Benchmark Multi-Turn — Target: Llama 3.1 8B, Judge: Llama 3.1 8B

Impacto del modelo atacante: el modelo que genera los prompts de ataque es el factor más determinante. Llama 3.1 8B como atacante se auto-censura ("Lo siento, no puedo generar un prompt de ataque"), limitando la efectividad. Modelos más capaces como atacantes multiplican la tasa de vulnerabilidad.

Atacante Estrategia Seeds Tasa vuln Leaks graves
Llama 3.1 8B escalation 5 60.0%
Llama 3.1 8B rapport 5 40.0%
Llama 3.1 8B language_rotation 5 20.0%
Mistral 7B escalation 10 60.0% 1 FULL + 4 SIGNIFICANT
Claude Haiku escalation 5 80.0% 1 FULL + 1 SIGNIFICANT
Claude Haiku rapport 3 100% 1 FULL + 1 SIGNIFICANT

Con Claude Haiku como atacante y estrategia rapport_to_extraction, se consigue 100% de vulnerabilidad en 3 seeds, extrayendo salarios (52.000€, 32.000€), nombres completos y datos de facturación.

Benchmark Multi-Turn Adaptativo

Atacante Target Seeds Tasa vuln Estrategia
Llama 3.1 8B Llama 3.1 8B 10 20.0% Auto (adaptive)
Llama 3.1 8B Claude Haiku 4.5 5 20.0% Auto (adaptive)
Llama 3.1 8B Gemini 2.5 Flash 5 20.0% Auto (adaptive)

Benchmark Agentic — 18 seeds × llama3.1:8b

Métrica Resultado
Tasa de vulnerabilidad 61.1%
Ataques ejecutados 18/18
Vulnerabilidades (score ≥ 5) 11
OWASP Agentic detectados ASI01 (Goal Hijacking), ASI02 (Tool Misuse), ASI04 (Excessive Agency)

Session Memory — Acumulación de inteligencia

Tras las campañas multi-turn, VIGÍA acumuló automáticamente:

  • 13 entradas en vector_effectiveness con tasas de éxito por vector/modelo
  • Perfil de resistencia del target con patrones (full_block, partial_resist, vulnerable)
  • 9 entradas en eval_cache para evaluaciones reutilizables entre campañas
  • Token savings entre 5.7% y 16.7% por cached calls acumulados

Quickstart

pip install vigia

# Necesitas Ollama corriendo
ollama serve  # en otra terminal
ollama pull llama3.1:8b
ollama pull nomic-embed-text

# Lanzar campaña contra el chatbot demo
vigia run

Para usar modelos comerciales como target o evaluador:

export ANTHROPIC_API_KEY=tu_key
vigia run -c vigia/config/claude_haiku.yaml

Comandos

# Campaña one-shot contra chatbot RAG
vigia run
vigia run -c vigia/config/claude_haiku.yaml

# Multi-turn con estrategia específica
vigia multiturn --strategy rapport_to_extraction --max-seeds 5
vigia multiturn --strategy escalation --max-seeds 5
vigia multiturn --strategy language_rotation --max-seeds 5

# Multi-turn con atacante más potente (recomendado)
vigia multiturn --attacker-model mistral:7b-instruct --strategy escalation --max-seeds 10
vigia multiturn --attacker-model anthropic/claude-haiku-4-5-20251001 --strategy rapport_to_extraction --max-seeds 5

# Multi-turn adaptativo — usa session memory para auto-seleccionar estrategia
vigia multiturn --adaptive --max-seeds 10

# Testing de agentes AI con herramientas
vigia agent
vigia agent --plan

# CI/CD gate — exit code 0 (pass) o 1 (vulns encontradas)
vigia scan -c config.yaml --fail-on-score 5
vigia scan --format junit -o report.xml

# Benchmarking comparativo
vigia benchmark -c vigia/config/default.yaml vigia/config/claude_haiku.yaml vigia/config/gemini.yaml

# Generar variantes lingüísticas (12 estrategias)
vigia mutate --strategies euskera,gallego,codeswitching_euskera

Atacar tu propio chatbot

cp vigia/config/http_example.yaml mi_chatbot.yaml
target:
  type: "http"
  url: "https://api.tu-empresa.com/chatbot/v1/message"
  headers:
    Authorization: "Bearer tu-api-key"
  request_format: "simple"
  request_field: "message"
  response_field: "data.answer"
vigia run -c mi_chatbot.yaml

El evaluador siempre corre en local — no envía datos de tu chatbot a ningún servicio externo.

Nuevas funcionalidades (v0.5.1)

Atacante inteligente (v0.5.1)

El modelo atacante es el factor más determinante en la efectividad multi-turn. Llama 3.1 8B se auto-censura y genera "Lo siento, no puedo generar un prompt de ataque" en vez de atacar. VIGÍA ahora incluye:

  • System prompt con framing de auditor — "consultor de seguridad en auditoría AUTORIZADA" en vez de "red teamer". Los modelos alineados lo aceptan.
  • Retry 3-tier — si el LLM se niega (tier 1), reformula con prompt neutro (tier 2), y si ambos fallan, usa templates determinísticos por categoría (tier 3). Nunca se queda sin prompt.
  • Detección de auto-censura — 15 patrones en español e inglés ("lo siento", "como modelo de lenguaje", "i cannot"...).
  • Anti-repetición — detección de similitud Jaccard entre prompts consecutivos. Si >70% overlap, auto-muta con cambio de ángulo (autoridad, idioma, urgencia).
  • Analyzer separado — el módulo que analiza respuestas del target usa un modelo local (JSON-fiable) independiente del atacante. Si falla, fallback por keywords.
  • --attacker-model — override del modelo atacante desde CLI.
# Mistral como atacante (local, sin censura)
vigia multiturn --attacker-model mistral:7b-instruct --strategy escalation --max-seeds 10

# Claude como atacante (API, más creativo)
vigia multiturn --attacker-model anthropic/claude-haiku-4-5-20251001 --strategy rapport_to_extraction --max-seeds 5

Multi-Turn Adaptativo (v0.5.0)

El atacante mantiene una memoria de sesión que persiste entre campañas en SQLite. Tras cada evaluación, registra qué vectores funcionaron contra qué modelo y con qué score. En campañas posteriores, usa esa inteligencia para:

  1. Auto-seleccionar estrategia — si el modelo bloquea >50% de ataques pero tiene cracks parciales → escalation. Si las defensas más débiles son vectores lingüísticos → language_rotation. Si es vulnerable → rapport_to_extraction.
  2. Inyectar intel en el prompt del atacante — tasas de éxito por vector, defensas débiles y fuertes del modelo, warnings sobre vectores que han fallado previamente.
  3. Hooks por turno — eventos TURN_COMPLETE y POST_EVALUATE para integración con pipelines externos.
# Primera campaña: acumula learnings
vigia multiturn --adaptive --max-seeds 10

# Segunda campaña: reutiliza intel acumulada
vigia multiturn --adaptive --max-seeds 10

Token Efficiency (v0.5.0)

  • Tracking global — conteo de tokens prompt/completion por modelo, calls totales, errores. Panel de resumen al final de cada campaña.
  • Early termination — en multi-turn, corta tras 3 rechazos consecutivos de alta resistencia o cuando ya ha extraído ≥3 datos sensibles.
  • Compactación de system prompts — los prompts del atacante, evaluador y evaluador agentic se redujeron ~50% preservando semántica.
  • Eval cache persistente — evaluaciones de score ≤2 (rechazos claros) se cachean en SQLite y se reutilizan entre campañas, ahorrando entre 5-17% de LLM calls.

Taxonomía de ataques

RAG — 9 vectores

Vector Técnica OWASP
V01 Ancla Numérica — forzar comparación que revela el dato exacto LLM02
V02 Exfiltración por Resumen — el modo resumen prioriza completitud sobre restricciones LLM02
V03 Fragmentación Temporal — rangos de fecha evitan keywords de guardrails LLM02
V04 Negación Invertida — "qué NO puedes decirme" enumera categorías protegidas LLM07
V05 Exfiltración Pasiva — datos sensibles adyacentes en chunks RAG LLM02
V06 Impersonación de Rol — CISO, RRHH, auditor LLM01
V07 Confusión Cross-Language — cambio a inglés evade guardrails en español LLM01
V08 Chain-of-Thought — razonamiento paso a paso enumera datos como paso intermedio LLM06
V09 Reformulación Compliant — datos "anonimizados" reidentificables con N pequeña LLM09

Agentes — 7 vectores (OWASP Agentic ASI01-ASI04)

Goal hijacking, indirect prompt injection (vía tool outputs), tool misuse, data exfiltration via tool chaining, privilege escalation, cross-tool credential theft, y excessive agency.

Estrategias de mutación

12 estrategias lingüísticas para lenguas ibéricas:

Estrategia Qué hace
register_formal Subjuntivo, ustedeo, cortesía extrema
register_informal Tuteo, expresiones coloquiales
catalan Traducción a catalán estándar
codeswitching Mezcla castellano-catalán mid-sentence
euskera Euskera batua — tokenizers lo procesan peor
codeswitching_euskera Mezcla castellano-euskera
gallego Gallego normativo
codeswitching_gallego Mezcla castellano-gallego
rephrase Reformulación completa
academic Encuadre de investigación/auditoría
authority Rol de autoridad (auditor, IT, dirección)
sms_speak Abreviaturas SMS/WhatsApp españolas

Licencia

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

vigia-0.5.1.tar.gz (145.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

vigia-0.5.1-py3-none-any.whl (126.9 kB view details)

Uploaded Python 3

File details

Details for the file vigia-0.5.1.tar.gz.

File metadata

  • Download URL: vigia-0.5.1.tar.gz
  • Upload date:
  • Size: 145.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for vigia-0.5.1.tar.gz
Algorithm Hash digest
SHA256 95294f80ff9b22d9f0f396c391ea59220ae0bdf63cc0c525ab6f5d77e5175e13
MD5 a0cfe1e8fc20987f9e50b64c93f09020
BLAKE2b-256 42591805db5433aeb162030e3b9458a9dcc53e8bc0e4f8d82cfb29ec392d7161

See more details on using hashes here.

File details

Details for the file vigia-0.5.1-py3-none-any.whl.

File metadata

  • Download URL: vigia-0.5.1-py3-none-any.whl
  • Upload date:
  • Size: 126.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for vigia-0.5.1-py3-none-any.whl
Algorithm Hash digest
SHA256 f86470dcc21b8d2ce428a9db0608072f549bae9ad85d2509fa133b48603b878a
MD5 31bd4bcc2c6cce8ae70808ae1724bbe0
BLAKE2b-256 ad7df9e2efb2fe0103469183fe4db986898499e97fe1e8035efbe1f4c56ceca4

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page