Un grupo de investigadores de la Universidad Libre de Ámsterdam presentó una nueva técnica de ataque llamada SLAM (Spectre Linear Address Masking), que ofrece una nueva forma de explotar las vulnerabilidades microarquitectónicas de la clase Spectre, en las que la filtración de datos ocurre durante la traducción de direcciones no canónicas, utilizando las extensiones para enmascarar direcciones lineales que se proporcionan en los nuevos procesadores para eludir las comprobaciones de canonicidad. Los investigadores han publicado una herramienta con la implementación del método y han propuesto una demostración que muestra cómo se puede extraer información de la memoria del núcleo que corresponde a una máscara específica (se evidencia cómo en Ubuntu se puede con unos pocos segundos extraer de la memoria del núcleo una cadena con el hash de la contraseña del usuario root).

El ataque puede realizarse en sistemas con procesadores Intel que admiten la extensión LAM (Linear Address Masking), procesadores AMD que tienen la extensión UAI (Upper Address Ignore) y procesadores ARM con la extensión TBI (Top Byte Ignore). Estas extensiones permiten utilizar parte de los bits de punteros de 64 bits para almacenar metadatos que no están relacionados con la direccionamiento (para programas normales no se requiere tanta memoria que pueda direccionar punteros de 64 bits, por lo que los bits superiores pueden utilizarse, por ejemplo, para verificaciones relacionadas con la seguridad). Es interesante que los procesadores Intel, AMD y ARM que admiten LAM, UAI y TBI aún solo han sido anunciados, pero no se producen en masa, lo que convierte a SLAM en el primer ataque especulativo contra las futuras CPU. También se puede llevar a cabo este ataque en las antiguas CPU AMD Zen+ y Zen 2, que son vulnerables a la CVE-2020-12965.
Al igual que con la explotación de vulnerabilidades de Spectre, para llevar a cabo un ataque SLAM se requiere que el núcleo contenga ciertas secuencias de instrucciones (gadgets) que conducen a la ejecución especulativa de instrucciones. Estas instrucciones provocan la lectura especulativa de datos de la memoria según las condiciones externas que pueden ser influenciadas por el atacador. Después de determinar una predicción errónea, el resultado de la ejecución especulativa se descarta, pero los datos procesados permanecen en la caché y pueden ser posteriormente extraídos mediante análisis a través de canales secundarios. Para extraer los datos que se han quedado en la caché, los investigadores utilizan el método Evict+Reload, que se basa en crear condiciones para expulsar datos de la caché (por ejemplo, se genera una actividad que llena uniformemente la caché con contenido típico) y en realizar operaciones cuyo tiempo de ejecución permite deducir la presencia de datos en la caché del procesador.
Para realizar un ataque SLAM se utilizan gadgets basados en código donde los datos controlados por el atacante (abajo la variable "secret") se utilizan como puntero. Por ejemplo: void unmasked_gadget(long **secret) { **secret; }
Se observa que tales patrones de código son frecuentemente utilizados en programas; por ejemplo, en el núcleo de Linux se han identificado decenas de miles de estos gadgets, de los cuales al menos varios cientos son utilizables en exploits. La filtración puede ser bloqueada añadiendo instrucciones adicionales a dichos gadgets que impidan la ejecución especulativa. Intel tiene la intención de proporcionar un método de software para bloquear la filtración antes de comenzar el suministro de procesadores con soporte para LAM. AMD recomendó utilizar los métodos existentes para bloquear ataques de la clase Spectre v2. Los desarrolladores del núcleo de Linux, para protegerse contra el ataque, decidieron desactivar por defecto el soporte para LAM hasta la publicación de las recomendaciones de Intel sobre cómo bloquear esta vulnerabilidad.
Fuente: opennet.ru
