Page cover

📘User Account Control (UAC)

El Control de cuentas de usuario (UAC)arrow-up-right es una función que permite solicitar el consentimiento para actividades de alto nivel. Las aplicaciones tienen distintos niveles de integridad y un programa con un nivel alto puede realizar tareas que podrían comprometer el sistema. Cuando el UAC está habilitado, las aplicaciones y tareas siempre se ejecutan en el contexto de seguridad de una cuenta que no sea de administrador, a menos que un administrador autorice explícitamente que estas aplicaciones o tareas tengan acceso de nivel de administrador al sistema para ejecutarse. Es una función práctica que protege a los administradores de cambios no deseados, pero no se considera un límite de seguridad.

Cuando el UAC está activado, un usuario puede iniciar sesión en su sistema con su cuenta de usuario estándar. Cuando se inician procesos utilizando un token de usuario estándar, pueden realizar tareas utilizando los derechos otorgados a un usuario estándar. Algunas aplicaciones requieren permisos adicionales para ejecutarse y el UAC puede proporcionar derechos de acceso adicionales al token para que se ejecuten correctamente.

En esta páginaarrow-up-right se explica en profundidad cómo funciona el UAC e incluye el proceso de inicio de sesión, la experiencia del usuario y la arquitectura del UAC. Los administradores pueden utilizar políticas de seguridad para configurar cómo funciona el UAC en su organización a nivel local (mediante secpol.msc), o configurarlo y enviarlo a través de objetos de política de grupo (GPO) en un entorno de dominio de Active Directory. Las distintas configuraciones se describen en detalle aquíarrow-up-right . Hay 10 configuraciones de política de grupo que se pueden configurar para el UAC. La siguiente tabla proporciona detalles adicionales:

Configuración de directiva de grupo

Clave de registro

Configuración predeterminada

EnableInstallerDetection

Habilitado (predeterminado para el hogar) Deshabilitado (predeterminado para la empresa)

Fuentearrow-up-right

imagen

Se debe habilitar el UAC y, si bien puede que no impida que un atacante obtenga privilegios, es un paso adicional que puede ralentizar este proceso y obligarlo a ser más ruidoso.

La cuenta default RID 500 administrator siempre opera en el nivel obligatorio alto. Con el modo de aprobación de administrador (AAM) habilitado, todas las nuevas cuentas de administrador que creemos operarán en el nivel obligatorio medio de manera predeterminada y se les asignarán dos tokens de acceso independientes al iniciar sesión. En el siguiente ejemplo, la cuenta de usuario sarah está en el grupo de administradores, pero cmd.exe se está ejecutando actualmente en el contexto de su token de acceso sin privilegios.

Comprobar el usuario actual

Confirmar la membresía del grupo de administradores

Revisar los privilegios de usuario

Confirmar que el UAC está habilitado

No existe una versión de línea de comandos del mensaje de consentimiento de la GUI, por lo que tendremos que omitir el UAC para ejecutar comandos con nuestro token de acceso privilegiado. Primero, confirmemos si el UAC está habilitado y, de ser así, en qué nivel.

Comprobar nivel de UAC

El valor de ConsentPromptBehaviorAdmin es 0x5, lo que significa que el nivel más alto de UAC Always notify está habilitado. Hay menos omisiones de UAC en este nivel más alto.

Comprobar la versión de Windows

UAC evita fallas de apalancamiento o funcionalidades no deseadas en diferentes compilaciones de Windows. Examinemos la compilación de Windows que queremos actualizar.

Esto devuelve la versión de compilación 14393, que al usar estaarrow-up-right página hacemos referencia cruzada con la versión de Windows 1607.

imagen

El proyecto UACMEarrow-up-right mantiene una lista de omisiones de UAC, que incluye información sobre el número de compilación de Windows afectado, la técnica utilizada y si Microsoft ha publicado una actualización de seguridad para solucionarlo. Usemos la técnica número 54, que se afirma que funciona a partir de la compilación 14393 de Windows 10. Esta técnica apunta a la versión de 32 bits del binario de elevación automática SystemPropertiesAdvanced.exe. Hay muchos binarios confiables que Windows permitirá elevar automáticamente sin la necesidad de una solicitud de consentimiento de UAC.

Según estaarrow-up-right publicación del blog, la versión de 32 bits SystemPropertiesAdvanced.exe intenta cargar la DLL inexistente srrstr.dll, que es utilizada por la funcionalidad Restaurar sistema.

Al intentar localizar una DLL, Windows utilizará el siguiente orden de búsqueda:

  1. El directorio desde el que se cargó la aplicación.

  2. El directorio del sistema C:\Windows\System32 para sistemas de 64 bits.

  3. El directorio del sistema de 16 bits C:\Windows\System (no compatible con sistemas de 64 bits)

  4. El directorio de Windows.

  5. Cualquier directorio que esté enumerado en la variable de entorno PATH.

Revisando la variable de path

Examinemos la variable de ruta con el comando cmd /c echo %PATH%. Esto revela las carpetas predeterminadas que se muestran a continuación. La carpeta WindowsApps se encuentra dentro del perfil del usuario y el usuario puede escribir en ella.

Potencialmente, podemos evitar el UAC mediante el secuestro de DLL colocando una DLL maliciosa srrstr.dll en una carpeta WindowsApps que se cargará en un contexto elevado.

Generación de DLL maliciosa srrstr.dll

Primero, generemos una DLL para ejecutar un shell inverso.

circle-check

Iniciar el servidor HTTP de Python en el host de ataque

Copie la DLL generada a una carpeta y configure un miniservidor web Python para alojarla.

Descargar DLL en el Target

Descargue la DLL maliciosa al sistema de destino y configure un listener de Netcat en nuestra máquina de ataque.

Iniciando listener de nc en el host de ataque

Conexión de prueba

Si ejecutamos el archivo malicioso srrstr.dll, recibiremos un shell que muestra los derechos de usuario normales (UAC habilitado). Para probar esto, podemos ejecutar la DLL rundll32.exe para obtener una conexión de shell reversa.

Una vez que recuperemos la conexión, veremos los derechos de usuario normales.

Ejecución de SystemPropertiesAdvanced.exe en el host de destino

Antes de continuar, debemos asegurarnos de que se hayan finalizado todas las instancias del proceso rundll32 de nuestra ejecución anterior.

Ahora, podemos probar la versión de 32 bits SystemPropertiesAdvanced.exe desde el host de destino.

Recibiendo la conexión reversa

Al volver a verificar a nuestro listener, deberíamos recibir una conexión casi instantáneamente.

Esto se realiza correctamente y recibimos un shell elevado que muestra que nuestros privilegios están disponibles y pueden habilitarse si es necesario.

Última actualización