═══════════════════════════════════════════════════════════════════════════
  PCI DSS PREGUNTA 32 — PAQUETE DE EVIDENCIA
  Antivirus Server Management Console aplicada a cde-pool-node-01
═══════════════════════════════════════════════════════════════════════════

PCI DSS Q32 requiere capturas de la Antivirus Server Management Console
mostrando:
  1. Frecuencia de actualización de firma
  2. Frecuencia periódica de escaneo / análisis conductual continuo
  3. Versión de firma
  4. Evidencia que el usuario NO puede desactivar/modificar la solución
  5. Logs: 3 meses online + 9 meses offline
  6. Ejemplos de resultados

QSA solicitó específicamente: Aplicada a cde-pool-node-01 (= cde-38q702)

═══════════════════════════════════════════════════════════════════════════
SOLUCIÓN: Wazuh Stack 4.9.2 desplegado en namespace 'wazuh' del cluster K8s
═══════════════════════════════════════════════════════════════════════════

Componentes desplegados (2026-05-27):
  - wazuh-indexer-0          (OpenSearch storage, PVC 50 GiB)
  - wazuh-manager-master-0   (API + enrollment + cluster master, PVC 10 GiB)
  - wazuh-manager-worker-0   (event collector port 1514, PVC 10 GiB)
  - wazuh-dashboard-*        (Web UI on 167.172.14.100:443)

Agentes (DaemonSet, 4 nodos en alcance PCI):
  - id 008  app-38qmcg     10.100.0.19   Active
  - id 009  app-38qmcw     10.116.4.145  Active
  - id 010  cde-38q702     10.100.0.16   Active   ← TARGET QSA
  - id 011  cde-38q70l     10.100.0.17   Active

Endurecimiento aplicado:
  - Dashboard LB: firewall allowlist solo a 186.30.7.141/32 (admin IP)
  - Indexer + workers: ClusterIP only (sin exposición externa)
  - Wazuh API LB: firewall solo a 186.30.7.141/32
  - DaemonSet wazuh-agent: hostNetwork + ClusterFirstWithHostNet DNS

═══════════════════════════════════════════════════════════════════════════
CONTENIDO DE ESTE PAQUETE
═══════════════════════════════════════════════════════════════════════════

  00-README.txt                       (este archivo)

  Setup + Discovery:
    01-manager-discovery.txt          Localización del manager (collector VM)
    02-collector-fw.txt               Firewall del collector VM
    03-dashboard-probe.txt            Ports probe al collector

  Re-architecture (multi-manager K8s + DO Spaces):
    10-spaces-key.txt                 Access key DO Spaces creada
    20-wazuh-agent-config-BEFORE.yaml ConfigMap original del agente
    21-ossec-conf-BEFORE.xml          ossec.conf BEFORE re-architecture
    22-ossec-conf-AFTER.xml           ossec.conf con multi-server (K8s + collector)
    wazuh-agent-bootstrap.sh          Script de bootstrap del DaemonSet (ubuntu:24.04)
    wazuh-snapshot-cronjob.yaml       CronJob de snapshot a Spaces
    ism-policy-90d.json               Policy de retención 90 días online

  Estado final del stack:
    30-stack-final-state.txt          Pods + services + PVCs + agentes
    31-versions-extract.txt           Versiones de cada componente
    32-scan-frequencies.txt           Frecuencias de FIM/rootcheck/SCA
    33-ism-policy-export.json         ISM policy actual del indexer
    34-snapshot-cronjob-spec.yaml     CronJob spec aplicado
    35-spaces-bucket.txt              Bucket creation + versioning evidence

═══════════════════════════════════════════════════════════════════════════
MAPEO REQUISITO QSA Q32 → EVIDENCIA
═══════════════════════════════════════════════════════════════════════════

1. Frecuencia de actualización de firma:
   - Wazuh rules: parte de la imagen container (wazuh-manager:4.9.2)
   - Update vía rolling restart del StatefulSet con nueva imagen
   - Política: revisión mensual + ad-hoc en alertas críticas
   - Evidencia: docs/pci-dss/screenshots/q32-mgmt-console/02-*.png
                + T1-stack-versions-cli.png

2. Frecuencia periódica de escaneo:
   - syscheck (FIM): cada 12 horas (43200s) + realtime sobre paths críticos
   - rootcheck (anti-rootkit/trojan): cada 12 horas
   - SCA (config assessment): cada 12 horas
   - syscollector (inventory): cada 1 hora
   - Evidencia: 04-cde-agent-configuration.png + T2-scan-frequencies-cli.png

3. Versión de firma:
   - Wazuh server 4.9.2 rev 40921
   - 7,006 reglas built-in cargadas en wazuh-analysisd
   - 167 archivos de reglas en /var/ossec/ruleset/rules/
   - Evidencia: 02-server-management-status.png + T1-stack-versions-cli.png

4. Usuario no puede desactivar (PCI 5.3.1):
   - DaemonSet recrea pod si se borra
   - ConfigMap requiere RBAC K8s para modificar
   - /var/ossec/etc/ossec.conf en pod es overlay (cambios se pierden al restart)
   - 4 usuarios reservados en Dashboard (admin, wazuh-wui, kibanaserver, snapshotrestore)
   - Evidencia: 07-security-internal-users.png + T6-rbac-cant-disable-cli.png

5. Log retention 3 meses online + 9 meses offline:
   - ISM policy 'wazuh-pci-90d' aplicada:
     * hot 30d → warm 60d → snapshot+delete a los 90d
   - CronJob daily 03:00 UTC → snapshot a S3-compat (DO Spaces)
   - Bucket: fintrix-wazuh-archive (nyc3, versioning enabled)
   - Retention en Spaces: 270 días (= 9 meses offline)
   - Total: 90d online + 270d offline = 360d = 12 meses
   - Evidencia: 06-ism-policy-90d-retention.png + T3 + T4

6. Ejemplos de resultados:
   - Alertas en /var/ossec/logs/alerts/alerts.log con tags pci_dss_*
   - Rule 510 (rootcheck): hidden file detection
   - Rule 502 (monitord): manager started
   - Visualizables en dashboard → Discover → wazuh-alerts-*
   - Evidencia: 05-server-rules-decoders.png + T5-real-alerts-cli.png

═══════════════════════════════════════════════════════════════════════════
ROTACIÓN DE CREDENCIALES (PENDIENTE — DEBE HACERSE INMEDIATAMENTE)
═══════════════════════════════════════════════════════════════════════════

El stack se desplegó con credenciales default oficiales de Wazuh:
  - admin / SecretPassword       (Indexer + Dashboard admin)
  - wazuh-wui / MyS3cr37P450r.*- (Dashboard → API integration)
  - kibanaserver / kibanaserver  (Dashboard → Indexer integration)
  - kibanaro / kibanaro          (Read-only dashboard role)

Rotación post-screenshots:
  curl -sk -X POST 'https://indexer:9200/_plugins/_security/api/internalusers/admin' \
       -u admin:SecretPassword -H 'Content-Type: application/json' \
       -d '{"password":"<NEW_STRONG_RANDOM>"}'

═══════════════════════════════════════════════════════════════════════════
Fecha de extracción: 2026-05-27
Extraído por: Gabriel Ureña (CTO Fintrixs SAS)
═══════════════════════════════════════════════════════════════════════════
