lunes, abril 02, 2012

UIPI (User Interface Privilege Isolation) en Windows 8

Una de las tecnologías de seguridad que Microsoft introdujo en la rama 6 del kernel, es decir, Windows Vista (6.0), Windows 7 (6.1) y por supuesto Windows 8 (6.2) es el uso de la protección UIPI, que en Español viene a ser algo como Aislamiento de Privilegios en el Interfaz de Usuario.

La idea de esta protección es la evitar que procesos poco privilegiados inyecten código en procesos más privilegiados haciendo uso de los mensajes interfaz, es decir, del famoso control de Message Loop que distribuye los eventos entre las aplicaciones. 

Este truco de inyectar código mediante eventos de interfaz se había utilizado con éxito desde Windows 95 a Windows XP para conseguir elevaciones de privilegios, algo que hemos visto mediante la inyección de DLLs en programas arrancados para conseguir volcar passwords de servicios, o incluso para modificar en ejecución el comportamiento de un programa - en técnicas de cracking, por ejemplo -.

Desde Windows Vista, con la inclusión de los Niveles de Integridad y de MIC (Mandatory Integrity Control), el envío de mensajes entre aplicaciones está controlado por UIPI y  no se puede realizar entre procesos de distintos Niveles de Integridad. Para conseguir que todo funcione correctamente es necesario que UAC (User Account Control) esté activo, por lo que todos los que lo desactivaron tienen eliminada esta protección.

Hace unos días un compañero de Informatica 64 charlaba sobre esto conmigo, y quería comprobar su funcionamiento, así que le conté una de las demostraciones que siempre hacíamos para comprobar que está funcionando en el sistema esta protección. Aquí os la dejo.

Testeando UIPI en Windows 8

Para testear que UIPI está funcionando correctamente en tu sistema puedes hacer una prueba que nosotros hacíamos desde Windows Vista, y que es tan sencilla como intentar inyectar una pestaña de un navegador menos privilegiado en un navegador ejecutándose con más privilegios. 

En el primer paso yo voy a utilizar Windows 8 y tres instancias de Internet Explorer 10 que están ejecutándose con el mismo nivel de privilegios MIC. Esto se puede comprobar con Process Explorer, o para este caso sencillo con el mismo Task Manager de Windows 8.

Figura 1: Tres instancias arrancadas, pero que funcionan como una sola.

Como se puede ver, a pesar de que son tres ventanas separadas de Internet Explorer 10 que han sido abiertas con la opción Nuevo Internet Explorer, todas las pestañas son un proceso de la misma instancia de Internet Explorer. Para conocer más de esto puedes leer el post de hundir la flota que escribí hace poco más de dos años.

Figura 2: Es posible unir todas las pestañas en una sola instancia

Si en este entorno se intenta unir una pestaña a otra, puede verse que es posible realizarlo, ya que están corriendo en el mismo nivel MIC. No hay problema y UIPI permite el envío de mensaje al interfaz de la aplicación receptora de la pestaña.

En este otro entorno la instancia de Internet Explorer 10 que se está ejecutando con la web de El lado del mal ha sido arrancada con la opción de Ejecutar como adminsitrador. En el Task Manager se puede ver que  son dos procesos totalmente independientes, ya que están en diferentes niveles MIC.

Figura 3: Dos instancias de IE 10 corriendo con diferentes privilegios

Si lo comprobamos con Process Explorer, puede verse que están ejecutándose en distintos Niveles de Integridad (IL).

Figura 4: Las dos instancias de IE 10 funcionan con distintos IL

Cuando se intentan unir las pestañas de ambos navegadores se obtiene un mensaje de prohibición, ya que UIPI está bloqueando el envío de mensajes entre ambos procesos.

Figura 5: UIPI bloquea el envío de mensajes entre ambas

Esta es una de las medidas de seguridad que se introdujeron en el kernel de Windows Vista, que tienes en Windows 7 y en Windows 8. Si desactivas UAC te cargas del tirón, así que tú mismo.

Saludos Malignos!

Para aprender más sobre Windows: "Máxima Seguridad en Windows: Secretos Técnicos"

Entradas populares