SWAPGS - unha nova vulnerabilidade no mecanismo de execución especulativa da CPU

Investigadores de Bitdefender identificado nova vulnerabilidade (CVE-2019-1125) no mecanismo de execución de instrucións especulativas das CPU modernas, que recibe o nome de SWAPGS, que corresponde ao nome da instrución do procesador que causa o problema. Vulnerabilidade permite permitir que un atacante sen privilexios determine o contido das áreas de memoria do núcleo ou que executa máquinas virtuais. Problema confirmado en procesadores Intel (x86_64) e parcialmente afecta Procesadores AMD para os que non aparece o vector de ataque principal. Os métodos implementados anteriormente para contrarrestar as vulnerabilidades Spectre e Meltdown non protexen contra o ataque SWAPGS cando se usan procesadores Intel, pero xa se propuxeron correccións para Linux, ChromeOS, Android e Windows.

A vulnerabilidade pertence á clase Spectre v1 e baséase na idea de restaurar os datos da caché do procesador que quedan despois da execución especulativa de instrucións. Para mellorar o rendemento, as unidades de predición de ramas das CPU modernas usan a execución preventiva dalgunhas instrucións que teñen máis probabilidades de executarse, pero sen esperar ao cálculo de todos os factores que determinan a súa execución (por exemplo, cando as condicións das ramas ou os parámetros de acceso non teñen aínda calculado). Se a predición non se confirma, o procesador descarta o resultado da execución especulativa, pero os datos procesados ​​durante a mesma permanecen na caché do procesador e pódense restaurar mediante métodos para determinar o contido da caché a través de canles laterais, analizando o cambio de acceso. tempo para os datos cachés e sen caché.

A peculiaridade do novo ataque é o uso dunha fuga que se produce durante a execución especulativa da instrución SWAPGS, que se usa nos sistemas operativos para substituír o valor do rexistro GS cando o control pasa do espazo do usuario ao núcleo do SO (o GS). o valor usado no espazo do usuario substitúese polo valor usado durante as operacións no núcleo). No núcleo de Linux, GS almacena un punteiro per_cpu usado para acceder aos datos do núcleo e o espazo de usuario almacena os punteiros a TLS (Thread Local Storage).

Para evitar chamar dúas veces á instrución SWAPGS ao acceder de novo ao núcleo desde o espazo do núcleo ou ao executar código que non require un cambio de rexistro GS, realízase unha comprobación e unha rama condicional antes da instrución. O motor de execución especulativa procede de forma proactiva a executar código coa instrución SWAPGS sen esperar o resultado da comprobación e, se non se confirma a rama seleccionada, descarta o resultado. Así, pode xurdir unha situación cando se selecciona especulativamente unha rama que non implica a execución de SWAPGS, pero durante a execución especulativa o valor do rexistro GS será cambiado pola instrución SWAPGS e empregarase en operacións de memoria dependentes que acaban na caché da CPU.

Os investigadores propuxeron dous escenarios de ataque para os que se prepararon prototipos de exploit. O primeiro escenario baséase na situación na que a instrución SWAPGS non se executa de forma especulativa, aínda que en realidade se utiliza na execución, e o segundo é o contrario, cando a instrución SWAPGS se executa de forma especulativa, aínda que en realidade non debería executarse. Para cada escenario, hai dúas opcións de explotación: o atacante pode determinar o valor nun enderezo específico na área do núcleo e o atacante pode buscar un valor específico en enderezos aleatorios no núcleo. Realizar un ataque leva moito tempo e o exploit pode requirir varias horas para completar a filtración.

Hai un problema no núcleo de Linux eliminado cambiando a lóxica de chamar á instrución SWAPGS (bloquear a execución especulativa), de xeito similar á corrección doutras vulnerabilidades da clase Spectre v1. Espérase que a protección adicional teña un impacto mínimo no rendemento das cargas de traballo típicas. A latencia prodúcese durante a fase de cambio entre o espazo de usuario e o núcleo, o que pode producir un rendemento deficiente cando, por exemplo, hai chamadas de sistema pesadas desde a aplicación ou a xeración frecuente de NMI e interrupcións.

A corrección require a instalación dunha actualización do kernel tanto no sistema anfitrión como no ambiente invitado, seguida dun reinicio do sistema. Para desactivar a protección en Linux, pódese usar a opción "nospectre_v1", que tamén desactiva as medidas para bloquear a vulnerabilidade SWAPGS. A corrección está dispoñible como parche para o núcleo de Linux, que xa está incluído nas versións 4.19.65, 5.2.7, 4.14.137, 4.9.188 e 4.4.188. As actualizacións para as distribucións de Linux aínda non foron publicadas (Debian, RHEL, Fedora, Arch Linux, SUSE/openSUSE, Ubuntu). En Windows, o problema solucionouse silenciosamente Actualización de xullo. Empresa de Google preparado corrección para o núcleo 4.19 enviado con ChromeOS e androide.

Segundo os investigadores de Bitdefender, Intel foi informada do problema en agosto do ano pasado. Decidiuse solucionar o problema mediante programación, polo que os desenvolvedores de Microsoft, Google e o núcleo de Linux participaron no desenvolvemento coordinado dunha corrección. Os procesadores Intel máis antigos, anteriores a Ivy Bridge, son moito máis difíciles de atacar debido á falta de soporte para a instrución WRGSBASE utilizada no exploit. Os sistemas ARM, POWER, SPARC, MIPS e RISC-V non se ven afectados polo problema porque non admiten a instrución SWAPGS.

O problema afecta principalmente aos propietarios de procesadores Intel:
Nos sistemas AMD, só se puido reproducir o segundo escenario de ataque, que se limita ao procesamento especulativo do valor base do rexistro GS, que se pode usar para buscar valores específicos en áreas de memoria aleatorias. Para bloquear esta opción de ataque é suficiente métodos de protección existentes contra Spectre v1.

Fonte: opennet.ru

Engadir un comentario