viernes, 31 de mayo de 2013

Provocar el fallo de cualquier sistema Windows de 32 bits

Las siguientes dos instrucciones en ensamblador son capaces de inutilizar (crash) cualquier sistema operativo Windows de 32 bits (hasta Windows 7 SP1 con los últimos parches) siempre que ntoskrnl.exe esté cargado bajo 0x8323f000 y donde 0x8327d1b7 es la dirección de nt!KiSystemServiceAccessTeb:

xor ebp, ebp
jmp 0x8327d1b7

Seguro que pensarás "qué diablos, ¿cómo es eso posible?". En efecto, suena bastante absurdo que un thread en ring 3 que intenta saltar al espacio de direcciones del núcleo pueda provocar una excepción no controlada dentro del ring-0 de Windows. Sin embargo incluso en el año 2013 Windows todavía es fragil en ciertas áreas y existen algunas vulnerabilidades que pueden ser explotadas mediante diversas técnicas...
 


Ésta en concreto, explicada por el gran Mateusz "j00ru" Jurczyk en su conferencia en la última NoSuchCon, se aprovecha de un bug en nt!KiTrap0E, el manejador por defecto de las excepciones de errores de página (#PF) en arquitecturas X86. 

El manejador confía en el campo KTRAP_FRAME.Ebp como un puntero válido en modo kernel cuando se procesan fallos en EIP específicos. Debido a que KTRAP_FRAME.SegCs no se comprueba correctamente (o mejor dicho no se comprueba), es posible elaborar un frame con un Eip controlado y el registro EBP en modo de usuario, lo que permite a un atacante local provocar una caída del sistema a través de una referencia a memoria no válida o revelar el bit menos significativo de cualquier byte en el espacio de direcciones del núcleo.

Código fuente de las pruebas de concepto: 
kitrap0e_bsod.zip (0.5kB, ZIP), kitrap0e_leak_bits.zip (1.4kB, ZIP) y kitrap0e_addr_space.zip (1.5kB, ZIP). Estos programas provocan un fallo del sistema operativo, permiten descubrir bits de la memoria del kernel y escanean el espacio de direcciones del kernel, respectivamente.

Fuentes:
NoSuchCon’13 and crashing Windows with two instructions
Abusing Windows NT #PF Trap Handler to Bugcheck and Leak Information
http://www.hackplayers.com/2013/05/2-instrucciones-para-crashear-Windows-32-bits.html 

No hay comentarios:

Publicar un comentario