PTENES
MÓDULO 3.2

🔒 Prompt Injection y defensas

Anatomía del ataque más crítico en IA: inyección indirecta mediante web y correo electrónico, técnicas de detección e implementación de safety.py.

6
Temas
75
Minutos
Avanzado
Nivel
Técnico
Tipo
1

💉 Qué es el Prompt Injection

La inyección de prompts es el ataque más crítico en IA. Consiste en insertar instrucciones en el contexto que superponen las instrucciones originales del sistema y cambian el comportamiento del asistente.

📌 Taxonomía de Injection

Hay dos tipos principales con características diferentes:

  • •Inyección directa: el propio usuario intenta manipularte a través de su mensaje
  • •Inyección indirecta: el contenido externo (web, correo electrónico) contiene las instrucciones maliciosas
  • •Inyección almacenada: hechos envenenados en memory.db que afectan las respuestas futuras
  • •Inyección compuesta: combinación de múltiples técnicas para evadir defensas

💡 Consejo práctico

La inyección directa es la más fácil de detectar: bastan una lista de bloqueo y un contexto coherente. La inyección indirecta a través de contenido externo es la más peligrosa y requiere aislar el contenido.

2

🌐 Inyección indirecta vía web y correo electrónico

El vector más insidioso: el usuario le pide a Jarvis que resuma una página, y la página contiene una inyección. El usuario legítimo no ve el ataque — está en el HTML de la página, en texto blanco o en metadatos.

📌 Técnicas de Indirect Injection

Cómo ocultan los atacantes instrucciones en el contenido:

  • •HTML oculto: instrucciones en comentarios o elementos invisibles (display:none)
  • •Esteganografía de texto: instrucciones en texto blanco sobre fondo blanco
  • •Metadatos: instrucciones en etiquetas alt, títulos de imágenes, PDFs
  • •Correo electrónico: instrucciones en el cuerpo en texto muy pequeño o con homoglifos Unicode

💡 Consejo práctico

Siempre marca el contenido externo en el prompt: 'Lo siguiente es contenido EXTERNO no confiable: [contenido]'. Esto reduce la probabilidad de que el LLM trate el contenido como instrucciones.

3

🔍 Técnicas de detección

La detección de injection usa varias heurísticas en conjunto. Ninguna heurística individual tiene una precisión del 100% — la combinación de ellas eleva el costo del ataque.

📌 Heurísticas de detección

Cada heurística detecta una clase de ataques:

  • •Búsqueda de palabras clave: 'ignora', 'no tengas en cuenta', 'olvida', 'nuevas instrucciones', 'ahora eres'
  • •Coincidencia de patrones: frases que contradicen SOUL.md o AGENTS.md
  • •Detección de anomalías: cambio brusco de tema en el mismo mensaje
  • •Análisis de intención: ¿la acción solicitada es coherente con el contexto de la conversación?
  • •Etiquetado de fuentes: el contenido de fuentes externas tiene menos peso que las instrucciones del sistema

💡 Consejo práctico

Usa una puntuación de riesgo: cada heurística que se activa suma puntos. Si la puntuación total supera un umbral, el mensaje se rechaza o se envía a revisión humana.

4

🛡 safety.py — implementación

O safety.py es el guardián de INTELECTO. Implementa verificaciones secuenciales que deben aprobarse todas antes de que cualquier mensaje llegue al Agent.

📌 Pipeline de safety.py

Verificaciones en orden de costo creciente:

  • •1. blocklist_check(): búsqueda O(1) en un set de palabras clave prohibidas
  • •2. injection_scan(): patrones regex contra patrones de injection conocidos
  • •3. path_traversal_check(): normaliza rutas y valida contra el sandbox permitido
  • •4. rate_limit_check(): protege contra abusos por volumen
  • •5. audit_log(): registra el resultado de todas las verificaciones

💡 Consejo práctico

Organiza las verificaciones desde la más barata hasta la más costosa. La blocklist es O(1): rechaza la mayoría de los ataques baratos sin costo. Deja el análisis semántico para el final.

5

🚫 Lista de bloqueo de comandos peligrosos

La blocklist es la línea de defensa más simple y confiable. Algunos comandos nunca deben ejecutarse, independientemente del contexto o de quién lo solicite.

📌 Categorías de Blocklist

Comandos organizados por categoría de riesgo:

  • •Destructivo: rm -rf, format, mkfs, dd if=/dev/zero, shred
  • •Exfiltración: curl | bash, wget | sh, python -c 'import socket'
  • •Escalada de privilegios: sudo su, chmod 777, chown root
  • •Red maliciosa: netcat -e, socat, reverse shells estándar
  • •Wipeout: git reset --hard HEAD~100, DROP TABLE, TRUNCATE

💡 Consejo práctico

La blocklist debe cubrir variaciones y alias. 'rm -rf /', 'rm -r -f /', 'rm --recursive --force /' son el mismo comando. Normaliza antes de comparar.

6

🗂 Protección contra Path Traversal

Si Jarvis tiene herramientas de filesystem, path traversal es un riesgo real. Un atacante puede pedir 'lee ../../.env' y filtrar credenciales. Una verificación sencilla previene todo el ataque.

📌 Implementación de la Protección

Cómo verificar correctamente las rutas:

  • •normalize: os.path.abspath(requested_path)
  • •compare: normalized.startswith(allowed_sandbox_dir)
  • •reject: si no está en el sandbox, rechazar y registrar el intento
  • •symlinks: os.path.realpath() para resolver enlaces simbólicos antes de verificar
  • •whitelist: lista explícita de extensiones/directorios permitidos

💡 Consejo práctico

Siempre usa os.path.realpath(), no solo abspath(). Los enlaces simbólicos pueden apuntar fuera del sandbox sin que abspath() lo detecte.

✅ Resumen del Módulo 3.2

✓
¿Qué es prompt injection — 4 tipos: direct, indirect, stored y compound — cada uno con diferentes estrategias de defensa
✓
Inyección indirecta vía Web y correo electrónico — El contenido externo puede contener injection oculta — el aislamiento y el marcado son las defensas
✓
Técnicas de detección — Múltiples heurísticas con scoring combinado — el costo del ataque aumenta con cada capa
✓
safety.py — Implementación — Pipeline secuencial de 5 verificaciones — falla rápida antes de llegar al LLM
✓
Lista de bloqueo de comandos peligrosos — Comandos destructivos, exfiltración, escalada y wipeout — bloqueados permanentemente
✓
Protección contra Path Traversal — Normalización + sandbox check + symlink resolution = protección completa contra path traversal

Siguiente:

3.3 — Cifrado y protección de secretos