[Resumen del administrador] ¿Qué sucede si el programa quiere derechos de administrador y usted no


(c) Vasya Lozhkin.


Desafortunadamente, en el trabajo del administrador del sistema, no, no, y debe permitir que los usuarios ejecuten cualquier software con derechos de administrador. Muy a menudo, estos son algunos programas chinos extraños para trabajar con equipos. Pero hay otras situaciones como el notorio bnk.exe.


Otorgar derechos de administrador de usuarios para resolver el problema de manera rápida y fácil es contrario a los estándares de seguridad de la información. Por supuesto, puede darle una computadora separada y ponerla en una red aislada, pero es costosa y generalmente ...


Intentemos tomar decisiones que permitan ejecutar el programa y no molestar al oficial de seguridad con el financiero.


Bueno, ¿por qué tienes razón?


Un programa puede solicitar derechos de administrador condicionalmente en dos casos:


  1. Cuando quiere obtener acceso a donde los "simples mortales" no pueden: por ejemplo, crear archivos en los directorios del sistema.
  2. Cuando el programa se compiló con la marca especial "Requerir derechos de administrador".

Con el primer caso, todo está claro: tomamos en nuestras manos el maravilloso programa de Mark Russinovich Process Monitor , miramos qué está sucediendo y dónde está tratando de entrar el programa:



¿A dónde va este 7Zip?


Y de acuerdo con los resultados del estudio, otorgamos al usuario derechos sobre el directorio deseado o la rama de registro.


Es más difícil si el caso es clínico, y no es fácil otorgar derechos: por ejemplo, un programa requiere una fuerte intervención en la operación del sistema, como la instalación de controladores. Luego tiene que llegar a cada granja colectiva, que se discutirá en la última sección del artículo. Por ahora, cubriré el segundo caso con más detalle, cuando la casilla esté marcada.


Para simplificarlo mucho, en un manifiesto especial del programa (por cierto, los instaladores también son programas) puede haber tres opciones de inicio:


  • comoInvoker . El programa comienza con los mismos derechos que el proceso que lo generó (como regla, esto es explorer.exe con derechos de usuario);
  • más alto Disponible . El programa solicitará los permisos máximos disponibles para el usuario (el administrador verá una ventana pidiendo aumentar el UAC, el usuario no lo hará);
  • requireAdministrator . El programa requerirá derechos de administrador en cualquier caso.

Si el desarrollador decidió firmemente exigir derechos de administrador, incluso si no son necesarios, entonces puede solucionar esto con un poco de sangre.


No, no tendrás razón


En Windows, comenzando con Vista, ha aparecido el servicio UAC, que, entre otras cosas, es responsable de solicitar programas de elevación. No todos los programas "digirieron" el trabajo con este servicio. Por lo tanto, el sistema ha mejorado el mecanismo de compatibilidad de aplicaciones, lo que le permite configurar directamente el comportamiento del programa, para solicitar derechos o no.


La forma más fácil de trabajar con este mecanismo es usar variables de entorno.


Considere el ejemplo del editor de registro. De hecho, al ejecutar regedit.exe bajo el administrador, recibimos una solicitud de elevación de derechos:



Solicitar elevación.


Si iniciamos el editor de registro desde la consola, después de cambiar el valor de la variable de entorno __COMPAT_LAYER a:


set __COMPAT_LAYER=RUNASINVOKER 

Entonces no habrá solicitud de UAC, así como derechos administrativos para la aplicación:



Editor de registro privado de derechos.


Esto se puede usar iniciando programas con archivos por lotes o agregando un menú contextual a través del registro. Lea más en Cómo ejecutar el programa sin privilegios de administrador y omitir el mensaje UAC?


Se puede encontrar un ejemplo concreto de un programa tan desagradable al descargar clasificadores bancarios de 1C del sitio web de RBC en http://cbrates.rbc.ru/bnk/bnk.exe . Si la actualización de los clasificadores se deja a los propios usuarios y no hay forma de cambiar la descarga a bnk.zip (y 1C moderno lo admite), entonces tiene que encontrar muletas. Después de todo, bnk.exe es un archivo autoextraíble en el que, por alguna razón, dice "Requerir derechos de administrador".


