Microsoft publica parche para Meltdown que introduce una vulnerabilidad aún peor

¿Pensabas que Meltdown era malo? Las aplicaciones no privilegiadas que son capaces de leer la memoria de kernel a velocidades posiblemente tan altas como megabytes por segundo tampoco son buenas.

El investigador de seguridad Ulf Frisk mencionaba que el parche de Meltdown para Windows 7 si bien corta este vector de ataque, abre una vulnerabilidad mucho peor. Permite que cualquier proceso lea el contenido completo de la memoria a velocidades de gigabytes por segundo y también es posible escribir arbitrariamente en memoria.

Todo esto sin la necesidad de exploits sofisticados ya que Windows 7 hizo el trabajo duro de mapeo de la memoria dentro de cada proceso en ejecución. De esta manera la explotación era solo cuestión de leer y escribir en la memoria virtual en el proceso ya mapeada. No se requieren APIs sofisticadas ni llamadas al sistema. ¡Solo lecturas y escrituras estándares!

A continuación se puede ver un acceso a memoria a más de 4 GB/s. El volcado al disco es más lento debido a la velocidad de transferencia del disco.

¿Cómo es esto posible?

En resumen: el bit de permiso Usuario/Supervisor se estableció en Usuario en la entrada autoreferenciada de PML4. Esto hace que las tablas de página estuvieran disponibles para el código del modo de usuario en cada proceso. Normalmente las tablas de páginas solo deberían ser accesibles por el propio kernel.

El PML4 es la base de la jerarquía de tabla de páginas en memoria de 4 niveles que utiliza la Unidad de administración de memoria de la CPU (MMU) para traducir las direcciones virtuales de un proceso en direcciones de memoria física en la RAM.

Entrada PML4 autoreferenciada en desplazamiento 0xF68 con valor 0x0000000062100867:

Windows tiene una entrada especial en esta tabla de páginas de PML4 que se refiere a sí misma, una entrada autorreferenciada. En Windows 7, la autorreferencia PML4 se fija en la posición 0x1ED, desplazamiento 0xF68 (se asigna al azar en Windows 10). Esto significa que el PML4 siempre se mapeará en la dirección: 0xFFFFF6FB7DBED000 en la memoria virtual. Normalmente, esta es una dirección de memoria que solo está disponible para el kernel (Supervisor). Como el bit de permiso se puso erróneamente a Usuario, esto significaba que el PML4 se asignaba a cada proceso y se ponía a disposición para la ejecución del código en modo usuario.

Direcciones de memoria de kernel mapeadas en cada proceso como páginas de lectura/escritura en modo usuario:

Una vez que se haya obtenido acceso de lectura/escritura a las tablas de páginas, será trivialmente fácil acceder a la memoria física completa, a menos que esté adicionalmente protegido por las tablas de páginas extendidas (EPT) utilizadas para la virtualización. Todo lo que uno tiene que hacer es escribir sus propias entradas de tabla de páginas (PTE) en las tablas de página para acceder a la memoria física arbitraria.

El último ‘7’ en el PML4e 0x0000000062100867 (del ejemplo anterior) indica que los bits 0, 1, 2 están activos, lo que significa que es Presente, se puede escribir y accesible en modo usuario según la descripción en el Manual de Intel.

Extracto del Manual de Intel, si el bit 2 está puesto a ‘1’, se permite el acceso en modo de usuario.

¿Puedo probarlo yo mismo?

Si, absolutamente. La técnica se ha agregado como un dispositivo de adquisición de memoria al kit de herramientas de ataque de acceso directo a la memoria PCILeech. Simplemente hay que descargar PCILeech y ejecutarlo con el tipo de dispositivo: -device totalmeltdown en un sistema vulnerable de Windows 7.

Para volcar la memoria al archivo, usar el comando: pcileech.exe dump -out memorydump.raw -device totalmeltdown -v -force.

En caso de tener instalado el driver del sistema de archivos Dokany, debes poder montar los procesos en ejecución como archivos y carpetas en el Sistema de archivos de proceso de memoria, con la memoria virtual del kernel y los procesos como de lectura/escritura.

Para montar los procesos, ejecutar el comando: pcileech.exe mount -device totalmeltdown

Recuerda reinstalar tus actualizaciones de seguridad si desinstalaste temporalmente la última para probar esta vulnerabilidad.

Un sistema vulnerable es “explotado” y los procesos en ejecución se montan con PCILeech. Se accede a los mapeos de memoria de proceso y PML4.

¿Es mi sistema vulnerable?

Solo los sistemas Windows 7 x64 parcheados con los parches 2018-01 o 2018-02 son vulnerables. Si tu sistema no tiene parches desde diciembre de 2017 o si está parcheado con los parches 2018-03-29 o posterior, será seguro.

Otras versiones de Windows, como Windows 10 o 8.1, son completamente seguras con respecto a este problema y nunca se han visto afectadas. Windows 2008R2 también se ve afectado.

Actualización de seguridad OOB publicada para resolver completamente la vulnerabilidad en 2018-03-29. CVE-2018-1038. Es recomendable aplicarla de inmediato en caso de estar afectado.

Línea de tiempo