Skip to content

POL-014: Política de Hardening de Sistemas

CampoValor
IDPOL-014
Versión1.0
Fecha de Emisión2026-03-13
Próxima Revisión2027-03-13
PropietarioCISO / Equipo DevOps
PCI DSSRequisito 2
Preguntas ControlCaseQ20, Q21, Q22, Q23, Q24, Q25, Q26, Q27, Q28, Q29, Q30

1. Propósito

Definir los estándares de hardening (endurecimiento) para todos los sistemas en el entorno de datos de tarjetas, garantizando que los sistemas se configuren de forma segura eliminando servicios innecesarios, cambiando credenciales por defecto y aplicando configuraciones de seguridad antes de su puesta en producción.

2. Alcance

Tipo de SistemaComponentesEntorno
Contenedores Dockernode:20-alpine, postgres:15-alpineTodos
OrquestadorKubernetes (DOKS)Producción
API GatewayKong OSSProducción
Bases de datosPostgreSQL 15 (managed + self-hosted)Todos
VMs de complianceUbuntu 22.04 (CDD, VAPT, Collector)Compliance
CI/CDGitHub Actions runnersCI

3. Fuentes de Hardening (Q20)

3.1 Estándares de Referencia

SistemaFuente de HardeningURL/Referencia
Linux/UbuntuCIS Benchmark for Ubuntu 22.04cisecurity.org
PostgreSQLCIS Benchmark for PostgreSQL 15cisecurity.org
KubernetesCIS Kubernetes Benchmarkcisecurity.org
DockerCIS Docker Benchmarkcisecurity.org
Node.jsOWASP Node.js Security Cheat Sheetowasp.org
KongKong Security Best Practicesdocs.konghq.com
TLSMozilla TLS Configurationssl-config.mozilla.org

3.2 Proceso de Selección de Fuentes

  1. Verificar si existe CIS Benchmark para el componente
  2. Si no existe, usar guías del vendor + NIST SP 800-123
  3. Documentar las configuraciones aplicadas y desviaciones justificadas

4. Eliminación de Defaults y Servicios Innecesarios (Q21, Q22, Q23)

4.1 Credenciales por Defecto

ControlImplementación
Contraseñas por defectoTodas cambiadas antes de poner en producción
Usuarios por defectoDeshabilitados o eliminados si no son necesarios
Claves SSH por defectoReemplazadas con claves generadas específicamente
Community strings SNMPSNMP deshabilitado (no se usa)
Cuentas de vendorDeshabilitadas o renombradas

4.2 Servicios Innecesarios

Principio: Solo habilitar lo estrictamente necesario.

SistemaServicios PermitidosServicios Deshabilitados
Contenedores Node.jsNode.js runtime, aplicaciónSSH, cron, syslog, todo lo demás
PostgreSQL ManagedPostgreSQL (puerto 25060)Todos los demás
KongHTTP proxy (:8000), HTTPS proxy (:8443), Admin API (:8001 — solo interno)Todos los demás
VMs de complianceSSH (:22), servicios de complianceTelnet, FTP, rsh, rlogin, SNMP
Kubernetes nodeskubelet, kube-proxy, container runtimeTodos los demás

4.3 Protocolos Inseguros Prohibidos

ProtocoloEstadoAlternativa
TelnetProhibidoSSH
FTPProhibidoSFTP/SCP
rsh/rloginProhibidoSSH
HTTP (sin TLS)Prohibido para datos sensiblesHTTPS
SSL 2.0/3.0ProhibidoTLS 1.2+
TLS 1.0/1.1ProhibidoTLS 1.2+
SNMP v1/v2cProhibidoSNMP v3 o deshabilitado

4.4 Justificación de Servicios Habilitados

Para cada servicio/protocolo habilitado se documenta:

  • Nombre del servicio
  • Puerto
  • Justificación de negocio
  • Funciones de seguridad implementadas (cifrado, autenticación)
  • Responsable

5. Hardening de Contenedores Docker (Q24)

5.1 Configuraciones Obligatorias del Dockerfile

ControlImplementación
Imagen basenode:20-alpine (imagen mínima)
Usuario no-rootUSER node (nunca ejecutar como root)
Read-only filesystemreadOnlyRootFilesystem: true en K8s securityContext
No privilege escalationallowPrivilegeEscalation: false
Drop all capabilitiesdrop: ["ALL"] en securityContext
No new privilegesseccomp profile default
Multi-stage buildSeparar build de runtime (no incluir devDependencies)
.dockerignoreExcluir node_modules, .git, .env, tests
Health checkHEALTHCHECK configurado
npm ciUsar npm ci --omit=dev (no npm install)

5.2 Ejemplo de securityContext de Kubernetes

