User Account Control
Ú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
Token de administrador de filtros
Desactivado
Activar UIADesktopToggle
Desactivado
ConsentPromptBehaviorAdmin
Solicitud de consentimiento para archivos binarios que no sean de Windows
ConsentimientoPromptBehaviorUser
Solicitar credenciales en el escritorio seguro
Habilitar detección del instalador
Habilitado (predeterminado para el hogar) Deshabilitado (predeterminado para la empresa)
Validar firmas de código de administrador
Desactivado
Habilitar SecureUIAPaths
Activado
Habilitar LUA
Activado
Aviso sobre escritorio seguro
Activado
Habilitar virtualización
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.
Revisando la variable de ruta
Examinemos la variable de ruta con el comando cmd /c echo %PATH%
. Esto revela las carpetas predeterminadas que se muestran a continuación. La WindowsApps
carpeta 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 srrstr.dll
DLL maliciosa en WindowsApps
una carpeta que se cargará en un contexto elevado.
Generación de DLL maliciosa srrstr.dll
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 Target
Descargue la DLL maliciosa al sistema de destino y configure un Netcat
oyente en nuestra máquina de ataque.
Iniciando nc Listener en el host de ataque
Conexión de prueba
Si ejecutamos el srrstr.dll
archivo malicioso, 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 inversa.
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 rundll32
se hayan finalizado todas las instancias del proceso de nuestra ejecución anterior.
Ahora, podemos probar la versión de 32 bits SystemPropertiesAdvanced.exe
desde el host de destino.
Recibiendo conexión de regreso
Al volver a verificar a nuestro oyente, 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.
Escale los privilegios utilizando los métodos que se muestran en esta sección y envíe el contenido de la flag ubicada en
c:\Users\Administrator\Desktop\ServerOperators\flag.txt