DFIR + IA acotada
ZAYNOR
Investigación forense asistida por IA sin delegarle a la IA la decisión final. Para analistas senior y junior.
Apache 2.0 · Python 3.12
Anna Tchijova, Samuel Ramos, Sergei Solovev, Ivan Sarapura
ZAYNOR
02
01 · El problema
Investigar es reconstruir con evidencia rota
Un modelo de IA ayuda mucho a investigar un incidente: correlaciona artefactos, encuentra inconsistencias, formula hipótesis y sugiere qué conviene mirar después.
Usamos modelo basado en ciencia: ABDUCCIÓN-DEDUCCIÓN-INDUCCIÓN
Y también se equivoca. O alucina. Por eso la mantenemos fuera del veredicto. La IA local narra, asiste, ayuda, pero no puede cambiar lo que el motor matemático sella.
En DFIR, una respuesta convincente no es evidencia.
El problema
03
Tres cosas que no deberían llegar a un expediente
Correlación espuria
Muchos artefactos que derivan de la misma fuente no son corroboración independiente.
Ninguna de las tres debería convertirse en una conclusión forense.
Alucinación
Una afirmación fluida, bien escrita y sin nada atrás que la sostenga.
Instrucción adversarial
Texto escondido dentro de un artefacto que le habla al modelo en vez de describir un hecho.
La IA decide qué investigar.
La evidencia verificada decide qué puede afirmarse.
Esa frontera no es una recomendación de uso: es la arquitectura del sistema.
Qué es
05
ZAYNOR reúne tres cosas que suelen estar separadas
Core forense
- Ingesta de bundles, raw evidence y casos postmortem
- Normalización, provenance y freeze del caso
- Análisis determinista con VIGÍA
- Resultado sellado, audit trail e informes y SHA 256
Investigación asistida
- Modelo local con Ollama
- Consultas read-only con policy gate
- Tres MCP locales: VIGÍA, CRONOS y MNEME
- Hallucination guard sobre la narración
Interfaces
- CLI completa
- API local compatible con OpenAI
- OpenWebUI y web junior / senior
- Reportes MD, HTML y PDF
Modelo de autoridad: dos planos separados
Plano autoritativo
- bundles / raw / Velociraptor
- normalización
- freeze + provenance
- VIGÍA determinista
- result.json + result.seal.json
Plano de investigación
- agente local (Ollama)
- policy gate
- consulta read-only
- nueva evidencia
- vuelve al plano autoritativo
Sólo el plano autoritativo puede cambiar el veredicto. El agente lee una proyección verificada y nunca escribe el resultado.
Arquitectura
06
El pipeline, de punta a punta
ingesta
→
freeze
→
VIGÍA
→
resultado
→
seal
→
audit
→
report
ingesta
bundles, raw evidence, casos postmortem y adquisición acotada
freeze
manifest, hashes por artefacto, provenance y case_id inmutable
VIGÍA
análisis determinista sobre evidencia ya congelada
resultado
veredicto con confianza, razones y referencias de evidencia
seal
canonicalización y sello SHA-256 del paquete autoritativo
audit
cadena de hashes ligada al caso, verificable de forma independiente
report
MD, HTML y PDF con cadena de custodia
Arquitectura
07
Arquitectura
08
Si la IA encuentra algo nuevo, vuelve al motor
01
Resultado sellado
El agente parte de un paquete ya verificado, no de la evidencia cruda.
02
Pregunta abierta
Propone hipótesis y qué evidencia discriminaría entre ellas.
03
Operación read-only
Esquema tipado, allowlist fija y confinamiento al caso.
04
Reanálisis
La evidencia nueva pasa otra vez por el motor determinista.
Un set de evidencia distinto es una investigación distinta. La IA puede influir en qué evidencia se pide; nunca en la semántica con que esa evidencia se vuelve un hallazgo.
El motor
09
Qué quiere decir determinista acá
Independencia de evidencia
Artefactos dependientes no cuentan como corroboración independiente sólo por ser numerosos.
Cierre causal
Una hipótesis con cadena causal incompleta puede no sostener un veredicto aunque haya señales fuertes.
Decisión acotada por riesgo
La incertidumbre termina en ABSTAIN o UNKNOWN en vez de rellenarse con una inferencia generativa.
Aritmética exacta
Fraction y Decimal donde la ruta autoritativa exige resultados exactos y comparables. Sin floats, sin probabilidades inventadas.
Cinco estados, y uno de ellos es no saber
MALICE
SUSPICION
BENIGN
UNKNOWN
ABSTAIN
ABSTAIN no significa que el sistema falló. Significa que las condiciones para sostener una conclusión no se cumplen.
La incertidumbre se conserva en vez de pedirle al modelo que complete lo que falta.
El motor
10
Las guardas que sostienen esa frontera
La evidencia es dato, nunca instrucción
Logs, nombres de archivo, documentos y salidas de herramientas no tienen autoridad de instrucción, y esa propiedad sobrevive a las transformaciones.
Hallucination guard
La narración se contrasta con el resultado sellado: un claim que lo contradice se elimina o se rechaza.
Authority guard
La API y la CLI verifican result.json junto con result.seal.json antes de narrar, y no aceptan un veredicto elegido por el request.
Sin fallback sintético
Si el motor falla, falla explícito. No se fabrica un hallazgo de reemplazo para llenar el hueco.
Seguridad
11
Los agentes trabajan bajo contrato
Capability
Qué habilita
¿Algún agente la tiene?
READ
leer evidencia y resultado sellado
sí
DERIVE
derivar observaciones a partir de lo leído
sí
ACQUIRE
pedir adquisición acotada dentro de su policy
sí
MUTATE
modificar el resultado autoritativo
no
AUTHORIZE
autorizar un veredicto
no
Ningún agente registrado tiene MUTATE ni AUTHORIZE. No es una promesa del prompt: los contratos se verifican contra manifests.
Seguridad
12
03 · Prototipo
Caso reproducible: NITROBA
SOURCE
M57 Patents / DFRWS 2009
INPUT
casos/VIGIA-NITROBA-M57-001.json
FREEZE
manifest + artifact hashes
VIGÍA
SUSPICION
SEAL
result.json + result.seal.json
AUDIT
VERIFIED
OUTPUTS
JSON · MD · HTML · PDF
Atribución de identidad sobre captura de red
El bundle documenta sesiones de correo y mensajería, cookies, artefactos de red y explicaciones alternativas.
Tres comandos — freeze, analyze, audit — y el mismo resultado, con la guía de reproducción en el repositorio.
Prototipo
13
El corpus no está elegido para quedar bien
200+
casos independientes que ejercitan el motor y sus invariantes, no una demo feliz elegida a mano.
casos forenses reales documentados
maliciosos
benignos
falsos positivos
formas de falsos negativos
adversariales
casos BREAK
fixtures de regresión
Fuentes públicas con provenance documentada, entre ellas Digital Corpora y muestras de memoria de la Volatility Foundation. Los manifests conservan dataset, URLs, hashes y notas.
Prototipo
14
Lo atacamos antes de mostrarlo
24 documentos de rondas red-team numeradas o relacionadas, cada una con sus hallazgos y su resolución, versionados en el repositorio.
autoridad
CLI
path traversal
TOCTOU
sellos y reproducibilidad
MCP
prompt injection
Ollama y OpenWebUI
contratos de agentes
mutabilidad profunda
API end-to-end
invariantes generales
auditoría de arquitectura
El repositorio deja ver los intentos de romperlo, no sólo el resultado final.
Validación
15
Lo que está medido, y cómo está medido
362 / 1
passed / skipped
Resultado registrado en la resolución de la auditoría de arquitectura, con el comando que lo produjo.
44 / 3
passed / errors
Corrida focalizada. Los errores no se cuentan como tests pasados en ninguna lámina.
sandbox
corrida completa
En este entorno el sandbox bloquea sockets locales que usan fixtures de Ollama: la corrida completa no se presenta como verde.
Presentar un verde que no existe sería exactamente el error que ZAYNOR intenta evitar.
Validación
16
Límites declarados, con número de ficha
L-002
El bundle de evidencia llega a Level 2, no a Level 3: falta la atestación criptográfica del motor.
L-007
El motor determinista no tiene escalón INTENT: su techo es SUSPICION, por diseño heredado.
L-012
El corpus canónico sesga hacia MALICE; se compensa con casos reales y escenarios que terminan en ABSTAIN.
Alcance
No es un SIEM ni un EDR, no hace remediación autónoma y no analiza telemetría en vivo: trabaja sobre evidencia congelada.
Un sistema que no puede nombrar sus propios modos de falla no merece confianza en un expediente.
Honestidad
17
Seguridad y privacidad: todo corre local
La evidencia no sale de la máquina
El modelo corre con Ollama en el equipo del perito. No hay nube, no hay API externa, no hay datos de un caso viajando a un tercero.
Sin red externa por defecto
El enriquecimiento con inteligencia externa está evaluado pero no conectado al runtime local.
Superficie acotada
Path guard, sandbox y herramientas de lectura confinadas al caso, con todo lo consultado registrado en el audit log.
Integridad verificable
Sellos SHA-256, cadena de auditoría con timestamps dentro de las entradas hasheadas, HMAC opcional, verificación de custodia y replay determinista.
Seguridad
18
A quién le sirve y qué cambia
Quién
- Peritos y laboratorios forenses
- Equipos de respuesta a incidentes
- Organismos de ciberdefensa con evidencia sensible
- Formación de analistas junior
Qué cambia
- La conclusión la puede reproducir un tercero
- La incertidumbre queda explícita, no rellenada
- El informe sale con cadena de custodia
- Un junior lee por qué, no sólo qué
Impacto
19
Viable hoy, replicable mañana
Se instala y corre
Apache 2.0, Python 3.12, instalación con pip y ejecución en una notebook común.
Costo marginal cero
Modelo local: sin API paga por caso, sin infraestructura de nube, sin dato que salga de la organización.
Se replica
El caso, el sello y la auditoría viajan como archivos: otro organismo reproduce el análisis sin pedir permiso a nadie.
Se mantiene
CI, conventional commits, changelog, SemVer, documentación en español e inglés y guía para peritos.
Viabilidad
20
Qué corre hoy
Interfaces
- CLI: freeze, analyze, audit, report
- chat, consult y hunts sobre el caso sellado
- API local compatible con OpenAI
- OpenWebUI conectado a esa API
Salidas y laboratorio
- Web con vistas junior y senior
- Reportes MD, HTML y PDF
- Adquisición acotada con Velociraptor
- Observabilidad: OpenTelemetry, Prometheus, Loki, Tempo y Grafana
Demo desplegada, guía para peritos y laboratorio reproducible, todo en el repositorio público.
Prototipo
21
Contexto
22
De dónde viene ZAYNOR
VIGÍA
Autoridad determinista: hipótesis, causalidad, provenance, incertidumbre, scoring y abstención.
ANNACONDA
Adquisición DFIR: adapter Velociraptor, normalización, evidence windows, manifest y custodia.
ZAYNOR
Contrato común, freeze / seal / audit, frontera de autoridad, Ollama, MCP, API, CLI, web y loop de reanálisis.
La reutilización está documentada: el motor entra por un adapter explícito y ningún tipo interno lo cruza.
Rigurosa por debajo, entendible por arriba.
La IA decide qué investigar. La evidencia verificada decide qué puede afirmarse.
github.com/annatchijova/zaynor
zaynor-demo.vercel.app