martes, 26 de febrero de 2013

Los ataques del núcleo

Saludos Mundo LIbre.

He leido un articulo sobre Los ataques del núcleo que lo boy a traducir en dos partes asi que aqui tienen la primera.

Los ataques del núcleo a través de devoluciones de llamada de modo de usuario
Tarjei Mandt Norman Investigación de Amenazas tarjei.mandt @ norman.com Resumen.

Hace 15 años, Windows NT 4.0 introdujo a Win32k.sys abordar las limitaciones inherentes de los mayores de cliente-servidor subsistema de gráficos sistema modelo.

Hoy en día, win32k sigue siendo un componente fundamental de la arquitectura de Windows y gestiona tanto el gestor de ventanas (User) y la Interfaz de dispositivo gráfico (GDI). Con el fin de correctamente intercara con los datos en modo de usuario, win32k utiliza devoluciones de llamada en modo de usuario, un mecanismo que permite al kernel para hacer llamadas de nuevo en modo de usuario. Por el usuario callbacks modo de permitir una variedad de tareas tales como la invocación de la aplicación de nido ganchos, proporcionando eventos cationes NotI, y la copia de datos a / desde de modo de usuario. En este trabajo se discuten los retos y problemas sobre devoluciones de llamada en modo de usuario en Win32k. En particular, se muestra cómo dependencia win32k en cerraduras mundiales en proveer un ambiente seguro para subprocesosción no se integra bien con el concepto de devoluciones de llamada en modo de usuario.

Aunque muchas vulnerabilidades relacionadas con devoluciones de llamada en modo de usuario han sido dirigida, su naturaleza compleja sugiere que más sutil aws podría aún estar presente en win32k. Así, en un correo? ORT para mitigar algunos de los
más prevalentes clases de errores, de manera concluyente que ofrecen algunas sugerencias a cómo los usuarios pueden protegerse contra ataques futuros del kernel.

Palabras clave:

Win32k, de modo de usuario devoluciones de llamada, las vulnerabilidades 1 Introducción En Windows NT, el subsistema de entorno Win32 permite a las aplicaciones ininterface con el sistema operativo Windows e interactuar con componentes tales
como el Window Manager (Usuario) y la interfaz de dispositivo gráfico (GDI).

La subsistema proporciona un conjunto de funciones, conocidos colectivamente como la API de Win32 y sigue un modelo cliente-servidor en el que las aplicaciones cliente comunicarse con un servidor más privilegiado de los componentes.

Tradicionalmente, el lado del servidor del subsistema Win32 se implementó en el tiempo de ejecución de cliente-servidor subsistema (CSRSS). Con el fin de proporcionar una óptima pormiento, cada hilo en el lado cliente tenía un hilo emparejado en el Win32 servidor en espera en una facilidad de comunicación entre procesos especial llamado Fast LPC.

Como las transiciones entre temas apareados en LPC Fast no requería una programación suceso en el kernel, el hilo servidor podría funcionar durante el intervalo de tiempo restante de el subproceso de cliente antes de tomar su turno en el hilo preventiva planificador. Adnalmente, la memoria compartida se utiliza tanto para grandes transferencias de datos y proporcionando clientes acceso de sólo lectura a servidor gestionado estructuras de datos para reducir al mínimo la necesidad para las transiciones entre los clientes y el servidor de Win32.

A pesar de las mejoras de rendimiento hechas a los Win32 tradicionales sub sistema, Microsoft decidió con el lanzamiento de Windows NT 4.0 para migrar una gran parte del componente de servidor en modo de núcleo.

Esto condujo a la introducción de Win32k.sys, un controlador en modo kernel de gestionar tanto el gestor de ventanas (Usuario) y la interfaz de dispositivo gráfico (GDI). El paso a modo de núcleo en gran medida reproducida la sobrecarga asociada con el diseño del subsistema de edad, por tener mucho hilo y menos cambios de contexto (y usando el usuario mucho más rápido / kernel transición) y reducir los requisitos de memoria. Sin embargo, como usuario / kernel transiciones
están relativamente lento en comparación con el código directo / acceso a los datos dentro de la misma privilegio, algunos viejos trucos como el almacenamiento en caché de las estructuras de gestión en el de modo de usuario porción del espacio de direcciones del cliente se mantiene todavía. Por otra parte, algunas estructuras de gestión se almacenan exclusivamente en modo de usuario con el fin de evitar transiciones de anillo. Como Win32k necesitaba una manera de acceder a esta información y También soporta la funcionalidad básica, como las ventanas de enganche, requería una forma de pasar el control al cliente de modo de usuario. Esto se realizó mediante el modo de usuario callback mecanismo.

