AgentGuard FastPath es un software de análisis defensivo de eventos de seguridad escrito en C. Procesa telemetría en formato JSONL o CSV, aplica una política configurable y produce métricas, alertas, relaciones proceso-archivo-red, líneas de tiempo y puntajes de riesgo.
El repositorio contiene dos componentes:
agentguard: monitor Linux basado enptracepara observar procesos.agfast: CLI principal para analizar eventos de seguridad en archivos JSONL/CSV.
La parte central del proyecto es agfast. Su objetivo es convertir eventos crudos en información útil para detección, investigación y priorización de comportamientos sospechosos.
- Entrada en formato JSONL y CSV.
- Archivo de política
policy.json. - Bloom Filter para verificación rápida de pertenencia.
- Cuckoo Filter con prueba de borrado.
- Count-Min Sketch para frecuencias aproximadas.
- HyperLogLog para cardinalidades aproximadas.
- Space-Saving y Misra-Gries para heavy hitters.
- Odd Sketch y similitud Jaccard para comparar comportamiento.
- Grafo proceso-archivo-red.
- Puntaje de riesgo por PID o proceso.
- Timeline por PID o proceso.
- Ventanas con
--window-events. - Reportes en consola, JSON, HTML y CSV.
- Generación de datasets sintéticos.
- Benchmarks reproducibles.
- Modo incremental
tail.
En Debian, Ubuntu o WSL con entorno Linux:
sudo apt update
sudo apt install build-essential libssl-dev python3 valgrindPara uso básico no es obligatorio instalar Valgrind, pero sí es útil para validar fugas de memoria en CI o pruebas locales.
make clean
makeLa compilación genera:
./bin/agentguard
./bin/agfastmake clean
make
make test-fastpathmake test-fastpath ejecuta pruebas básicas, pruebas de algoritmos y pruebas de reportes.
make cleanEste comando elimina:
obj/bin/- reportes locales generados por las demos, como
report.json,report.htmlyalerts.csv
Para eliminar solo reportes locales:
make clean-reportsEl repositorio no debe versionar binarios, objetos compilados, reportes generados, archivos temporales, salidas de benchmark ni carpetas de entorno virtual.
./bin/agfast analyze examples/events.jsonl \
--policy examples/policy.json \
--risk \
--window-events 3 \
--report report.json \
--html report.html \
--alerts-csv alerts.csvEl programa puede devolver código 2 cuando encuentra alertas. Ese comportamiento es intencional y permite integrar agfast con scripts o pipelines.
Para abrir el reporte HTML en Linux:
xdg-open report.htmlEn WSL:
explorer.exe report.htmlAnálisis con política:
./bin/agfast analyze examples/events.jsonl --policy examples/policy.json --riskEstadísticas sin política:
./bin/agfast stats examples/events_day2.jsonl --report stats.jsonConsulta de grafo:
./bin/agfast graph examples/events_day3.jsonl --policy examples/policy.json --pid 123 --timeline
./bin/agfast graph examples/events_day3.jsonl --policy examples/policy.json --process pythonTimeline:
./bin/agfast timeline examples/events_day3.jsonl --policy examples/policy.json --pid 123Verificación contra listas de vigilancia:
./bin/agfast check-file /etc/passwd --policy examples/policy.json
./bin/agfast check-ip 45.90.10.2 --policy examples/policy.json --delete-test
./bin/agfast check-domain malicious.example --policy examples/policy.jsonSimilitud entre procesos:
./bin/agfast similarity examples/events_day3.jsonl \
--process python \
--compare-process bash \
--policy examples/policy.json \
--report similarity.jsonGeneración de datasets sintéticos:
./bin/agfast generate --events 100000 --output /tmp/events.jsonl --malicious-ratio 0.05
./bin/agfast generate --events 100000 --format csv --output /tmp/events.csv --malicious-ratio 0.05Modo incremental:
./bin/agfast tail examples/events.jsonl --policy examples/policy.json
./bin/agfast tail logs/events.jsonl --policy examples/policy.json --followCada línea representa un evento:
{"time":"2026-05-23T10:00:01Z","pid":123,"process":"python","event":"open","file":"/etc/passwd"}
{"time":"2026-05-23T10:00:02Z","pid":123,"process":"python","event":"connect","dst":"45.90.10.2"}Campos soportados:
timepidprocesseventfiledstdomainip
time,pid,process,event,file,dst,domain,ip
2026-05-23T10:00:01Z,123,python,open,/etc/passwd,,,
2026-05-23T10:00:02Z,123,python,connect,,45.90.10.2,,45.90.10.2Ejemplo mínimo:
{
"sensitive_files": ["/etc/passwd", "/etc/shadow", "/home/*/.ssh/*"],
"blocked_domains": ["malicious.example"],
"blocked_ips": ["45.90.10.2"],
"watched_processes": ["python", "curl", "bash"],
"risk_weights": {
"watched_process": 10,
"sensitive_file": 25,
"blocked_ip": 35,
"blocked_domain": 35,
"network_after_file": 30,
"high_unique_destinations": 15,
"high_event_volume": 10,
"high_unique_destination_threshold": 10,
"high_event_volume_threshold": 100
}
}Benchmark JSONL:
make benchmarkBenchmark CSV:
make benchmark-csvTambién se puede ejecutar el script directo:
scripts/benchmark_fastpath.sh ./bin/agfastPor defecto, los benchmarks escriben datos temporales en /tmp/agfast_bench.
docs/ARQUITECTURA.md: arquitectura actual del proyecto.docs/USO.md: comandos reproducibles de uso, prueba y limpieza.docs/ROADMAP.md: fases propuestas para evolucionar el proyecto.docs/DECISIONES_TECNICAS.md: decisiones de diseño y flujo de Pull Request.
Para cada fase:
git checkout main
git pull origin main
git checkout -b fase-1-higiene-repositorioDespués de modificar y probar:
make clean
make
make test-fastpath
git status
git add .
git commit -m "fase 1: ordena repositorio y documenta uso reproducible"
git push -u origin fase-1-higiene-repositorioLuego se abre un Pull Request hacia main.
Para este proyecto se recomienda usar Merge pull request y no Squash and merge cuando cada rama representa una fase del proyecto. Así se conserva la historia completa de commits, pruebas y decisiones. Squash and merge puede usarse solo si la rama tuvo muchos commits pequeños, correcciones triviales o mensajes poco claros.
Después de fusionar la Fase 1 en main:
git checkout main
git pull origin main
git push origin main --tagsLuego se puede crear un GitHub Release asociado al tag v0.1.1.
Este proyecto se distribuye bajo la licencia indicada en LICENSE.
La Fase 3 agrega una suite de regresión para validar comandos principales de agfast con fixtures pequeños y reproducibles.
Ejecución recomendada:
make clean
make
make test-fastpath
make test-regression
make cleanSalida esperada al final de make test-regression:
Pruebas de regresion superadas
En Ubuntu o Debian:
sudo apt update
sudo apt install -y valgrindmake test-valgrindSi Valgrind está instalado, la salida debe incluir una revisión de memoria de agfast.
Salida esperada en una ejecución correcta:
Prueba Valgrind de agfast
ERROR SUMMARY: 0 errors
Si Valgrind no está instalado, la prueba no detiene el flujo de trabajo y muestra:
Valgrind no esta instalado; prueba omitida
Para esta fase, el proyecto debe pasar:
make clean
make
make test-fastpath
make test-regression
make cleanmake test-valgrind es recomendable para validación local de memoria. Si Valgrind está instalado, no debe reportar errores de memoria.
AgentGuard FastPath v1.0.1 consolida una primera versión presentable como herramienta C defensiva experimental para análisis de telemetría JSONL/CSV.
Incluye:
- pruebas de regresión;
- pruebas de streaming;
- tests unitarios en C con Unity;
- benchmarks;
- evaluación experimental reproducible;
- GuardSketch MVP en userspace;
- preparación eBPF opcional;
- CI/CD visible;
- documentación técnica de release.
docs/INSTALACION.mddocs/USO_AVANZADO.mddocs/RELEASE_V1.mddocs/EVALUACION.mddocs/GUARDSKETCH.mddocs/EBPF.mddocs/CI.mdCHANGELOG.md
make clean
make
make test-fastpath
make test-regression
make test-streaming
make test-guardsketch
make test-unit
bash benchmarks/run_benchmark.sh
AGFAST_EVAL_EVENTS=10000 AGFAST_EVAL_PIDS=300 bash scripts/run_evaluation.sh
make cleanLa versión presentable actual es:
AgentGuard FastPath 1.0.1
La versión visible del binario debe coincidir con AGF_VERSION en include/common.h.
Validación rápida:
make clean
make
./bin/agfast --version
./bin/agentguard --version
make cleanCHANGELOG.mddocs/RELEASE_V1.mddocs/INSTALACION.mddocs/USO_AVANZADO.mddocs/HISTORIAL_FASES.mddocs/CI.mdSECURITY.mdCONTRIBUTING.md