El Control de cuentas de usuario ( UAC ) es una característica obligatoria de control de acceso 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 limitando el software de la aplicación a privilegios de usuario estándar hasta que un administrador autorice un aumento o elevación. De esta manera, sólo las aplicaciones en las que el usuario confía 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 sean aprobadas de antemano o el usuario lo autorice explícitamente.
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 privilegios más bajos se comuniquen con otras con privilegios más altos, se utiliza otra tecnología nueva, 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 en mainframes y servidores han diferenciado entre superusuarios y usuarios durante décadas. Esto tenía un componente de seguridad obvio, 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 , Windows 95 - 98 y Windows Me ) no tenían el concepto de diferentes cuentas de usuario en la misma máquina. Las versiones posteriores de las aplicaciones de Windows y Microsoft fomentaron el uso de inicios de sesión de usuarios que no fueran administradores, pero algunas aplicaciones continuaron requiriendo derechos de administrador. Microsoft no certifica aplicaciones como compatibles con Windows si requieren privilegios de administrador; Es posible que dichas aplicaciones no utilicen el logotipo compatible con Windows en su embalaje.
Las tareas que requieren privilegios de administrador activarán un mensaje de UAC (si UAC está habilitado); Por lo general, están marcados con un ícono 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 archivos ejecutables, el icono tendrá un escudo de seguridad superpuesto. Las siguientes tareas requieren privilegios de administrador: [9] [10]
Las tareas comunes, como cambiar la zona horaria, no requieren privilegios de administrador [11] (aunque cambiar la hora del sistema sí lo requiere, ya que la hora del sistema se usa comúnmente en protocolos de seguridad como Kerberos ). Varias tareas que requerían privilegios de administrador en versiones anteriores de Windows, como la instalación de actualizaciones críticas de Windows, ya no requieren privilegios de administrador 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 es ejecutar un símbolo del sistema como administrador e iniciar 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 está atenuada temporalmente, Windows Aero está deshabilitado y solo la ventana de autorización tiene el brillo máximo, para presentar solo la interfaz de usuario (UI) de elevación. Las aplicaciones normales no pueden interactuar con Secure Desktop. Esto ayuda a evitar la suplantación de identidad, como superponer texto o gráficos diferentes encima de 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 pretendía. [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 desactivar Secure Desktop , aunque esto no es aconsejable desde el punto de vista de la seguridad. [14]
En versiones anteriores de Windows, las aplicaciones escritas asumiendo que el usuario se ejecutaría con privilegios de administrador experimentaban problemas cuando se ejecutaban desde cuentas de usuario limitadas, a menudo porque intentaban escribir en directorios de toda la máquina o del sistema (como Archivos de programa ) o en el registro. claves (en particular HKLM ). [5] UAC intenta aliviar esto utilizando la virtualización de archivos y registros , 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 solicite privilegios específicos. [15]
Hay una serie de ajustes de UAC configurables. 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", para que un usuario pueda discernir qué instancias se están ejecutando con privilegios elevados. [18]
Se hace una distinción entre solicitudes de elevación de un ejecutable firmado y un ejecutable sin firmar; y si es lo primero, si el editor es 'Windows Vista'. El color, el icono y la redacción de las indicaciones son diferentes en cada caso; por ejemplo, intentar transmitir una mayor sensación de advertencia si el ejecutable no está firmado que si no. [19]
La función "Modo protegido" de Internet Explorer 7 utiliza 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 una zona de pruebas, sin poder escribir en la mayor parte del sistema (aparte de la carpeta Archivos temporales de Internet) sin elevarlo a través de 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 cuanto al daño que pueden causar al sistema. [21]
Un programa puede solicitar elevación de varias maneras diferentes. Una forma para los desarrolladores de programas 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 apropiado:
<?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" > <seguridad> < privilegios solicitados> < nivel de nivel de ejecución solicitado= "highestAvailable" /> </ privilegios solicitados> </seguridad> </trustInfo> </assembly>
Establecer el atributo de nivel para requestExecutionLevel en "asInvoker" hará que la aplicación se ejecute 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] Tanto en el modo de mayor disponibilidad como en el de requisito de administrador, si no se proporciona la confirmación, el programa no se inicia.
Un ejecutable marcado como " requireAdministrator
" en su manifiesto no se puede iniciar desde un proceso no elevado utilizando CreateProcess()
. En cambio, ERROR_ELEVATION_REQUIRED
será devuelto. ShellExecute()
o ShellExecuteEx()
debe usarse 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 otros motivos (configuración de ejecutables, compatibilidad de aplicaciones). Sin embargo, es posible detectar mediante programación si un ejecutable requerirá elevación usando 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 exitoso, momento en el cual 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 usando el runas
verbo " ". Un ejemplo usando C# :
Sistema . Diagnóstico . Proceso de proceso = nuevo sistema . Diagnóstico . Proceso (); proceso . Información de inicio . Nombre de archivo = "C:\\Windows\\system32\\notepad.exe" ; proceso . Información de inicio . Verbo = "runas" ; // Elevar el proceso de la aplicación . Información de inicio . UseShellExecute = verdadero ; proceso . Comenzar ();
En una aplicación Win32runas
nativa , se puede agregar el mismo " " verbo a una llamada ShellExecute()
o : [7]ShellExecuteEx()
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, UAC aplicará heurísticas para determinar si la aplicación necesita o no privilegios de administrador. Por ejemplo, si UAC detecta que la aplicación es un programa de instalación, a partir de pistas como el nombre del archivo, los campos de versión o la presencia de ciertas secuencias de bytes dentro del ejecutable, en ausencia de un manifiesto asumirá que la aplicación necesita administrador. privilegios. [24]
UAC es una característica 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 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 mediante la detección de instaladores 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 plantación binaria de 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 el software y volver a habilitarlo más adelante. [33] Sin embargo, esto no se recomienda ya que, como la virtualización de archivos y registros 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á apagado de lo que estaría de otra manera. [14] Además, el "Modo protegido" de Internet Explorer 7 , mediante 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 del lanzamiento de Vista, que "si bien el nuevo sistema de seguridad parece prometedor, es demasiado hablador y molesto". [34] Cuando se lanzó Windows Vista en noviembre de 2006, Microsoft había reducido drásticamente la cantidad de tareas del sistema operativo que activaban las indicaciones de UAC y agregó virtualización de archivos y registros para reducir la cantidad de aplicaciones heredadas que activaban las indicaciones de UAC. [5] Sin embargo, David Cross, gerente de la unidad de productos de Microsoft, declaró durante la Conferencia RSA de 2008 que UAC fue en realidad diseñado para "molestar a los usuarios" y obligar a los proveedores de software independientes a hacer sus programas más seguros para que las indicaciones de UAC no lo hicieran. ser desencadenado. [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 con la introducción de UAC. Las opciones de compatibilidad también fueron insuficientes. En respuesta a estas críticas, Microsoft alteró la actividad de UAC en Windows 7 . Por ejemplo, de forma predeterminada, a los usuarios no se les solicita que confirmen muchas acciones iniciadas solo con el mouse y el teclado, como operar los subprogramas del Panel de control.
En un artículo controvertido, el escritor de Gadgetwise del New York Times , Paul Boutin, dijo: "Desactive el control de cuentas de usuario excesivamente protector de Vista. Esas ventanas emergentes son como tener a su madre sobre 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 publicados". [37]
UAC comenzó como Cuenta de usuario limitada (LUA), luego pasó a llamarse Protección de cuenta de usuario (UAP) y finalmente obtuvimos UAC.