¿Aún son posibles los ataques de fragmentación en los días de aislamiento de privilegios en la interfaz de usuario?

28

Antes de que Windows introdujera el aislamiento de privilegios de la interfaz de usuario, cualquier aplicación podía enviar todo tipo de mensajes de ventana a cualquier ventana en el mismo escritorio (un ataque de ruptura), lo que permite la elevación de privilegios.

Ahora, UIPI evita que las aplicaciones con privilegios bajos envíen la mayoría de los mensajes de la ventana a las aplicaciones con privilegios más altos. Wikipedia dice :

  

El aislamiento de privilegios de la interfaz de usuario (UIPI, por sus siglas en inglés) es una tecnología introducida en Windows Vista / 2008 Server para combatir los ataques de ataques de fragmentación. Al hacer uso del Control de integridad obligatorio, evita que los procesos con un "nivel de integridad" (IL) más bajo envíen mensajes a procesos IL más altos (a excepción de un conjunto muy específico de mensajes de UI).

Parece que debería tratar el problema, de acuerdo con este PDF vinculado en ese artículo, solo WM_NULL , WM_MOVE , WM_SIZE , WM_GETTEXT , WM_GETTEXTLENGTH , WM_GETHOTKEY , WM_GETICON , WM_RENDERFORMAT ,% co_de Se permiten%, WM_DRAWCLIPBOARD , WM_CHANGECBCHAIN , y% no documentado WM_THEMECHANGED y 0x313 . (El PDF menciona un posible ataque de denegación de servicio, que comienza en la página 57, pero aunque es un problema, eso no es una elevación de privilegios. También hice una inspección superficial de la DLL responsable, y parece que en Windows 8 no lo hace. no se registra realmente el mensaje que conduce al problema.)

No parece que ninguno de ellos tenga el problema creado por 0x31B , que provocó que el proceso de destino saltara a una dirección arbitraria. Sin embargo, este artículo de un blogger de Microsoft (Raymond Chen) insinúa enérgicamente que los ataques más graves siguen siendo un problema:

  

Lo que puede hacer es hacer que un servicio inyecte el programa en la sesión y dejar que se ejecute como el usuario que ha iniciado sesión. (Debe hacer que se ejecute como el usuario que inició sesión para evitar un ataque de rotura).

Este documento de Microsoft en UAC señala que algunos recursos "todavía se comparten entre procesos en diferentes niveles de privilegios ":

  
  • Ventana de escritorio, que en realidad posee la superficie de la pantalla.
  •   
  • Memoria compartida de solo lectura del montón del escritorio.
  •   
  • tabla de átomos global.
  •   
  • Portapapeles
  •   

Aun así, solo con tener acceso a esas cosas desde procesos con diferentes niveles de privilegios no parece permitir el salto real que causa la elevación de privilegios. E incluso si se realizó el salto, creo que la Prevención de ejecución de datos detendría la ejecución del código inyectado.

Entonces, ¿tener una ventana de un proceso que se ejecuta como WM_TIMER en el escritorio de un usuario con pocos privilegios todavía le da a ese usuario la oportunidad de elevar los privilegios?

    
pregunta Ben N 08.05.2016 - 18:42
fuente

1 respuesta

1

UIPI evita que un proceso con un nivel de integridad más bajo envíe un mensaje WM_TIMER o EM_GETLINE a un proceso de nivel de integridad más alto. Estos fueron los dos tipos de mensajes que podrían abusarse para elevar los privilegios en un sistema. Los procesos de menor nivel de integridad aún pueden enviar tipos de mensajes limitados a los procesos de alto nivel, pero no pueden usarse para tomar el control de la ejecución de los procesos. En la medida en que DEP sea la salvación, puede utilizar WM_TIMER o EM_GETLINE para iniciar la ejecución de una cadena ROP . En este caso, deberá encontrar códigos de operación que le permitan girar la pila (aquí es donde la devolución de llamada WM_TIMER enviaría la ejecución a) a una nueva ubicación que contenga las direcciones en su cadena ROP .

    
respondido por el Joshua Gimer 12.04.2017 - 20:48
fuente

Lea otras preguntas en las etiquetas