De modo de usuario callbacks win32k permitir realizar llamadas de nuevo en modo de usuario y realizar tareas tales como la invocación de aplicaciones de nido ganchos, proporcionando evento no cationes Ti, y la copia de datos desde / hacia el modo de usuario. En este artículo, se discute la muchos desafíos y problemas relativos a las devoluciones de llamada en modo de usuario en Win32k.

En en particular, se muestra cómo el diseño win32k en la preservación de la integridad de los datos (por ejemplo, en
depender de bloqueo global) no se integra bien con el concepto de modo de usuario devoluciones de llamada. Recientemente, MS11-034 [7] y MS11-054 [8] abordó varios vulnerables en un correo? ORT para hacer frente a múltiples clases de errores relacionados con devoluciones de llamada en modo de usuario.

Sin embargo, debido a la compleja naturaleza de algunos de estos problemas y la prevalencia de las devoluciones de llamada en modo de usuario, aws más sutil es probable que sean aún presente en win32k.

Así, en un correo? ORT para mitigar algunas de las clases de errores más frecuentes, se con exclusivamente discutir algunas ideas en cuanto a lo que Microsoft y los usuarios finales pueden hacer reducir aún más el riesgo de ataques futuros en el subsistema win32k.

El resto del trabajo se organiza de la siguiente manera. En la sección 2 se revisan de nuevomaterial del suelo necesario para comprender la que quedaba del papel, centrado en objetos de usuario y devoluciones de llamada en modo de usuario. En la sección 3, discutimos nombre de la función decoración en win32k y presente varias clases de vulnerabilidad propias de Win32k y en modo de usuario devoluciones de llamada. En la sección 4, se evalúa la posibilidad de explotación de vulnerabilidad Las habilidades disparadas por devoluciones de llamada en modo de usuario, mientras que en la Sección 5 intento de advestir a estos ataques mediante la propuesta de medidas de mitigación para las clases de vulnerabilidad prevalente.

Por último, en la Sección 6 se ofrecen ideas y sugerencias sobre el futuro de win32k y en la sección 7 se proporciona una conclusión del trabajo.

2 Antecedentes

En esta sección, se revisan los antecedentes necesarios para entender el resto del documento. Comenzamos Win32k brie y su introducción y arquitectura, antes de pasar a especificaciones más componentes C, tales como la Ventana
Manager (centrado en los objetos de usuario) y el mecanismo de devolución de llamada en modo de usuario.

2,1 Win32k Win32k.sys fue presentado como parte de los cambios realizados en Windows NT 4.0 a aumentar el rendimiento gráfico de representación y reducir los requisitos de memoria de Aplicaciones de Windows [10]. En particular, el Administrador de Windows (usuario), así como la Interfaz de dispositivo gráfico (GDI) se mudó de la ejecución de cliente-servidor de sub sistema (CSRSS) e implementado en un módulo de núcleo de su propio.

En Windows NT 3.51, la representación gráfica y la gestión de la interfaz de usuario se realiza por CSRSS utilizando una forma rápida de comunicación entre procesos entre la aplicación (Cliente) y el proceso del servidor subsistema (CSRSS.EXE). Aunque este diseño se ha optimizado para el rendimiento, la gran cantidad de gráficos de Windows naturaleza de plomo
los desarrolladores de pasar a un diseño basado en kernel con las llamadas al sistema mucho más rápido.

Win32k esencialmente consta de tres componentes principales: el dispositivo de gráficos Interface (GDI), el gestor de ventanas (User) y procesadores para DirectX API para apoyar tanto el XP/2000 y Longhorn (Vista) modelos de controlador de pantalla (a veces también se considera para ser una parte de GDI). El gestor de ventanas es responsable para la gestión de la interfaz de usuario de Windows, tales como el control de escaparates, la gestión de la salida de pantalla, recogiendo las aportaciones de ratón y el teclado, y de paso ING mensajes a las aplicaciones. GDI, por otro lado, se refiere sobre todo
la representación de gráficos e implementa GDI objetos (cepillos, lápices, superficies, dispositivos contextos, etc), el motor de procesamiento de gráficos (Gre), soporte de impresión de color ICM, a juego, una biblioteca de matemáticas de punto otante, y el apoyo de la fuente.

