Auditoría de Cumplimiento (CU-02)
Esta guía describe cómo realizar una auditoría de seguridad sin modificar el sistema objetivo, generando reportes que sirven como evidencia para auditorías de cumplimiento ISO 27001, PCI-DSS o revisiones internas de seguridad.
Escenario
- Actor: Consultor de seguridad con acceso temporal a un servidor de cliente.
- Restricción: No puede modificar configuraciones del sistema.
- Objetivo: Evaluar la postura de seguridad y entregar un reporte ejecutivo.
- Distribución: Desconocida hasta la conexión (podría ser Debian, Ubuntu, RHEL o derivada).
Paso 1: Transferir Vallumix al servidor objetivo
Como Vallumix es un binario único estático, puedes copiarlo sin instalar dependencias:
# Desde tu máquina local
scp vallumix usuario@servidor-cliente:/tmp/
ssh usuario@servidor-cliente
sudo cp /tmp/vallumix /usr/local/bin/
Si no tienes acceso root en el servidor del cliente, solicita que un administrador local ejecute el binario por ti. El subcomando `audit` requiere root para leer archivos de configuración protegidos como `/etc/shadow` o `/etc/ssh/sshd_config`.
Paso 2: Detectar la distribución y seleccionar perfil
sudo vallumix list
# Muestra los perfiles disponibles y los controles asociados
Basado en el rol del servidor, selecciona el perfil adecuado:
- Servidor web (Nginx, Apache) →
--profile web - Servidor de base de datos (PostgreSQL, MariaDB) →
--profile database - Bastión SSH →
--profile bastion
Si no estás seguro del rol, ejecuta los tres perfiles y compara los resultados.
Paso 3: Ejecutar la auditoría
sudo vallumix audit --profile database --report html,json --output /tmp/compliance-audit
El subcomando audit evalúa todos los controles del perfil pero nunca ejecuta apply. Solo realiza pre_check sobre cada control y genera el reporte.
Salida esperada
[ OK ] 1.1.1.1 Disable cramfs support Compliant
[FAIL] 1.1.1.2 Disable freevxfs support NonCompliant
[ OK ] 2.1.1 Ensure autofs is not installed Compliant
[FAIL] 3.1.1 Ensure IP forwarding is disabled NonCompliant
[FAIL] 5.2.4 Ensure SSH root login is disabled NonCompliant
[ OK ] 5.2.5 Ensure SSH strict mode is enabled Compliant
[FAIL] 6.1.1 Ensure permissions on /etc/passwd NonCompliant
─────────────────────────────────────────────
Execution complete
Profile: database
Controls run: 70
Compliant: 31
NonCompliant: 35
Skipped: 4
Compliance: 46.9%
Threshold: not set
Status: AUDIT ONLY (no changes applied)
Reports: /tmp/compliance-audit.html
/tmp/compliance-audit.json
─────────────────────────────────────────────
El estado `AUDIT ONLY` en la salida confirma que no se modificó ningún archivo del sistema. Esto es una garantía importante que debes destacar ante el auditor o cliente.
Paso 4: Generar el reporte HTML para el cliente
El reporte HTML es autocontenido: incluye CSS embebido, no requiere conexión a internet y se puede abrir directamente en cualquier navegador. Contiene:
- Portada: hostname, distribución, kernel, fecha y duración.
- Resumen ejecutivo: tasa de cumplimiento, comparación con ejecuciones previas.
- Detalle por control: ID CIS, descripción, severidad, estado, evidencia técnica.
- Recomendaciones de remediación manual para controles que no pueden automatizarse.
- Mapeo a estándares: referencias cruzadas a NIST 800-53, ISO 27001 Annex A y PCI-DSS.
Paso 5: Extraer métricas del JSON para dashboards
Si el cliente tiene un dashboard de cumplimiento (Grafana, Splunk, etc.), el JSON es la fuente de datos:
# Extrae la tasa de cumplimiento global
jq '.summary.compliance_rate' /tmp/compliance-audit.json
# Salida: 46.9
# Lista todos los controles no compliant
jq '.controls[] | select(.status == "NonCompliant") | {id: .id, severity: .severity, description: .description}' /tmp/compliance-audit.json
# Cuenta controles críticos fallidos
jq '[.controls[] | select(.status == "NonCompliant" and .severity == "Critical")] | length' /tmp/compliance-audit.json
Paso 6: Entregar resultados
El paquete de entrega para una auditoría típica incluye:
- Reporte HTML: documento principal para revisión ejecutiva.
- Reporte JSON: datos estructurados para integración con herramientas del cliente.
- Log de ejecución: salida de
vallumix auditcon--verbosepara trazabilidad técnica. - Declaración de no modificación: texto que certifica que la auditoría fue de solo lectura.
Ejecuta la auditoría con `--verbose` para capturar los comandos exactos que Vallumix usó para evaluar cada control. Esto proporciona trazabilidad técnica ante auditores que cuestionan la metodología de evaluación.