User Account Control (UAC)
Última actualización
¿Te fue útil?
Última actualización
¿Te fue útil?
El Control de cuentas de usuario (UAC) 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ágina 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í . 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
FilterAdministratorToken
Desactivado
EnableUIADesktopToggle
Desactivado
ConsentPromptBehaviorAdmin
Solicitud de consentimiento para archivos binarios que no sean de Windows
ConsentPromptBehaviorUser
Solicitar credenciales en el escritorio seguro
EnableInstallerDetection
Habilitado (predeterminado para el hogar) Deshabilitado (predeterminado para la empresa)
ValidateAdminCodeSignatures
Desactivado
EnableSecureUIAPaths
Activado
EnableLUA
Activado
PromptOnSecureDesktop
Activado
EnableVirtualization
Activado
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.
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.
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.
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 esta página hacemos referencia cruzada con la versión de Windows 1607
.
El proyecto UACME 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 esta 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:
El directorio desde el que se cargó la aplicación.
El directorio del sistema C:\Windows\System32
para sistemas de 64 bits.
El directorio del sistema de 16 bits C:\Windows\System
(no compatible con sistemas de 64 bits)
El directorio de Windows.
Cualquier directorio que esté enumerado en la variable de entorno 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.
Primero, generemos una DLL para ejecutar un shell inverso.
Nota: En el ejemplo anterior, especificamos nuestra dirección IP VPN tun0.
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.
Siga los pasos de esta sección para obtener una conexión de shell inversa con privilegios de usuario normales y otra que omita el UAC. Envíe el contenido de flag.txt al escritorio del usuario sarah cuando haya terminado.