A medida que el diseño del sistema tradicional de CSRSS se construyó en torno a tener un proceso por usuario, cada sesión de usuario tiene su propia copia de win32k.sys correlacionada. La concepto de sesiones también permite a Windows para proporcionar una separación más estricta entre los usuarios (de otro modo conocido como aislamiento de la sesión). A partir de Windows Vista, servicios se trasladaron también a su propia sesión no interactiva [2] para evitar la serie de problemas asociados con sesiones compartidas como rompen los ataques [12] y vulnerabilidades en los servicios privilegiados. Por otra parte, el Usuario Interface Privilege Iso mento (UIPI) [1], aplica el concepto de niveles de integridad y asegura que bajo
procesos de privilegios no pueden interactuar (por ejemplo, mensajes de paso a) los procesos de una mayor integridad.

Con el fin de interactuar correctamente con el ejecutivo NT, win32k varios registros (llamadas PsEstablishWin32Callouts
) Para apoyar a los objetos GUI orientados tales como escritorios y estaciones de ventana. Es importante destacar que también registra win32k llamadas para subprocesos y procesos de las estructuras ne por hilo y por los procesos utilizados por el subsistema de interfaz gráfica de usuario.

GUI Temas y Procesos

Como no todos los hilos de hacer uso de la GUI sub sistema, la asignación de las estructuras de interfaz gráfica de usuario por adelantado para todas las discusiones sería una pérdida de espacio. Por lo tanto, todas las discusiones sobre el inicio de Windows como sin interfaz gráfica (12 temas pila KB).

Si un hilo accede a cualquiera de los usuarios o las llamadas GDI del sistema (número > = 0x1000), Ventanas promueve el hilo de un hilo GUI ( nt! PsConvertToGuiThread ) y llama al proceso y llamadas de rosca. En particular, un hilo de interfaz gráfica de usuario tiene un mayor hilo pila para afrontar mejor la naturaleza recursiva de win32k así como el apoyo
modo de usuario callbacks que pueden requerir espacio adicional de la pila 1 para marcos de trampa y otros metadatos.

Cuando el hilo de RST de un proceso se convierte en un hilo de interfaz gráfica de usuario y llama W32pProcessCallout
, Win32k llama win32k! xxxInitProcessInfo para inicializar el por proceso W32PROCESS / ProcessInfo 2 estructura.

Especıficamente, esta estructura sostiene GUI información relacionada con espec ca para cada proceso, tales como la asociada
escritorio, estación de ventana y el usuario y cuenta con GDI mango. Los asigna la función la misma estructura en win32k! AllocateW32Process antes de que el usuario relativos ELDs se inicializan en win32k! xxxUserProcessCallout seguido por el GDI
ELDs relacionados inicializado en GdiProcessCallout.

Además, win32k también inicializa un hilo por W32THREAD / THREADINFO estructura para todos los temas que se convierten en hilos GUI. Esta estructura tiene hilo espec co información relacionada con el subsistema de interfaz gráfica de usuario, tales como información en las colas de cadena de mensajes, registrada ventanas ganchos, escritorio dueño, menú
estado, y así sucesivamente. Aquí, W32pThreadCallout llamadas win32k! AllocateW32Thread a asignar la estructura, seguido
GdiThreadCallout y UserThreadCallout para inicializar la información propia de la GDI y subsistemas de usuario respectivamente.

La función más importante en este proceso es win32k! xxxCreateThreadInfo , que es responsable de la inicialización de la estructura de información hilo.

Window Manager 2.2

Una de las funciones importantes del gestor de ventanas es llevar un registro de usuario entidades tales como ventanas, menús, cursores, etc. Esto se hace mediante la representación entidades como objetos de usuario y mantiene su propia tabla de identificador para realizar un seguimiento de su uso dentro de una sesión de usuario. Así, cuando una aplicación solicita una acción a realizar en una entidad de usuario, proporciona su valor de identificador que el mango
e manager cientemente se asigna al objeto correspondiente en la memoria del kernel.

Objetos de usuario

Los objetos de usuario se dividen en tipos y por lo tanto tienen su propia Tipo espec cos estructuras. Por ejemplo, todos los objetos de la ventana son de nidas por el win32k! tagWND estructura, mientras que los menús son de nidas por el
win32k! tagMENU estructura.

Aunque los tipos de objetos son estructuralmente di? Erent, todos comparten un común cabecera conocido como el CABEZA
estructura (Listado 1).
La CABEZA estructura tiene una copia del valor mango ( h ) Así como un recuento de bloqueos ( cLockObj ), Incrementa cada vez que un objeto está siendo utilizado.

Cuando el objeto está ya no se usa por un componente en particular, su recuento de bloqueos es decrementado.
En el punto donde el recuento de bloqueos llega a cero, el administrador de ventanas sabe que el objeto ya no está siendo utilizado por el sistema y lo libera.







Saludos Mundo Libre.


No hay comentarios:

Publicar un comentario