InvisiCaps: el modelo de capacidades de Fil-C para la seguridad de memoria en C y C++

Fuentes: InvisiCaps: The Fil-C Capability Model

Fil-C es un sistema que garantiza la seguridad de memoria de todas las operaciones en C y C++. Su mayor reto es la seguridad de punteros, resuelta mediante un sistema de capacidades: cada puntero rastrea dinámicamente el objeto al que puede acceder y se prohíbe cualquier acceso fuera de ese objeto, accesos a memoria liberada, escrituras en datos de solo lectura o lecturas/escrituras en objetos no destinados a datos. Además, Fil-C busca compatibilidad total con el código existente, preservando el tamaño de los punteros en 64 bits y admitiendo usos idiomáticos habituales.

Este artículo describe InvisiCaps (Invisible Capabilities), el modelo de capacidades que sustituye a diseños anteriores: PLUT (punteros de 256 bits), SideCaps (protocolo atómico ingenioso pero muy lento, 200 veces más lento que C) y MonoCaps (capacidades monotónicas de 128 bits con recolector de basura). InvisiCaps reducen el puntero a 64 bits, mantienen la seguridad entre hilos y bajan la sobrecarga a aproximadamente 4 veces, con margen de optimización.

InvisiCaps se inspira en SoftBound y constituye una implementación software de CHERI. Internamente, un puntero en vuelo se compone de un intval (valor crudo visible al programa) y un lower (puntero fiable a la cabecera del objeto con los límites de acceso y datos auxiliares). Cuando el puntero se almacena en el heap, se codifican tanto el lower como el intval de forma que el programa no pueda corromper las capacidades. El modelo soporta uniones, detecta de forma determinista los use-after-free y mantiene compatibilidad con el modelo de memoria de C y C++.