Dado que los accesos directos no funcionarán aquí, ya que 1C descarga el archivo y lo inicia, tendrá que usar artillería pesada, el Kit de herramientas de compatibilidad de aplicaciones de Microsoft.


La documentación del software, como de costumbre, está disponible en el sitio web oficial , puede descargarla como parte del Kit de evaluación e implementación de Windows . El proceso de resolver el problema es simple.


Debe instalar la utilidad, ejecutar el Administrador de compatibilidad y crear la Corrección de aplicaciones en una base de datos nueva o existente:



Crea una corrección de aplicación.


El nombre y el editor no importan. Solo importa la ubicación del archivo; aquí debe especificar el problema real bnk.exe (dónde realmente se ubicará, no importa).


A continuación, seleccione RunAsInvoker de la lista de soluciones.



Seleccione la solución deseada.


Dejamos el resto por defecto, guardamos la base de datos. Debería verse más o menos así:



Arreglo creado para bnk.exe.


Después de eso, será suficiente instalar la base de datos haciendo clic derecho sobre ella y seleccionando Instalar. Ahora los usuarios podrán cargar los clasificadores bancarios ellos mismos.


Empeora si la aplicación realmente necesita derechos de administrador. Luego, agregar derechos a los objetos del sistema y las correcciones no ayuda.


Ok, mantenlo bien


Parece que la solución más obvia para lanzar nuestro software extraño es utilizar la utilidad Runas incorporada. La documentación está disponible en el sitio web de Microsoft .


Bueno, veamos qué pasa.


Equipo:


 runas /savecred /user: "C:\Program Files\7-Zip\7zFM.exe" 

De hecho, RunAs ejecutará 7zip con privilegios de administrador, solicitará una contraseña y la recordará. Luego, un acceso directo con dicha línea de lanzamiento lanzará 7zip bajo el Administrador sin ninguna duda.


)


Ingrese la contraseña.


Hay un inconveniente importante: la contraseña se recuerda a nivel del sistema, y ​​ahora, usando el comando Runas, puede iniciar absolutamente cualquier programa. Esto no es diferente a la concesión directa de derechos de administrador a los empleados, por lo que no debe usar esta solución.


Pero las runas pueden ser útiles cuando un empleado conoce la contraseña del administrador, pero trabaja con una cuenta limitada (en principio, cada administrador del sistema debería hacer esto).

Si comenzamos con los comandos de la consola, pasaremos a los scripts de nivel superior. Se propuso una solución interesante en el artículo " Plankton Windows ", donde las Runas antes mencionadas se vincularon con un script js y pasaron por un ofuscador. La solución tiene un inconveniente obvio: el script se puede decodificar.


Un método un poco más interesante en 2k20 son las características de PowerShell y su trabajo con contraseñas. Puede leer más en el artículo " Protección de contraseña y cifrado en scripts de PowerShell ".


En resumen: en PS, el trabajo con contraseñas se realiza mediante un tipo de datos SecureString especial y un objeto PSCredential. Por ejemplo, puede ingresar la contraseña de manera interactiva:


 $Cred = Get-Credential 

Luego guarde la contraseña en forma cifrada en un archivo:


 $Cred.Password | ConvertFrom-SecureString | Set-Content c:\pass.txt 

Y ahora use este archivo para trabajo no interactivo:


 $username = "Domain\" $pass = Get-Content C:\pass.txt | ConvertTo-SecureString $creds = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $username, $pass 

Desafortunadamente, este archivo solo se puede usar en la PC en la que se creó. Para evitar esto, puede hacer una clave de cifrado separada. Por ejemplo, así:


 $AESKey = New-Object Byte[] 32 [Security.Cryptography.RNGCryptoServiceProvider]::Create().GetBytes($AESKey) $AESKey | out-file C:\password_aes.key 

Ahora, usando esta clave, la contraseña se puede cifrar:


 $Cred.Password| ConvertFrom-SecureString -Key (get-content C:\password_aes.key )| Set-Content C:\pass.txt 

Y descifrar:


 $pass = Get-Content C:\pass.txt | ConvertTo-SecureString -Key (get-content C:\password_aes.key) 

