Las dos lecciones anteriores han sido un inventario del problema: los ataques técnicos ordenados por fase de la cadena y el vector humano con toda su casuística. Esta lección es el inventario de la respuesta. Vamos a recorrer el catálogo de defensas que contrarresta lo visto, organizado por las capas de la defensa en profundidad que estableciste en 01-03: perímetro y red, endpoint, dato, aplicación y ciclo de desarrollo, y registro y observabilidad. De cada medida verás qué hace, cuándo se usa y qué ataque concreto neutraliza; la implementación detallada corresponde al módulo 5 y aquí solo se enlaza. Y como el presupuesto de Nimbus no es infinito, la lección termina con lo más útil de todo: una tabla de las doce medidas de mayor retorno con su coste, esfuerzo e impacto, y un plan por fases de 30, 90 y 180 días que Marta podría aprobar el lunes.
Contenido
- Cómo elegir defensas: tres criterios antes de gastar un euro
- Protección del perímetro y de la red
- Protección del endpoint
- Protección del dato
- Protección de la aplicación y del ciclo de desarrollo
- El registro y la observabilidad como medida de protección
- Priorizar con presupuesto de PYME: las 12 medidas de mayor retorno
- Plan por fases: 30, 90 y 180 días
- Cómo elegir defensas: tres criterios antes de gastar un euro
Antes del catálogo, el método. La forma más habitual de gastar mal en seguridad es comprar lo que se anuncia y no lo que falta.
Criterio 1: ¿qué ataque concreto neutraliza? Toda medida debe poder asociarse a una entrada de la tabla resumen de 02-02 o del catálogo de 02-03. Si no sabes qué ataque para, no sabes si te hace falta.
Criterio 2: ¿en qué fase de la cadena actúa y qué otras capas tengo ahí? Recuerda la Kill Chain de 02-01: si todas tus medidas actúan en la misma fase, tienes una defensa gruesa por un lado y desnuda por el otro.
Criterio 3: ¿qué tipo de control es? Los controles se clasifican por función, y una defensa sana tiene de los cuatro tipos:
| Tipo | Qué hace | Ejemplo en Nimbus |
|---|---|---|
| Preventivo | Impide que ocurra | MFA, consultas parametrizadas, cortafuegos |
| Detectivo | Avisa de que está ocurriendo | Alerta de exportación masiva, registro de auditoría |
| Correctivo | Reduce el daño o restaura | Restauración de copias, revocación de tokens |
| Disuasorio | Desincentiva el intento | Banner legal, aviso de sesión registrada |
El desequilibrio típico ya lo diagnosticaste con el NIST CSF en 02-01: casi todo preventivo, casi nada detectivo. Es cómodo porque lo preventivo se compra e instala una vez, mientras que lo detectivo exige que alguien mire. Pero cuando la prevención falla —y fallará— lo único que limita el daño es la detección.
Un cuarto criterio, informal pero decisivo en una PYME: ¿esta medida sobrevive a un mal día? Una defensa que exige diez minutos diarios de disciplina de alguien saturado no durará tres semanas. Las medidas que funcionan en Nimbus son las que están por defecto, automatizadas o en el camino natural del trabajo.
- Protección del perímetro y de la red
El perímetro clásico ha perdido peso —la mitad de la plantilla trabaja en remoto y los datos están en la nube— pero no ha desaparecido: sigue siendo la primera línea contra el escaneo masivo de 02-02.
2.1 Cortafuegos: qué tipo hace falta y para qué
| Tipo | Qué inspecciona | Qué para | Dónde encaja en Nimbus |
|---|---|---|---|
| Filtrado de paquetes | IP, puerto, protocolo | Acceso a servicios que no deben ser alcanzables | Los grupos de seguridad del proveedor cloud; es lo que faltó en el 0.0.0.0/0 del puerto 22 |
| Con estado (stateful) | Lo anterior + el estado de la conexión | Paquetes que no pertenecen a una conexión establecida | Estándar en cualquier cortafuegos moderno |
| De nueva generación (NGFW) | Aplicación e identidad, no solo puerto | Tráfico legítimo por el puerto 443 pero hacia destinos indebidos | Router de la oficina de Valencia |
| De aplicación web (WAF) | Peticiones HTTP: cuerpo, parámetros, cabeceras | Inyección SQL, XSS, recorrido de rutas, bots | Delante de la API (A-04) |
Sobre el WAF, con precisión, porque es la medida más malinterpretada de todas: un WAF compra tiempo, no corrige código. Es extraordinariamente útil para tres cosas: frenar el ruido de fondo automatizado, aplicar un parche virtual mientras se corrige una vulnerabilidad recién descubierta, y aportar visibilidad de lo que se intenta contra la API. Lo que no hace: sustituir a las consultas parametrizadas ni detectar un IDOR, porque una petición IDOR está perfectamente bien formada. Si Nimbus instala un WAF y con ello relaja la revisión de código, ha empeorado.
2.2 Segmentación
Qué es. Dividir la red en zonas con control entre ellas, de modo que comprometer una no dé acceso a las demás.
flowchart TB
INT["INTERNET"] --> DMZ["ZONA PUBLICA\nBalanceador + WAF"]
DMZ --> APP["ZONA DE APLICACION\nAPI, workers\nSin acceso directo desde Internet"]
APP --> DAT["ZONA DE DATOS\nPostgreSQL, Redis\nSolo accesible desde la zona de aplicacion"]
OFI["OFICINA VALENCIA\nWifi corporativa"] -->|"solo via bastion + MFA"| APP
INV["WIFI INVITADOS\nAislada, sin acceso interno"] --> INT
CONS["CONSULTORA EXTERNA"] -->|"acceso just-in-time, con caducidad"| APP
Por qué es la medida más rentable contra el ransomware. La cronología de 02-02 mostraba que el atacante pasa días moviéndose lateralmente. La segmentación es lo que convierte «entraron en un portátil» en «entraron en un portátil» y no en «cifraron toda la infraestructura». Tres reglas prácticas para Nimbus:
- La wifi de invitados no toca nada interno. Es un control de cinco minutos en el router y elimina una clase entera de riesgo.
- La zona de datos solo acepta conexiones de la zona de aplicación. Nunca desde la oficina ni desde Internet. Esto ya lo comprobaste con
describe-security-groupsen 01-04. - El acceso administrativo pasa siempre por un punto único (bastión o VPN con MFA), que es el único sitio donde hay que vigilar de verdad.
2.3 Protección anti-DDoS
Contra el volumétrico, la defensa se contrata: el proveedor cloud o una CDN absorben el tráfico antes de que llegue al enlace de Nimbus. Es una de las pocas defensas que realmente no se puede construir con recursos propios, porque requiere capacidad de red.
Contra el aplicativo, la defensa se programa, y ya la viste en 02-02: paginación obligatoria, límites de rango de negocio, límite de tasa y tiempo máximo de consulta. Ningún servicio anti-DDoS distingue una petición cara de una barata: para él, ambas son una petición HTTPS legítima.
2.4 VPN y acceso remoto seguro
Con 19 personas fuera de la oficina, el acceso remoto es el perímetro de Nimbus.
| Modelo | Cómo funciona | Ventaja | Problema |
|---|---|---|---|
| VPN tradicional | El equipo entra en la red interna y accede a todo | Sencilla y conocida | Acceso «todo o nada»: una credencial comprometida da la red entera. Es el caso de Colonial Pipeline que veremos en 02-06 |
| Bastión / jump host | Punto único de salto con MFA y registro | Un solo punto que vigilar y auditar | Requiere disciplina de uso |
| Acceso Zero Trust por aplicación | Se autoriza aplicación por aplicación, verificando identidad y estado del dispositivo en cada petición | No hay «dentro»; el compromiso no da red | Mayor coste inicial de configuración |
Recomendación para Nimbus: MFA obligatorio en el acceso remoto (sin excepciones, incluida la consultora), bastión con registro de sesión para el acceso administrativo, y acceso just-in-time con caducidad para terceros en lugar del acceso permanente actual del activo A-19. El detalle de identidad va en 02-05; la configuración de red, en 05-04.
- Protección del endpoint
Los 40 portátiles (A-14) son donde trabajan las personas, y por tanto donde aterriza el phishing de 02-03.
3.1 Antivirus frente a EDR
| Aspecto | Antivirus tradicional | EDR (detección y respuesta en el endpoint) |
|---|---|---|
| Detecta por | Firmas de ficheros conocidos | Comportamiento: qué hace un proceso, con quién habla, qué modifica |
| Cubre | Malware conocido | Ataques sin fichero, uso indebido de herramientas legítimas, movimiento lateral |
| Aporta | Bloqueo | Bloqueo + telemetría e historial para investigar |
| Permite | — | Aislar remotamente un equipo comprometido |
| Coste | Bajo | Medio; requiere que alguien atienda las alertas |
Por qué importa la diferencia en el caso de Nimbus. Repasa el ejercicio 3 de 02-03: el portátil de Rubén ejecuta un componente que establece un canal saliente y roba la cookie del navegador. Un antivirus de firmas puede no ver nada, porque el fichero es nuevo y porque buena parte de la actividad usa herramientas legítimas del sistema. Un EDR ve el patrón: un proceso ofimático lanzando un intérprete de comandos, un acceso al almacén de credenciales del navegador, una conexión saliente a un dominio recién registrado. Y, sobre todo, permite aislar el equipo con un clic y reconstruir después qué pasó.
La advertencia realista: un EDR cuyas alertas nadie mira es un gasto, no una defensa. Antes de comprarlo hay que decidir quién lo atiende y cuándo. Para Nimbus, la opción sensata suele ser un EDR con servicio gestionado de vigilancia, o un EDR bien configurado con pocas alertas y muy accionables.
3.2 Las otras tres medidas de endpoint
| Medida | Qué ataque para | Detalle práctico para Nimbus |
|---|---|---|
| Cifrado de disco completo | Robo o pérdida física de un portátil | Activado en los 40 equipos, con custodia centralizada de las claves de recuperación. Sin custodia, un empleado que olvida su clave provoca una pérdida de datos autoinfligida |
| Gestión de parches | Explotación de vulnerabilidades conocidas —el vector de WannaCry y Equifax (02-06) | Actualizaciones automáticas del sistema y del navegador; plazo comprometido para las críticas (7 días es un objetivo razonable); inventario que permita saber qué versión tiene cada equipo |
| Control de aplicaciones | Ejecución de software no autorizado, incluido el USB de baiting | Permitir solo aplicaciones aprobadas; bloquear macros de origen externo; bloquear la ejecución desde carpetas temporales y desde dispositivos extraíbles |
La medida más infravalorada de las tres es el parcheo. No es vistosa, no se puede enseñar a un cliente y no aparece en ningún folleto comercial. Pero dos de los mayores incidentes de la historia reciente —los que analizaremos en 02-06— fueron vulnerabilidades conocidas y con parche disponible durante meses. El hardening y la gestión del endpoint en detalle se estudian en 05-06.
- Protección del dato
Las capas anteriores protegen contenedores. Esta protege lo que hay dentro, y es la única que sigue sirviendo cuando las demás fallan.
4.1 Clasificación: el prerrequisito
No se puede proteger de forma diferenciada lo que no está clasificado. Ya lo hiciste en 01-04 con los cuatro niveles (público, interno, confidencial, restringido) y sus tres reglas: herencia hacia arriba, agregación que sube el nivel y contexto que define la sensibilidad. La clasificación no es una medida en sí misma: es lo que hace posible aplicar el resto sin arruinarse.
4.2 Cifrado en tránsito y en reposo
| Dónde | Qué protege | Estado en Nimbus |
|---|---|---|
| En tránsito, externo | Escucha entre el cliente y la API | TLS 1.3 con HSTS: hecho |
| En tránsito, interno | Escucha en la red privada (flujo F3 del DFD) | Pendiente: TLS también entre balanceador y API |
| En reposo, base de datos | Acceso al disco o al volumen | Cifrado del volumen con claves gestionadas: hecho |
| En reposo, bucket | Acceso al almacenamiento de objetos | Cifrado del lado del servidor con clave gestionada: hecho |
| En reposo, copias | Robo de una copia | Crítico: la copia contiene todo. Cifrada y con clave distinta de la de producción |
| A nivel de campo | Acceso legítimo a la base de datos que no debería ver ciertos campos | Valorar para los campos más sensibles |
Dos precisiones que evitan falsas sensaciones de seguridad:
- El cifrado en reposo del proveedor protege contra el robo del medio físico, no contra un atacante con credenciales válidas. Si el atacante tiene acceso a la base de datos, el motor le devuelve los datos descifrados: para eso está la clave. No protege contra el IDOR ni contra el ransomware operado con credenciales robadas.
- La clave es el activo real. Cifrar con una clave que está en el mismo sitio que el dato es un ejercicio decorativo. La gestión de claves —dónde viven, quién accede, cómo se rotan— es el problema difícil, y se estudia en 03-06.
Los mecanismos criptográficos se desarrollan en el módulo 3; aquí interesa dónde aplicarlos.
4.3 Copias de seguridad: la regla 3-2-1 y la inmutabilidad
Es la medida más importante de toda la lección, porque es la única que devuelve el negocio cuando todo lo demás ha fallado.
La regla 3-2-1:
- 3 copias de los datos (la de producción y dos más).
- En 2 soportes o tecnologías distintas.
- 1 de ellas fuera del alcance de la infraestructura principal.
La ampliación moderna, 3-2-1-1-0, que es la que importa contra el ransomware:
- 1 copia inmutable o desconectada.
- 0 errores en la prueba de restauración.
Por qué la inmutabilidad es la pieza decisiva. Recuerda la cronología del ransomware de 02-02: el día 20, antes de cifrar, el atacante borra las copias. Si las copias de Nimbus están en el bucket nimbus-backups-prod (A-03), dentro de la misma cuenta cloud (A-05) y accesibles con las mismas credenciales que producción, entonces no son copias: son ficheros más que se van a cifrar.
Configuración objetivo para Nimbus:
| Requisito | Implementación |
|---|---|
| Cuenta separada | Las copias van a una cuenta cloud distinta, con credenciales que producción no conoce |
| Inmutabilidad | Bloqueo de objeto en modo cumplimiento, con retención de 30 días: nadie, ni el administrador, puede borrarlas antes |
| Cifrado | Con clave propia, distinta de la de producción |
| Verificación | Restauración completa cronometrada cada trimestre, con resultado documentado |
| Alcance | Base de datos, bucket de adjuntos, configuración de infraestructura y secretos (a menudo olvidados) |
La frase que conviene interiorizar: una copia que no se ha restaurado nunca no es una copia, es una esperanza. El caso más común de fracaso no es que falte la copia: es que la copia existía, estaba corrupta, incompleta o nadie sabía el procedimiento. La continuidad y los objetivos de tiempo de recuperación se desarrollan en 04-06.
4.4 DLP, minimización y seudonimización
| Medida | Qué hace | Aplicación en Nimbus |
|---|---|---|
| DLP (prevención de fuga de datos) | Detecta y bloquea la salida de datos sensibles por correo, web o USB | Realista para Nimbus en versión ligera: alerta si sale un fichero con muchos DNI o correos; bloqueo de USB de escritura |
| Minimización | No recoger ni conservar lo que no se necesita | ¿Necesita Nimbus el DNI de los pacientes? ¿Necesita guardar el historial de citas cinco años? Lo que no está no se puede filtrar |
| Seudonimización | Sustituir identificadores por referencias reversibles solo con información separada | El entorno de preproducción (A-22) debe usar datos seudonimizados, nunca copia directa de producción |
| Anonimización | Transformación irreversible | Para métricas agregadas y estadísticas de uso |
| Retención y borrado | Eliminar cuando ya no se necesita | Política escrita por tipo de dato y borrado automatizado |
La minimización es la medida con mejor relación coste/beneficio del apartado, y casi nunca se aplica porque exige decir que no a datos que «algún día podrían ser útiles». Un dato que no existe no se filtra, no se cifra, no se audita y no aparece en una notificación de brecha.
Nota sobre implicaciones legales: minimización, seudonimización, plazos de retención y borrado tienen exigencias normativas concretas, especialmente cuando los datos pueden revelar información de salud como ocurre con las agendas de las clínicas. Las decisiones deben validarse con el responsable de cumplimiento o con asesoría jurídica; el tratamiento se aborda en 06-03.
- Protección de la aplicación y del ciclo de desarrollo
La API (A-04) es la superficie principal de Nimbus. Esta capa desplaza la seguridad hacia la izquierda: al momento de escribir el código, donde corregir es barato.
5.1 Revisión de código y análisis automatizado
| Práctica | Qué encuentra | Coste |
|---|---|---|
| Revisión por pares con perspectiva de seguridad | Lógica de autorización, decisiones de diseño, cosas que ninguna herramienta ve (el IDOR) | Ninguno adicional si ya se revisan los cambios |
| SAST (análisis estático) | Patrones peligrosos en el código: concatenación en SQL, verify=False, pickle.loads |
Bajo; ruido inicial que hay que ajustar |
| SCA (análisis de composición) | Dependencias con vulnerabilidades conocidas | Bajo; es la de mayor retorno inmediato |
| Análisis de secretos | Credenciales en el código y en el historial | Muy bajo; imprescindible tras el hallazgo del token de 01-04 |
| DAST (análisis dinámico) | Fallos visibles atacando la aplicación en ejecución | Medio; útil en preproducción |
La lista de comprobación de cuatro preguntas que Iván debería aplicar en cada revisión, ya introducida en 02-02:
- ¿Quién eres? — ¿el endpoint exige autenticación?
- ¿Es tuyo? — ¿se filtra por
tenant_idy se verifica la propiedad del recurso? - ¿Es válido lo que envías? — ¿hay validación de tipos y de rangos?
- ¿Cuánto cuesta esto? — ¿hay paginación, límites y límite de tasa?
5.2 Gestión de secretos
El hallazgo del token sin caducidad de 01-04 y el .env filtrado del ataque encadenado de 02-02 tienen la misma raíz: los secretos viven donde no deben.
| Regla | Por qué |
|---|---|
| Nunca en el código ni en el repositorio | Git conserva el historial: borrar el fichero no borra el secreto |
| En un gestor de secretos, con acceso registrado | Un solo sitio que auditar y rotar |
| Inyectados en tiempo de ejecución, no en la imagen de contenedor | Una imagen con secretos es un secreto publicado en el registro |
| Efímeros siempre que sea posible | Credenciales del proveedor cloud con vida de minutos en lugar de claves permanentes |
| Rotables sin desplegar | Si rotar exige un despliegue, no se rotará |
| Al detectar una exposición: rotar primero, investigar después | El orden inverso es el error clásico |
5.3 Cabeceras de seguridad HTTP
Un conjunto de instrucciones al navegador que cuesta unos minutos configurar y neutraliza clases enteras de ataque del apartado 6 de 02-02.
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
Content-Security-Policy: default-src 'none'; script-src 'self'; style-src 'self';
img-src 'self' data:; connect-src 'self' https://api.nimbusreservas.example;
frame-ancestors 'none'; base-uri 'none'; form-action 'self';
report-uri https://csp.nimbusreservas.example/informe
X-Content-Type-Options: nosniff
Referrer-Policy: strict-origin-when-cross-origin
Permissions-Policy: geolocation=(), camera=(), microphone=()
Cache-Control: no-storeExplicación de cada una, y qué ataque para:
| Cabecera | Qué hace | Ataque que neutraliza |
|---|---|---|
Strict-Transport-Security |
Obliga al navegador a usar HTTPS durante 2 años, incluidos subdominios, y a no permitir la excepción manual | Degradación a HTTP e interposición (02-02, apartado 3) |
Content-Security-Policy |
Declara de dónde puede cargarse y ejecutarse cada tipo de recurso | XSS: aunque se inyecte código, el navegador se niega a ejecutarlo |
frame-ancestors 'none' |
Impide que otra web embeba la página en un marco | Clickjacking |
X-Content-Type-Options: nosniff |
Impide que el navegador adivine el tipo de contenido | Ficheros subidos interpretados como código ejecutable |
Referrer-Policy |
Limita la información que se envía al navegar a otro sitio | Fuga de identificadores y rutas internas en la cabecera Referer |
Permissions-Policy |
Desactiva funciones del navegador que la aplicación no usa | Reducción de superficie en el cliente |
Cache-Control: no-store |
Evita que respuestas con datos personales queden en caché | Recuperación de datos en un equipo compartido |
Detalles de la CSP que marcan la diferencia:
default-src 'none'como base. Se parte de «nada permitido» y se abre lo estrictamente necesario. Es el principio de seguro por defecto de 01-03 aplicado al navegador.- Sin
'unsafe-inline'ni'unsafe-eval'. Permitirlos anula la mayor parte del valor de la CSP frente a XSS. Exige que el JavaScript esté en ficheros, no incrustado. report-uriconvierte la CSP en un control detectivo: cada violación se registra. Un pico de informes de CSP suele ser la primera señal de un intento de XSS. Conviene desplegarla primero en modo solo informe (Content-Security-Policy-Report-Only) para no romper la SPA.
5.4 Límite de tasa
Ya ha aparecido en cada apartado, y por una razón: es la medida que quita rentabilidad a la mayoría de los ataques automatizados —fuerza bruta, enumeración, exportación masiva, DDoS aplicativo, abuso de lógica de negocio.
| Dimensión del límite | Para qué |
|---|---|
| Por IP | Ruido automatizado; poco efectivo contra atacantes distribuidos |
| Por usuario o token | Enumeración y exportación masiva; es el más útil en una API |
| Por tenant | Que un cliente no consuma la capacidad de los demás |
| Por operación sensible | Inicio de sesión, recuperación de contraseña, exportación: límites mucho más estrictos |
Los detalles de AppSec se desarrollan en 05-05.
5.5 Un flujo de CI con análisis de dependencias y secretos
Este es el fichero que Iván añadiría al repositorio de Nimbus. Está explicado paso a paso después.
name: seguridad
on:
push:
branches: [main]
pull_request:
schedule:
- cron: "0 6 * * 1" # lunes a las 06:00: revision periodica
permissions:
contents: read # minimo privilegio: el flujo solo lee el codigo
jobs:
analisis:
runs-on: ubuntu-latest
steps:
# 1. Descarga del codigo. Se fija la accion por hash, no por etiqueta.
- name: Descargar codigo
uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608
with:
fetch-depth: 0 # historial completo: necesario para buscar
# secretos en commits antiguos
- name: Preparar Python
uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38
with:
python-version: "3.12"
# 2. Dependencias con vulnerabilidades conocidas (SCA)
- name: Analisis de dependencias
run: |
pip install pip-audit
pip-audit --requirement requirements.txt \
--format json --output auditoria.json || true
pip-audit --requirement requirements.txt \
--vulnerability-service osv --strict
# --strict devuelve codigo de error si hay vulnerabilidades:
# asi la construccion FALLA y nadie puede ignorarlo
# 3. Secretos en el codigo y en TODO el historial
- name: Analisis de secretos
uses: gitleaks/gitleaks-action@83373cf2f8c4db6e24b41c1a9b086bb9619e9cd3
env:
GITLEAKS_CONFIG: .gitleaks.toml
# 4. Patrones peligrosos en el codigo propio (SAST)
- name: Analisis estatico
run: |
pip install bandit
bandit -r app/ -ll -f screen
# -ll: solo severidad media y alta, para que la senial no se ahogue
# 5. Inventario de componentes (SBOM): responder "que usamos?" en minutos
- name: Generar SBOM
run: |
pip install cyclonedx-bom
cyclonedx-py requirements -i requirements.txt -o sbom.json
- name: Guardar resultados
if: always() # se guardan incluso si algun paso ha fallado
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
with:
name: informes-seguridad
path: |
auditoria.json
sbom.jsonLas siete decisiones de este fichero, explicadas:
permissions: contents: read. Por defecto, muchos flujos reciben permisos amplios. Declarar el mínimo evita que una acción comprometida escriba en el repositorio. Es mínimo privilegio (01-03) aplicado al CI.- Acciones fijadas por hash de commit, no por
@v4. Una etiqueta puede reapuntarse a otro código; un hash, no. Es la defensa contra el ataque a la cadena de suministro de 02-02. fetch-depth: 0. Sin el historial completo, el análisis de secretos solo mira el último commit y se pierde exactamente lo que hay que encontrar: la credencial que alguien subió y «borró» hace ocho meses.--stricten el análisis de dependencias. Sin él, el informe se genera y nadie lo lee. Con él, la construcción falla y hay que decidir: actualizar o justificar la excepción por escrito. Un análisis que no puede bloquear no cambia comportamientos.-llen el análisis estático. Filtrar por severidad es lo que evita el destino habitual de estas herramientas: 400 avisos, nadie los mira, se desactiva la herramienta.- SBOM. Cuando salga la próxima vulnerabilidad crítica en una librería famosa, la pregunta será «¿nos afecta?». Con SBOM se responde en minutos; sin él, en días. Es el inventario de 01-04 aplicado al software.
if: always()al guardar resultados. Los informes del día en que algo falla son precisamente los que hay que conservar.
Y una advertencia sobre qué NO hace este flujo: no encuentra el IDOR, no encuentra el abuso de lógica de negocio y no encuentra un fallo de diseño de autorización. Las herramientas automáticas cubren los patrones conocidos; el criterio humano cubre el resto. Complementarios, no sustitutivos.
- El registro y la observabilidad como medida de protección
El diagnóstico del CSF en 02-01 fue claro: la función más débil de Nimbus es Detectar. Y sin registro no hay detección posible.
6.1 Qué registrar
| Categoría | Eventos | Por qué |
|---|---|---|
| Autenticación | Inicios de sesión con éxito y fallidos, MFA, cierres, cambios de contraseña | Detecta password spraying, stuffing, sesiones anómalas (02-02) |
| Autorización | Denegaciones de acceso, uso de funciones administrativas, suplantación de cliente | Detecta escalada e IDOR |
| Acceso a datos sensibles | Consultas y exportaciones con actor, tenant y volumen | Es la que detectó la exfiltración del ejercicio de 02-02 |
| Cambios de configuración | Permisos, reglas de red, roles, políticas de bucket | Detecta persistencia del atacante |
| Ciclo de vida de cuentas | Altas, bajas, cambios de rol, creación de tokens | Detecta cuentas creadas por el atacante |
| Eventos de aplicación | Errores 5xx, errores de SQL, violaciones de CSP | Señales tempranas de intento de explotación |
| Infraestructura | Accesos SSH, ejecución de contenedores, cambios en imágenes | Movimiento lateral |
Los cinco campos que debe tener todo evento útil: cuándo (con zona horaria y reloj sincronizado), quién (identidad nominal, no «admin»), qué (acción concreta), sobre qué (recurso y tenant) y desde dónde (IP y agente). Un log sin actor identificable no sirve para investigar; un log sin recurso no sirve para medir el alcance.
6.2 Qué NO registrar nunca
Este apartado es tan importante como el anterior, porque un registro mal diseñado crea un problema de seguridad en lugar de resolverlo.
| Nunca registrar | Por qué |
|---|---|
| Contraseñas, ni siquiera fallidas | Un fallo suele ser una contraseña real mal tecleada o de otro servicio |
| Tokens, claves de API, cookies de sesión | Un log con tokens es un fichero de credenciales válidas, y los logs se copian y comparten con facilidad |
| Datos que revelan salud | El nombre del servicio de una cita («rehabilitación de rodilla») no debe aparecer en un log de aplicación |
| Números completos de tarjeta o cuenta | Obligaciones específicas; en Nimbus los pagos están tokenizados en la pasarela precisamente para no tocarlos |
| Cuerpos completos de peticiones y respuestas | Es la vía más común de filtrar todo lo anterior sin darse cuenta |
| Documentos de identidad y datos personales innecesarios | Minimización también en los registros |
# === MAL: registra el cuerpo completo, incluidos datos personales y tokens ===
logger.info("Peticion recibida: %s cabeceras=%s cuerpo=%s",
url, dict(peticion.headers), await peticion.body())
# === BIEN: registrar lo necesario para investigar, nada mas ===
logger.info(
"acceso",
extra={
"usuario_id": usuario.id, # identidad, no nombre completo
"tenant_id": usuario.tenant_id,
"accion": "exportar_reservas",
"recurso": "reservas",
"num_registros": len(filas), # el VOLUMEN es la senial de alerta
"ip": peticion.client.host,
"sesion_id": sesion.id,
# sin nombres de pacientes, sin token, sin cuerpo de la peticion
})Por qué esta versión permite detectar y la anterior no: el campo num_registros junto con sesion_id y tenant_id es exactamente lo que hacía funcionar la consulta de detección del ejercicio 3 de 02-02. La detección se diseña cuando se escribe el log, no cuando ocurre el incidente. Y el log correcto contiene menos datos personales que el incorrecto, no más.
6.3 Las tres propiedades que hacen útil un registro
- Centralizado. Logs repartidos por cinco máquinas no se correlacionan. Además, un atacante que compromete una máquina borra sus logs locales: enviarlos fuera en tiempo real es lo que preserva la evidencia.
- Íntegro y con retención. La tabla de auditoría append-only de 01-01 —con
INSERTpero sinUPDATEniDELETEparanimbus_api— es la aplicación de esta idea. Retención mínima recomendable: 90 días en caliente, un año en frío. Muchas brechas se descubren meses después, y sin logs no se puede determinar el alcance, que es justo lo que hay que comunicar a clientes y autoridades. - Con alertas que alguien atiende. Un registro sin alertas es un archivo histórico. Pocas alertas y muy buenas: para Nimbus, cinco reglas iniciales bastan.
Las cinco alertas con las que empezar mañana:
| Alerta | Umbral inicial | Ataque que detecta |
|---|---|---|
| Fallos de autenticación desde un mismo origen contra varias cuentas | > 5 cuentas distintas en 10 min | Password spraying |
| Exportación de datos anómala | > 5.000 registros o > 3 tenants por sesión/hora | Exfiltración |
| Uso de función administrativa fuera de horario | Cualquiera entre 22:00 y 07:00 | Compromiso de cuenta privilegiada |
| Cambio en reglas de red, permisos IAM o políticas de bucket | Cualquiera no originado en el CI | Persistencia del atacante |
| Creación de token, clave SSH o cuenta nueva | Cualquiera | Persistencia |
Las técnicas de monitorización y detección se desarrollan en 05-02.
- Priorizar con presupuesto de PYME: las 12 medidas de mayor retorno
Nimbus no puede hacerlo todo. Esta es la tabla que convierte el catálogo en decisiones. Coste es dinero, esfuerzo es tiempo del equipo, impacto es reducción real de riesgo.
| # | Medida | Coste | Esfuerzo | Impacto | Qué neutraliza |
|---|---|---|---|---|---|
| 1 | MFA resistente al phishing en todas las cuentas administrativas (cloud, GitHub, correo, BD, VPN) | Bajo | Bajo | Muy alto | Spraying, stuffing, phishing de credenciales, acceso de la consultora |
| 2 | Copias inmutables en cuenta separada + prueba de restauración trimestral | Bajo-medio | Medio | Muy alto | Ransomware, borrado accidental o malicioso |
| 3 | Cerrar la superficie descubierta (SSH 0.0.0.0/0, Redis sin auth, http.server, node_exporter, subdominios muertos) |
Nulo | Bajo | Muy alto | Ataque oportunista automatizado |
| 4 | Caducidad y ámbito mínimo en todos los tokens + rotación del token de despliegue | Nulo | Bajo | Alto | El ataque encadenado de 02-02 |
| 5 | Análisis de dependencias y secretos en el CI (el yaml del apartado 5.5) |
Nulo | Bajo | Alto | Dependencias vulnerables, secretos filtrados |
| 6 | Registro centralizado + las 5 alertas del apartado 6.3 | Bajo | Medio | Muy alto | Todo lo que hoy es invisible |
| 7 | SPF -all, DKIM y DMARC p=reject + banner de correo externo |
Nulo | Bajo-medio | Alto | Suplantación del dominio, fraude del CEO |
| 8 | Procedimiento de verificación de pagos y de identidad en soporte | Nulo | Bajo | Alto | BEC, fraude de IBAN, vishing |
| 9 | Gestión de parches con plazo comprometido (7 días para críticas) | Bajo | Medio | Alto | WannaCry, Equifax y equivalentes |
| 10 | Cifrado de disco en los 40 portátiles con custodia de claves | Nulo | Bajo | Medio-alto | Robo o pérdida de portátil |
| 11 | Segmentación mínima: wifi de invitados aislada, zona de datos cerrada, bastión con MFA | Bajo | Medio | Alto | Movimiento lateral, ransomware |
| 12 | EDR en los portátiles con alguien que atienda las alertas | Medio | Medio | Alto | Malware, robo de sesión, movimiento lateral |
Tres observaciones sobre esta tabla:
- Ocho de las doce medidas tienen coste económico nulo o bajo. Lo que falta en Nimbus no es presupuesto: es decisión y tiempo asignado. Es la conclusión más repetida en seguridad de PYMES y la que más cuesta aceptar.
- La única con coste medio real es el EDR (#12), y va la última a propósito: sin MFA, sin copias inmutables y sin registro, un EDR es un lujo mal colocado.
- Ninguna de las doce es un producto de seguridad perimetral. No hay ningún cortafuegos nuevo en la lista, y no es un olvido: el riesgo de Nimbus no está ahí.
- Plan por fases: 30, 90 y 180 días
flowchart LR
F1["DIAS 1-30\nURGENTE\nCerrar lo abierto,\nMFA, tokens,\ncopias inmutables"]
F1 --> F2["DIAS 31-90\nESTRUCTURAL\nRegistro y alertas,\nCI de seguridad,\ncorreo y procesos"]
F2 --> F3["DIAS 91-180\nMADUREZ\nSegmentacion, EDR,\nparcheo formal,\nrecertificacion"]
F3 --> F4["CONTINUO\nRevision trimestral,\nsimulacros, pruebas\nde restauracion"]
Fase 1 — Días 1 a 30: parar la hemorragia
Todo lo que se puede hacer sin presupuesto, sin proveedor y sin proyecto.
| Tarea | Dueño | Verificación de que está hecho |
|---|---|---|
Cerrar SSH a 0.0.0.0/0; acceso solo por bastión |
Lucía | describe-security-groups sin 0.0.0.0/0 en puertos administrativos |
Apagar el http.server, aislar el NAS olvidado, retirar node_exporter público y snmpd |
Lucía | ss -tulpn con solo los servicios previstos |
| Autenticar Redis y vincularlo a la red privada | Lucía | Conexión desde fuera rechazada |
| MFA obligatorio en cloud, GitHub, correo y VPN, incluida la consultora | Marta | Informe de cuentas sin MFA: vacío |
Rotar el token nimbus-deploy-bot; ámbito mínimo y caducidad |
Marta | Ningún token sin fecha de caducidad |
| Revocar el enlace público de la hoja de nóminas y revisar accesos | Sara | Enlace inaccesible; registro revisado |
| Copias a cuenta separada con bloqueo de objeto 30 días | Lucía | Intento de borrado rechazado por el propio proveedor |
| Una restauración completa cronometrada | Lucía | Documento con tiempo y resultado |
| Banner de correo externo | Marta | Visible en un correo de prueba |
| Procedimiento de verificación de pagos, firmado | Sara + Marta | Documento de una página publicado |
| Canal de reporte de phishing comunicado a los 38 | Sara | Prueba de reporte completada |
Fase 2 — Días 31 a 90: construir capacidad
| Tarea | Dueño | Resultado esperado |
|---|---|---|
| Registro centralizado con los campos del apartado 6.1 | Lucía | Todos los eventos de autenticación y acceso a datos en un único sitio |
| Las 5 alertas iniciales, con guardia rotatoria | Lucía | Cada alerta con dueño y procedimiento de una línea |
| Flujo de CI de seguridad del apartado 5.5 | Iván | Construcción que falla ante una vulnerabilidad alta |
| Corregir lo que revele el primer análisis | Iván | Cero vulnerabilidades críticas pendientes |
SPF a -all, DKIM y DMARC en p=none con informes |
Lucía | Informes rua recibidos y emisores identificados |
| Cabeceras de seguridad HTTP, CSP en modo informe | Iván | Cabeceras presentes; informes de CSP recogidos |
| Límite de tasa en autenticación, exportación y endpoints caros | Iván | Prueba de carga que confirma el límite |
| TLS en el tramo interno (flujo F3) | Lucía | Sin tráfico interno en claro |
| Procedimiento de verificación de identidad en soporte | Rubén + Marta | Documento y ensayo con casos reales |
| Primer simulacro de phishing con métricas | Sara | Tasa de reporte y tiempo hasta el primer aviso medidos |
| Cifrado de disco en los 40 portátiles con custodia | Lucía | Inventario al 100 % |
Fase 3 — Días 91 a 180: madurez
| Tarea | Dueño | Resultado esperado |
|---|---|---|
DMARC a p=quarantine y después p=reject |
Lucía | Dominio protegido frente a suplantación |
| CSP en modo bloqueo | Iván | Sin regresiones en la SPA |
| Segmentación: invitados aislados, zona de datos cerrada, bastión | Lucía | Diagrama de red actualizado y verificado |
| EDR desplegado, con responsable de alertas definido | Lucía | Cobertura del 100 % de los portátiles |
| Gestión de parches con plazos y medición | Lucía | Panel con antigüedad de parches por equipo |
| Acceso just-in-time con caducidad para la consultora (A-19) | Marta | Acceso permanente eliminado |
| Primera recertificación de accesos | Marta | Lista de accesos revisada y firmada |
| Preproducción con datos seudonimizados | Iván | Clasificación de A-22 resuelta (ya no «a revisar») |
| Segunda prueba de restauración, cronometrada | Lucía | Tiempo de recuperación conocido y documentado |
| Primer test de penetración externo | Marta | Informe con plan de corrección priorizado |
Cómo se sostiene esto en el tiempo: revisión trimestral de una hora buscando lo que sobra (01-04), un simulacro por trimestre, una prueba de restauración por trimestre y una recertificación de accesos por semestre. Cuatro rutinas, todas en el calendario. Lo que no está agendado, no ocurre.
Nota: los plazos de este plan son orientativos y deben ajustarse a la realidad de cada organización. Las obligaciones formales de política, control documentado y evidencia auditable se tratan en 04-02, 04-03 y 06-04.
Errores Comunes y Consejos
Errores comunes:
- Comprar antes de cerrar. Adquirir un WAF o un EDR mientras el SSH está abierto a Internet es invertir en el tejado con los cimientos sin hacer.
- Confiar en el WAF para no corregir el código. El WAF compra tiempo; no arregla una inyección y no ve un IDOR.
- Llamar copia a algo que no se ha restaurado. El fallo más común no es la ausencia de copias, sino su inutilidad en el momento de la verdad.
- Guardar las copias en la misma cuenta y con las mismas credenciales que producción. El ransomware moderno las busca y las borra: eso no es una copia.
- Registrar el cuerpo completo de las peticiones. Convierte el sistema de logs en un almacén de tokens y datos personales, y multiplica el impacto de cualquier fuga.
- Generar cien alertas que nadie mira. Peor que no tener alertas, porque produce sensación de cobertura.
- Desplegar CSP directamente en modo bloqueo. Rompe la SPA y acaba desactivada para siempre. Modo informe primero.
- Dejar el análisis del CI sin capacidad de bloquear. Un informe que no para nada no cambia el comportamiento de nadie.
- Cifrar y darlo por resuelto. El cifrado en reposo no protege contra credenciales robadas ni contra un fallo de autorización.
- Escribir el plan sin dueño ni fecha. Una tarea sin nombre y sin día es una intención.
Consejos:
- Empieza siempre por el punto 3 de la tabla: cerrar lo que ya está abierto. Coste cero, impacto máximo, y además reduce el trabajo futuro.
- Para cada medida que implantes, escribe cómo comprobarías que sigue funcionando dentro de seis meses. Las defensas se degradan en silencio.
- Prefiere lo que funciona por defecto frente a lo que exige disciplina diaria. En una empresa de 38 personas, la disciplina se agota; la configuración permanece.
- Cuando dudes entre dos medidas, elige la que reduzca el daño de un fallo frente a la que intente evitar un fallo más. La primera funciona incluso cuando te equivocas.
- Convierte cada incidente y cada simulacro en una alerta nueva. Es el purple team de coste cero de 02-01.
- Revisa el plan de fases con Marta cada 30 días, marcando lo hecho y renegociando lo que no. Un plan que no se revisa muere en la fase 1.
Ejercicios
Ejercicio 1 — Asignar defensas a ataques
Para cada uno de estos ocho ataques de las lecciones 02-02 y 02-03, indica: la medida principal que lo neutraliza, una segunda capa independiente de la primera, el tipo de control de cada una (preventivo, detectivo, correctivo o disuasorio) y la fase de la cadena en la que actúan.
- Password spraying contra las cuentas del equipo.
- Inyección SQL en el buscador de clientes.
- Ransomware que cifra la infraestructura y borra las copias.
- Fraude de cambio de IBAN de un proveedor, enviado a Sara.
- Exfiltración lenta de datos mediante un token robado.
- XSS almacenado en el campo «notas» de una reserva.
- SSRF a través de la URL del logotipo de una clínica.
- Acción de CI de terceros comprometida.
Ejercicio 2 — Corregir un registro peligroso
Este es el código de registro actual de la API de Nimbus:
@app.post("/api/v1/sesion")
async def iniciar_sesion(peticion: Request):
datos = await peticion.json()
logger.info("Intento de login: %s", datos) # (1)
usuario = autenticar(datos["email"], datos["password"])
if usuario is None:
logger.warning("Login fallido para %s con clave %s",
datos["email"], datos["password"]) # (2)
raise HTTPException(401, "Credenciales incorrectas")
token = emitir_token(usuario)
logger.info("Login OK usuario=%s token=%s", usuario.email, token) # (3)
return {"token": token}
@app.get("/api/v1/reservas")
def listar(usuario = Depends(usuario_actual)):
filas = consultar_reservas(usuario.tenant_id)
logger.info("Reservas devueltas: %s", [dict(f) for f in filas]) # (4)
return filasSe pide: (a) identifica los problemas de cada línea marcada y explica el riesgo concreto de cada uno; (b) reescribe el código con un registro correcto; (c) indica qué tres alertas podrías construir sobre el registro corregido y qué ataque detectaría cada una; (d) explica por qué el registro correcto contiene menos datos personales que el incorrecto y aun así permite detectar más.
Ejercicio 3 — Defender el presupuesto ante la dirección
Marta te da 6.000 € anuales y un día a la semana de tiempo del equipo para seguridad durante el primer semestre. Un comercial le ha ofrecido un paquete de 5.500 € que incluye un cortafuegos de nueva generación para la oficina de Valencia y un antivirus para los 40 portátiles.
Se pide:
- Argumenta, con datos de las lecciones del módulo, por qué esa compra no es la mejor asignación del presupuesto de Nimbus.
- Propón tu asignación alternativa de los 6.000 € y del día semanal, con partidas concretas.
- Identifica las tres medidas de coste cero que deberían hacerse en las dos primeras semanas, y justifica el orden.
- Explica qué riesgo aceptas conscientemente al no gastar en perímetro, y cómo lo comunicarías a Marta por escrito.
- Define tres indicadores que presentarías a los seis meses para demostrar que la inversión ha servido.
Soluciones
Solución 1
| # | Ataque | Medida principal | Segunda capa | Tipos | Fase |
|---|---|---|---|---|---|
| 1 | Password spraying | MFA resistente al phishing (preventivo) | Alerta por fallos desde un mismo origen contra varias cuentas (detectivo) | Prev. + Det. | Entrega / Explotación |
| 2 | Inyección SQL | Consultas parametrizadas (preventivo) | Rol nimbus_api sin DELETE ni DDL + RLS (preventivo, limita el daño); alerta por errores de sintaxis SQL (detectivo) |
Prev. + Prev./Det. | Explotación |
| 3 | Ransomware | Copias inmutables en cuenta separada (correctivo) | Segmentación y MFA que dificultan el movimiento lateral (preventivo); EDR (detectivo) | Corr. + Prev./Det. | Acciones |
| 4 | Fraude de IBAN | Verificación por canal alternativo al teléfono de ficha (preventivo) | Doble aprobación por importe (preventivo) + registro de la verificación (detectivo/probatorio) | Prev. + Prev. | Entrega |
| 5 | Exfiltración con token robado | Caducidad y ámbito mínimo del token (preventivo) | Alerta por volumen de exportación anómalo (detectivo) + límite de tasa por token (preventivo) | Prev. + Det. | Acciones |
| 6 | XSS almacenado | Codificación en la salida (preventivo) | Content-Security-Policy con report-uri (preventivo + detectivo) y cookies HttpOnly |
Prev. + Prev./Det. | Explotación |
| 7 | SSRF | Validación de URL con bloqueo de rangos internos y sin redirecciones (preventivo) | Proxy de salida con lista blanca (preventivo) + alerta por peticiones salientes a rangos internos (detectivo) | Prev. + Prev./Det. | Explotación |
| 8 | Acción de CI comprometida | Fijar acciones por hash de commit (preventivo) | CI sin acceso a secretos de producción y con permissions mínimos (preventivo); alerta por conexión saliente a dominio nuevo desde el ejecutor (detectivo) |
Prev. + Prev./Det. | Entrega |
Patrón que emerge: en los ocho casos, la segunda capa es de naturaleza distinta a la primera —si la primera es de código, la segunda es de configuración o de detección—. Eso es defensa en profundidad bien entendida: capas que no fallan por la misma causa. Dos capas que dependen de que Iván recuerde algo son, en la práctica, una sola capa.
Solución 2
(a) Problemas de cada línea:
| Línea | Problema | Riesgo concreto |
|---|---|---|
| (1) | Registra el cuerpo completo del inicio de sesión, incluida la contraseña en claro | Todas las contraseñas del equipo y de los clientes acaban en texto plano en el sistema de logs, que se copia, se exporta y a menudo se envía a un tercero |
| (2) | Registra explícitamente la contraseña fallida | Una contraseña fallida suele ser la contraseña real mal tecleada, o la de otro servicio. Es un fichero de credenciales reutilizables |
| (3) | Registra el token emitido | Cualquiera con acceso a los logs puede usar ese token para suplantar la sesión, saltándose el MFA (pass-the-cookie del ejercicio de 02-03) |
| (4) | Registra todas las reservas devueltas | Nombres de pacientes, fechas y servicios: datos que revelan salud, en un log de aplicación sin control de acceso equivalente al de la base de datos |
(b) Código corregido:
@app.post("/api/v1/sesion")
async def iniciar_sesion(peticion: Request):
datos = await peticion.json()
email = datos.get("email", "")
usuario = autenticar(email, datos.get("password", ""))
if usuario is None:
logger.warning("auth_fallo", extra={
"email_hash": hashlib.sha256(email.lower().encode()).hexdigest()[:16],
"ip": peticion.client.host,
"agente": peticion.headers.get("user-agent", "")[:120],
})
raise HTTPException(401, "Credenciales incorrectas") # mensaje uniforme
token, jti = emitir_token(usuario) # jti = identificador del token, no el token
logger.info("auth_ok", extra={
"usuario_id": usuario.id,
"tenant_id": usuario.tenant_id,
"jti": jti,
"ip": peticion.client.host,
"mfa": usuario.mfa_verificado,
})
return {"token": token}
@app.get("/api/v1/reservas")
def listar(usuario = Depends(usuario_actual), pagina: int = 1):
filas = consultar_reservas(usuario.tenant_id, pagina)
logger.info("acceso_datos", extra={
"usuario_id": usuario.id,
"tenant_id": usuario.tenant_id,
"accion": "listar_reservas",
"num_registros": len(filas), # el volumen, no el contenido
"pagina": pagina,
})
return filasTres decisiones que merecen comentario:
email_hashen lugar del correo en los fallos. Permite correlacionar intentos contra la misma cuenta sin acumular un listado de correos válidos en los logs. Es minimización aplicada a la detección.jtien lugar del token. Eljties el identificador del token: sirve para correlacionar la sesión y para revocarla, pero no permite suplantar a nadie. Se detalla en 02-05.- Mensaje de error uniforme. «Credenciales incorrectas» tanto si el correo no existe como si la contraseña falla: evita la enumeración de usuarios de 02-02.
(c) Tres alertas construibles:
| Alerta | Consulta conceptual | Ataque detectado |
|---|---|---|
| Spraying | auth_fallo agrupado por ip, contando email_hash distintos > 5 en 10 min |
Password spraying (02-02) |
| Exfiltración | acceso_datos agrupado por usuario_id, sumando num_registros > 5.000/hora |
Exportación masiva con token robado |
| Sesión sin autenticación previa | acceso_datos con un jti que no tiene un auth_ok correspondiente en las últimas 24 h |
Pass-the-cookie / robo de sesión |
(d) Por qué menos datos permiten detectar más. El registro incorrecto acumula contenido (contraseñas, tokens, nombres de pacientes) que no sirve para detectar nada: nadie construye una alerta sobre el nombre de un paciente. El registro correcto acumula metadatos estructurados —quién, qué, cuánto, desde dónde— que son exactamente sobre lo que se consulta y se agrega. La consecuencia es doble y muy elegante: se detecta más y se reduce el impacto de una fuga de los propios logs, que dejan de ser un objetivo valioso. Registrar bien es simultáneamente una mejora de detección y una medida de protección de datos.
Solución 3
1. Por qué la compra propuesta no es la mejor asignación. Cuatro argumentos, apoyados en el módulo:
- No ataca el riesgo real de Nimbus. La superficie principal es la API en la nube y las identidades, no la red de la oficina de Valencia. Un NGFW en la oficina no protege ni a los 19 empleados en remoto, ni la cuenta cloud (A-05), ni la API, ni los buckets.
- Un antivirus de firmas no cubre lo que ocurre. Repasa la tabla del mito 2 en 02-01: no para el phishing de credenciales, ni el IDOR, ni el bucket mal configurado, ni la credencial de la consultora sin MFA, ni el fraude del CEO.
- Consume el 92 % del presupuesto dejando sin financiar las medidas 1 a 8 de la tabla del apartado 7, que tienen impacto muy alto y coste bajo o nulo.
- Nimbus tiene hoy problemas conocidos y sin resolver —SSH abierto, Redis sin autenticación, token permanente, copias sin probar, cero detección— que ninguna de las dos piezas del paquete corrige. Gastar en lo que falta antes de cerrar lo que está abierto es el error del apartado de errores comunes.
2. Asignación alternativa:
| Partida | Importe | Justificación |
|---|---|---|
| EDR gestionado para 40 equipos | 2.400 € | Única medida de la tabla con coste real; cubre endpoint y aporta detección y capacidad de aislar |
| Plataforma de simulacros y microformación | 700 € | Ataca el vector dominante (02-03); mide tasa de reporte |
| Almacenamiento de copias inmutables en cuenta separada | 600 € | Es la medida #2 de la tabla; el coste es de almacenamiento |
| Gestor de secretos y de contraseñas para el equipo | 500 € | Resuelve el token permanente y la reutilización de contraseñas |
| Registro centralizado gestionado (nivel básico) | 900 € | Habilita la función Detectar, la más débil según el CSF |
| Reserva para lo imprevisto | 900 € | Un hallazgo del primer análisis suele requerir gasto no planificado |
| Total | 6.000 € |
El día semanal se reparte así: fase 1 completa en las cuatro primeras semanas (todo coste cero), después alternando implantación (registro, alertas, CI) y rutina (revisar alertas, parchear, revisión trimestral de lo que sobra).
3. Las tres medidas de coste cero de las dos primeras semanas, en orden:
- Cerrar la superficie expuesta (SSH
0.0.0.0/0, Redis sin autenticación,http.server,node_exporter,snmpd). Va primera porque es explotable ahora mismo por un bot sin que nadie decida atacar a Nimbus: es riesgo activo, no potencial. - MFA en todas las cuentas administrativas, incluida la consultora. Va segunda porque neutraliza de golpe spraying, stuffing y la mayor parte del phishing de credenciales, que es el vector dominante.
- Rotar el token permanente y poner caducidad a todos los tokens. Va tercera porque cierra el eslabón 2 del ataque encadenado de 02-02, y porque un token filtrado convierte el MFA en irrelevante.
4. El riesgo que se acepta y cómo comunicarlo. Al no invertir en perímetro de oficina se acepta un riesgo residual sobre la red local de Valencia: un dispositivo comprometido en la oficina tendría más libertad de movimiento de la deseable. Se mitiga parcialmente y sin coste con segmentación en el router existente (invitados aislados, zona de datos cerrada) y con el EDR en los portátiles.
La comunicación a Marta debe ser escrita, explícita y fechada:
«Riesgo aceptado (fecha, revisión en 6 meses): no se refuerza el perímetro de la oficina de Valencia en este semestre. Motivo: el 100 % de los datos de clientes está en la nube y la mitad de la plantilla trabaja fuera de la oficina, por lo que el perímetro físico no es el vector principal. Mitigación aplicada: segmentación con el equipamiento actual, EDR en todos los portátiles y cifrado de disco. Se revisará si cambia la arquitectura o si crece la plantilla en oficina. Aprobado por: Marta Solves.»
Esto no es burocracia: es la diferencia entre aceptar un riesgo (decisión consciente, documentada, revisable) e ignorarlo (que es lo que se descubre después de un incidente). La formalización de este proceso se estudia en 04-01.
5. Tres indicadores a los seis meses:
| Indicador | Valor inicial | Objetivo a 6 meses | Qué demuestra |
|---|---|---|---|
| Cuentas administrativas sin MFA | ~8 | 0 | Cierre del vector dominante |
| Tiempo de recuperación verificado (restauración completa cronometrada) | Desconocido | Conocido y < 4 h | Capacidad real de sobrevivir a un ransomware |
| Tasa de reporte de phishing y tiempo hasta el primer aviso | 11 % / 47 min | > 35 % / < 15 min | Que la capa humana funciona como detección |
Un cuarto indicador muy visual para dirección: número de servicios expuestos a Internet, que debería bajar de seis a uno en el primer mes. Es el que mejor comunica el progreso a alguien no técnico.
Conclusión
Tienes el catálogo de la respuesta. Has aprendido primero el método para elegir: qué ataque concreto neutraliza cada medida, en qué fase de la cadena actúa, de qué tipo de control se trata —preventivo, detectivo, correctivo o disuasorio— y si sobrevivirá a un mal día en una empresa de 38 personas. En perímetro y red has visto los tipos de cortafuegos y la precisión que evita el error más caro: un WAF compra tiempo y da visibilidad, pero no corrige código ni ve un IDOR; has entendido la segmentación como la medida más rentable contra el movimiento lateral, la doble naturaleza de la defensa anti-DDoS —volumétrica que se contrata, aplicativa que se programa— y la evolución del acceso remoto desde la VPN de todo o nada hacia el acceso just-in-time con caducidad. En endpoint has distinguido antivirus de EDR por lo que de verdad los separa —comportamiento, telemetría y capacidad de aislar— y has colocado el parcheo en su sitio: la medida menos vistosa y una de las que más incidentes graves habría evitado.
En protección del dato te llevas tres ideas que sostienen todo lo demás: que el cifrado en reposo no protege contra credenciales válidas y que la clave es el activo real; que la regla 3-2-1 ampliada con inmutabilidad y prueba de restauración es la única defensa que devuelve el negocio cuando todo ha fallado, porque el ransomware moderno busca y borra las copias; y que la minimización es la medida con mejor relación coste/beneficio, porque lo que no existe no se filtra. En aplicación y ciclo de desarrollo has recorrido la revisión de código con sus cuatro preguntas, la gestión de secretos con su regla de rotar primero e investigar después, las cabeceras HTTP con una CSP construida desde default-src 'none', el límite de tasa como quitarrentabilidad universal, y un flujo de CI real cuyas siete decisiones —permisos mínimos, acciones fijadas por hash, historial completo, análisis que bloquea, filtrado por severidad, SBOM y conservación de informes— convierten un informe decorativo en un control efectivo.
En registro y observabilidad has aprendido qué registrar, con sus cinco campos imprescindibles, y sobre todo qué no registrar nunca; y has comprobado en el ejercicio la conclusión más contraintuitiva de la lección: el registro correcto contiene menos datos personales que el incorrecto y permite detectar mucho más, porque la detección se construye sobre metadatos estructurados, no sobre contenido. Y has terminado con lo más útil para una PYME: las doce medidas de mayor retorno —ocho de ellas con coste económico nulo o bajo, ninguna de ellas un producto perimetral— y un plan de 30, 90 y 180 días con dueño y verificación para cada tarea, sostenido por cuatro rutinas trimestrales en el calendario.
De esas doce medidas, la número uno era el MFA, y varias de las restantes giran alrededor de lo mismo: quién eres y qué puedes hacer. No es casualidad. Cuando el perímetro se difumina —nube, remoto, terceros, móviles— la identidad se convierte en el nuevo perímetro. En la siguiente lección, Identidad, Autenticación y Control de Acceso (02-05), la estudiaremos a fondo: el ciclo de vida de una identidad y las cuentas huérfanas, qué dicen hoy las guías sobre contraseñas, las formas de MFA ordenadas por resistencia al phishing, SSO y los protocolos de identidad con la diferencia exacta entre OAuth 2.0 y OpenID Connect, sesiones y JWT con su validación correcta frente a la ingenua, los modelos de autorización DAC, MAC, RBAC, ABAC y ReBAC con el diseño concreto de Nimbus, y las cuentas privilegiadas, el acceso just-in-time y la recertificación.
Curso de Fundamentos de Seguridad Informática
Módulo 1: Introducción a la Seguridad Informática
- Conceptos Básicos de Seguridad Informática
- Tipos de Amenazas y Vulnerabilidades
- Principios de la Seguridad Informática
- Activos, Superficie de Ataque y Actores de Amenaza
Módulo 2: Ciberseguridad
- Definición y Alcance de la Ciberseguridad
- Tipos de Ataques Cibernéticos
- Ingeniería Social y Phishing
- Medidas de Protección en Ciberseguridad
- Identidad, Autenticación y Control de Acceso
- Casos de Estudio de Incidentes de Ciberseguridad
Módulo 3: Criptografía
- Introducción a la Criptografía
- Criptografía Simétrica
- Criptografía Asimétrica
- Funciones Hash, HMAC y Almacenamiento de Contraseñas
- Protocolos Criptográficos
- Gestión de Claves, Certificados y PKI
- Aplicaciones de la Criptografía
Módulo 4: Gestión de Riesgos y Medidas de Protección
- Evaluación de Riesgos
- Políticas de Seguridad
- Controles de Seguridad
- Riesgo de Terceros y Cadena de Suministro
- Plan de Respuesta a Incidentes
- Recuperación ante Desastres y Continuidad de Negocio
Módulo 5: Herramientas y Técnicas de Seguridad
- Herramientas de Análisis de Vulnerabilidades
- Técnicas de Monitoreo y Detección
- Pruebas de Penetración
- Seguridad en Redes
- Seguridad en Aplicaciones
- Hardening de Sistemas y Seguridad del Endpoint
- Seguridad en la Nube y en Contenedores
Módulo 6: Buenas Prácticas y Normativas
- Buenas Prácticas en Seguridad Informática
- Normativas y Estándares de Seguridad
- Protección de Datos Personales y RGPD en la Práctica
- Cumplimiento y Auditoría
- Formación y Concienciación
- Ética, Aspectos Legales y Divulgación Responsable
