Omitir el Control de cuentas de usuario (UAC) imitando directorios confiables


El experto en seguridad de la información David Wells ha publicado una forma de evitar los controles de la cuenta de usuario de UAC en Windows 10

Hola a todos!

Mientras investigaba algunas nuevas soluciones para el Control de cuentas de usuario (UAC), descubrí una solución completamente nueva para UAC en el momento de escribir este artículo. Vale la pena señalar que Microsoft no considera UAC como un límite de seguridad, sin embargo, aún informamos de varios errores en Microsoft y quiero compartir los detalles de la vulnerabilidad que encontré aquí. Este método se ha probado con éxito en Windows 10 Build 17134. Antes de profundizar en los detalles de mi hallazgo, primero le daré una pequeña explicación sobre cómo funciona el servicio UAC.

Imprimación Uac

Cuando un usuario que es miembro del grupo Administradores desea ejecutar una aplicación que requiere privilegios elevados, el UAC muestra una solicitud correspondiente y un usuario que es miembro del grupo Administradores debe confirmar la acción. Sin embargo, esta solicitud UAC no se produce para TODOS los archivos ejecutables administrativamente en Windows . Hay algunas excepciones que elevarán "automáticamente" los privilegios de un archivo ejecutable sin causar una solicitud de UAC, sin pasar por UAC (¡para su sorpresa!). Este grupo particular de ejecutables confiables seleccionados se somete a controles de seguridad adicionales por parte del sistema para asegurarse de que estos archivos sean realmente confiables, por lo tanto, los atacantes de información generalmente no abusan de esta característica. Este enfoque se usó en métodos de derivación UAC anteriores y será la base de mi nuevo método de derivación. Sin embargo, hay algunas lagunas que debemos tomar para que nuestro ataque tenga éxito. Echemos un vistazo a los requisitos que deben cumplirse si queremos que nuestro ejecutable sea "elevado automáticamente a privilegios". Para hacer esto, mostraré algunas imágenes de la biblioteca desmontada appinfo.dll (el servicio AIS que procesa las solicitudes de escalado de privilegios es uno de los componentes principales de UAC).

Requisito 1: archivo configurado para elevar automáticamente los privilegios

Cuando surge una solicitud de escalada de privilegios para un programa, el servicio AIS (appinfo.dll) realiza una llamada RPC con la ruta ejecutable de destino pasada como argumento. Este servicio luego asignará el contenido ejecutable de destino del archivo a leer. En el manifiesto del archivo ejecutable, se intenta leer el valor para obtener la clave "autoElevate" (si existe).

Figura 1 - Lectura del manifiesto del archivo ejecutable para obtener el valor clave "autoElevate".



Si se recibe el valor y es Verdadero, el archivo se considerará como un archivo ejecutable de privilegios elevados "automático", que se ejecutará con elevación de privilegios y no invocará el cuadro de diálogo del servicio UAC (siempre que cumpla los siguientes requisitos mencionados a continuación).

Figura 2: llamar a "bsearch" para verificar el nombre del archivo ejecutable en la lista de ejecutables "autoelevante"



Algunos de estos archivos que están programados en el sistema están en la lista blanca:
'cttunesvr.exe', 'inetmgr.exe', 'migsetup.exe', 'mmc.exe', 'oobe.exe', 'pkgmgr.exe', 'provisionhare.exe', 'provisiontorage.exe', 'spinstall .exe ',' winsat.exe '

Requisito 2: Firmado correctamente

Se supone que la segunda condición para aumentar el privilegio "automáticamente" después de enviar una solicitud a UAC es realizar una verificación de firma utilizando "wintrust! WTGetSignatureInfo ".

Esto significa que el atacante no podrá simplemente crear su propio archivo de manifiesto o ejecutable necesario para la elevación "automática" de privilegios y tener éxito, ya que el archivo binario del atacante probablemente se firmará incorrectamente y el último requisito, la ejecución, también fallará. de un directorio confiable.

Requisito 3: ejecución desde un directorio confiable

