◇ OpenCyber Academy
Tecnólogo · Capítulo 6 · Español

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.

Capítulo 6 — Sistemas operativos y virtualización

Mapa de la lección

Lección 06 publicada. Mapa, ejemplo, EX016.

flowchart TD
  N0["Resultados de aprendizaje"]
  N1["6.1 Procesos y permisos"]
  N2["6.2 Contenedores y máquinas virtuales"]
  N3["6.3 Aislamiento del código generado"]
  N4["6.4 Archivos de modelos en reposo"]
  N5["Síntesis"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5
  N5 --> EX["Ejemplo resuelto"]
  EX --> Q["Ejercicio EX016"]

Dibujo lógico

flowchart LR
  N0["Resultados de aprendizaje"]
  N1["6.1 Procesos y permisos"]
  N2["6.2 Contenedores y máquinas virtuales"]
  N3["6.3 Aislamiento del código generado"]
  N4["6.4 Archivos de modelos en reposo"]
  N5["Síntesis"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> Q["EX016"]
[Resultados de aprendizaje]
    |
    v
[6.1 Procesos y permisos]
    |
    v
[6.2 Contenedores y máquinas virtuales]
    |
    v
[6.3 Aislamiento del código generado]
    |
    v
[6.4 Archivos de modelos en reposo]
    |
    v
[Síntesis]
    |
    v
[Ejemplo resuelto] --> [Ejercicio EX016]

Resultados de aprendizaje

Usted podrá (1) explicar los procesos, los usuarios, los permisos de archivos y el aislamiento; (2) usar contenedores y máquinas virtuales para aislar los componentes de IA; (3) confinar en un entorno aislado el código generado o ejecutado por herramientas de IA; y (4) proteger los archivos de modelos en reposo.

6.1 Procesos y permisos

Todo servicio se ejecuta como un proceso bajo una cuenta de usuario. Si el orquestador se ejecuta como root, un fallo se convierte en un compromiso total del sistema. Ejecute cada componente con su propio usuario de bajo privilegio y con acceso de lectura solo a los archivos que necesita. En Ask Brightwell, el orquestador, el servicio de recuperación y los servicios de herramientas se ejecutan cada uno con su propia cuenta, de modo que un fallo en el orquestador no puede leer directamente la base de datos de pedidos. La cuenta de la herramienta de pedidos puede leer los pedidos pero no modificarlos, y la cuenta de la herramienta de devoluciones puede crear devoluciones pero no leer otras tablas. Jonas lo confirma en preproducción enviando una consulta a la tabla de pedidos con la cuenta del orquestador y comprobando que la base de datos la rechaza.

6.2 Contenedores y máquinas virtuales

Los contenedores empaquetan un servicio con sus dependencias y lo aíslan mediante funciones del núcleo; las máquinas virtuales aíslan con más fuerza, con un núcleo separado. Ejecute los servidores de modelos, la recuperación y los servicios de herramientas en contenedores separados con imágenes mínimas, sistemas de archivos de solo lectura cuando sea posible y sin acceso de red innecesario. En CodePilot, el servidor del modelo autoalojado se ejecuta en su propio contenedor con un sistema de archivos de solo lectura, de modo que un servidor comprometido no puede reescribir sus archivos de modelo. Los servicios de herramientas de Ask Brightwell están en contenedores separados con reglas de red que solo permiten que los llame el orquestador. Las imágenes separadas también dejan claro qué componente necesita qué secreto.

6.3 Aislamiento del código generado

Los asistentes de programación y los agentes con una herramienta de «ejecutar código» ejecutan texto producido por un modelo, un texto en el que un atacante puede influir. Ejecute ese código en un entorno aislado desechable: sin red por defecto, sin acceso a secretos, con límites de CPU y de memoria, con un límite de tiempo y destruido tras su uso. El botón original «ejecutar pruebas» de CodePilot incumplía todas estas reglas: ejecutaba el código generado en un servidor de compilación compartido que tenía claves de despliegue. El nuevo diseño arranca un contenedor nuevo para cada ejecución, sin red, sin secretos y con un límite de tiempo, y lo destruye después. Un comentario plantado todavía puede moldear el código, pero el código ya no puede llegar a nada valioso.

6.4 Archivos de modelos en reposo

Los archivos de pesos de un modelo pueden sustituirse o manipularse. Algunos formatos (por ejemplo, los archivos basados en pickle de Python) pueden ejecutar código al cargarse. Prefiera formatos que solo almacenan tensores, verifique los hashes antes de cargar y restrinja quién puede escribir en los directorios de modelos.

"""Lab H: integrity of model artefacts with SHA-256 manifests (stdlib only).
Creates synthetic 'artefact' bytes, records a manifest, then detects a
one-byte tampering and a swapped file. No real models are involved."""
import hashlib, json
files = {"model.bin": bytes(range(256)) * 40, "tokenizer.json": b'{"vocab": ["a", "b"]}',
         "config.yaml": b"layers: 4\nheads: 8\n"}
manifest = {n: hashlib.sha256(b).hexdigest() for n, b in files.items()}
print(json.dumps({k: v[:16] for k, v in manifest.items()}, indent=1))
received = dict(files)
tampered = bytearray(received["model.bin"]); tampered[5000] ^= 1
received["model.bin"] = bytes(tampered)
received["config.yaml"] = b"layers: 4\nheads: 8\ntrust_remote_code: true\n"
for n, b in sorted(received.items()):
    ok = hashlib.sha256(b).hexdigest() == manifest[n]
    print(f"{n:15s} {'OK' if ok else 'MISMATCH'}")

Salida esperada:

{
 "model.bin": "e96760a87768717b",
 "tokenizer.json": "f63d2ddabc61f2d9",
 "config.yaml": "e5bbb570ca0fcb87"
}
config.yaml     MISMATCH
model.bin       MISMATCH
tokenizer.json  OK

Para el modelo autoalojado de CodePilot, Brightwell guarda el hash esperado de cada archivo en el control de versiones y el cargador se niega a arrancar si un archivo difiere. Solo la cuenta de la cadena de despliegue puede escribir en el directorio de modelos, y registra cada escritura, de modo que un archivo sustituido quedaría a la vez bloqueado y visible.

6.5 Ejemplo resuelto (caso sintético de Brightwell)

CodePilot ofrece un botón «ejecutar pruebas» que ejecuta el código generado en un servidor de compilación compartido con acceso a claves de despliegue. Jonas muestra en una copia que un comentario en un archivo de código abierto descargado puede llevar al asistente a escribir código que imprime las variables de entorno. Traslada la ejecución a un contenedor desechable sin red ni secretos y añade comprobaciones de hash para los archivos del modelo autoalojado; el laboratorio muestra cómo se detecta un archivo modificado. El comentario plantado no necesitó explotar nada: solo tuvo que persuadir al asistente, y el acceso del servidor de compilación hizo el resto.

6.6 Errores y límites

El diseño original de CodePilot tenía el segundo error y el orquestador anterior de Ask Brightwell se arriesgaba al primero. Los cambios de este capítulo dan a cada servicio su propia cuenta, trasladan el código generado a un contenedor desechable y comprueban los hashes de los archivos de modelos antes de cargarlos. Cada error es barato de evitar cuando se construye un servicio y caro de corregir cuando otros sistemas ya dependen de él. La cadena de despliegue ejecuta ahora una comprobación para cada error en cada despliegue.

Ejercicios

Síntesis

El aislamiento del sistema operativo limita lo que puede hacer un componente de IA comprometido: cuentas de mínimo privilegio, contenedores, entornos aislados desechables y archivos de modelos verificados.

Siga estudiando — capítulo 06 de 30

← Capítulo 05 (borrador) · Índice de capítulos del curso · Capítulo 07 (borrador) →