Un grupo de investigadores de la Universidad Libre de Ámsterdam ha descubierto un nuevo método de ataque llamado "Native BHI" (CVE-2024-2201), que permite a los sistemas con procesadores Intel determinar el contenido de la memoria del núcleo de Linux mientras se ejecuta un exploit en el espacio de usuario. En el caso de aplicar el ataque a sistemas de virtualización, el atacante desde el sistema huésped puede acceder al contenido de la memoria del entorno host o de otros sistemas huéspedes.
El método Native BHI ofrece una técnica diferente para explotar la vulnerabilidad BHI (Branch History Injection, CVE-2022-0001), que elude los métodos de protección previamente implementados. El método de ataque BHI propuesto en 2022 implicaba la explotación de una vulnerabilidad dentro de un único nivel de privilegios, utilizando un exploit basado en la ejecución de un programa eBPF cargado por el usuario en el núcleo. Para bloquear esta vulnerabilidad, era suficiente restringir el acceso a la ejecución de código eBPF para usuarios normales.
El nuevo método Native BHI no requiere acceso a eBPF y permite a un usuario no privilegiado realizar un ataque desde el espacio de usuario. El método se basa en la ejecución de gadgets existentes en el código del núcleo, que son secuencias de instrucciones que conducen a la ejecución especulativa de instrucciones. Se ha desarrollado una herramienta especial llamada InSpectre Gadget para buscar gadgets adecuados en el núcleo, que, al analizar el núcleo 6.6-rc4, identificó 1511 gadgets Spectre y 2105 gadgets auxiliares de despacho.

Basándose en los gadgets encontrados, los investigadores han preparado un exploit que permite extraer de los búferes del núcleo una cadena con el hash de la contraseña del usuario root, cargada desde el archivo /etc/shadow. La velocidad de extracción de datos de la memoria del núcleo es de aproximadamente 3.5 Kb por segundo.

El método BHI es una variante avanzada del ataque Spectre-v2, en el que se elude la protección añadida (Intel eIBRS y Arm CSV2) y se organiza una fuga de datos mediante la sustitución de valores en el búfer de historia de saltos (Branch History Buffer), utilizado en la CPU para mejorar la precisión de la predicción de saltos al tener en cuenta la historia de saltos anteriores. Durante el ataque, mediante manipulaciones de la historia de saltos, se crean condiciones de predicción incorrecta de saltos y ejecución especulativa de instrucciones necesarias, cuyo resultado se queda en la caché.
Las diferencias respecto al ataque Spectre-v2 se reducen al uso de un búfer con historial de saltos (Branch History Buffer) en lugar de un búfer de predicción de saltos (Branch Target Buffer). Para extraer datos de la memoria, el atacante debe crear condiciones en las que, al ejecutar una operación especulativa, la dirección se obtenga de un área que debe identificarse. Tras realizar el salto indirecto especulativo, la dirección de salto leída de la memoria permanece en la caché, después de lo cual se puede aplicar uno de los métodos para determinar el contenido de la caché basado en el análisis del tiempo de acceso a los datos en caché y no en caché.
La ataque Native BHI no está protegido por el uso de las instrucciones Intel IBT (Indirect Branch Tracking) y el mecanismo híbrido de protección del flujo de ejecución FineIBT implementado en el núcleo de Linux, que combina el uso de instrucciones de hardware IBT y la protección de software kCFI (integridad del flujo de control del núcleo) para bloquear la violación del orden normal de ejecución (control flow). FineIBT permite la ejecución a través de un salto indirecto solo si se salta a la instrucción ENDBR, que se coloca al inicio de la función. Adicionalmente, se realiza una verificación de hashes, garantizando la inmutabilidad de los punteros.
Para protegerse contra la nueva variante de ataque, se ha añadido un cambio al núcleo de Linux que implementa un modo de protección adicional, utilizando los medios de protección de hardware propuestos por Intel (BHI_DIS_S) o una protección de software alternativa, diseñada para proteger el hipervisor. KVMLos desarrolladores del hipervisor Xen también han lanzado una corrección basada en el uso del modo BHI_DIS_S, que limita las predicciones basadas en el historial de saltos. El soporte para BHI_DIS_S está disponible en los procesadores a partir de Intel Alder Lake, así como en los CPUs de servidor a partir de Intel Sapphire Rapids. También está disponible un modo de protección de software, basado en el uso de secuencias para limpiar el búfer de historial de saltos, aunque conduce a una disminución más notable en el rendimiento.
Fuente: opennet.ru
