Hace poco en equipo de investigadores dieron a conocer la noticia sobre una nueva variante de BHI, llamado como «Native BHI» y ya catalogado bajo CVE-2024-2201. Este método permite a los sistemas basados en Intel obtener acceso al contenido de la memoria del kernel de Linux al ejecutar un exploit desde el espacio del usuario.
Esta nueva variante fue descubierta por «InSpectre Gadget» una herramienta diseñada por los investigadores para la detección de vulnerabilidades comunes. Utiliza técnicas avanzadas de ejecución simbólica para examinar dispositivos Spectre en detalle y evaluar su capacidad de explotación. Esta herramienta no solo identifica dispositivos explotables, sino que también modela técnicas de explotación sofisticadas para comprender mejor la amenaza que representan estos dispositivos.
La herramienta ha demostrado su efectividad al presentar el primer exploit nativo Spectre-v2 contra el kernel de Linux en CPU Intel de última generación. Este exploit, basado en la reciente variante BHI, es capaz de filtrar memoria del kernel a una tasa significativa, además de que ha demostrado que en el caso de sistemas de virtualización, este ataque podría permitir a un atacante en un sistema invitado acceder al contenido de la memoria del sistema host o de otros sistemas invitados.
Native BHI presenta una técnica distinta para aprovechar la vulnerabilidad BHI evadiendo los métodos de protección previamente implementados. BHI implicaba explotar una vulnerabilidad en la CPU a nivel de privilegio, mediante la ejecución de un programa eBPF cargado por el usuario en el kernel. Para mitigar este tipo de ataque, se restringió el acceso a la ejecución de código eBPF para usuarios no privilegiados.
El nuevo método no requiere acceso a eBPF y permite a un usuario sin privilegios llevar a cabo un ataque desde el espacio del usuario. Este método se basa en la ejecución de elementos existentes en el código del núcleo, específicamente secuencias de comandos que inducen la ejecución especulativa de instrucciones.
BHI representa una evolución del ataque Spectre-v2, donde se manipula el Branch History Buffer (BHB) en lugar del Branch Target Buffer (BTB) para eludir las protecciones adicionales (Intel eIBRS y Arm CSV2) y obtener acceso a datos sensibles. El BHB es crucial para mejorar la precisión en la predicción de ramificaciones al considerar la historia de transiciones pasadas en la CPU. Durante el ataque BHI, se manipula el historial de transiciones para provocar una predicción incorrecta y ejecutar instrucciones especulativas que resultan en la filtración de datos en el caché.
A diferencia del ataque Spectre-v2, BHI se enfoca en el uso del BHB en lugar del BTB, ya que el atacante crea condiciones para que una operación especulativa tome la dirección del área que se busca determinar, seguida de un salto indirecto especulativo que deja la dirección de salto en el caché. Luego, se emplea un análisis de los tiempos de acceso a los cachés y no cachés para recuperar los datos del caché.
Para contrarrestar el ataque Native BHI, se utilizan instrucciones como Intel IBT (Indirect Branch Tracking) y el mecanismo de protección FineIBT en el kernel de Linux. FineIBT combina instrucciones de hardware IBT con la protección de software kCFI (kernel Control Flow Integrity) para bloquear desviaciones del flujo de control normal. Esto se logra permitiendo la ejecución por salto indirecto solo en caso de un salto a la instrucción ENDBR, colocada al principio de la función, y verificando hashes para garantizar la integridad de los punteros.
Cabe mencionar que se implementó en el kernel de Linux, un modo adicional de protección ofrecida por Intel y adicionalmente una alternativa de protección de software implementada para el hipervisor KVM. La solución se ha integrado en todas las versiones actuales del Kernel y además, los desarrolladores del hipervisor Xen han lanzado una solución basada en el modo BHI_DIS_S para limitar las predicciones basadas en el historial de transiciones.
Sobre la demostración de la vulnerabilidad, los investigadores han desarrollado un exploit a partir de los dispositivos identificados, permitiendo extraer una cadena con el hash de la contraseña del usuario root desde el archivo /etc/shadow ubicado en los buffers del kernel. Este proceso tiene una velocidad de recuperación de datos de aproximadamente 3,5 KB por segundo.
Si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.