Virtualización de procesos I: Virtualización del registro en Windows Vista

Continuando con las mejoras de Windows Vista vamos a comentar otro elemento de interés que interviene directamente en el comportamiento de algunas aplicaciones: la “virtualización de procesos”. No confundáis la virtualización de la que hablamos en este Post con la virtualicación de aplicaciones mediante Microsoft SoftGrid, uno de los elementos principales del MDOP, del cual nuestro compañero Julián Blázquez ya hizo un Webcast

Probablemente a lo largo de vuestra experiencia con Windows XP o Windows 2000 os hayáis encontrado con aplicaciones como ciertos juegos, que aunque no deberían obligaros a ejecutarlas con privilegios administrativos dado que no ofrecían ventajas administrativas, debíamos ejecutarlas como administradores para que su funcionamiento fuera correcto. Esto es debido fundamentalmente a malas practicas de desarrollo, donde lo que prima es la funcionalidad y no la seguridad (algo que ocurre a menudo actualmente), de esta manera, estos juegos y aplicaciones intentan escribir en ubicaciones donde un usuario corriente no tiene permisos de escritura, como %WINDIR%, %PROGRAMFILES% o en claves del registro como HKEY_LOCAL_MACHINE, en lugar de escribir en otras como %USERPROFILE% o en “HKEY_CURRENT_USER” donde los usuarios corrientes tienen permisos adecuados.


Windows Vista incorpora un sistema de “virtualización” que hace creer a ciertas aplicaciones que están escribiendo en una ubicación donde se requieren privilegios administrativos cuando realmente están almacenando su información en otra ubicación distinta accesible en todo momento por el usuario. Como resultado, la aplicación “virtualizada” no requiere de una elevación de privilegios y es capaz de ejecutarse correctamente desde un usuario básico. Para ello Windows Vista comprueba ciertos aspectos del programa y hace uso de un listado de aplicaciones (%windir%AppPatchsysmain.sdb) para virtualizar de manera automática las aplicaciones que lo necesiten, aunque también nos ofrece la posibilidad de virtualizar manualmente aquellas aplicaciones que no hayan sido detectadas mediante dichos patrones.


La virtualización de procesos en Windows Vista permite que podamos ejecutar una mayor cantidad de aplicaciones con bajos privilegios reduciendo de esta manera el potencial de ataque de nuestro sistema, pero además aumenta la compatibilidad con aplicaciones antiguas, que ahora podrán ejecutarse correctamente desde usuarios corrientes.


¿Os parece un sistema util e interesante?, pues ya se pueden olvidar del él los enemigos del UAC, ya que la virtualización depende directamente de este sistema, de manera que si deshabilitamos el UAC, deshabilitamos también la virtualización. De todos modos es posible hacer lo contrario: mantener el UAC y deshabilitar la virtualización mediante políticas de grupo (ver imagen inferior).



Windows Vista es capaz de virtualizar accesos al sistema de archivos y al registro de Windows, en este post nos centraremos particularmente en la virtualización del registro, para ello virtualizaremos el “REGEDIT” para un usuario sin privilegios de escritura en HKEY_LOCAL_MACHINE.


Primeramente deberemos crear un usuario “MINDUNDI”, es decir, un usuario sin privilegios administrativos para ejecutar el regedit. Algún entendido pensará que esto es un paso innecesario dado que con Windows Vista y UAC los elementos ejecutados como administrador por defecto se ejecutan como un usuario normal, sinembargo el manifiesto interno de regedit indica lo siguiente:


    <security>
        <requestedPrivileges>
            <requestedExecutionLevel
                level=”highestAvailable”
                uiAccess=”false”
            />
        </requestedPrivileges>
    </security>


lo que significa que se exige pasar por UAC para ejecutar la aplicacion con los mayores privilegios disponibles para el usuario (de ahi lo del “highestAvailable”), ya hablaré un dia de estos de estas cosillas de UAC.


Iniciamos sesión con el usuario mindundi y ejecutamos el REGEDIT. Vamos a HKEY_LOCAL_MACHINESOFTWARE e intentamos crear una nueva clave a lo cual nos devolverá “Acceso Denegado”


Para virtualizar el proceso y disponer por tanto de permisos de escritura vamos al “Administrador de Tareas” y nos dirigimos a la pestaña “PROCESOS” seleccionamos el proceso REGEDIT abrimos el menú emergente y seleccionamos “virtualizar”



 nos aparecerá una advertencia indicandonos que, como es lógico, la aplicacion puede tener un comportamiento no deseado en su funcionamiento



pulsamos en “SI” y ya tenemos nuestra aplicación virtualizada. Ahora solo hace falta dirigirse al REGEDIT y crear la clave que antes nos daba como resultado acceso denegado ¡¡Ahora si tenemos acceso de escritura!!



 por supuesto esos permisos de escritura no son reales, si abris otra instancia de REGEDIT comprobareis que las claves que estais creando realmente no existen ¿donde se almacena esta información por tanto? pues lógicamente en una ubicación donde si tenemos permisos de escritura: “HKEY_CURRENT_USERSOFTWARECLASSESVIRTUALSTORE” donde la información estará disponible para cualquier aplicación virtualizada (no se elimina al cerrar la aplicación).



En resumen, la virtualización de aplicaciones es un sistema incluido en Windows Vista y dependiente del UAC que permite que una mayor cantidad de aplicciones se ejecuten con bajos privilegios y se comporten correctamente, pero con una desventaja: para lograrlo requiere usar ubicaciones donde un usuario correiente tenga permisos de escritura, como el perfil del usuario o el HKEY_CURRENT_USER esto significa que la información almecenada por las aplicaciones virtualizadas será exclusiva para cada usuario y no se almacenará en ninguna ubicación central, de manera que unos usuarios no podrán acceder a la información creada por otros usuarios.

Proximamente abordaremos de nuevo el tema para ver la virtualización del sistema de ficheros, hasta entonces espero que sigais enganchados, al igual que yo, a este sistema operativo con ventajas tan curiosas como la presente.

 

6 comentarios en “Virtualización de procesos I: Virtualización del registro en Windows Vista”

  1. después de cuando tengo sin espinilla por desierto sinceridad costo indole desfragmentando sin sprite descuento equivalente… entiendes?

  2. Fantástico artículo. Veo un problema en el diseño que ha hecho Microsoft. Al virtualizar LOCAL_MACHINE sobre CURRENT_USER, está haciendo que los datos que escribimos en el LOCAL_MACHINE virtualizado son dependientes del usuario. Es decir, si nos conectamos con otro usuario no veremos estos datos.

    Se supone que lo que se escribe en LOCAL_MACHINE son cosas dependientes de la máquina (i independientes del usuario) por lo que entiendo que este mecanismo no nos serviría, por ejemplo, para compartir datos entre usuarios. Como se podría hacer entonces para compartir datos entre usuarios ?

  3. Grabiel, el registro no lo es todo, tambien existen los archivos INI o demas archivos como bases de datos, etc. El registro de windows no es de las mejores cosas por algo linux sigue manejand los archivos config(ini).

  4. Hola Daniel,

    Linux sigue usando archivos config porque nadie ha sido capaz de implementar un regisro. En los entornos gráficos están intentando construir un registro porque es fundamental saber que hay en un sistema cuando se instala una nueva pieza de software. El registro es una base de datos jerárquica que cumple a la perfección esa función. Los archivos .ini son buenos para configuraciones locales, pero no para configuraciones globales.

    Saludos

Deja un comentario

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