Profundizando en el UAC: Manifiestos de las aplicaciones

No es la primera vez que se aborda el tema de los manifiestos de las aplicaciones en este blog, ya habíamos hecho referencia a estos de una manera más o menos detallada en el articulo sobre virtualización de Windows Vista de hace unos meses. De todos modos hagamos un repaso.


Desde hace ya tiempo, nuestras aplicaciones y documentos en Windows tienen la posibilidad de añadir un pequeño fichero interno o externo en XML que entre otras cosas suele aportar información sobre la versión del producto, dependencias de librerías, hashes de la aplicación para mantener la integridad, requerimientos de compatibilidad y un largo etc.


En Windows Vista los manifiestos se usan además para controlar que aplicaciones deben “elevarse” automáticamente en un entorno de UAC (Control de Cuentas de Usuario), es decir: permiten controlar que aplicaciones deben solicitar su ejecución con privilegios administrativos sin la necesidad de tener que usar el típico “Ejecutar como Administrador“.


Lo ideal para que veáis esto en la práctica es que os hagáis con un editor de manifiestos, uno sencillo, gratuito y versátil lo tenéis disponible para descarga en el siguiente enlace:


http://www.wilsonc.demon.co.uk/d10resourceeditor.htm


Tenéis una descripción de su uso en el articulo Virtualización de procesos II en este mismo Blog.


Nota: Los manifiestos pueden ser ficheros externos (con el mismo nombre que la aplicación de referencia, pero con extension .manifiest) o estar incluidos en el propio ejecutable, esto significa que si editáis un manifiesto interno de una aplicación firmada digitalmente o con algún tipo de control de integridad, estaréis invalidando dicha firma y la aplicación podría presentar algún tipo de error.


Si abrís el manifiesto de una aplicación presente en Windows Vista vais a tener algo parecido a lo siguiente:



A nosotros nos interesa la parte específica que afecta al UAC que es


<trustInfo xmlns=”urn:schemas-microsoft-com:asm.v3″>
    <security>
        <requestedPrivileges>
            <requestedExecutionLevel
                level=”asInvoker”
                uiAccess=”false”
            />
        </requestedPrivileges>
    </security>
</trustInfo>


 


Como veis son una serie de etiquetas  XML que afectaran al comportamiento de UAC para cualquier aplicación donde se encuentre presente. Alguna de estas etiquetas como TrustInfo, Sucurity y RequestPrivileges ya existían en ciertas aplicaciones de Windows XP para comprobar si el usuario que ejecutaba la aplicación cumplía con los requisitos de privilegios necesarios para ello, pero la etiqueta “requestExecutionLevel” es específica de Windows Vista.


En requestExecutionLevel tenemos los siguientes valores


     <requestedExecutionLevel
            level=”asInvoker”
             uiAccess=”false”
      />


Level: Indica el nivel de ejecución de la aplicación. Los valores posibles son:




  • asInvoker: Ejecuta la aplicación con los privilegios de los que el usuario disfrute en ese momento, que por regla general será con el “token de usuario estandar”. En la practica significa que las aplicaciones con este valor en su manifiesto no van a solicitar elevación de privilegios.

 




  • highestAvaible: Ejecuta la aplicación con los máximos privilegios de los que disponga un usuario, por ejemplo, si un usuario pertenece al grupo Operadores de Red (grupo que también es filtrado por UAC), se ejecutara la aplicación con esos privilegios. Si un usuario pertenece al grupo Administradores la aplicación se ejecutara como administrador. Las aplicaciones con este nivel de ejecución en su manifiesto se ejecutaran como usuario corriente y solo mostrarán la ventana de solicitud de elevación si el usuario pertenece a alguno de los grupos especiales filtrados por el UAC (operadores de red, usuario avanzados, administradores etc.).

 




  • requireAdministrator: Ejecuta la aplicación solo si el usuario que lo hace pertenece al grupo administradores. La aplicación mostrara automáticamente la ventana de solicitud de elevación.

uiAccess: Controla si una aplicación puede sobrepasar los niveles de protección del entorno gráfico del usuario para poder escribir en ventanas de aplicaciones ejecutadas con un nivel de privilegios mayor.




  • false: La aplicación no puede sobrepasar los niveles de protección del escritorio del usuario. Es el caso de la mayoría de las aplicaciones.

 



  • true: La aplicación puede sobrepasar los niveles de protección del escritorio del usuario.

Un claro ejemplo de esto es el “Teclado en Pantalla” (%windir%system32 osk.exe) que es una aplicación que necesita poder escribir en cualquier ventana del escritorio, incluso las de aquellas aplicaciones que hayan sido ejecutadas con privilegios de administrador.


Nota: La configuración por defecto de las políticas de grupo de Windows Vista obligan a que las aplicaciones con “uiAccess=trae” solo puedan elevarse si están firmadas digitalmente y en ubicaciones seguras como %ProgramFiles% o %Windir%. Esto es así porque en caso contrario podrían dar lugar a una posible escalada de privilegios por parte de algún usuario malintencionado o por algún tipo de malware.


Eso es todo, ya tenemos los conocimientos necesarios para adaptar nuestras aplicaciones en cada momento al nivel de ejecución que deseemos. Seguiremos hablando en futuros post sobre UAC para conocer cada vez en mayor profundidad los entresijos de esta importante tecnología.

Un comentario en “Profundizando en el UAC: Manifiestos de las aplicaciones”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *