Pasar al contenido

Control-flow Enforcement (CET)

Referencia de arquitecturaFeex

También llamado CET

CET, Control-flow Enforcement Technology, añade mecanismos de hardware para proteger el flujo de control, principalmente pilas de sombras (shadow stacks) y seguimiento de bifurcaciones indirectas (indirect branch tracking). La compatibilidad del hardware y la protección activa en un proceso concreto son estados diferentes.

Lo que necesita saber

CET, Control-flow Enforcement Technology, añade mecanismos de hardware para proteger el flujo de control, principalmente pilas de sombras (shadow stacks) y seguimiento de bifurcaciones indirectas (indirect branch tracking). La compatibilidad del hardware y la protección activa en un proceso concreto son estados diferentes.

Cómo funciona

Las pilas de sombras mantienen el estado protegido de las direcciones de retorno, mientras que el seguimiento de bifurcaciones indirectas restringe los destinos de las bifurcaciones indirectas rastreadas. Abordan diferentes transferencias de flujo de control y tienen enumeración y habilitación independientes. El SO, el cargador, el binario de la aplicación y las bibliotecas intervienen para que un entorno de ejecución protegido funcione.

Dónde resulta útil

Una aplicación compilada adecuadamente puede ejecutarse con una pila de sombras gestionada por el SO, de modo que una discrepancia en la dirección de retorno desencadena la excepción definida en lugar de redirigir silenciosamente la ejecución. La política de compatibilidad puede diferir para módulos heredados y entre la protección en modo de usuario frente a modo de supervisor.

Cómo comprobar la compatibilidad y la habilitación

Compruebe el bit 7 de CPUID.07H.00H:ECX para la capacidad de pila de sombras y el bit 20 de EDX para el seguimiento de bifurcaciones indirectas; a continuación, inspeccione el estado documentado de protección de procesos del SO. Un bit de CPU disponible por sí solo no puede determinar la aplicación efectiva para un programa en ejecución.

La capacidad, la habilitación y la aplicación obligatoria deben comprobarse por separado. Un procesador puede admitir una protección mientras que el sistema operativo, la aplicación o la directiva de la máquina virtual no la activan. El campo de compatibilidad de una base de datos no es una atestación de un sistema en ejecución.

Lo que la función no establece

Un campo de CET no prueba que ambas subcaracterísticas estén presentes o habilitadas. CET no hace que un binario sea confiable, no previene todos los errores de corrupción de memoria ni sustituye a las actualizaciones. Deshabilitar una protección globalmente no es una solución rutinaria para el bloqueo de una aplicación.

Compatibilidad y rendimiento en la práctica

Mantenga actualizados el sistema operativo, el firmware y el entorno de ejecución afectado. Si una protección pone de manifiesto un problema de compatibilidad, utilice primero los diagnósticos del proveedor y las actualizaciones compatibles. Un interruptor de protección general puede afectar a aplicaciones no relacionadas y debe seguir una directiva explícita de despliegue y recuperación.

Lista de comprobación práctica para la verificación

  1. Registre el modelo exacto de procesador o plataforma, así como las versiones de la aplicación, el sistema operativo y el entorno de ejecución involucrados. Conserve la redacción del error o requisito real.
  2. Consulte la referencia del fabricante para ese modelo exacto y, a continuación, inspeccione la capacidad efectiva y el estado habilitado en el entorno donde se ejecuta el programa.
  3. Compare cada requisito del binario o backend seleccionado. Una función con nombre similar, un alias o una etiqueta de tecnología general no son suficientes.
  4. Confirme que la aplicación haya seleccionado la implementación prevista. Utilice sus diagnósticos documentados y una alternativa compatible cuando no se cumplan los requisitos.
  5. Realice un cambio admitido a la vez y repita la misma carga de trabajo. Mantenga disponibles la configuración original y la vía de recuperación.

Si la función aparece listada pero el software no puede usarla

Comience con el componente exacto que falla. Una base de datos de hardware describe la capacidad registrada; el sistema operativo o el hipervisor pueden exponer un entorno efectivo diferente. Un error de instrucción no válida también requiere investigar la instrucción que generó el fallo y la compilación del binario en sí, ya que la corrupción o una instrucción no compatible no relacionada pueden producir un síntoma similar.

Instale la versión de la aplicación, controlador o entorno de ejecución compatible con la plataforma exacta, y utilice la compilación de referencia o de contingencia documentada por el fabricante si es necesario. Una actualización de software no puede crear una instrucción de la que el procesador carece. Los cambios de firmware y directivas de seguridad deben seguir el procedimiento del fabricante del sistema y un plan de recuperación, en lugar de una fórmula de optimización genérica.

Fuentes y alcance de esta explicación

Intel 64 and IA-32 Architectures Software Developer's Manual · Kernel de Linux: pila de sombras de Control-flow Enforcement Technology

Estas referencias establecen el comportamiento arquitectónico y los requisitos de software. No verifican de forma independiente cada valor de función en la página de un modelo de hardware vinculado. Para conocer la compatibilidad de un modelo, consulte las pruebas del fabricante en dicha página y compruebe la configuración efectiva del sistema. Este artículo no proporciona una prueba de rendimiento, certificación ni fecha de revisión independiente.

Fuentes y verificación

Titularidad editorial: Feex. No se registra ninguna fecha de revisión independiente. Cómo investigamos.

¿Fue útil este artículo?

Un sí o un no es suficiente. Elija un motivo si lo desea o agregue una breve nota.

¿Fue útil este artículo?