BHI es una nueva vulnerabilidad de clase Spectre en procesadores Intel y ARM

Un grupo de investigadores de la Vrije Universiteit Amsterdam ha identificado una nueva vulnerabilidad en las estructuras microarquitectónicas de los procesadores Intel y ARM, que es una versión extendida de la vulnerabilidad Spectre-v2, que permite eludir los mecanismos de protección eIBRS y CSV2 añadidos a los procesadores. . La vulnerabilidad ha recibido varios nombres: BHI (Branch History Inyección, CVE-2022-0001), BHB (Branch History Buffer, CVE-2022-0002) y Spectre-BHB (CVE-2022-23960), que describen diferentes manifestaciones de el mismo problema (BHI - un ataque que afecta a diferentes niveles de privilegios, por ejemplo, el proceso del usuario y el kernel, BHB - un ataque al mismo nivel de privilegios, por ejemplo, eBPF JIT y el kernel).

Los investigadores han demostrado un exploit funcional que permite extraer datos arbitrarios de la memoria del kernel desde el espacio del usuario. Por ejemplo, se muestra cómo, utilizando un exploit preparado, es posible extraer de los buffers del kernel una cadena con un hash de la contraseña del usuario root cargado desde el archivo /etc/shadow. El exploit demuestra la posibilidad de explotar una vulnerabilidad dentro de un nivel de privilegio (ataque de kernel a kernel) utilizando un programa eBPF cargado por el usuario. También es posible utilizar en lugar de eBPF los gadgets Spectre existentes en el código del kernel, secuencias de comandos que conducen a la ejecución especulativa de instrucciones.

La vulnerabilidad aparece en la mayoría de procesadores Intel actuales, a excepción de los procesadores de la familia Atom. Entre los procesadores ARM, Cortex-A15, Cortex-A57, Cortex-A7*, Cortex-X1, Cortex-X2, Cortex-A710, Neoverse N1, Neoverse N2, Neoverse V1 y posiblemente algunos chips Cortex-R se ven afectados por el problema. Según la investigación, la vulnerabilidad no aparece en los procesadores AMD. Para eliminar el problema, se han propuesto varios métodos de software para bloquear la vulnerabilidad, que pueden utilizarse antes de que aparezca la protección de hardware en futuros modelos de CPU.

Para bloquear ataques a través del subsistema eBPF, se recomienda desactivar de forma predeterminada la capacidad de los usuarios sin privilegios de descargar programas eBPF escribiendo 1 en el archivo “/proc/sys/kernel/unprivileged_bpf_disabled” o ejecutando el comando “sysctl -w kernel. unprivileged_bpf_disabled=1”. Para bloquear ataques a dispositivos, se recomienda utilizar la instrucción LFENCE en áreas de código que potencialmente conduzcan a una ejecución especulativa. Cabe destacar que la configuración predeterminada de la mayoría de las distribuciones de Linux ya contiene las medidas de protección necesarias y suficientes para bloquear el ataque eBPF demostrado por los investigadores. Las recomendaciones de Intel para deshabilitar el acceso sin privilegios a eBPF también son las predeterminadas desde el kernel de Linux 5.16 y se respaldarán en ramas anteriores.

Conceptualmente, BHI es una versión extendida del ataque Spectre-v2, en el que, para evitar la protección adicional (Intel eIBRS y Arm CSV2) y organizar la fuga de datos, se utiliza la sustitución de valores en el Branch History Buffer, utilizado en la CPU para aumentar la predicción. ramificación de precisión teniendo en cuenta la historia de transiciones pasadas. Durante el ataque, mediante manipulaciones con el historial de transiciones, se crean condiciones para una predicción incorrecta de la transición y la ejecución especulativa de las instrucciones necesarias, cuyo resultado termina en el caché.

Excepto por el uso de un búfer de historial de sucursales en lugar de un búfer de destino de sucursales, el nuevo ataque es idéntico a Spectre-v2. La tarea del atacante es crear condiciones tales que la dirección, al realizar una operación especulativa, se tome del área de los datos definidos. Después de realizar un salto indirecto especulativo, la dirección de salto leída de la memoria permanece en el caché, después de lo cual se puede usar uno de los métodos para determinar el contenido del caché para recuperarlo basándose en un análisis de los cambios en el tiempo de acceso a los cachés y no cachés. datos.

Fuente: opennet.ru

Añadir un comentario