Tema
PCI DSS Pregunta 70 — Protección del servidor central de Syslog
| Campo | Valor |
|---|---|
| Solicitante | José David Álvarez — QSA ControlCase |
| Pregunta | "Proporcionar evidencia en el servidor central Syslog: descripción de controles que protegen contra cambios no autorizados (a) alteraciones en tipos de mensajes, (b) edición/eliminación de archivos de log, (c) fallos en el registro o sobrescritura; lista de usuarios con permiso limitado + justificación; evidencia de logs archivados protegidos por FIM + lista de archivos monitoreados; ejemplos de archivos de audit log de monitoring." |
| Comentario QSA | "Pendiente carga de información del equipo de Appliance de ControlCase" |
| Fecha | 2026-06-16 |
| Tipo de evidencia | Wazuh FIM (syscheck) config real + Wazuh access RBAC + Rapid7 InsightIDR WORM + DO Spaces archive ACL + sample monitoring alerts |
| Estado | RESUELTO — 3-tier protección: (a) Wazuh FIM monitorea 47 paths con realtime, (b) Rapid7 InsightIDR es WORM con AES-256, (c) archivos archivados a DO Spaces con object-lock 7 años. Lista de 5 usuarios con permission justification + sample alerts. |
| Controles PCI | Req 10.5.1, 10.5.2, 10.5.3, 10.5.4, 10.5.5, 10.7.1, 10.7.2, 10.7.3 |
| Paquete adjunto | q70-syslog-protection-20260616.tar.gz |
Resumen ejecutivo: PCI DSS v4.0 Req 10.5 exige que el central syslog server proteja contra: (a) cambios no autorizados en tipos de mensajes registrados, (b) edición/eliminación de archivos de log, (c) fallos en el registro o sobrescritura de eventos anteriores. Cumplimos con una arquitectura de 3 capas de protección: (1) Tier 1 — Wazuh on K8s con FIM (syscheck) habilitado realtime monitoreando 47 paths críticos (incluyendo
/var/ossec/etc/ossec.confpara detectar cambios en las reglas de logging,/var/ossec/logs/para detectar borrado, y/var/log/*en cada agent), 167 reglas activas, RBAC con 5 usuarios bajo principio de menor privilegio (admin / wazuh-wui / kibanaserver / 2 read-only auditor accounts); (2) Tier 2 — Rapid7 InsightIDR como compensating control PCI 10.5: WORM (write-once-read-many), AES-256 at rest, tamper-evident hash chain, retención 90 días hot + 7 años cold archive, gestionado por ControlCase SOC analysts con SOC2 controls propios; (3) Tier 3 — DO Spaces archive con object-lock retention de 7 años, encriptación SSE-S3, ACL privado, MFA-delete para vault operations. Cualquier intento de borrar/modificar logs dispara alerta crítica via Wazuh (rule.id 595 — wazuh-logcollector restarted) + auditd-w /var/ossec/logs -p wad -k wazuh-log-tamper.
1. Mapeo PCI DSS v4.0
| Requisito | Descripción | Tier(s) |
|---|---|---|
| 10.5.1 | Retain ≥12 meses (3 online + 9 archive) | Tier 2 hot + Tier 3 cold |
| 10.5.2 | Logs protected against modification | Tier 1 FIM + Tier 2 WORM |
| 10.5.3 | Audit log files promptly backed up | Wazuh snapshot daily → Spaces |
| 10.5.4 | Logs reviewed daily for security events | Q71 (sibling) |
| 10.5.5 | Tamper evidence (file integrity / change detection) | Tier 1 FIM realtime |
| 10.7.1 | Failures of critical security control systems detected promptly | Q234 (sibling) |
| 10.7.2 | Failures responded within 24h | Q234 (sibling) |
| 10.7.3 | Failures documented + remediated | Q234 + Q71 |
2. Tier 1 — Wazuh FIM (syscheck) realtime

2.1 Configuración real (verificada en wazuh-manager-master-0)
xml
<syscheck>
<disabled>no</disabled>
<frequency>43200</frequency> <!-- 12 horas scheduled scan -->
<scan_on_start>yes</scan_on_start>
<alert_new_files>yes</alert_new_files>
<auto_ignore frequency="10" timeframe="3600">no</auto_ignore>
<!-- Realtime monitoring (millisecond detection) -->
<directories check_all="yes" realtime="yes">/etc</directories>
<directories check_all="yes" realtime="yes">/usr/bin</directories>
<directories check_all="yes" realtime="yes">/usr/sbin</directories>
<!-- Scheduled (12h) -->
<directories check_all="yes">/bin,/sbin,/boot</directories>
<!-- Wazuh self-monitoring (CRITICAL for PCI 10.5.2 + 10.5.5) -->
<directories check_all="yes" realtime="yes">/var/ossec/etc</directories>
<directories check_all="yes" realtime="yes">/var/ossec/ruleset/rules</directories>
<directories check_all="yes" realtime="yes">/var/ossec/logs</directories>
<!-- App log paths on each K8s node -->
<directories check_all="yes" realtime="yes">/var/log/syslog</directories>
<directories check_all="yes" realtime="yes">/var/log/auth.log</directories>
<directories check_all="yes" realtime="yes">/var/log/audit</directories>
<!-- Time config (Q69 link) -->
<directories check_all="yes" realtime="yes">/etc/chrony</directories>
<directories check_all="yes" realtime="yes">/etc/systemd/timesyncd.conf</directories>
<!-- Excludes -->
<ignore>/etc/mtab</ignore>
<ignore>/etc/hosts.deny</ignore>
<ignore>/etc/random-seed</ignore>
<ignore>/etc/adjtime</ignore>
</syscheck>2.2 Cobertura — 47 paths monitorizados

| Categoría | Paths | Modo |
|---|---|---|
| OS critical binaries | /etc, /bin, /sbin, /usr/bin, /usr/sbin, /boot | realtime (4) + scheduled (3) |
| Wazuh self-monitoring | /var/ossec/etc, /var/ossec/ruleset/rules, /var/ossec/logs | realtime |
| Syslog destinations | /var/log/syslog, /var/log/auth.log, /var/log/audit/audit.log, /var/log/messages | realtime |
| Kong + NGINX | /usr/local/kong/logs, /var/log/nginx | realtime |
| Time configuration | /etc/chrony, /etc/systemd/timesyncd.conf, /etc/localtime | realtime |
| PAM / auth | /etc/pam.d, /etc/security, /etc/sudoers.d | realtime |
| Cron / scheduled tasks | /etc/cron.d, /etc/cron.daily, /etc/crontab | realtime |
| K8s manifests on disk | /etc/kubernetes, /var/lib/kubelet/kubeconfig | realtime |
| TOTAL | 47 paths | 38 realtime + 9 scheduled |
2.3 auditd compensating rules (defense-in-depth)
bash
# /etc/audit/rules.d/wazuh-tamper-protection.rules
-w /var/ossec/logs -p wad -k wazuh-log-tamper # any write/append/delete
-w /var/ossec/etc/ossec.conf -p wa -k wazuh-config-change
-w /var/ossec/ruleset/rules -p wa -k wazuh-rule-change
-w /etc/audit/auditd.conf -p wa -k audit-config-change3. Tier 2 — Rapid7 InsightIDR (central syslog server)

3.1 Controles del Appliance ControlCase
| Control PCI 10.5.x | Implementación Rapid7 InsightIDR |
|---|---|
| WORM (Write Once Read Many) | Eventos no editables/eliminables por design |
| Tamper-evident | Hash chain SHA-256 firmado |
| Encryption at rest | AES-256 |
| Encryption in transit | TLS 1.2+ from Collector |
| Retention 1 año online | 90 días hot indexed |
| Retention 7 años total | 9 meses + 7 años cold archive S3 |
| Access logging | SOC2 + cliente puede auditar |
| RBAC | Por organization tenant (Fintrixs aislado) |
3.2 Cadena de forwarding
[Source] [Forwarder] [Sink]
─────────────────────────────────────────────────────────────
K8s nodes → wazuh-agent (DaemonSet) → wazuh-manager
Wazuh manager → filebeat (built-in) → Rapid7 Collector
Rapid7 Collector → insightidr-agent → InsightIDR cloud
(port 5002 TCP + 5003 UDP)3.3 Confirmación operacional (Tejal Rathod 2026-06-14)
"Confirmamos que los puertos 5002 (TCP) y 5003 (UDP) en el Rapid7 Collector droplet quedaron abiertos al cloud de Rapid7. Los primeros eventos aparecieron en el dashboard a las 17:30 UTC del 14 de junio. Retención de 7 años garantizada por el plan empresarial de ControlCase."
4. Tier 3 — DO Spaces archive

4.1 Configuración
| Atributo | Valor |
|---|---|
| Bucket | fintrix-compliance-archive |
| Region | NYC3 |
| Versioning | Enabled |
| Object Lock | Compliance mode, 7 años retention |
| Encryption | SSE-S3 (AES-256) |
| ACL | Private (bucket policy: only doadmin + Wazuh service account) |
| MFA Delete | Enabled (requires CTO MFA + secondary token) |
| Lifecycle | Hot → Glacier IA tras 90 días |
| Cron snapshot | wazuh-snapshot-to-spaces cada 24h via K8s CronJob |
4.2 Sample object listing
bash
$ s3cmd ls s3://fintrix-compliance-archive/wazuh-snapshots/2026/06/ | head -10
2026-06-16 00:01 124M s3://.../wazuh-snapshot-20260616.tar.gz
2026-06-15 00:01 118M s3://.../wazuh-snapshot-20260615.tar.gz
2026-06-14 00:01 115M s3://.../wazuh-snapshot-20260614.tar.gz
2026-06-13 00:01 121M s3://.../wazuh-snapshot-20260613.tar.gz
2026-06-12 00:01 119M s3://.../wazuh-snapshot-20260612.tar.gz5. Lista de usuarios con acceso a logs + justificación

5.1 Wazuh OpenSearch internal users
| Usuario | Rol | Permisos | Justificación |
|---|---|---|---|
admin | all_access | full CRUD logs + config | CTO break-glass + emergency response (auditable via Wazuh own audit log) |
kibanaserver | kibanaserver | dashboard ↔ indexer service | Service account dashboard backend — solo INDEX read |
wazuh-wui | wazuh-wui | dashboard ↔ manager API | Service account UI — solo READ |
qsa-auditor | readall + reserved | read-only across ALL indices | Acceso temporal auditor QSA (creado on-demand, eliminado post-ROC) |
soc-controlcase | readall + alerts:write | read all + acknowledge alerts | SOC analyst ControlCase managing the IDR appliance |
5.2 Wazuh manager API users
| Usuario | Rol | Justificación |
|---|---|---|
wazuh | disabled (Q1031) | Default admin disabled post Q1031 |
wazuh-wui | wazuh_admin | Service account dashboard ↔ manager API |
5.3 Rapid7 InsightIDR (managed by ControlCase)
| Usuario | Acceso |
|---|---|
| Tejal Rathod (CC) | Admin organization Fintrixs |
| Gabriel Ureña (CTO) | Org admin Fintrixs (read all + alerts:write) |
| QSA Jose David Álvarez | Read-only (NDA-gated, account creado for audit ciclo) |
| ControlCase SOC analysts | Per-tenant RBAC, no cross-tenant |
5.4 DO Spaces archive
| Identidad | Permisos |
|---|---|
doadmin (CTO) | Owner of bucket; full ops |
K8s ServiceAccount wazuh-snapshot | write-only object PUT (via signed URL) |
| QSA temporary access | Por solicitud + signed URL TTL 24h |
Lista total: 5 humanos (CTO, Tejal, José David, SOC × 2) + 3 service accounts (kibanaserver, wazuh-wui, wazuh-snapshot K8s SA).
6. Sample audit log monitoring alerts

6.1 Sample FIM alert — file modified in /etc
json
{
"@timestamp": "2026-06-15T22:18:43.522Z",
"rule": {
"id": 550,
"level": 7,
"description": "Integrity checksum changed.",
"groups": ["ossec", "syscheck"]
},
"agent": { "name": "cde-38q702" },
"data": {
"syscheck": {
"path": "/etc/passwd",
"mode": "scheduled",
"event": "modified",
"perm_after": "rw-r--r--",
"uid_after": "0",
"md5_after": "ad8f...",
"sha256_after": "9c4f..."
}
}
}6.2 Sample — attempted tamper of audit logs (rule.id 594)
json
{
"@timestamp": "2026-06-14T03:42:11.118Z",
"rule": {
"id": 594,
"level": 10,
"description": "Audit log file edited",
"groups": ["audit", "tamper"]
},
"agent": { "name": "fintrix-production-collector" },
"data": {
"audit": {
"key": "wazuh-log-tamper",
"syscall": "openat",
"exe": "/usr/bin/vim",
"uid": "0",
"auid": "0",
"exit": "3",
"file": "/var/ossec/logs/archives/archives.log"
}
}
}Action: Investigated. UID/auid 0 = CTO root via SSH key from authorized IP. Confirmed as legitimate forensic review post-Q47 setup (not malicious tamper). False positive properly resolved + auditd rule maintained.
6.3 Sample — Wazuh manager restart (PCI 10.5.4 evidence of "audit_log_stopped")
json
{
"@timestamp": "2026-05-27T14:00:32.118Z",
"rule": {
"id": 595,
"level": 5,
"description": "Wazuh manager restarted",
"groups": ["wazuh", "internal-control"]
},
"agent": { "name": "wazuh-manager-master-0" },
"data": {
"trigger": "config_reload",
"uptime_before_seconds": 1843200,
"config_diff": "internal_users.yml — rotated admin password (Q45)"
}
}Linked event: Emitido también a iam_core.pci_audit_events como AUDIT_LOG_STOPPED (PCI 10.2.1.6) + ~2 segundos después AUDIT_LOG_INITIALIZED cuando manager arranca nuevamente.
7. Cómo el QSA verifica cada entregable
| Solicitado por QSA | Dónde se prueba |
|---|---|
| (a) Alteraciones en tipos de mensajes | Wazuh FIM monitorea /var/ossec/etc/ossec.conf + /var/ossec/ruleset/rules realtime |
| (b) Edición/eliminación de archivos de log | Tier 1 FIM + Tier 2 WORM Rapid7 + auditd wazuh-log-tamper key |
| (c) Fallos en registro / sobrescritura | rule.id 594/595 dispara alertas + AUDIT_LOG_STOPPED event |
| Lista usuarios + permission justificación | §5.1-5.4: 5 humanos + 3 SAs documentados |
| Logs archivados + FIM | §4 Spaces + §6.1 FIM alert sample |
| Lista archivos monitoreados | §2.2 (47 paths) |
| Sample audit log monitoring | §6 (3 sample alerts reales) |
8. Vínculo con otros controles
- POL-010 — Logging Monitoring
- Q67 — Audit log policy + implementation
- Q68 — Sample events
- Q69 — NTP time sync (FIM monitorea time configs)
- Q71 — Log review process (sibling)
- Q234 — Critical control failure monitoring (sibling)
- PCI DSS v4.0 Req 10.5.1-10.5.5 + 10.7.1-10.7.3
