Un nuevo ataque sortea las defensas de hardware para el fallo Spectre en las CPU de Intel y ARM
Aunque no es tan fácil de explotar, esta prueba de concepto muestra que algunos procesadores Intel y ARM siguen siendo vulnerables a los ataques de canal lateral.
Las mitigaciones basadas en hardware introducidas en las CPU de Intel y ARM en los últimos años, para solucionar un grave fallo llamado Spectre, no son tan fuertes como se creía. Los investigadores han ideado un nuevo método de ataque que puede vencer las defensas, pero su explotación no es tan fácil como con el fallo original.
El nuevo ataque, descubierto por investigadores del Grupo de Seguridad de Sistemas y Redes de la Universidad Libre de Ámsterdam (VUSec), se denomina Spectre-BHI, por Branch History Injection, o Spectre-BHB, por Branch History Buffer, ya que Intel y ARM le asignaron nombres diferentes. Según el equipo de investigación, se trata de una extensión del ataque Spectre versión 2 de 2017, también conocido como Spectre-BTI (Branch Target Injection) y, de forma similar a Spectre v2, puede provocar la fuga de información sensible del espacio de memoria privilegiado del kernel.
El exploit de prueba de concepto creado por los investigadores de VUSec filtra el hash de la contraseña de root del archivo /etc/shadow utilizando una cuenta sin privilegios. El archivo /etc/shadow es un archivo del sistema en Linux al que sólo puede acceder la cuenta administrativa de root. Básicamente, el exploit obliga al kernel a cargar el archivo en la memoria, donde normalmente estaría protegido del acceso de procesos sin privilegios, pero luego aprovecha el ataque Spectre-BHI para acceder y filtrar su contenido. Se trata de una importante violación de la frontera de seguridad fundamental en los sistemas operativos modernos que separa las aplicaciones en modo usuario y el espacio de memoria del núcleo privilegiado.
¿Qué es Spectre?
Spectre es una clase de vulnerabilidades de seguridad, reveladas originalmente en enero de 2017, que se derivan de una característica relacionada con el rendimiento de las CPU modernas, llamada ejecución especulativa, en la que la CPU intenta predecir por adelantado qué camino tomará la ejecución de un programa cuando llegue a una bifurcación condicional y ejecutar las instrucciones en ese camino por adelantado. Si la predicción, que se basa en algoritmos internos, resulta ser mala, los resultados almacenados en las cachés temporales de la CPU se descartan. Los ataques de ejecución especulativa como Spectre, y muchos otros que le siguieron, engañan este mecanismo para filtrar información de las cachés temporales que actúan como canales laterales.
«En los días en que se encontró Spectre, se podía explotar fácilmente la inyección de objetivos de rama (BTI o Spectre-v2), la variante más peligrosa de Spectre, a través de los niveles de privilegio», explican los investigadores de VUSec. «Por ejemplo, un atacante sin privilegios en tierra de usuario podría alimentar cualquier objetivo de rama al predictor de rama indirecto, desde tierra de usuario y engañar al kernel para que salte especulativamente a la ubicación del código objetivo inyectado, y ejecute el código encontrado allí».
Para mitigar el riesgo, proveedores de software como Google y los desarrolladores del kernel de Linux idearon soluciones basadas en software como retpoline. Aunque estas soluciones eran eficaces, introducían un impacto significativo en el rendimiento, por lo que los proveedores de CPU desarrollaron posteriormente defensas basadas en hardware. La de Intel se llama EIBRS y la de ARM, CSV2.
«Estas soluciones son complejas —lean el artículo para saber más sobre ellas— pero lo esencial es que el predictor «de alguna manera» hace un seguimiento del nivel de privilegios (usuario/núcleo) en el que se ejecuta un objetivo», explican los investigadores de VUSec. «Y, como es de esperar, si el objetivo pertenece a un nivel de privilegio inferior, la ejecución del kernel no lo utilizará (es decir, se acabaron las ubicaciones de código arbitrarias proporcionadas por el atacante para secuestrar especulativamente el flujo de control del kernel)».
El problema, sin embargo, es que el predictor de la CPU se basa en un historial global para seleccionar las entradas objetivo a ejecutar especulativamente y, como demostraron los investigadores de VUSec, este historial global puede ser envenenado. En otras palabras, mientras que el Spectre v2 original permitía a los atacantes inyectar realmente ubicaciones de código objetivo y luego engañar al kernel para que ejecutara ese código, el nuevo ataque Spectre-BHI/BHB sólo puede forzar al kernel a predecir erróneamente y ejecutar fragmentos de código interesantes que ya existen en el historial y que se ejecutaron en el pasado, pero que podrían filtrar datos.
«¿Están rotos Intel eIBRS y Arm CSV2? Más o menos», dicen los investigadores. «Es decir, las mitigaciones funcionan como se pretende, pero la superficie de ataque residual es mucho más significativa de lo que los vendedores supusieron en un principio. […] Sin embargo, encontrar artilugios explotables es más difícil que antes, ya que el atacante no puede inyectar directamente los objetivos del predictor a través de los límites de los privilegios.»
Cómo mitigar la nueva vulnerabilidad Spectre-BHI
Intel rastrea la nueva vulnerabilidad Spectre-BHI como CVE-2022-0001, para la variación de privilegios cruzados y CVE-2022-0002 para la variación de los mismos privilegios. ARM lo rastrea como CVE-2022-23960 para ambas variaciones.
Según Intel, la mayoría de las CPU de la compañía están afectadas, aparte de las de la familia Atom. En el caso de ARM, las CPU vulnerables son Cortex-A15, Cortex-A57, Cortex-A72, Cortex-A73, Cortex-A75, Cortex-A76, Cortex-A76AE, Cortex-A77, Cortex-A78, Cortex-A78AE, Cortex-A78C, Cortex-X1, Cortex-X2, Cortex-A710, Neoverse N1, Neoverse N2 y Neoverse V1.
Ambas compañías han publicado avisos y pondrán a disposición mitigaciones de software por ahora. ARM dispone de cinco mitigaciones diferentes en función del sistema.
Para su hazaña en Linux, los investigadores de VUSec abusaron de eBPF, una tecnología disponible desde el kernel 4.4 que puede ejecutar programas en caja de arena en el kernel de un sistema operativo. Aunque eBPF no forma parte del problema subyacente y se pueden encontrar otros artilugios de código para filtrar datos, la presencia de eBPF sin privilegios «facilita enormemente la ejecución especulativa (y otros) ataques», según los investigadores. Por eso recomiendan desactivarlo y algunas distribuciones de Linux han empezado a desactivarlo por defecto.
https://cso.computerworld.es/archive/un-nuevo-ataque-sortea-las-defensas-de-hardware-para-el-fallo-spectre-en-las-cpu-de-intel-y-arm