CHERI: seguridad de memoria y compartimentación fina para CPU modernas

Fuentes: Adopting Memory-Safety and Fine-Grained Compartmentalisation with CHERI, queue.acm.org

CHERI: seguridad de memoria y compartimentación fina para CPU modernas

CHERI (Capability Hardware Enhanced RISC Instructions) es una arquitectura que busca resolver uno de los problemas más antiguos y persistentes de la seguridad informática: el manejo inseguro de punteros en memoria. Según explicó David Chisnall, investigador involucrado en el proyecto, la iniciativa fue desarrollada para enseñar al hardware que los punteros son una entidad con significado propio y no simples números manipulables. En las arquitecturas convencionales, un puntero es solo una dirección: el programador puede crearlo a partir de operaciones aritméticas, sin que el procesador valide si apunta a una zona de memoria autorizada. CHERI introduce el concepto de capability, un token de autoridad no falsificable que combina la dirección con metadatos como límites de memoria y permisos de acceso.

La idea central de CHERI es que cualquier instrucción que en una ISA tradicional usaría una dirección como operando — cargas, almacenes y saltos — ahora requiere una capability protegida por hardware. Estas capabilities son más grandes que un puntero convencional: en sistemas de 64 bits ocupan 128 bits, ya que la mitad corresponde a la dirección y la otra mitad a los metadatos. Para almacenar los límites superior e inferior sin duplicar la dirección, CHERI emplea una representación de coma flotante en la que el exponente es compartido entre ambas cotas. Esto permite una alta precisión para objetos pequeños y granularidad suficiente para los grandes, sin penalizar el rendimiento ni el espacio de almacenamiento de forma significativa.

Los permisos asociados a cada capability son otro de los pilares del modelo. Además de los permisos básicos de lectura y escritura, CHERI distingue si el acceso permite cargar o almacenar punteros, lo que impide la exfiltración de capabilities embebidas en estructuras de datos. También incorpora un permiso llamado "permit load mutable", que al ser retirado garantiza inmutabilidad profunda: si un receptor puede recorrer un árbol de objetos, no podrá modificar los nodos del mismo. Esto habilita modelos de delegación segura en los que una parte del sistema puede entregar referencias a otra sin ceder control total sobre los datos subyacentes.

Un aspecto clave del diseño es que CHERI no es una ISA única, sino un conjunto de ideas abstractas que se localizan en diferentes arquitecturas. Al igual que SIMD se materializa en NEON o SVE en ARM y en SSE o AVX en Intel, CHERI cuenta con implementaciones para MIPS — usada en los prototipos de investigación originales —, una extensión para AArch64 de ARM conocida como Morello, y la especificación RVY para RISC-V, actualmente en sus etapas finales de estandarización. En el lado del software, CheriBSD, un fork de FreeBSD, fue el banco de pruebas inicial; muchas de sus ideas se estániendo gradualmente a Linux, con un enfoque claro en la adopción incremental y la compatibilidad con binarios existentes, un requisito indispensable para dispositivos móviles y centros de datos que arrastran décadas de código acumulado.

En el otro extremo del espectro, CHERIoT es una localización pensada para microcontroladores. A diferencia del ecosistema móvil o empresarial, los desarrolladores de sistemas embebidos están dispuestos a recompilar su código si las ganancias de seguridad lo justifican. CHERIoT demuestra que las ideas de CHERI pueden escalar desde clases de teléfonos móviles hasta dispositivos con recursos muy limitados, al mismo tiempo que muestra qué ocurre cuando todo el stack, desde el hardware hasta el software, se diseña asumiendo capabilities desde el inicio. El resultado es source-compatible: no exige reescribir décadas de código en C, sino recompilarlo.

Chisnall advirtió también sobre un error común al hablar de CHERI: no es solo una técnica de aislamiento. Aunque las MMU llevan décadas aislando procesos y máquinas virtuales completas, el verdadero reto aparece cuando dos cargas de trabajo no están totalmente aisladas y necesitan comunicarse. Ahí es donde entran las capabilities como modelo de programación para compartir memoria de forma segura, granular y verificable por hardware.

El estado actual del proyecto es de transición hacia el despliegue real. La estandarización de RVY para RISC-V abre la puerta a implementaciones en hardware comercial, mientras que CheriBSD y los puertos a Linux siguen madurando el ecosistema de software. Aunque todavía queda camino por recorrer antes de ver CHERI en dispositivos de consumo masivo, el enfoque pragmático — compatibilidad con código existente, localización en ISAs populares y un modelo de seguridad con base matemática sólida — sugiere que las capabilities de hardware tienen posibilidades reales de convertirse en la próxima gran capa de protección frente a las vulnerabilidades de memoria que dominan el panorama de exploits actual.