Driver vulnerable en Gundam Online (BANDAI NAMCO)

Los laboratorios de Kaspersky detectan una muestra que es constantemente clasificada para análisis exhaustivos al ser detectada por su plugin de exploits. Al examinarla, resulta ser un driver de Gundam Online, el videojuego de NAMCO.

Para poder entender esto, tenemos que conocer qué es SMEP. SMEP (Supervisor Mode Execution Protection), es una característica que marca todas las páginas disponibles para distinguirlas entre aquellas que pueden ejecutar código en ring-0 o no. SMEP se encuentra activo cuando el bit SMAP del registro CR4 y la paginación se encuentran establecidos. Con este mecanismo, todos los intentos implícitos de lectura de memoria de paginas en user-land con un privilegio menor que ring-3 serán bloqueadas siempre que SMAP esté habilitado.

Durante su ejecución, se observa que una página de user-space es llamada desde el driver de CAPCOM justo después de que se cree una petición IOCTL (0x0AA012044) al DeviceObject \\.\Htsysm7838 – Este comportamiento no debería ser válido, ya que SMEP no lo permite; por lo que se debería generar una excepción de violación de acceso y detener el sistema con un BSOD.

Flujo de llamadas para habilitar y deshabilitar SMEP.

En este fragmento, podemos observar cómo esta rutina que contiene un puntero a una función en userspace, deshabilita SMEP para llamar a dicha función en user-land. Tras esto, rehabilita SMEP volviendo a su estado original.
Para poder llamar a dicha función, necesitaríamos tener el bit CR4 (que mencionamos al principio de la entrada) que es justo lo que la función indicada como disableSMEP hace.

Analizando el driver podemos observar que solo acepta dos IOCTL:

IOCTL validos.

Este driver no tiene ninguna comprobación de seguridad extra, por tanto cualquier aplicación desde user-land podría explotar el IOControlCode a través de la API DeviceIoControl, conociendo el código de control del driver.

Definición de kernel32!DeviceIoControl (https://msdn.microsoft.com/es-es/library/windows/desktop/aa363216(v=vs.85).aspx)
Prueba de concepto de la vulnerabilidad.
Resultado de la prueba de concepto. Aunque se podría haber incluido una shellcode y el resultado sería distinto.

Por tanto, un atacante podría crear una aplicación desde user-land y provocar la ejecución de código o provocar un crash en el sistema. Para hacer la prueba, se ha utilizado una cadena basura para demostrar el problema, sin embargo es posible utilizar una shellcode. En caso de que el Driver no estuviera instalado en el sistema, al estar firmado no habrá problemas para incorporarlo al sistema por parte de un atacante.

Al ser informados BANDAI NAMCO eliminaron el driver problemático que ya no es cargado por el juego, siendo la actuación similar al driver de CAPCOM.

Más información:
 
SMEP: What is it, and how to beat it on Windows:
http://j00ru.vexillium.org/?p=783

Supervisor Mode Access Prevention (SMEP):
https://en.wikipedia.org/wiki/Supervisor_Mode_Access_Prevention

Elevation of privileges in Namco Driver:

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *