El problema fundamental que este sistema aborda es la detección y remediación escalable de vulnerabilidades de seguridad en grandes bases de código heterogéneas, utilizando la capacidad de razonamiento de los Modelos de Lenguaje Grandes (LLM). La tesis central es que el futuro de los flujos de trabajo basados en agentes no reside en modelos, prompts o sesiones de agente únicos y aislados, sino en una arquitectura que trata a los LLM como componentes intercambiables dentro de un 'harness' orquestado. Esto permite superar las limitaciones inherentes de los agentes monolíticos, como el agotamiento del contexto, la falta de persistencia y la incapacidad de razonar a través de dependencias de repositorios.
La relevancia de esta aproximación es crítica en un ecosistema de IA en rápida evolución, donde los modelos subyacentes cambian constantemente. Un sistema agnóstico al modelo asegura resiliencia y adaptabilidad. Históricamente, la seguridad del software ha dependido de análisis estáticos (SAST), dinámicos (DAST) y pruebas manuales, cada uno con sus propias limitaciones de cobertura, falsos positivos y escalabilidad. La integración de LLM ofrece una nueva dimensión de análisis semántico y contextual, pero requiere una orquestación sofisticada para ser efectiva a escala empresarial.
Arquitectura del Sistema
La arquitectura se compone de dos sistemas principales: el Vulnerability Discovery Harness (VDH) y el Vulnerability Validation System (VVS). El VDH es el motor de descubrimiento, compuesto por una serie de agentes orquestados que operan en un pipeline de productor-consumidor continuo. Las etapas clave incluyen Recon (mapeo de arquitectura y vectores de amenaza), Hunt (ejecución de ataques por clase), Validate (verificación mecánica y adversarial de hallazgos), Gapfill (generación de nuevas tareas de hunt para cobertura insuficiente), Dedup (consolidación de hallazgos superpuestos), Trace (rastreo de dependencias entre repositorios) y Feedback (optimización de prompts).
Cada agente del VDH es un LLM que actúa como un motor de cómputo sin estado, con su contexto estrictamente controlado para evitar la 'alucinación'. El estado de la ejecución se externaliza completamente y se persiste en una base de datos SQLite, indexada por (run_id, repo, stage). Esto permite la reanudación, reintentos y la integración de tareas en ejecuciones posteriores sin rehacer trabajo. La comunicación entre agentes y con el sistema externo se realiza a través de mecanismos como 'Sibling Forking' (para explorar rutas de código interesantes fuera del alcance actual) y 'Wishlist' (para solicitar herramientas o recursos externos). La capacidad de 'Trace' se basa en un índice de símbolos unificado y un grafo de dependencias entre repositorios.
El VVS es el sistema de validación, que consume los hallazgos del VDH y de otras fuentes. Utiliza un LLM diferente para garantizar una verificación adversaria. Sus etapas incluyen Dedup (usando índices invertidos deterministas y un agente probabilístico para consolidar hallazgos), Judgment (validación contextual de la explotabilidad en producción, consultando fuentes como Jira, wikis y configuración) y Fixing (generación y prueba de parches). El sistema no permite la fusión automática de código sin revisión humana, manteniendo un 'human-in-the-loop' para el cumplimiento y la calidad. La agnósticidad del modelo se logra al tratar a los proveedores de modelos como 'commodities' intercambiables, construyendo el 'harness' para absorber la volatilidad de los modelos subyacentes.
Flujo de Descubrimiento de Vulnerabilidades (VDH)
- 1 Recon Agentes mapean la arquitectura y vectores de amenaza, creando un modelo de am...
- 2 Hunt Agentes ejecutan ataques por clase, compilan fragmentos y prueban binarios en...
- 3 Validate Verificación mecánica del esquema y rutas, luego un agente aislado intenta re...
- 4 Gapfill Genera nuevas tareas de hunt para áreas o clases de ataque poco cubiertas.
- 5 Dedup (VDH) Identifica y consolida hallazgos superpuestos por causa raíz.
- 6 Trace Recorre el grafo de dependencias, generando tareas de hunt en repositorios co...
- 7 Feedback Aprende de fallos de validación y optimiza prompts para futuras tareas.
- 8 Report Genera un informe de vulnerabilidad legible por humanos.
Flujo de Validación y Remediación (VVS)
- 1 Ingest Hallazgos del VDH y otras fuentes se consolidan en un pool central.
- 2 Dedup (VVS) Usa índices invertidos y agentes para identificar duplicados y reabrir regist...
- 3 Judgment Agente evalúa la explotabilidad en producción, consultando contexto de despli...
- 4 Fixing Genera parches, los reescribe al estilo del repo y ejecuta pruebas de regresión.
- 5 Human Review Revisión manual del parche y pruebas antes de la fusión (no se fusiona automá...
| Capa | Tecnología | Justificación |
|---|---|---|
| compute | Large Language Models (LLM) | Motores de razonamiento sin estado para análisis de código, generación de ataques, validación y remediación. Se utilizan diferentes modelos para descubrimiento (VDH) y validación (VVS) para verificación adversaria. |
| storage | SQLite | Base de datos para persistir el estado de cada etapa del pipeline (run_id, repo, stage), permitiendo reanudación, reintentos y trazabilidad de los hallazgos. Actúa como un 'Write-Ahead Log' implícito para el progreso. |
| orchestration | Custom Harness/Orchestrator | Coordina la ejecución de agentes LLM, gestiona el flujo de trabajo entre etapas, controla el contexto, y maneja la persistencia y la interacción con herramientas externas (Wishlist, Sibling Forking). vs Subagents (rechazado por falta de persistencia y gestión de contexto) |
| security | unshare (Linux syscall) | Proporciona un sandbox para los agentes 'Hunter' para compilar y ejecutar fragmentos de código, permitiéndoles probar binarios y provocar crashes de forma segura. Requiere `seccomp=unconfined` y `apparmor=unconfined` en entornos de contenedores anidados. |
| data-processing | Inverted Indexes | Utilizados en la etapa de Dedup del VVS para generar listas cortas de candidatos a duplicados, basándose en datos estructurados (archivos/funciones tocadas, límites de confianza, tokens raros), reduciendo la complejidad O(N^2) de la comparación de LLM. |
Trade-offs
Ganancias
- ▲ Reducción de falsos positivos
- ▲ Agnosticidad del modelo LLM
- ▲ Persistencia y reanudabilidad del análisis
- ▲ Detección de vulnerabilidades cross-repo
- ▲ Automatización de la remediación (generación de parches y tests)
- ▲ Reducción del tiempo medio de resolución (MTTR) para fallos críticos
Costes
- ▲ Costo computacional (LLM inference)
- ▲ Complejidad de la orquestación y gestión de estado
- △ Necesidad de 'human-in-the-loop' para revisión final y cumplimiento
CREATE TABLE IF NOT EXISTS findings (
run_id TEXT NOT NULL,
repo TEXT NOT NULL,
stage TEXT NOT NULL,
finding_id TEXT PRIMARY KEY,
status TEXT NOT NULL,
payload JSON,
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP
);
-- Ejemplo de inserción de un hallazgo
INSERT INTO findings (run_id, repo, stage, finding_id, status, payload)
VALUES ('run_abc', 'my_repo', 'Hunt', 'vuln_123', 'discovered', '{"type": "SQL Injection", "location": "file.py:100"}');
-- Ejemplo de recuperación para reanudar
SELECT * FROM findings WHERE run_id = 'run_abc' AND stage = 'Hunt' AND status = 'discovered';Fundamentos Teóricos
La necesidad de persistencia y reanudabilidad en sistemas distribuidos, especialmente frente a fallos transitorios, se alinea con principios fundamentales de tolerancia a fallos y recuperación de sistemas. Conceptos como el 'Write-Ahead Log' (WAL) o los 'checkpointing' en bases de datos y sistemas distribuidos buscan asegurar que el estado del sistema pueda ser reconstruido o la operación reanudada desde un punto conocido después de un fallo. La externalización del estado del LLM a una base de datos SQLite para cada etapa es una aplicación práctica de estos principios, transformando un componente inherentemente efímero (la sesión del LLM) en uno persistente y reanudable.
El problema de la deduplicación de hallazgos en un sistema de seguridad a gran escala, donde la identificación de la 'causa raíz' es compleja, tiene paralelismos con la investigación en 'clustering' y 'minería de patrones' en conjuntos de datos ruidosos. La combinación de índices invertidos deterministas con el razonamiento probabilístico de un agente LLM para la deduplicación es un enfoque híbrido que busca optimizar la eficiencia (evitando la complejidad O(N^2) de comparar cada hallazgo con cada otro) y la precisión. Esto refleja la evolución de algoritmos de búsqueda y clasificación que combinan heurísticas rápidas con análisis más profundos para refinar resultados, un patrón común en la recuperación de información y el procesamiento de lenguaje natural.