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

Fuentes: Adopting Memory-Safety and Fine-Grained Compartmentalisation with CHERI

CHERI es una extensión de arquitectura de hardware que convierte los punteros en objetos con metadatos —límites, permisos y, opcionalmente, tipo— protegidos por la propia CPU, en lugar de tratarlos como simples números manipulables con aritmética entera. El investigador David Chisnall, del equipo detrás del proyecto, explica en esta charla que la idea une dos tradiciones: los sistemas de capacidades, vigentes desde los años sesenta como tokens de autoridad inalterables, y los punteros enriquecidos o fat pointers. En la práctica, cada puntero CHERI es una capacidad que la CPU solo puede desreferenciar si se presenta de forma explícita y siempre dentro de sus límites.

La familia CHERI no es un único ISA, sino un conjunto de ideas localizadas sobre arquitecturas concretas: la extensión Morello sobre AArch64, las implementaciones de investigación sobre MIPS y CheriBSD, y CHERIoT, pensada para microcontroladores. En el ecosistema RISC-V se trabaja en RVY como base estandarizada. En sistemas de 64 bits la capacidad ocupa 128 bits (64 de dirección y 64 de metadatos); los límites se almacenan con una representación de coma flotante con mantisas independientes y exponente compartido, de modo que cuanto mayor es un objeto, mayor ha de estar alineado.

El modelo de permisos distingue carga, almacenamiento y carga/almacenamiento de punteros, e introduce permit load mutable, que aplica una inmutabilidad profunda: si una capacidad se carga sin ese permiso, la capacidad resultante pierde store y permit load mutable, lo que permite delegar acceso de solo lectura a una raíz de árbol sin necesidad de recurrir a compartimentos separados. CHERI se plantea como vía para la compartimentación fina de procesos en cargas de trabajo que deben comunicarse y compartir memoria, algo que las MMU y las máquinas virtuales resuelven peor cuando los dominios no están completamente aislados.