Parece que FineIBT es La combinación de lo mejor de la tecnología de cumplimiento de flujo de control y la integridad de flujo de control de Intel como una implementación alternativa mejorada de integridad de flujo de control (CFI) podría estar lista para la línea principal con el próximo ciclo de Linux 6.2.
La compatibilidad con FineIBT se ha agregado a la rama x86/core de TIP, donde normalmente residen los cambios x86 centrales hasta que se envían como parte de la ventana de combinación del siguiente ciclo del kernel. Teniendo en cuenta el momento y salvo que surja algún problema con FineIBT, ahora que ha llegado a TIP x86/core, es probable que se envíe para la ventana de combinación de Linux 6.2 en diciembre.
Los ingenieros de Intel trabajaron en este código de”seguimiento de bifurcación indirecta fina”. Como se explica en el parche:
Implemente un esquema de CFI alternativo que combine la naturaleza detallada de kCFI pero también aproveche al máximo la CFI de hardware de grano grueso proporcionada por IBT.
Para contrastar:
kCFI es un esquema de CFI de software puro y se basa en poder leer texto, específicamente la instrucción *antes* del símbolo de destino, y realiza la validación hash *antes* de hacer el llamada (de lo contrario, el flujo de control ya está comprometido).
FineIBT es un esquema híbrido de software y hardware; al asegurarse de que cada destino de rama comience con una validación de hash, es posible colocar la validación de hash después de la rama. Esto tiene varias ventajas:
o se evita la carga (hash); sin memoria; sin requisito de RX.
o El estado IBT WAIT-FOR-ENDBR es una parada de especulación; al colocar la validación de hash en la instrucción inmediata después del objetivo de la rama, hay una ventana de especulación mínima y el conjunto es una defensa viable contra SpectreBHB.
o Kees se siente obligado a mencionar que es un poco más vulnerable cuando el atacante puede escribir código.
Obviamente, este parche se basa en kCFI, pero además también se basa en el relleno de los parches de seguimiento de profundidad de llamadas. Utiliza este relleno para colocar la validación hash mientras se reescriben los sitios de llamada para modificar el objetivo indirecto para que esté 16 bytes delante del objetivo original, alcanzando así este nuevo preámbulo.
En particular, no hay hardware que necesite seguimiento de la profundidad de llamadas (Skylake) y soporte IBT (Tigerlake y en adelante).
La opción de configuración para esta característica del kernel está bajo”FINEIBT”.