Comprehensive documentation for TZZR system v5 including: - 00_VISION: Glossary and foundational philosophy - 01_ARQUITECTURA: System overview and server specs - 02_MODELO_DATOS: Entity definitions and data planes (T0, MST, BCK) - 03_COMPONENTES: Agent docs (CLARA, MARGARET, FELDMAN, GRACE) - 04_SEGURIDAD: Threat model and secrets management - 05_OPERACIONES: Infrastructure and backup/recovery - 06_INTEGRACIONES: GPU services (RunPod status: blocked) - 99_ANEXOS: Repository inventory (24 repos) Key findings documented: - CRITICAL: UFW inactive on CORP/HST - CRITICAL: PostgreSQL 5432 exposed - CRITICAL: .env files with 644 permissions - RunPod workers not starting (code ready in R2) - Infisical designated as single source of secrets (D-001) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
4.3 KiB
Modelo de Amenazas TZZR
Versión: 5.0 Fecha: 2024-12-24
Resumen Ejecutivo
El sistema TZZR tiene una base de seguridad sólida (SSH keys, PostgreSQL SSL, tokens de autenticación) pero presenta exposiciones críticas que requieren atención inmediata.
Hallazgos Críticos
CRÍTICO-001: CORP/HST sin Firewall
Descripción: UFW inactivo en servidores CORP y HST.
Impacto: Todos los puertos expuestos a Internet.
Evidencia: ufw status devuelve "inactive".
Mitigación:
# CORP
ufw default deny incoming
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable
# HST
ufw default deny incoming
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable
CRÍTICO-002: PostgreSQL 5432 Expuesto
Descripción: PostgreSQL en ARCHITECT escucha en 0.0.0.0:5432. Impacto: Accesible desde cualquier IP (aunque requiere autenticación).
Mitigación:
# /etc/postgresql/16/main/postgresql.conf
listen_addresses = '127.0.0.1,172.17.0.1'
CRÍTICO-003: Archivos .env Legibles
Descripción: Archivos .env con permisos 644 (legibles por todos). Impacto: Credenciales accesibles a cualquier usuario del sistema.
Mitigación:
chmod 600 /opt/clara/.env
chmod 600 /opt/alfred/.env
chmod 600 /opt/margaret/.env
chmod 600 /opt/mason/.env
Hallazgos Altos
ALTO-001: fail2ban No Configurado
Descripción: fail2ban failed en DECK, inactive en CORP. Impacto: SSH bruteforce sin mitigación automática. Evidencia: Ataques activos desde 165.232.81.204, 188.166.115.48.
Mitigación:
apt install fail2ban
systemctl enable fail2ban
# jail: sshd, maxretry=3, bantime=1h
ALTO-002: Triple Gestión de Secretos
Descripción: Credenciales en Infisical, tablas creds_*, y archivos .env. Impacto: No hay fuente única de verdad, riesgo de desincronización.
Mitigación:
- Migrar todas las credenciales a Infisical
- Eliminar .env hardcodeados
- creds_* solo para referencia
ALTO-003: Servicios sin TLS Interno
Descripción: CLARA, MARGARET, MASON, FELDMAN en HTTP plano. Impacto: Tráfico interno sin cifrar.
Mitigación:
- Configurar mTLS entre servicios
- Usar Caddy como reverse proxy con TLS
Hallazgos Medios
MEDIO-001: No hay Backup PostgreSQL
Descripción: Solo Gitea tiene backup en R2, PostgreSQL sin backup. Impacto: Pérdida de datos en caso de fallo.
Mitigación:
# Cron diario
pg_dump architect | gzip | aws s3 cp - s3://architect/backups/architect_$(date +%F).sql.gz
MEDIO-002: SENTINEL No Desplegado
Descripción: Sistema de auditoría planificado pero no implementado. Impacto: Sin visibilidad de anomalías.
Mitigación: Implementar SENTINEL LIGHT mode básico.
MEDIO-003: No hay Rotación de Secretos
Descripción: Sin política de rotación de credenciales. Impacto: Credenciales comprometidas persisten indefinidamente.
Mitigación:
- API keys: 90 días
- DB passwords: 180 días
- SSH keys: 365 días
Controles Existentes
| Control | Estado | Notas |
|---|---|---|
| SSH Keys | Activo | Permisos 600 correctos |
| PostgreSQL SSL | Activo | SCRAM-SHA-256 |
| H_INSTANCIA Auth | Activo | CLARA/MARGARET |
| Gitea Tokens | Activo | Lectura/Escritura separados |
| DECK UFW | Activo | Política deny incoming |
Matriz de Riesgos
| ID | Riesgo | Probabilidad | Impacto | Prioridad |
|---|---|---|---|---|
| CRÍTICO-001 | Firewall desactivado | Alta | Alto | Semana 1 |
| CRÍTICO-002 | PostgreSQL expuesto | Media | Alto | Semana 1 |
| CRÍTICO-003 | .env legibles | Alta | Alto | Semana 1 |
| ALTO-001 | Sin fail2ban | Alta | Medio | Semana 1 |
| ALTO-002 | Secretos duplicados | Media | Medio | Mes 1 |
| ALTO-003 | Sin TLS interno | Baja | Medio | Mes 1 |
| MEDIO-001 | Sin backup PG | Baja | Alto | Mes 1 |
| MEDIO-002 | Sin SENTINEL | Baja | Medio | Mes 2 |
| MEDIO-003 | Sin rotación | Baja | Medio | Mes 2 |
Plan de Remediación
Semana 1 (Urgente)
- Activar UFW en CORP y HST
- chmod 600 en todos los .env
- Instalar fail2ban
- PostgreSQL bind 127.0.0.1
Mes 1 (Alta)
- Migrar secretos a Infisical
- TLS interno
- Backup PostgreSQL automatizado
Mes 2 (Media)
- SENTINEL LIGHT mode
- Política de rotación
- Monitoreo de certificados