Vulnerabilidades en el subsistema eBPF que permiten eludir la protección contra ataques de Spectre

Se ha identificado una vulnerabilidad en el kernel de Linux (CVE-2021-33624) que permite utilizar el subsistema eBPF para eludir la protección contra vulnerabilidades de clase Spectre, que permiten determinar el contenido de la memoria como resultado de la creación de condiciones para la ejecución especulativa de determinadas operaciones. El ataque Spectre requiere la presencia de una determinada secuencia de comandos en código privilegiado que conduce a la ejecución especulativa de instrucciones. Al manipular los programas BPF transmitidos para su ejecución, es posible generar instrucciones similares en eBPF y filtrar el contenido de la memoria del kernel y áreas arbitrarias de la memoria física a través de canales laterales.

La vulnerabilidad es causada por fallas en el verificador, que se utiliza para detectar errores y actividad inaceptable en los programas BPF. El verificador enumera posibles rutas de ejecución del código, pero omite opciones de bifurcación que son inaceptables desde el punto de vista de la semántica de la arquitectura del conjunto de instrucciones. Al ejecutar un programa BPF, el procesador puede predecir incorrectamente las opciones de bifurcación que el verificador no tiene en cuenta y ejecutar en modo especulativo. Por ejemplo, al analizar la operación "cargar", el verificador espera que la instrucción utilice un registro con una dirección cuyo valor esté siempre dentro de los límites especificados, pero un atacante puede crear condiciones bajo las cuales el procesador intentará realizar una operación especulativa con una dirección que no cumple las condiciones de verificación.

El problema ha estado apareciendo desde el lanzamiento del kernel 4.15 y se ha solucionado en forma de parches (1, 2, 3, 4). La vulnerabilidad sigue sin solucionarse en distribuciones (Debian, RHEL, Ubuntu, Fedora, SUSE, Arch).

Además, puede observar la nota sobre el impacto en el rendimiento de las herramientas para proteger contra las vulnerabilidades de Spectre. La nota resume los resultados de la optimización del depurador rr (Record and Replay), que alguna vez fue creado en Mozilla para depurar errores difíciles de repetir en Firefox. El almacenamiento en caché de las llamadas al sistema utilizadas para verificar la existencia de directorios redujo la operación de "fuentes rr" para el proyecto de prueba de 3 minutos y 19 segundos a 36 segundos.

El autor de la optimización decidió comprobar cómo cambiaría el rendimiento después de desactivar la protección de Spectre. Después de iniciar el sistema con el parámetro "mitigaciones = desactivado", el tiempo de ejecución de "fuentes rr" sin optimización fue de 2 minutos y 5 segundos (1.6 veces más rápido) y con optimización fue de 33 segundos (9% más rápido). Curiosamente, deshabilitar la protección Spectre no solo redujo el tiempo de ejecución del código a nivel del kernel en 1.4 veces (de 2m9s a 1m32s), sino que también redujo a la mitad el tiempo de ejecución en el espacio del usuario (de 1m9s a 0m33s), presumiblemente debido a una eficiencia reducida en la operación de caché de la CPU y TLB. se restablece cuando la protección Spectre está habilitada.

Fuente: opennet.ru

Añadir un comentario