09/06/2025
Sistema Completo de Monitoreo de Integridad en Linux con Hashes
Introducción
Sistema completo para detectar modificaciones no autorizadas en sistemas Linux mediante hashes criptográficos, con almacenamiento seguro y control de versiones.
Diagrama del Sistema Completo:
Fase 1: Creación del Script Base
Script de Generación de Hashes (`monitorintegridad.sh`):
#!/bin/bash
# Generación inicial de hashes
# Configuración básica
TARGETS=(
/bin
/sbin
/usr/bin
/usr/sbin
/etc
/lib/modules
/etc/init.d
)
generate_hashes() {
local output_file=$1
echo "# Hashes de Integridad - $(date)" > "$output_file"
echo "# Sistema: $(uname -a)" >> "$output_file"
for target in "${TARGETS[@]}"; do
if [ -e "$target" ]; then
echo -e "\n# Directorio: $target" >> "$output_file"
find "$target" -type f -exec sha256sum {} \; >> "$output_file"
fi
done
}
# Uso básico
OUTPUT_FILE="hashes_base.sha256"
generate_hashes "$OUTPUT_FILE"
echo "Hashes generados en $OUTPUT_FILE"
Fase 2: Almacenamiento Seguro con Control de Versiones
Estructura de Directorios:
Script Mejorado con Almacenamiento Seguro:
#!/bin/bash
# Configuración de almacenamiento seguro
VAULT_DIR="/var/log/integridad/vault"
CONFIG_DIR="/var/log/integridad/config"
LOG_FILE="/var/log/integridad/logs/integridad.log"
# Inicialización
mkdir -p {$VAULT_DIR/hashes,$VAULT_DIR/firmas,$VAULT_DIR/backups,$CONFIG_DIR}
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
HASH_FILE="$VAULT_DIR/hashes/$TIMESTAMP.sha256"
SIG_FILE="$VAULT_DIR/firmas/$TIMESTAMP.sig"
# Función de generación mejorada
generate_hashes() {
# ... (función anterior mejorada)
# Añade metadatos adicionales
echo "# Metadata:" >> "$HASH_FILE"
echo "# Generated: $(date --iso-8601=seconds)" >> "$HASH_FILE"
echo "# Hostname: $(hostname -f)" >> "$HASH_FILE"
}
# Firmado y backup
gpg --batch --yes --detach-sign --armor \
-o "$SIG_FILE" "$HASH_FILE"
tar czf - "$HASH_FILE" "$SIG_FILE" | \
gpg --batch --encrypt --recipient "security@example.com" \
> "$VAULT_DIR/backups/$TIMESTAMP.tar.gpg"
# Control de versiones
git -C "/var/log/integridad" add vault/
git -C "/var/log/integridad" commit -m "Update $TIMESTAMP" \
>> "$LOG_FILE"
# Rotación (conservar 30 días)
find "$VAULT_DIR/hashes" -mtime +30 -delete
find "$VAULT_DIR/firmas" -mtime +30 -delete
Fase 3: Verificación y Monitoreo
Script de Verificación (`verificarintegridad.sh`):
#!/bin/bash
# Parámetros configurables
REFERENCE="${1:-$(ls -t /var/log/integridad/vault/hashes/*.sha256 | head -2 | tail -1)}"
CURRENT="/tmp/current_hashes.$$.sha256"
# Generar hashes actuales
monitor_integridad.sh --quick "$CURRENT"
# Comparación avanzada
diff_output="/var/log/integridad/diff_$(date +%s).diff"
diff -u <(sort "$REFERENCE") <(sort "$CURRENT") > "$diff_output"
if [ -s "$diff_output" ]; then
echo "ALERTA: Cambios detectados" >&2
echo "Detalles en $diff_output" >&2
# Opcional: Enviar email de alerta
else
echo "OK: No se detectaron cambios"
rm "$diff_output"
fi
rm "$CURRENT"
Fase 4: Automatización con Cron
Configuración recomendada:
# Ejemplo crontab para root
0 3 * * * /usr/local/bin/monitor_integridad.sh >> /var/log/integridad/cron.log 2>&1
0 4 * * 0 /usr/local/bin/verificar_integridad.sh /var/log/integridad/vault/hashes/last_known_good.sha256
Tablas de Referencia Rápida
Comparación de Estrategias de Almacenamiento:
| Estrategia | Ventajas | Desventajas | Uso Recomendado |
|---|---|---|---|
| Local plano | Simple | Sin versionado | Pruebas iniciales |
| Git | Historial completo | Requiere mantenimiento | Entornos desarrollo |
| GPG + Backup | Máxima seguridad | Complejidad configuración | Producción crítica |
Política de Retención:
| Tipo Archivo | Retención | Compresión | Encriptación | Ejemplo |
|---|---|---|---|---|
| Hashes brutos | 30 días | No | No | hashes20231115.sha256 |
| Firmas GPG | 30 días | No | No | hashes20231115.sig |
| Backups | 1 año | Sí | Sí | backup20231115.tar.gpg |
| Logs | 6 meses | Sí | No | integridad.log.1.gz |
Integración con Emacs
Para gestión desde Emacs:
(defun integrity-monitor-run ()
"Ejecutar monitor de integridad"
(interactive)
(async-shell-command "monitor_integridad.sh" "*Integrity Monitor*"))
(defun integrity-verify (&optional ref-file)
"Verificar integridad contra referencia"
(interactive "fArchivo de referencia: ")
(let ((cmd (format "verificar_integridad.sh %s" (or ref-file ""))))
(compile cmd))
Conclusión
Este sistema completo proporciona:
- Generación segura de hashes
- Almacenamiento con control de versiones
- Verificación automatizada
- Historial auditado
Próximos pasos:
- Implementar notificaciones por email
- Configurar almacenamiento remoto
- Integrar con sistemas SIEM