El Control de cuentas de usuario ( UAC ) es una función de control de acceso obligatorio introducida con los sistemas operativos Windows Vista [1] y Windows Server 2008 de Microsoft , con una versión más relajada [2] también presente en Windows 7 , Windows Server 2008 R2 , Windows 8 , Windows Server 2012 , Windows 8.1 , Windows Server 2012 R2 , Windows 10 y Windows 11. Su objetivo es mejorar la seguridad de Microsoft Windows al limitar el software de aplicación a los privilegios de usuario estándar hasta que un administrador autorice un aumento o elevación. De esta manera, solo las aplicaciones en las que confía el usuario pueden recibir privilegios administrativos y se evita que el malware comprometa el sistema operativo. En otras palabras, una cuenta de usuario puede tener privilegios de administrador asignados, pero las aplicaciones que ejecuta el usuario no heredan esos privilegios a menos que se aprueben de antemano o el usuario lo autorice explícitamente.
El UAC utiliza el Control de integridad obligatorio para aislar los procesos en ejecución con diferentes privilegios. Para reducir la posibilidad de que las aplicaciones con menos privilegios se comuniquen con las que tienen más privilegios, se utiliza otra nueva tecnología, el Aislamiento de privilegios de la interfaz de usuario , junto con el Control de cuentas de usuario para aislar estos procesos entre sí. [3] Un uso destacado de esto es el "Modo protegido" de Internet Explorer 7. [4]
Los sistemas operativos de los mainframes y de los servidores llevan décadas diferenciando entre superusuarios y usuarios . Esto tenía un componente de seguridad evidente, pero también un componente administrativo, ya que impedía que los usuarios cambiaran accidentalmente la configuración del sistema.
Los primeros sistemas operativos domésticos de Microsoft (como MS-DOS y Windows 9x ) no tenían un concepto de diferentes cuentas de usuario en la misma máquina. Las versiones posteriores de Windows y las aplicaciones de Microsoft fomentaron el uso de inicios de sesión de usuarios que no fueran administradores, pero algunas aplicaciones siguieron requiriendo derechos de administrador. Microsoft no certifica las aplicaciones como compatibles con Windows si requieren privilegios de administrador; dichas aplicaciones no pueden usar el logotipo de compatibilidad con Windows en su empaquetado.
Las tareas que requieren privilegios de administrador activarán un mensaje de aviso del UAC (si el UAC está habilitado); normalmente están marcadas con un icono de escudo de seguridad con los 4 colores del logotipo de Windows (en Vista y Windows Server 2008) o con dos paneles amarillos y dos azules (Windows 7, Windows Server 2008 R2 y posteriores). En el caso de los archivos ejecutables, el icono tendrá una superposición de escudo de seguridad. Las siguientes tareas requieren privilegios de administrador: [9] [10]
Las tareas comunes, como cambiar la zona horaria, no requieren privilegios de administrador [11] (aunque sí los requiere cambiar la hora del sistema, ya que la hora del sistema se usa comúnmente en protocolos de seguridad como Kerberos ). Una serie de tareas que requerían privilegios de administrador en versiones anteriores de Windows, como instalar actualizaciones críticas de Windows, ya no los requieren en Vista. [12] Cualquier programa se puede ejecutar como administrador haciendo clic derecho en su icono y haciendo clic en "Ejecutar como administrador", excepto los paquetes MSI o MSU ya que, debido a su naturaleza, si se requieren derechos de administrador, generalmente se mostrará un mensaje. Si esto falla, la única solución alternativa es ejecutar un Símbolo del sistema como administrador y ejecutar el paquete MSI o MSP desde allí.
El Control de cuentas de usuario solicita credenciales en un modo de escritorio seguro , donde toda la pantalla se atenúa temporalmente, Windows Aero se desactiva y solo la ventana de autorización tiene el brillo completo, para presentar solo la interfaz de usuario (IU) de elevación. Las aplicaciones normales no pueden interactuar con el escritorio seguro. Esto ayuda a evitar la suplantación, como superponer texto o gráficos diferentes sobre la solicitud de elevación o ajustar el puntero del mouse para hacer clic en el botón de confirmación cuando eso no es lo que el usuario deseaba. [13] Si una actividad administrativa proviene de una aplicación minimizada, la solicitud de escritorio seguro también se minimizará para evitar que se pierda el foco . Es posible deshabilitar el escritorio seguro , aunque esto no es aconsejable desde una perspectiva de seguridad. [14]
En versiones anteriores de Windows, las aplicaciones escritas con la suposición de que el usuario se ejecutará con privilegios de administrador experimentaron problemas cuando se ejecutaron desde cuentas de usuario limitadas, a menudo porque intentaron escribir en directorios de todo el equipo o del sistema (como Archivos de programa ) o claves de registro (en particular HKLM ). [5] UAC intenta aliviar esto utilizando la virtualización de archivos y registro , que redirige las escrituras (y las lecturas posteriores) a una ubicación por usuario dentro del perfil del usuario. Por ejemplo, si una aplicación intenta escribir en un directorio como "C:\Program Files\appname\settings.ini" en el que el usuario no tiene permiso de escritura, la escritura se redirigirá a "C:\Users\username\AppData\Local\VirtualStore\Program Files\appname\settings.ini". La función de redirección solo se proporciona para aplicaciones de 32 bits no elevadas, y solo si no incluyen un manifiesto que solicita privilegios específicos. [15]
Hay una serie de opciones configurables del UAC. Es posible: [16]
Las ventanas del símbolo del sistema que se ejecutan con privilegios elevados antepondrán el título de la ventana con la palabra "Administrador", de modo que el usuario pueda discernir qué instancias se ejecutan con privilegios elevados. [18]
Se hace una distinción entre las solicitudes de elevación de un ejecutable firmado y de un ejecutable no firmado; y si es el primero, si el editor es 'Windows Vista'. El color, el icono y la redacción de las solicitudes son diferentes en cada caso; por ejemplo, se intenta transmitir una mayor sensación de advertencia si el ejecutable no está firmado que si no lo está. [19]
La función "Modo protegido" de Internet Explorer 7 utiliza el UAC para ejecutarse con un nivel de integridad "bajo" (un token de usuario estándar tiene un nivel de integridad "medio"; un token elevado (Administrador) tiene un nivel de integridad "alto"). Como tal, se ejecuta efectivamente en un entorno limitado, sin poder escribir en la mayor parte del sistema (aparte de la carpeta Archivos temporales de Internet) sin elevarse a través del UAC. [7] [20] Dado que las barras de herramientas y los controles ActiveX se ejecutan dentro del proceso de Internet Explorer, también se ejecutarán con privilegios bajos y estarán severamente limitados en el daño que pueden hacer al sistema. [21]
Un programa puede solicitar la elevación de distintas maneras. Una de las formas en que los desarrolladores de programas pueden hacerlo es agregar una sección de privilegios solicitados a un documento XML, conocido como manifiesto , que luego se integra en la aplicación. Un manifiesto puede especificar dependencias, estilos visuales y ahora el contexto de seguridad adecuado:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns= "urn:schemas-microsoft-com:asm.v1" manifestVersion= "1.0" > <trustInfo xmlns= "urn:schemas-microsoft-com:asm.v2" > <security> <requestedPrivileges> <requestedExecutionLevel level= "highestAvailable" /> </requestedPrivileges> </security> </trustInfo> </assembly>
Si se establece el atributo de nivel para requestExecutionLevel en "asInvoker", la aplicación se ejecutará con el token que la inició, "highestAvailable" presentará un mensaje de UAC para los administradores y se ejecutará con los privilegios reducidos habituales para los usuarios estándar, y "requireAdministrator" requerirá elevación. [22] En los modos lowestAvailable y requireAdministrator, si no se proporciona confirmación, el programa no se iniciará.
Un ejecutable que está marcado como " requireAdministrator
" en su manifiesto no se puede iniciar desde un proceso no elevado que utilice CreateProcess()
. En su lugar, ERROR_ELEVATION_REQUIRED
se devolverá . ShellExecute()
o ShellExecuteEx()
se debe utilizar en su lugar. Si HWND
no se proporciona un , el cuadro de diálogo aparecerá como un elemento parpadeante en la barra de tareas.
No se recomienda inspeccionar el manifiesto de un ejecutable para determinar si requiere elevación, ya que la elevación puede ser necesaria por otras razones (ejecutables de configuración, compatibilidad de aplicaciones). Sin embargo, es posible detectar mediante programación si un ejecutable requerirá elevación utilizando CreateProcess()
y configurando el dwCreationFlags
parámetro en CREATE_SUSPENDED
. Si se requiere elevación, ERROR_ELEVATION_REQUIRED
se devolverá. [23] Si no se requiere elevación, se devolverá un código de retorno de éxito en cuyo punto se puede usar TerminateProcess()
en el proceso suspendido recién creado. Sin embargo, esto no permitirá detectar que un ejecutable requiere elevación si ya se está ejecutando en un proceso elevado.
Se puede generar un nuevo proceso con privilegios elevados desde una aplicación .NET utilizando el runas
verbo " ". Un ejemplo con C# :
Sistema . Diagnóstico . Proceso proc = new Sistema . Diagnóstico . Proceso (); proc . StartInfo . FileName = "C:\\Windows\\system32\\notepad.exe" ; proc . StartInfo . Verbo = "runas" ; // Elevar la aplicación proc . StartInfo . UseShellExecute = true ; proc . Start ();
En una aplicación nativa Win32runas
se puede agregar el mismo verbo " " a una llamada ShellExecute()
o ShellExecuteEx()
: [7]
ShellExecute ( hwnd , "runas" , "C: \\ Windows \\ Notepad.exe" , 0 , 0 , SW_SHOWNORMAL );
En ausencia de una directiva específica que indique qué privilegios solicita la aplicación, el UAC aplicará heurísticas para determinar si la aplicación necesita o no privilegios de administrador. Por ejemplo, si el UAC detecta que la aplicación es un programa de configuración a partir de pistas como el nombre del archivo, los campos de control de versiones o la presencia de ciertas secuencias de bytes dentro del ejecutable, en ausencia de un manifiesto asumirá que la aplicación necesita privilegios de administrador. [24]
El UAC es una función de conveniencia ; no introduce un límite de seguridad ni impide la ejecución de malware . [25] [26] [27] [28]
Leo Davidson descubrió que Microsoft debilitó el UAC en Windows 7 al eximir a unos 70 programas de Windows de mostrar un mensaje de UAC y presentó una prueba de concepto para una escalada de privilegios . [29]
Stefan Kanthak presentó una prueba de concepto para una escalada de privilegios a través de la detección del instalador de UAC y los instaladores de IExpress . [30]
Stefan Kanthak presentó otra prueba de concepto para la ejecución de código arbitrario , así como la escalada de privilegios a través de la elevación automática y la implantación de binarios del UAC. [31]
Ha habido quejas de que las notificaciones de UAC ralentizan varias tareas en la computadora, como la instalación inicial de software en Windows Vista . [32] Es posible desactivar UAC mientras se instala software y volver a habilitarlo en un momento posterior. [33] Sin embargo, esto no se recomienda ya que, como la virtualización de archivos y registro solo está activa cuando UAC está activado, las configuraciones del usuario y los archivos de configuración pueden instalarse en un lugar diferente (un directorio del sistema en lugar de un directorio específico del usuario) si UAC está desactivado de lo que estarían de otra manera. [14] También el "Modo protegido" de Internet Explorer 7 , por el cual el navegador se ejecuta en un entorno limitado con privilegios inferiores a los del usuario estándar, se basa en UAC; y no funcionará si UAC está desactivado. [20]
El analista de Yankee Group, Andrew Jaquith, dijo, seis meses antes de que se lanzara Vista, que "si bien el nuevo sistema de seguridad es prometedor, es demasiado hablador y molesto". [34] Para cuando se lanzó Windows Vista en noviembre de 2006, Microsoft había reducido drásticamente la cantidad de tareas del sistema operativo que activaban los avisos de UAC y agregó virtualización de archivos y registros para reducir la cantidad de aplicaciones heredadas que activaban los avisos de UAC. [5] Sin embargo, David Cross, un gerente de unidad de productos de Microsoft, declaró durante la Conferencia RSA 2008 que UAC de hecho estaba diseñado para "molestar a los usuarios" y obligar a los proveedores de software independientes a hacer que sus programas fueran más seguros para que no se activaran los avisos de UAC. [35] El software escrito para Windows XP y muchos periféricos ya no funcionaría en Windows Vista o 7 debido a los amplios cambios realizados en la introducción de UAC. Las opciones de compatibilidad también eran insuficientes. En respuesta a estas críticas, Microsoft alteró la actividad de UAC en Windows 7 . Por ejemplo, de manera predeterminada no se solicita a los usuarios que confirmen muchas acciones iniciadas únicamente con el mouse y el teclado, como por ejemplo operar los subprogramas del Panel de control.
En un artículo polémico, el escritor de Gadgetwise del New York Times, Paul Boutin, dijo: "Desactive el Control de cuentas de usuario de Vista, que es demasiado protector. Esas ventanas emergentes son como tener a su madre rondando por encima de su hombro mientras trabaja". [36] El periodista de Computerworld, Preston Gralla, describió el artículo del NYT como "... uno de los peores consejos técnicos jamás emitidos". [37]
UAC comenzó como Cuenta de usuario limitada (LUA), luego se renombró Protección de cuenta de usuario (UAP) y finalmente obtuvimos UAC.