Si bien la compatibilidad con Intel Shadow Stack ha existido desde las CPU de Tiger Lake como parte de la Tecnología de cumplimiento de flujo de control (CET) de Intel, finalmente, para el kernel de Linux 6.4, esta función de seguridad se habilita con el kernel principal de Linux.
Los ingenieros de Intel Linux llevan mucho tiempo trabajando en la compatibilidad con shadow stack como parte de CET. La otra parte de CET, Indirect Branch Tracking, se actualizó en Linux 5.18.
La funcionalidad shadow stack de Intel para Linux 6.4 es la protección de la dirección de retorno para defenderse de los ataques de programación orientada al retorno (ROP). Las últimas CPU de AMD también brindan la funcionalidad Shadow Stack que es compatible con la implementación de Intel.
El ingeniero de Intel Linux desde hace mucho tiempo, Dave Hansen, envió la solicitud de extracción x86/shstk el lunes por presentar finalmente esta función. Explicó en ese mensaje:
Tire de x86/shstk para 6.4. Este es el tan esperado soporte de Shadow Stack. Es la característica de seguridad de hardware más deseada en mucho tiempo. Tanto AMD como Intel tienen implementaciones (compatibles). Ha estado presente en el lado de Intel desde las CPU de 11.ª generación, pero tuvo algunos tropiezos en el camino y está un poco retrasado.
La parte más complicada de todo esto (IMNHO) fue que existen shadow stacks en un área gris de permisos. Un PTE de shadow stack literalmente dice Write=0, pero algunas instrucciones _pueden_ escribir en él. Los PTE tampoco pueden ser de solo lectura, por lo que no pueden ser COW. Son bichos raros.
Los permisos PTE Write=0,Dirty=1 también significan que el bit sucio no se puede usar tan libremente como antes. Esas dos cosas se combinan para crear una buena cantidad de cambios en la gestión de PTE.
Algunas cosas más que debes saber:
1. Hay una cantidad no trivial de rotación de núcleo mm. Tiene acks de mm amigos y espero que no sea una sorpresa para Andrew. Estos agregan un argumento VMA a pte_mkwrite(). Hay un nuevo usuario en la pila de Andrew que deberá arreglarse antes de que se fusione con el árbol mm.
2. Ha habido una serie inusual de problemas de compatibilidad del espacio de usuario con shadow stacks. Si bien el paso a los nuevos valores de arch_prctl() ayudó, aún podemos imaginar escenarios en los que este código antiguo podría mordernos. El plan es tratar de prohibir que cualquier aplicación problemática use shadow stack si surge algo en la práctica. Obviamente deberíamos estar atentos a estos.
3. Esto entra en conflicto con el código LAM que viene en x86/mm. Discutiré la resolución cuando envíe x86/mm.
Al momento de escribir, Linus Torvalds todavía tiene que obtener el soporte de Shadow Stack o hacer comentarios en la lista de correo. Veremos si todo está bien en que Linus incorpore esta función para Linux 6.4 o si tiene reservas debido a los comentarios anteriores. Con suerte, esta característica de seguridad de Intel/AMD para ayudar a defenderse de los ataques ROP finalmente se fusionará.