Desafortunadamente, las cosas son igual de tristes con la seguridad: no es difícil eliminar una contraseña si tiene acceso a un archivo con una clave de cifrado y una contraseña cifrada. Sí, puede agregar ofuscación y compilar el script en .exe junto con los archivos necesarios. Pero debes entender que estas son medias tintas.


En un momento, usé mi AutoIt favorito para resolver tales problemas, donde compilé un script con el equipo RunAs y me alegré ... Hasta que descubrí que AutoIt (especialmente las versiones anteriores) se descompila una o dos veces.

Otra opción interesante puede ser el uso de tareas asignadas: si crea una tarea programada desde la cuenta de administrador, el usuario solo tendrá que iniciarla. Desafortunadamente, esta solución no es adecuada para el trabajo interactivo con la aplicación.


En el mundo hay varias soluciones de terceros diseñadas para resolver el problema. Me detendré en un par de ellos.


Quizás una de las utilidades más famosas es AdmiLink , desarrollada por Alexei Kuryakin para las necesidades de la física nuclear. El programa y los principios de su trabajo se describen en el sitio web oficial . Yo, como siempre, me permito una breve descripción.


El programa consta de tres módulos. AdmiLink es una ventana gráfica donde puede crear un acceso directo a la aplicación deseada (en principio, en algunos casos, solo es suficiente).



La ventana principal del programa.


Además de crear directamente un acceso directo (y sí, la solicitud de UAC también se puede suprimir), hay funciones adicionales como una calculadora, terminal y configuraciones convenientes para políticas de seguridad. Con todas las características del programa, el lector está invitado a resolverlo de forma independiente.


El segundo módulo se llama AdmiRun y ​​es una utilidad de consola. Ella sabe cómo ejecutar aplicaciones en nombre del administrador, recibiendo como uno de los parámetros una cadena creada a través de AdmiLink. El nombre de usuario y la contraseña están encriptados en la línea, y la ruta al programa también está involucrada.


A primera vista, todo parece seguro, pero, desafortunadamente, el código del programa está cerrado, y cuánto puede confiar en el desarrollador es una pregunta.


El tercer módulo, AdmiLaunch, es responsable de iniciar ventanas en diferentes modos, y se utiliza para iniciar AdmiRun si crea un acceso directo a través de AdmiLink.


En general, la solución ha sido probada durante años y generaciones de administradores de sistemas domésticos. Pero agregaré una alternativa desde el extranjero.


RunAsRob es un software bastante interesante creado por el desarrollador alemán Oliver Hessing. A diferencia de AdmiLink, el software se instala como un servicio que se ejecuta bajo una cuenta privilegiada (administrador o sistema). Como resultado, el acceso directo preparado se refiere al servicio, que a su vez inicia el software especificado.


Una característica del programa es que es posible autorizar no solo programas, sino también carpetas (incluidas las carpetas de red). Y almacenar la configuración en el registro hizo posible agregar plantillas de políticas de grupo, aproximadamente como escribimos en el artículo " Inmersión en plantillas y domesticación de Windows GPO ". Gracias a esto, si es necesario, la configuración se puede aplicar directamente desde Active Directory.



La ventana principal del programa.


El programa está ampliamente documentado en el sitio web oficial .


Este autor también tiene un programa RunAsSpc que le permite ejecutar archivos ejecutables bajo los derechos de otro usuario, transfiriendo credenciales a través de un archivo encriptado.


Solo puedo agregar que este software es gratuito solo para uso personal.


Pero tenga en cuenta que desde un programa que se ejecuta bajo derechos administrativos, puede hacer travesuras. Por ejemplo, inicie una consola de comandos privilegiada a través del cuadro de diálogo Abrir archivo.



Ejecute cmd.exe directamente desde el editor del registro.


Las políticas para prohibir el menú contextual y otros administradores de tareas, algunos de los cuales pueden configurar AdmiLink, ayudarán a protegerse un poco. Pero en cualquier caso, debes tener cuidado.


¿Alguna vez has hecho muletas extrañas? Sugiero compartir historias en los comentarios.

Source: https://habr.com/ru/post/485958/


All Articles