El requisito final para obtener una elevación de privilegios "automática" es que el ejecutable de destino se encuentre en un "directorio confiable", por ejemplo, "C: \ Windows \ System32". La Figura 3 muestra que AIS realiza esta verificación de la ruta con la solicitud de actualización, en cuyo caso una de las rutas consideradas "confiables" es "C: \ Windows \ System32".

Figura 3



El título de este artículo es "Omitir el Control de cuentas de usuario (UAC) imitando directorios confiables", por lo que probablemente pueda adivinar fácilmente lo que sucederá a continuación.

Bypass UAC

Como se mencionó anteriormente en la sección de UAC Primer, se realizará un privilegio automático (omisión de UAC) para archivos ejecutables que:

  1. Configurado para recibir escalada de privilegios "automática"
  2. Firmado correctamente
  3. Ejecutar desde un directorio confiable ("C: \ Windows \ System32")

Appinfo.dll (AIS) utiliza la API RtlPrefixUnicodeString para verificar si la ruta del archivo ejecutable coincide con "C: \ Windows \ System32 \" para verificar uno de los directorios de confianza. Esta es una prueba de concreto bastante reforzado, dada su comparación con la ubicación del archivo canónico.

Por lo tanto, para organizar una omisión de esta comprobación, creo un directorio llamado "C: \ Windows \" (observe el espacio después de "Windows"). Por supuesto, al usar esta acción aún no puede pasar la verificación RtlPrefixUnicodeString, y también mencionaré que este es un nombre de directorio algo inválido (o al menos "poco amigable"), ya que Windows no permite agregar espacios al final del nombre al crear el directorio (intente )

Sin embargo, utilizando la API CreateDirectory y agregando "\\? \ "Al nombre del directorio que deseo crear, podemos omitir algunas de estas reglas de filtrado de nombres y enviar una solicitud para crear el directorio directamente al sistema de archivos.



Esto lleva a la creación de un directorio inconveniente que felizmente coexiste en el sistema de archivos junto con el verdadero "C: \ Windows \" (excepto cuando intenta hacer algo con él en el Explorador de Windows).



Ahora que tenemos el directorio "C: \ Windows \", podemos crear el directorio "System32" y copiar uno de los archivos ejecutables firmados (que el sistema permite elevar privilegios "automáticamente") desde el directorio real "C: \ Windows \ System32 ".
Para hacer esto, copié "winSAT.exe" (uno de los archivos en la lista blanca de archivos ejecutables de Windows con la elevación "automática" de privilegios permitidos por el sistema).
Cuando intentamos ejecutar este archivo desde nuestro nuevo directorio "C: \ Windows \ System32 \ winSAT.exe", pasará por las siguientes API (ver Figura 6) en appinfo.dll antes de realizar una verificación de directorio confiable. Esto es importante y la base de por qué funciona esta solución.

Figura 6



Cuando esta ruta inconveniente con un espacio se envía a AIS para solicitar la escalada de privilegios, la ruta se pasa a GetLongPathNameW, que la convierte de nuevo a "C: \ Windows \ System32 \ winSAT.exe" (espacio eliminado).

Genial

Ahora esta es la línea donde pasó la verificación de directorio válida (usando RtlPrefixUnicodeString) para el resto de la verificación.

La belleza de mi solución es que después de verificar el directorio confiable, se ejecuta esta ruta convertida, que luego se libera, y el resto de las comprobaciones (y la solicitud final de escalado de privilegios) se realizan con el nombre original del directorio ejecutable (con un espacio adicional).

Esto le permite pasar por todas las otras comprobaciones y hace que appinfo.dll acepte mi copia de winSAT.exe como con una elevación "automática" de privilegios (ya que está correctamente firmado y agregado a la lista blanca para la elevación "automática" de privilegios).

Para utilizar el código malicioso, simplemente copié el WINMM.dll falso (winSAT.exe importado) en mi directorio actual "C: \ Windows \ System32 \" para falsificar el dll local. El concepto completo se puede ver en la figura a continuación.

Figura 7



Enlace a Github

Source: https://habr.com/ru/post/es430498/


All Articles