yaml
securityContext:
  runAsNonRoot: true
  runAsUser: 1000
  readOnlyRootFilesystem: true
  allowPrivilegeEscalation: false
  capabilities:
    drop: ["ALL"]

6. Hardening de PostgreSQL (Q25)

ControlConfiguración
Autenticaciónscram-sha-256 (no md5 ni trust)
SSLssl = on, ssl_min_protocol_version = 'TLSv1.2'
Usuarios por defectoContraseñas cambiadas, postgres user con acceso restringido
Listen addressesSolo IP interna del cluster (no 0.0.0.0)
pg_hba.confSolo conexiones desde subnets autorizados del CDE
Log connectionslog_connections = on
Log disconnectionslog_disconnections = on
Log statementlog_statement = 'ddl' (mínimo DDL)
Password encryptionpassword_encryption = 'scram-sha-256'
Row Level SecurityHabilitado para tablas multi-tenant

7. Hardening de Kubernetes (Q26)

ControlConfiguración
RBACHabilitado con roles de menor privilegio
Network PoliciesImplementadas por namespace (ver POL-002)
Pod Security Standardsrestricted para CDE namespace
SecretsCifrados at-rest (DO managed encryption)
API ServerSolo acceso con credenciales válidas
DashboardDeshabilitado en producción
etcdCifrado habilitado (gestionado por DO)
Audit loggingHabilitado para eventos de seguridad
Service accountsToken automounting deshabilitado donde no se necesita
Image pull policyAlways para imágenes de producción

8. Hardening de Kong Gateway (Q27)

ControlConfiguración
Admin APISolo accesible desde red interna (loopback o pod local)
TLSObligatorio para proxy (:8443)
Rate limitingPlugin configurado por ruta
IP restrictionPlugin para APIs sensibles
Bot detectionPlugin habilitado
Request size limitingLimitado a 10MB max
CORSConfigurado con orígenes específicos
Response headersX-Frame-Options, X-Content-Type-Options, Strict-Transport-Security
Error responsesSin información de debug en producción
LoggingAccess log + error log a stdout

9. Funciones de un Solo Propósito por Servidor (Q28)

9.1 Principio

Cada contenedor/pod ejecuta una sola función:

ContenedorFunción Única
auth-serviceAutenticación y autorización
tokenization-serviceTokenización de PAN
card-vault-serviceAlmacenamiento seguro de tokens
payments-apiProcesamiento de pagos
kongAPI Gateway
postgresqlBase de datos (una instancia por BD)
prometheusRecolección de métricas
grafanaVisualización
alertmanagerGestión de alertas

9.2 Cuando Múltiples Funciones Coexisten

Si por necesidad técnica dos funciones deben coexistir en un pod:

  • Documentar justificación técnica
  • Implementar controles de aislamiento adicionales (securityContext separado, network policy restrictiva)
  • Aprobar por CISO

10. Parámetros de Seguridad del Sistema (Q29, Q30)

10.1 Parámetros Configurados

CategoríaParámetroValor
Kernel (sysctl)net.ipv4.ip_forwardSegún necesidad de K8s
Kernelnet.ipv4.conf.all.accept_redirects0
Kernelnet.ipv4.conf.all.send_redirects0
Node.js--max-old-space-sizeLimitado según pod resources
Kongproxy_access_logHabilitado
PostgreSQLshared_preload_librariesSolo extensiones necesarias

10.2 Documentación de Parámetros

Cada parámetro de seguridad configurado incluye:

  • Nombre del parámetro
  • Valor configurado
  • Justificación
  • Impacto si se cambia
  • Referencia al estándar de hardening

11. Proceso de Hardening para Nuevos Sistemas

  1. Antes de desplegar un nuevo componente:
    • Identificar CIS Benchmark o guía de hardening aplicable
    • Crear checklist de hardening
  2. Aplicar configuraciones de hardening
  3. Verificar con herramienta automatizada (si disponible)
  4. Documentar configuración final
  5. Revisar por segundo par de ojos (DevOps peer review)
  6. Aprobar antes de poner en producción
  7. Escanear vulnerabilidades post-hardening

12. Revisión Periódica

ActividadFrecuenciaResponsable
Verificar configuraciones de hardeningSemestralDevOps
Re-evaluar estándares CIS (nuevas versiones)AnualCISO + DevOps
Verificar credenciales por defecto en nuevos componentesEn cada despliegueDevOps
Auditoría de servicios habilitadosTrimestralDevOps

Historial de Revisiones

VersiónFechaAutorCambios
1.02026-03-13DevOps / CISODocumento inicial

Aprobación

RolNombreFirmaFecha
CISO / Oficial de Seguridad__________________________________//____
Gerencia Ejecutiva__________________________________//____

Documentación Confidencial — Solo para uso interno y auditoría PCI DSS