
Sistema de detección de comportamiento en endpoints basado en ML para máquinas Linux
Detección de anomalías de comportamiento impulsada por aprendizaje automático para Linux usando eBPF + Isolation Forest
Guardd recopila eventos de bajo nivel del sistema (ejecución de procesos, actividad de red), los agrega en vectores de características en ventanas de tiempo y detecta comportamientos anómalos usando un modelo de aprendizaje automático.
Guardd está enfocado en detectar amenazas desconocidas
[!WARNING] Este proyecto aún está en desarrollo
Las características y la precisión de detección se están mejorando activamente
Se agradecen comentarios, sugerencias y contribuciones
guardd se ejecuta como un único servicio systemd que gestiona el ciclo completo de recolección de datos, entrenamiento y detección.
Al iniciar:
Si no existe un modelo, guardd comienza a recopilar datos de referencia del comportamiento
Recopila 1 día (por defecto) de datos para entrenar inicialmente
Una vez que el entrenamiento tiene éxito, cambia automáticamente al modo de detección
Durante la operación:
La actividad del sistema se agrega continuamente en ventanas de tiempo y se convierte en vectores de características
Cada ventana es evaluada por el modelo Isolation Forest entrenado
Las anomalías se emiten como NDJSON
En curso:
El modelo se reentrena automáticamente una vez por semana
La detección se reanuda inmediatamente después del reentrenamiento con el modelo actualizado
git clone https://github.com/benny-e/guardd.git
cd guardd
sudo bash install.sh
Esto hará lo siguiente:
Instalar las dependencias del sistema
Copiar el proyecto a /opt/guardd
Crear un entorno virtual de Python
Instalar el paquete
Compilar los componentes eBPF
Instalar el servicio systemd
sudo systemctl start guardd.service
systemctl status guardd.service
journalctl -u guardd.service -f
guardd incluye una interfaz de terminal para navegar por las alertas recientes y buscar anomalías
Para iniciar: (después de iniciar guardd.service)
guardd tui
Puedes ejecutar guardd directamente desde la línea de comandos sin instalar el servicio systemd. Esto se puede configurar para funcionar con otros sistemas de inicio
sudo guardd daemon
Recolectar datos:
sudo guardd collect
Entrenar modelo:
sudo guardd train
Ejecutar detección:
sudo guardd detect
guardd admite configuración a través de un archivo config.toml.
Por defecto, el demonio busca en:
/opt/guardd/config.toml
[daemon]
mode = "auto"
bootstrap_retry_seconds = 60
retrain_interval_seconds = 604800
[training]
min_training_rows = 1
contamination = 0.01
n_estimators = 200
threshold_percentile = 10.0
[paths]
db_path = "/opt/guardd/data/features.db"
model_path = "/opt/guardd/data/model.bundle"
guardd_path = "/opt/guardd/ebpf/guardd"
Controla el ciclo de vida de guardd.
mode
-- "auto" → pipeline completo (collect → train → detect)
-- "collect" → solo recopilar datos
-- "detect" → solo ejecutar detección (requiere modelo)
bootstrap_retry_seconds
-- Con qué frecuencia guardd intenta el entrenamiento inicial cuando no existe un modelo
-- Durante esta fase, guardd recopila datos y periódicamente se detiene para intentar entrenar
retrain_interval_seconds
-- Con qué frecuencia se reentrena el modelo después del bootstrap inicial
-- Por defecto: 7 días
Controla el comportamiento y los requisitos del modelo.
min_training_rows
-- Número mínimo de ventanas de características necesarias para entrenar
-- Si no se cumple, el entrenamiento falla y se reintentará más tarde
contamination
-- Proporción esperada de anomalías en los datos
-- Se pasa directamente a Isolation Forest
-- Valores típicos: 0.01–0.05
n_estimators
-- Número de árboles en el Isolation Forest
-- Mayor = más preciso, entrenamiento más lento
threshold_percentile
-- Determina el puntaje de corte de anomalías
-- Menor = detección más agresiva
Controla dónde guardd lee/escribe datos.
db_path
-- Base de datos SQLite que almacena vectores de características y anomalías
model_path
-- Paquete de modelo serializado utilizado para la detección
guardd_path
-- Ruta al binario recolector eBPF
Los valores de configuración anulan los valores predeterminados de CLI
Los argumentos CLI aún pueden anular la configuración si se proporcionan explícitamente
La precisión del modelo depende en gran medida de buenos datos de entrenamiento. Tiempos de entrenamiento más largos resultarán en un detector más preciso
python3
python3-venv
python3-pip
clang
llvm
libbpf-dev
libelf-dev
bpftool
build-essential
pkg-config
sqlite3