OpenCyber Academy
Tecnólogo · Capítulo 6 · Español
Código del curso: OCA-092Capítulo 06: OCA-092-C006

Capítulo 6 — Sistemas operativos y virtualización

Aprendizaje gratuito y abierto para quienes desean proteger a las personas y la tecnología. No se necesita una cuenta para estudiar ni consultar las respuestas.

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:

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

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.

Respuestas desarrolladas

EX016 — Revisión de bastionado. Limitar SSH a la interfaz de gestión (cambio normal, porque un error deja fuera a los administradores); eliminar el puerto de depuración en 0.0.0.0:9000 (cambio normal, después de conservar la evidencia de quién lo habilitó; capítulo 20); desactivar RPC en el puerto 111 (cambio estándar si existe un procedimiento); eliminar el compilador y el entorno de escritorio (cambio estándar); trasladar el retransmisor de root a una cuenta dedicada relay con restricciones del sistema de archivos (cambio normal con pruebas). Cada cambio tiene un motivo vinculado a las secciones 6.1 y 6.2.

EX017 — Proteja la línea base. Diseño 1: tras cada cambio aprobado, la línea base se exporta a un almacén de escritura única fuera del equipo (un contenedor de solo anexado o un servidor que los administradores del retransmisor no pueden modificar). Diseño 2: el archivo de la línea base se firma con una clave que custodia el equipo de seguridad, no el retransmisor; la comparación verifica primero la firma. Un atacante con root en el retransmisor puede alterar archivos e incluso la copia local de la línea base, pero no puede alterar sin ser detectado la línea base externa o firmada. Como la propia herramienta de comparación del retransmisor podría subvertirse, ejecute también la comparación desde fuera (recogiendo los hashes de forma remota o comparando fuera del equipo los archivos recogidos).

EX018 — Ubicación en el hipervisor. Compartido: el hardware físico y sus fallos; los administradores del hipervisor (que en la práctica administran todos los invitados); la red de gestión; el almacenamiento y las instantáneas; el calendario de parches. Condiciones para aceptarla: gestión del hipervisor en una zona propia, alcanzable solo desde el servidor de salto; un grupo pequeño de administración del hipervisor con MFA y registro; redes virtuales separadas sin puentes entre los invitados orientados a las estaciones y los orientados a la zona corporativa; margen de capacidad documentado para todos los invitados en el pico; plan probado para la pérdida del equipo (qué falla a la vez para el agua y para el hospital). Riesgo residual: un compromiso o fallo del hipervisor afecta a dos sectores; lo aceptan conjuntamente los responsables de los servicios de Agua y del hospital. Rechazarla de plano sin condiciones obtiene menos puntuación que esto.