Vulnerabilidades en eBPF que podrían eludir la protección contra ataques de Spectre 4

Se han identificado dos vulnerabilidades en el kernel de Linux que permiten que el subsistema eBPF eluda la protección contra ataques de Spectre v4 (SSB, Speculative Store Bypass). Usando un programa BPF sin privilegios, un atacante puede crear condiciones para la ejecución especulativa de ciertas operaciones y determinar el contenido de áreas arbitrarias de la memoria del núcleo. Los subsistemas eBPF de Escort en el kernel obtuvieron acceso a un exploit prototipo que demuestra la posibilidad de cometer ataques en la práctica. Los problemas se han solucionado en forma de parches (1, 2) que formarán parte de la próxima actualización del kernel de Linux. Las actualizaciones en las distribuciones aún no se han formado (Debian, RHEL, SUSE, Arch, Fedora, Ubuntu).

El método de ataque Spectre 4 se basa en restaurar los datos que se han asentado en la memoria caché del procesador después de descartar el resultado de la ejecución especulativa de operaciones al procesar operaciones alternas de escritura y lectura utilizando direccionamiento indirecto. Cuando una operación de lectura sigue a una operación de escritura (por ejemplo, mov [rbx + rcx], 0x0; mov rax, [rdx + rsi]), es posible que ya se conozca el desplazamiento de la dirección de lectura debido a que se están realizando operaciones similares (las operaciones de lectura se realizan con mucha más frecuencia y se puede realizar una lectura desde la memoria caché) y el procesador puede realizar especulativamente una lectura antes de una escritura sin esperar a que se calcule el desplazamiento de escritura indirecta.

Si, después de calcular el desplazamiento, se detecta una intersección de áreas de memoria para escritura y lectura, el procesador simplemente descartará el resultado de lectura ya obtenido especulativamente y repetirá esta operación. Esta función permite que la instrucción de lectura acceda al valor anterior en alguna dirección mientras la operación de almacenamiento aún no se ha completado. Después de descartar una operación especulativa fallida, quedan rastros de su ejecución en la memoria caché, después de lo cual se puede usar uno de los métodos para determinar el contenido de la memoria caché basado en el análisis de los cambios en el tiempo de acceso a los datos almacenados en caché y no almacenados en caché para recuperar él.

La primera vulnerabilidad (CVE-2021-35477) está causada por una falla en el mecanismo de verificación del programa BPF. Para protegerse contra el ataque de Spectre 4, el verificador agrega una instrucción adicional después de operaciones de almacenamiento potencialmente problemáticas en la memoria, almacenando el valor de cero para eliminar los rastros de la operación anterior. Se suponía que la operación de escritura cero era muy rápida y bloqueaba la ejecución especulativa, ya que solo depende del puntero al marco de pila BPF. Pero, de hecho, resultó posible crear condiciones bajo las cuales la instrucción que conduce a la ejecución especulativa tiene tiempo de ejecutarse antes que la operación de almacenamiento preventivo.

La segunda vulnerabilidad (CVE-2021-3455) está relacionada con el hecho de que cuando el verificador BPF detecta operaciones de almacenamiento de memoria potencialmente peligrosas, las áreas no inicializadas de la pila BPF no se tienen en cuenta, la primera operación de escritura no está protegida. . Esta característica conduce a la posibilidad de realizar una operación de lectura especulativa, dependiendo de un área de memoria no inicializada, antes de ejecutar una instrucción de almacenamiento. La nueva memoria para la pila BPF se asigna sin verificar los contenidos que ya están en la memoria asignada, y hay una manera de administrar los contenidos del área de memoria que luego se asignará a la pila BPF antes de que se inicie el programa BPF.

Fuente: opennet.ru

Añadir un comentario