Mapa de la lección
Lección 06 publicada. Mapa, ejemplo, EX016.
flowchart TD
N0["Resultados de aprendizaje y conexión"]
N1["6.1 El bastionado como sustracción"]
N2["6.2 Cuentas de servicio y mínimo privilegio"]
N3["6.3 Los archivos de configuración son relevantes par"]
N4["6.4 Líneas base de integridad de archivos"]
N5["6.5 Virtualización"]
N6["6.7 Actividad práctica: línea base de integridad de"]
N7["Síntesis del capítulo"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7
N7 --> EX["Ejemplo resuelto"]
EX --> Q["Ejercicio EX016"]
Dibujo lógico
flowchart LR
N0["Resultados de aprendizaje y conexión"]
N1["6.1 El bastionado como sustracción"]
N2["6.2 Cuentas de servicio y mínimo privilegio"]
N3["6.3 Los archivos de configuración son relevantes par"]
N4["6.4 Líneas base de integridad de archivos"]
N5["6.5 Virtualización"]
N6["6.7 Actividad práctica: línea base de integridad de"]
N7["Síntesis del capítulo"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7 --> Q["EX016"]
[Resultados de aprendizaje y conexión]
|
v
[6.1 El bastionado como sustracción]
|
v
[6.2 Cuentas de servicio y mínimo privilegio]
|
v
[6.3 Los archivos de configuración son relevantes par]
|
v
[6.4 Líneas base de integridad de archivos]
|
v
[6.5 Virtualización]
|
v
[6.7 Actividad práctica: línea base de integridad de]
|
v
[Síntesis del capítulo]
|
v
[Ejemplo resuelto] --> [Ejercicio EX016]
Resultados de aprendizaje y conexión
Al terminar este capítulo, usted debería ser capaz de:
- bastionar un servidor eliminando lo que no necesita y restringiendo lo que sí necesita;
- ejecutar un servicio con una cuenta dedicada y sin privilegios, con solo los archivos y puertos que necesita;
- construir y usar una línea base de integridad de archivos para detectar cambios no aprobados;
- explicar qué cambia la virtualización para la seguridad, y qué no cambia.
Los retransmisores y el historiador de LANTERN son servidores corrientes. La mayoría de los compromisos de este tipo de servidores, y muchas interrupciones, no proceden de fallos exóticos, sino de cosas que se dejaron en ellos: un servicio sin usar que escucha en todas las interfaces, una opción de depuración, un archivo con permiso de escritura para todos, una cuenta antigua. Este capítulo trata de mantener un servidor pequeño, conocido y comprobable.
6.1 El bastionado como sustracción
Bastionar significa reducir un sistema a lo que exige su función y configurar de forma segura lo que queda. La guía de seguridad de servidores del NIST recomienda eliminar o desactivar los servicios, aplicaciones y protocolos de red innecesarios, configurar la autenticación y los controles de recursos, y mantener el sistema parcheado y monitorizado (NIST SP 800-123). Para un retransmisor, eso significa: ningún entorno de escritorio, ningún compilador, ningún servicio de compartición de archivos, SSH escuchando solo en la interfaz de gestión, el proceso del retransmisor escuchando solo en su dirección y puerto declarados, y nada escuchando en 0.0.0.0 sin un motivo por escrito.
6.2 Cuentas de servicio y mínimo privilegio
Ejecute cada servicio con su propia cuenta sin privilegios (relay, no root). Dé a esa cuenta acceso de lectura a su configuración, acceso de escritura solo a sus propios directorios de datos y de registros, y ningún inicio de sesión con intérprete de órdenes. Use el gestor de servicios del sistema operativo para reiniciarlo si falla y para aplicar restricciones adicionales (por ejemplo, una vista de solo lectura de la mayor parte del sistema de archivos). Si el proceso del retransmisor llega a verse comprometido, estas decisiones determinan si el atacante controla un servicio o el equipo entero. En RLY-01, esta es la definición del servicio cuyos permisos cambiaron a 0666.
6.3 Los archivos de configuración son relevantes para la seguridad
En un retransmisor, los archivos más relevantes para la seguridad son su configuración (en qué escucha, a dónde reenvía, dónde está su clave), su lista de estaciones permitidas y su definición de servicio (con qué cuenta se ejecuta y con qué restricciones). Un cambio en cualquiera de ellos cambia la seguridad del servicio. Los permisos de los archivos importan tanto como su contenido: una definición de servicio que se ha vuelto modificable por cualquier usuario permite a cualquier usuario local decidir qué se ejecuta como el servicio. RLY-01 mostró ambos tipos: un cambio de contenido, debug_listen 0.0.0.0:9000, y un cambio de permisos a 0666.
6.4 Líneas base de integridad de archivos
Una línea base de integridad de archivos registra un hash criptográfico y los permisos de cada archivo importante en un momento conocido como correcto. Las instantáneas posteriores se comparan con ella; cada diferencia o bien se explica mediante un registro de cambio aprobado, o bien se investiga. SHA-256, especificado en FIPS 180-4, es una elección estándar: cualquier cambio en el contenido del archivo cambia su resumen. La propia línea base debe protegerse (almacenada fuera del equipo o firmada), porque un atacante que puede cambiar un archivo y también la línea base puede ocultar el cambio.
6.5 Virtualización
La virtualización ejecuta varios sistemas operativos en un único equipo físico mediante un hipervisor. Ayuda a la operación (instantáneas, reconstrucciones rápidas, invitados separados para funciones separadas) y crea cosas nuevas que proteger. La guía del NIST sobre virtualización completa señala que el hipervisor y sus interfaces de gestión se convierten en objetivos de alto valor, y que los invitados de un mismo equipo comparten recursos físicos y pueden afectarse entre sí (NIST SP 800-125). Consecuencias prácticas: la red de gestión del hipervisor es una zona propia; quien administra el hipervisor administra en la práctica todos los invitados; las instantáneas contienen secretos y deben protegerse como las copias de seguridad; y colocar en el mismo equipo un retransmisor orientado a las estaciones y un servidor de informes orientado a la zona corporativa une dos zonas mediante hardware compartido y un administrador compartido.
6.6 Ejemplo resuelto: una línea base detecta un puerto de depuración (sintético)
Usted crea la línea base de los tres archivos de configuración de RLY-01. Una semana después, la comparación muestra cuatro diferencias. La lista de permitidos ganó PS-11 con el cambio aprobado CHG-118: explicado. La configuración del retransmisor ganó debug_listen 0.0.0.0:9000 sin registro de cambio: alguien habilitó un puerto de depuración en todas las interfaces, quizá mientras resolvía un problema, y lo dejó así. Los permisos de la definición del servicio pasaron de 0640 a 0666: cualquier usuario local puede ahora reescribirla. Apareció un archivo nuevo, helper.sh, en el directorio de unidades. Tres cambios no aprobados en un equipo crítico son una investigación, no una limpieza: antes de revertir nada, conserve los archivos actuales y la salida de la comparación, y pregunte quién cambió qué (capítulo 20).
6.7 Actividad práctica: línea base de integridad de archivos
Lab 6 (guárdelo como lab06.py y ejecútelo con python3 lab06.py):
# Lab 6 - a file-integrity baseline for the relay host's configuration (offline, standard library only)
# Synthetic files are created in a temporary directory; nothing outside it is read or changed.
import hashlib, json, os, tempfile
def digest(path):
h = hashlib.sha256()
with open(path, "rb") as f:
for block in iter(lambda: f.read(65536), b""):
h.update(block)
return h.hexdigest()
def snapshot(root):
out = {}
for d, _, files in os.walk(root):
for name in sorted(files):
p = os.path.join(d, name)
st = os.stat(p)
out[os.path.relpath(p, root)] = {"sha256": digest(p), "mode": oct(st.st_mode & 0o777)}
return out
with tempfile.TemporaryDirectory() as root:
files = {"relay.conf": "listen 10.30.0.5:8443\nupstream hist-01:443\nhmac_key_file /etc/relay/key\n",
"allow.list": "PS-04\nPS-07\nPS-09\n", "units/relay.service": "[Service]\nUser=relay\n"}
for rel, text in files.items():
p = os.path.join(root, rel); os.makedirs(os.path.dirname(p), exist_ok=True)
with open(p, "w") as f: f.write(text)
os.chmod(p, 0o640)
base = snapshot(root)
print("baseline entries:", len(base), "| relay.conf", base["relay.conf"]["sha256"][:16])
# simulated changes: one approved (change ticket CHG-118), one not, one permission change, one new file
with open(os.path.join(root, "allow.list"), "a") as f: f.write("PS-11\n")
with open(os.path.join(root, "relay.conf"), "a") as f: f.write("debug_listen 0.0.0.0:9000\n")
os.chmod(os.path.join(root, "units/relay.service"), 0o666)
with open(os.path.join(root, "units/helper.sh"), "w") as f: f.write("#!/bin/sh\n")
approved = {"allow.list": "CHG-118"}
now = snapshot(root)
for rel in sorted(set(base) | set(now)):
b, n = base.get(rel), now.get(rel)
if b == n: continue
kind = "added" if b is None else "removed" if n is None else "content" if b["sha256"] != n["sha256"] else "mode " + b["mode"] + "->" + n["mode"]
print(f"{rel:<20} {kind:<16} {'approved ' + approved[rel] if rel in approved else 'UNAPPROVED - investigate'}")
print("baseline json bytes:", len(json.dumps(base, sort_keys=True)))
Salida esperada (Python 3.13.5):
baseline entries: 3 | relay.conf 1defd9289ede0120
allow.list content approved CHG-118
relay.conf content UNAPPROVED - investigate
units/helper.sh added UNAPPROVED - investigate
units/relay.service mode 0o640->0o666 UNAPPROVED - investigate
baseline json bytes: 342
El script crea sus archivos en un directorio temporal, así que puede ejecutarlo en cualquier sitio. Observe que el resumen impreso para relay.conf depende solo del contenido del archivo: si cambia un carácter del contenido sintético en el script, el resumen cambia por completo.
Compare la salida con la semana de RLY-01 descrita arriba: cuatro diferencias, de las que solo la entrada PS-11 de la lista de permitidos, con CHG-118, tiene registro de cambio. Después haga una modificación propia dentro del script, por ejemplo añadir una segunda línea de depuración o cambiar un modo de 0640 a 0644, vuelva a ejecutarlo y confirme que la comparación informa exactamente de esa diferencia y de nada más. Una línea base que informa de más o de menos de lo que usted cambió todavía no es lo bastante fiable para servir de evidencia en una investigación.
6.8 Errores frecuentes y límites
- Bastionar una vez al construir el sistema y no volver a comprobarlo nunca.
- Ejecutar servicios como root «porque así era más fácil que funcionara».
- Guardar la línea base de integridad en el mismo equipo, modificable por los mismos administradores.
- Alertar de cada cambio de archivo en un sistema con mucha actividad, de modo que las alertas se ignoran; cree la línea base de los archivos que importan.
- Tratar una instantánea como una copia de seguridad sin probar la restauración, o dejar sin proteger instantáneas que contienen claves.
- Alojar invitados de zonas distintas en un mismo hipervisor sin registrar que esas zonas comparten ahora un fallo y un administrador.
La integridad de archivos detecta cambios; no le dice si el cambio fue malicioso, y no dice nada de los cambios en memoria ni en archivos que no incluyó en la línea base.
Ejercicios — capítulo 6
EX016 — Revisión de bastionado. Objetivo: aplicar el bastionado como sustracción. Entradas: un listado sintético de RLY-02: escucha en 0.0.0.0:22, 10.30.0.6:8443, 0.0.0.0:9000, 0.0.0.0:111; los paquetes instalados incluyen un compilador y un entorno de escritorio; el retransmisor se ejecuta como root. Restricciones: proponga solo cambios; cada uno necesita un motivo. Pasos: (1) enumere todos los cambios; (2) marque cuáles necesitan una solicitud de cambio y cuáles pueden hacerse en el próximo cambio estándar. Evidencia esperada: tabla. Rúbrica: 3 = SSH limitado a la interfaz de gestión, eliminado el puerto de depuración 9000, desactivado el puerto 111 (RPC), eliminados el compilador y el escritorio, retransmisor trasladado a una cuenta sin privilegios con restricciones; clasificación sensata de los cambios; 2 = la mayoría; 1 = genérico; 0 = nada.
EX017 — Proteja la línea base. Objetivo: diseñar el almacenamiento de la línea base. Entradas: el Lab 6. Restricciones: dos diseños. Pasos: (1) describa el almacenamiento de la línea base fuera del equipo, en una ubicación de escritura única; (2) describa la firma de la línea base con una clave que no esté en el retransmisor; (3) compare frente a qué protege cada uno. Evidencia esperada: media página. Rúbrica: 3 = ambos diseños correctos; señala que un atacante con root en el retransmisor puede cambiar archivos pero no puede cambiar sin ser detectado una línea base externa o firmada; señala que la propia herramienta de comparación en el equipo puede subvertirse, así que la comparación debería ejecutarse también desde fuera; 2 = un diseño; 1 = vago; 0 = nada.
EX018 — Ubicación en el hipervisor. Objetivo: razonar sobre plataformas compartidas. Entradas: propuesta de ejecutar RLY-01 (orientado a las estaciones), HIST-01 (orientado a la zona corporativa) y la pasarela clínica del hospital como invitados de un único hipervisor de FSTS para ahorrar costes. Restricciones: no la rechace automáticamente; indique condiciones. Pasos: (1) enumere lo que las zonas compartirían a partir de entonces; (2) enumere las condiciones con las que la aceptaría; (3) nombre el riesgo residual y su responsable. Evidencia esperada: una página. Rúbrica: 3 = hardware, administradores del hipervisor, red de gestión y almacenamiento compartidos, y un único punto de fallo para dos sectores; condiciones como zona de gestión separada, grupo de administración restringido con MFA, redes virtuales separadas sin puentes, margen de capacidad documentado y un plan para la pérdida del equipo; riesgo residual asumido por responsables de servicio con nombre; 2 = parcial; 1 = un sí o no sin matices; 0 = nada.
Síntesis del capítulo
Mantenga los servidores pequeños y conocidos: elimine lo que la función no necesita, ejecute los servicios con cuentas dedicadas sin privilegios, vincule los puertos de escucha a direcciones declaradas y trate los archivos de configuración y sus permisos como relevantes para la seguridad. Cree una línea base de los archivos que importan con un hash criptográfico, proteja esa línea base e investigue cada diferencia sin explicar. La virtualización simplifica la operación, pero concentra el control en el hipervisor y sus administradores; registre qué zonas comparten un equipo.