docs(v5): Complete system documentation
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>
This commit is contained in:
177
04_SEGURIDAD/modelo-amenazas.md
Normal file
177
04_SEGURIDAD/modelo-amenazas.md
Normal file
@@ -0,0 +1,177 @@
|
||||
# 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:**
|
||||
```bash
|
||||
# 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:**
|
||||
```bash
|
||||
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:**
|
||||
```bash
|
||||
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:**
|
||||
```bash
|
||||
# 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
|
||||
Reference in New Issue
Block a user