Vulnerabilidad en el mecanismo de ejecución especulativa de los procesadores AMD

El proyecto Grsecurity ha publicado detalles y una demostración del método de ataque para una nueva vulnerabilidad (CVE-2021-26341) en procesadores AMD relacionada con la ejecución especulativa de instrucciones tras operaciones directas incondicionales. Si el ataque tiene éxito, la vulnerabilidad permite determinar el contenido de áreas de memoria arbitrarias. Por ejemplo, los investigadores han preparado un exploit que les permite determinar el diseño de la dirección y evitar el mecanismo de protección KASLR (aleatorización de la memoria del kernel) ejecutando código sin privilegios en el subsistema del kernel ePBF. No se pueden descartar otros escenarios de ataque que podrían provocar una fuga del contenido de la memoria del kernel.

La vulnerabilidad le permite crear condiciones bajo las cuales el procesador, durante la ejecución preventiva, procesa especulativamente la instrucción inmediatamente después de la instrucción de salto en la memoria (SLS, Straight Line Speculation). Además, dicha optimización funciona no sólo para operadores de salto condicional, sino también para instrucciones que implican un salto directo incondicional, como JMP, RET y CALL. Siguiendo instrucciones de salto incondicionales, se pueden colocar datos arbitrarios que no están destinados a la ejecución. Después de determinar que una rama no implica la ejecución de la siguiente instrucción, el procesador simplemente revierte el estado e ignora la ejecución especulativa, pero el rastro de la ejecución de la instrucción permanece en la caché compartida y está disponible para su análisis utilizando técnicas de recuperación de canal lateral.

Al igual que con la explotación de la vulnerabilidad Spectre-v1, el ataque requiere la presencia de ciertas secuencias de instrucciones (gadgets) en el kernel que conducen a una ejecución especulativa. En este caso, bloquear una vulnerabilidad se reduce a identificar dichos dispositivos en el código y agregarles instrucciones adicionales que bloqueen la ejecución especulativa. Las condiciones para la ejecución especulativa también pueden ser creadas por programas sin privilegios que se ejecutan en la máquina virtual eBPF. Para bloquear la capacidad de construir gadgets utilizando eBPF, se recomienda desactivar el acceso sin privilegios a eBPF en el sistema (“sysctl -w kernel.unprivileged_bpf_disabled=1”).

La vulnerabilidad afecta a procesadores basados ​​en la microarquitectura Zen1 y Zen2, incluyendo la primera y segunda generación de procesadores AMD EPYC y AMD Ryzen Threadripper, así como AMD Ryzen 2000/3000/4000/5000, AMD Athlon, AMD Athlon X, AMD Ryzen Threadripper. Procesadores de las series PRO y APU A. Para bloquear la ejecución especulativa de instrucciones, se recomienda llamar a instrucciones INT3 o LFENCE después de operaciones de bifurcación (RET, JMP, CALL).

Fuente: opennet.ru

Añadir un comentario