Bypass de Protección de Administrador en Windows: Explotación de UI Access para Escalada de Privilegios
Descubre cómo vulnerabilidades en la implementación de UI Access de Microsoft permitieron a atacantes eludir la Protección de Administrador en Windows.
Bypass de Protección de Administrador en Windows: Explotación de UI Access para Escalada de Privilegios
Por [Periodista de Ciberseguridad]
Hallazgos Clave
El investigador de seguridad James Forshaw ha revelado detalles técnicos de cinco vulnerabilidades críticas en la implementación de UI Access de Microsoft, que permitían a los atacantes eludir la Protección de Administrador de Windows. Los nueve bypasses identificados durante la investigación de Forshaw —incluyendo los cinco detallados en este análisis— han sido parcheados por Microsoft.
Las fallas se originan en la función UI Access, introducida originalmente en Windows Vista para soportar herramientas de accesibilidad como lectores de pantalla. Al abusar de esta funcionalidad, los atacantes podían lograr la ejecución arbitraria de código en un proceso de UI Access con integridad High, comprometiendo el límite de seguridad de la Protección de Administrador sin interacción del usuario.
Contexto Técnico: UI Access y UIPI
La Evolución de la Seguridad en la Interacción con Ventanas
Antes de Windows Vista, cualquier proceso en ejecución en el escritorio de un usuario podía controlar cualquier ventana creada por otro proceso —incluyendo aquellas de procesos privilegiados— mediante mensajes de ventana. Este comportamiento fue explotado en los denominados ataques Shatter, donde un usuario con privilegios limitados podía manipular componentes de UI privilegiados para escalar privilegios. Microsoft mitigó esto eliminando elementos de UI del código privilegiado.
Con la introducción del Control de Cuentas de Usuario (UAC) en Windows Vista, los procesos comenzaron a ejecutarse con diferentes niveles de privilegio en el mismo escritorio. Para evitar la manipulación cruzada de ventanas entre privilegios, Microsoft implementó el Aislamiento de Privilegios de Interfaz de Usuario (UIPI), aprovechando el Control de Integridad Obligatorio (MIC) para restringir las interacciones entre procesos. UIPI bloquea que un proceso envíe mensajes de ventana o utilice hooks para interactuar con ventanas creadas por un proceso de mayor integridad.
Por ejemplo:
- Un proceso de usuario limitado (integridad Medium) no puede enviar mensajes a un proceso de administrador (integridad High).
- UIPI también evita otras funcionalidades de UI, como los hooks de ventanas, entre niveles de integridad.
El Dilema de la Accesibilidad
Las restricciones de UIPI crearon un problema significativo para herramientas de accesibilidad como lectores de pantalla. Estas aplicaciones, ejecutándose como usuarios limitados, ya no podían interactuar con procesos de administrador, impidiéndoles leer el contenido de las ventanas o realizar acciones como hacer clic en botones. Para resolver esto, Microsoft introdujo el flag UI Access.
Cuando se establece en el token de acceso de un proceso durante su inicialización, el flag UI Access otorga permisos especiales para eludir muchas restricciones de UIPI. Activar este flag requiere el privilegio SE_TCB_NAME, que solo está disponible para servicios del sistema. Como resultado, la creación de un proceso con UI Access implica un servicio del sistema —típicamente el servicio UAC— a través de la llamada RPC RAiLaunchAdminProcess.
Flujo de Creación de Procesos con UI Access
Para prevenir el uso indebido, el servicio UAC aplica verificaciones estrictas en el archivo ejecutable antes de habilitar el flag UI Access:
- Requisito de Manifiesto: El ejecutable debe tener un manifiesto embebido con el atributo
uiAccessestablecido entrue. - Firma de Código: El archivo debe estar firmado con un certificado de firma de código confiable en el almacén de certificados raíz de la máquina local.
- Ubicación Segura: El ejecutable debe residir en una ubicación exclusiva para administradores en la unidad del sistema, como:
- Directorio
Program Files - Directorio
Windows(excluyendo ubicaciones conocidas como escribibles) - Directorio
System32(excluyendo ubicaciones conocidas como escribibles)
- Directorio
Si se cumplen estos criterios, el servicio UAC:
- Toma una copia del token de acceso del llamador.
- Habilita el flag UI Access.
- Incrementa el nivel de integridad basado en el llamador:
- Usuario limitado de un administrador UAC: Establece la integridad en High.
- Administrador: Establece la integridad en High (típicamente sin cambios).
- Usuario normal: Establece la integridad en la del llamador + 16, hasta un máximo de High.
Nota Importante: El flag UI Access solo permite eludir un conjunto limitado de operaciones, como enviar mensajes de ventana a procesos de mayor integridad. No permite el uso de hooks de ventanas, lo que podría habilitar la inyección de código.
Explotación de UI Access en la Protección de Administrador
La Vulnerabilidad Central
La Protección de Administrador, una característica más reciente de Windows, fue diseñada para crear un límite seguro para UAC al separar al usuario limitado del administrador shadow. Sin embargo, Forshaw descubrió que los procesos con UI Access podían socavar este límite:
- Cuando un usuario limitado crea un proceso con UI Access a través de
RAiLaunchAdminProcess, el proceso se ejecuta bajo el token del llamador (el usuario limitado) pero con el flag UI Access habilitado y la integridad establecida en High. - Un proceso con integridad High puede comprometer cualquier otro proceso con integridad High en el mismo escritorio, incluso si se ejecuta como un usuario diferente.
- Dado que el proceso con UI Access se ejecuta como el usuario limitado, no hay separación de perfil —una mejora clave en la Protección de Administrador—.
- La elevación a integridad High es silenciosa, permitiendo a los atacantes romper el límite de seguridad sin notificar al usuario.
Logrando Ejecución Arbitraria en UI Access
Forshaw identificó múltiples métodos para lograr la ejecución arbitraria de código en un proceso con integridad High y UI Access. Aunque Microsoft había indicado previamente que estos problemas no eran una prioridad para su corrección, varios han sido parcheados desde entonces. Las técnicas se dividen en tres categorías principales:
1. Elusión de la Verificación de Directorio de Aplicación Seguro
El método AiCheckSecureApplicationDirectory del servicio UAC valida que el ejecutable resida en una ubicación segura. Forshaw descubrió varias formas de eludir esta verificación:
-
Flujos Nombrados de NTFS: En 2017, Forshaw reportó un bypass donde un atacante podía escribir un flujo nombrado de NTFS en un directorio escribible por un usuario limitado. Por ejemplo, el directorio
C:\Windows\tracinges escribible pero excluido de la verificación segura. Al escribir un flujo nombrado (ej.C:\Windows\tracing:file.exe), el archivo se consideraba seguro porque la ruta parecía estar dentro deC:\Windows. Este problema fue resuelto en una versión posterior de Windows. -
Archivos/Directorios Escribibles en Ubicaciones Seguras: Los atacantes podían sobrescribir un archivo existente en una ubicación segura con un ejecutable malicioso. La API
CreateProcessAsUserutilizada por el servicio UAC no requiere una extensión de archivo específica, permitiendo ejecutar cualquier archivo. Alternativamente, los atacantes podían copiar un ejecutable en un directorio escribible dentro de una ubicación segura. -
Abuso del Instalador MSIX: En investigaciones recientes, Forshaw descubrió que el instalador de Windows podía colocar archivos MSIX en
C:\Program Files\WindowsApps, un directorio no excluido por la verificación segura. Windows 11 permite instalar archivos MSIX firmados sin privilegios de administrador por defecto. Al empaquetar un ejecutable con UI Access en un instalador MSIX y firmarlo con un certificado arbitrario, los atacantes podían colocar el ejecutable en una ubicación segura. Este problema fue corregido excluyendo el directorioWindowsApps.
2. Bypass Históricos Adicionales
Forshaw también hizo referencia a otros métodos históricos para lograr la ejecución arbitraria en UI Access, incluyendo:
- Plantación de DLL: Secuestro de ejecutables legítimos en ubicaciones seguras mediante la plantación de DLLs maliciosas.
- Abuso de COM: Explotación de componentes COM que utilizan ventanas message-only para comprometer procesos sin mostrar UI.
Análisis de Impacto
Las vulnerabilidades descritas en esta investigación representan un riesgo significativo para los sistemas Windows con la Protección de Administrador habilitada:
- Escalada de Privilegios: Los atacantes podían elevar privilegios de un usuario limitado a integridad High, eludiendo efectivamente el límite de seguridad de la Protección de Administrador.
- Explotación Silenciosa: La elevación a integridad High ocurre sin interacción del usuario, dificultando su detección.
- Ejecución Arbitraria de Código: Una vez lograda la ejecución arbitraria de código en un proceso con integridad High y UI Access, los atacantes pueden comprometer cualquier otro proceso con integridad High en el mismo escritorio.
- Falta de Separación de Perfil: La ausencia de separación de perfil socava una de las mejoras de seguridad fundamentales de la Protección de Administrador.
Recomendaciones
Los profesionales de la seguridad y administradores de sistemas deben tomar las siguientes medidas para mitigar los riesgos asociados con estas vulnerabilidades:
- Aplicar Parches: Asegurar que todos los sistemas Windows estén actualizados con los últimos parches de seguridad de Microsoft para abordar los bypasses corregidos.
- Monitorear Procesos con UI Access: Implementar monitoreo para la creación inusual de procesos con UI Access, particularmente aquellos que se ejecutan con integridad High.
- Restringir Acceso a Ubicaciones Seguras: Limitar el acceso de escritura a directorios como
Program Files,WindowsySystem32solo a administradores. - Auditar Certificados de Firma de Código: Revisar y restringir los certificados de firma de código confiables en el almacén de certificados raíz de la máquina local para prevenir abusos.
- Deshabilitar Funcionalidades de Accesibilidad No Necesarias: Desactivar UI Access para aplicaciones que no lo requieran, reduciendo la superficie de ataque.
Conclusión
La investigación de James Forshaw destaca los desafíos continuos en la protección de los mecanismos de escalada de privilegios en Windows. Aunque UI Access fue diseñado para soportar la accesibilidad, su implementación introdujo riesgos de seguridad significativos que podían ser explotados para eludir la Protección de Administrador. Microsoft ha abordado las vulnerabilidades descritas en este análisis, pero la investigación subraya la importancia de pruebas de seguridad rigurosas y monitoreo proactivo para defenderse contra amenazas similares en el futuro.
Para más detalles técnicos, consulta la publicación original de Forshaw en Project Zero.