Cómo la paginación mejora la seguridad del sistema: Aislamiento de memoria, control de acceso y virtualización

Paginación—el esquema de gestión de memoria que divide la memoria virtual y física en páginas de tamaño fijo—es un primitivo de seguridad fundamental en los núcleos de sistemas operativos modernos (Linux, Windows, macOS, *BSD, hipervisores). Aquí te explicamos cómo impone seguridad.

1. Aislamiento de memoria (Separación de procesos)

  • Cada proceso obtiene un espacio de direcciones virtuales privado (ej., 128 TB en x86-64)
  • Las tablas de páginas mapean páginas virtuales → marcos físicos de forma única por proceso
  • El proceso A no puede direccionar la memoria del proceso B — no existe traducción válida
  • Derrota: Desbordamiento de búfer → lectura/escritura arbitraria, filtración de información, inyección de código

2. Permisos a nivel de página (ACL aplicados por hardware)

Cada Entrada de Tabla de Páginas (PTE) contiene bits:

BitNombreFunción de seguridad
PPresente¿Página mapeada? Si es 0 → fallo de página
R/WLectura/EscrituraProteger código de escritura, datos de solo lectura
U/SUsuario/SupervisorAcceso Ring 3 vs Ring 0 — memoria del kernel protegida
NX/XDNo-ejecutarDEP: Pila/montículo no ejecutables → detiene inyección de código
Sucio/AccedidoSeguimientoCopia bajo demanda, conjunto de trabajo, decisiones de intercambio

3. Separación del espacio de usuario y kernel

  • El kernel mapea toda la memoria física en la mitad alta (ffff8000`00000000+)
  • Los procesos de usuario mapean solo sus páginas en la mitad baja
  • El bit U/S = 0 para páginas del kernel → acceso de usuario = fallo de página (#PF) → SIGSEGV / BSOD
  • KPTI (Aislamiento de Tablas de Páginas del Kernel) mitiga Meltdown al desmapear el kernel en modo usuario

4. Contención de desbordamiento de búfer

  • Desbordamiento de pila sobrescribe páginas de pila adyacentes → golpea página de guardia (P=0) → #PF
  • Desbordamiento de montículo: Los metadatos del asignador en páginas separadas, pueden ser de solo lectura
  • ASLR + Paginación = direcciones base aleatorias por mapeo — los exploits necesitan una filtración de información primero

5. Fallos de página como telemetría de seguridad

  • #PF en página NX → intento de ejecutar código en datos (shellcode, ROP)
  • #PF en página U/S=0 → proceso de usuario tocando memoria del kernel
  • #PF en página P=0 → acceso a memoria liberada/no mapeada (use-after-free)
  • Hipervisores/EPP (Intel PT, AMD IBS) rastrean #PF para detección de anomalías

6. Virtualización segura (Traducción de direcciones de segundo nivel — SLAT)

  • Intel EPT, AMD RVI, ARM Stage-2: Dirección física de invitado → Dirección física de host
  • El hipervisor controla ambos niveles de tabla de páginas
  • La fuga de máquina virtual requiere romper dos capas de traducción + validación del hipervisor
  • Cifrado de memoria (SEV-SNP, TDX) añade claves de cifrado por máquina virtual en las tablas de páginas

7. Características de endurecimiento avanzadas

  • Bit WP (Write Protect) en CR0: El kernel aplica solo lectura en sus propias páginas
  • SMEP/SMAP: La CPU bloquea la ejecución/acceso del kernel a páginas de usuario
  • PKU (Protection Keys for Userspace): 16 dominios, registro por subproceso (PKRU)
  • MTE (Memory Tagging Extension, ARMv8.5+): Etiquetas de 4 bits en el byte superior del puntero + gránulo

Resumen

La paginación transforma la memoria física (compartida, no protegida) en memoria virtual (aislada, con permisos, auditable). Es la base de hardware para: aislamiento de procesos, principio de menor privilegio, DEP, ASLR, KPTI, virtualización y seguridad de memoria. Sin paginación, los modelos de seguridad modernos colapsan.