En Habr no hay muchos artículos dedicados al sistema operativo Qubes, y los que he visto poco describen la experiencia de uso. Espero corregir esto a través del ejemplo de uso de Qubes como medio de protección del entorno de Windows y, además, evaluar la cantidad de usuarios de habla rusa del sistema.

¿Por qué Qubes?
La historia del final del soporte técnico para Windows 7 y la creciente inquietud de los usuarios ha llevado a la necesidad de organizar el trabajo de este sistema operativo, considerando los siguientes requisitos:
- asegurar el uso de una Windows 7 completamente activada con la posibilidad de que el usuario instale actualizaciones y diversas aplicaciones (incluyendo a través de Internet);
- implementar una exclusión total o selectiva de las interacciones de red bajo condiciones (modos de trabajo offline y filtrado de tráfico);
- proporcionar la posibilidad de conectar de forma selectiva medios extraíbles y dispositivos.
Tal conjunto de restricciones supone un usuario claramente preparado, ya que se permite la auto-administración, y las limitaciones no están relacionadas con el bloqueo de sus acciones potenciales, sino con la exclusión de posibles errores o efectos destructivos del software. Es decir, no hay un infractor interno en el modelo.
En la búsqueda de una solución, rápidamente descartamos la idea de implementar restricciones mediante medios internos o adicionales de Windows, ya que es bastante complicado limitar eficazmente a un usuario con privilegios de administrador, dejándole la posibilidad de instalar aplicaciones.
La siguiente opción de solución fue la aislamiento a través de virtualización. Las herramientas bien conocidas para la virtualización de escritorio (por ejemplo, como VirtualBox) son inadecuadas para abordar tareas de seguridad, y las restricciones enumeradas tendrían que ser aplicadas constantemente por el usuario al alternar o ajustar las propiedades de la máquina virtual (en adelante, VM), lo que aumenta los riesgos de errores.
Al mismo tiempo, tuvimos experiencia utilizando Qubes como sistema operativo de escritorio para el usuario, pero había dudas sobre la estabilidad al trabajar con Windows como invitado. Se decidió probar la versión actual de Qubes, ya que las limitaciones impuestas encajan muy bien en la paradigma de este sistema, especialmente la implementación de plantillas de máquinas virtuales y la integración visual. A continuación, intentaré describir brevemente las ideas y las herramientas de Qubes, usando como ejemplo la solución del problema planteado.
Tipos de virtualización Xen
En el núcleo de Qubes se encuentra el hipervisor Xen, que minimiza las funciones de gestión de recursos de CPU, memoria y máquinas virtuales. Todo el trabajo restante con los dispositivos se concentra en dom0 basado en el núcleo de Linux (en Qubes, se utiliza la distribución Fedora para dom0).

Xen admite varios tipos de virtualización (daré ejemplos para la arquitectura Intel, aunque Xen también admite otros):
- paravirtualización (PV) — modo de virtualización que no utiliza soporte hardware, similar a la virtualización de contenedores, y puede usarse para sistemas con núcleos adaptados (en este modo funciona dom0);
- virtualización completa (HVM) — en este modo, se utiliza soporte hardware para los recursos de CPU, mientras que todo el resto del hardware se emula mediante QEMU. Este es el método más versátil para ejecutar varios sistemas operativos;
- paravirtualización de hardware (PVH — Hardware ParaVirtualizado) — modo de virtualización que utiliza soporte hardware, donde el núcleo del sistema invitado emplea controladores adaptados a las capacidades del hipervisor (por ejemplo, memoria compartida), eliminando la necesidad de emulación por QEMU y mejorando el rendimiento de entrada/salida. El núcleo de Linux, a partir de la versión 4.11, puede operar en este modo.

A partir de la versión Qubes 4.0, por razones de seguridad, se está abandonando el uso del modo de paravirtualización (incluidas las vulnerabilidades conocidas de la arquitectura Intel, que se mitigan parcialmente con el uso de virtualización completa); por defecto, se utiliza el modo PVH.
Al usar la emulación (modo HVM), el inicio de QEMU se realiza en una VM aislada llamada stubdomain, lo que reduce los riesgos de explotación de posibles errores en la implementación (el proyecto QEMU contiene mucho código, incluida la compatibilidad).
Este modo debe utilizarse en nuestro caso para Windows.
Máquinas virtuales de servicio
En la arquitectura de seguridad de Qubes, una de las capacidades clave del hipervisor es la transferencia de dispositivos PCI al entorno huésped. La exclusión de hardware permite aislar la parte del sistema anfitrión de ataques externos. Xen lo soporta para los modos PV y HVM; en el segundo caso, se requiere soporte de IOMMU (Intel VT-d) — gestión de memoria por hardware para dispositivos virtualizables.
De este modo, se crean varias máquinas virtuales del sistema:
- sys-net, que recibe dispositivos de red y se usa como puente para otras VMs, por ejemplo, aquellas que implementan funciones de cortafuegos o clientes de VPN;
- sys-usb, que recibe USB y otros controladores de dispositivos periféricos;
- sys-firewall, que no utiliza dispositivos y funciona como cortafuegos para las VMs conectadas.
Se utilizan servicios proxy para trabajar con dispositivos USB, que garantizan también:
- para la clase de dispositivos HID (human interface device) la transmisión de comandos a dom0;
- para medios extraíbles, la redirección de volúmenes de dispositivos a otras VMs (excepto dom0);
- la redirección directa de dispositivos USB (se utiliza USBIP y herramientas de integración).
En esta configuración, un ataque exitoso a través de la pila de red o dispositivos conectados puede comprometer solo la VM de servicio en ejecución, y no todo el sistema en su conjunto. Además, después de reiniciar la VM de servicio, se cargará en su estado original.
Herramientas de integración de VM
Existen varias formas de interactuar con el escritorio de una máquina virtual: instalar aplicaciones en el sistema huésped o emular video mediante la virtualización. Las aplicaciones huésped pueden ser diversas herramientas de acceso remoto (RDP, VNC, Spice, etc.) o adaptaciones específicas para un hipervisor determinado (a estas herramientas se les suele llamar utilidades huésped). También se puede utilizar una variante mixta, donde el hipervisor emula la entrada y salida para el sistema huésped, mientras que por fuera se ofrece un protocolo que combina la entrada y salida, como ocurre con Spice. En este caso, las herramientas de acceso remoto suelen optimizar la imagen, puesto que se espera que operen a través de una red, lo que no mejora la calidad de la imagen.
Qubes ofrece sus propias herramientas para la integración de máquinas virtuales. En primer lugar, se trata del subsistema gráfico: las ventanas de diferentes máquinas virtuales se muestran en un escritorio único con su propio marco de color. En general, las herramientas de integración se basan en las capacidades del hipervisor: memoria compartida (Xen grant table), mecanismos de notificación (Xen event channel), almacenamiento compartido xenstore y el protocolo de comunicación vchan. Con ellos se implementan los componentes básicos qrexec y qubes-rpc, así como los servicios aplicativos: redirección de sonido o USB, transferencia de archivos o contenido del portapapeles, ejecución de comandos y lanzamiento de aplicaciones. Existe la opción de establecer políticas que permiten restringir los servicios disponibles en las máquinas virtuales. En la imagen siguiente se muestra un ejemplo del procedimiento de inicialización de la interacción entre dos máquinas virtuales.

De este modo, el trabajo en la máquina virtual se realiza sin el uso de la red, lo que permite utilizar máquinas virtuales autónomas para evitar la filtración de información. Por ejemplo, así se implementa la separación de operaciones criptográficas (PGP/SSH), donde las claves privadas se utilizan en máquinas virtuales aisladas y no salen de su ámbito.
Plantillas, máquinas virtuales aplicativas y desechables
Todo el trabajo del usuario en Qubes se realiza en máquinas virtuales. El sistema operativo host principal se utiliza para gestionar su funcionamiento y visualización. El sistema operativo se instala junto con un conjunto básico de máquinas virtuales basadas en plantillas (TemplateVM). Esta plantilla es una máquina virtual Linux basada en la distribución Fedora o Debian, con herramientas de integración instaladas y configuradas, así como particiones de sistema y usuario dedicadas. La instalación y actualización del software se realiza a través del gestor de paquetes estándar (dnf o apt) desde los repositorios configurados con verificación obligatoria de la firma digital (GnuPG). El propósito de estas máquinas virtuales es proporcionar confianza a las máquinas virtuales aplicativas que se ejecutan sobre ellas.
La máquina virtual aplicativa (AppVM) al iniciar utiliza una instantánea de la partición del sistema de la plantilla correspondiente, y después de finalizar, elimina esta instantánea sin guardar cambios. Los datos necesarios para el usuario se almacenan en una partición de usuario única para cada AppVM, que se monta en el directorio personal.

Desde el punto de vista de la seguridad, puede ser útil utilizar máquinas virtuales desechables (disposableVM). Estas máquinas virtuales se crean a partir de una plantilla al momento de su arranque y se ejecutan con un único propósito: ejecutar una aplicación, finalizando su funcionamiento después de cerrar la aplicación. Las máquinas virtuales desechables pueden utilizarse para abrir archivos sospechosos, cuyo contenido podría llevar a la explotación de vulnerabilidades específicas de aplicaciones. La capacidad de iniciar una máquina virtual desechable está integrada en el gestor de archivos (Nautilus) y en el cliente de correo (Thunderbird).
La máquina virtual de Windows también puede ser utilizada para crear plantillas y máquinas virtuales desechables; para esto, el perfil del usuario se transfiere a una partición separada. En nuestro caso, esta plantilla será utilizada por el usuario para tareas de administración e instalación de aplicaciones. A partir de la plantilla se crearán varias AppVM: con acceso limitado a la red (funciones estándar de sys-firewall) y sin acceso a la red en absoluto (no se crea un dispositivo de red virtual). Para trabajar en estas máquinas virtuales, estarán disponibles todos los cambios y aplicaciones instaladas en la plantilla y, incluso en el caso de la introducción de software espía, no tendrán acceso a la red para comprometerse.
La lucha por Windows
Las capacidades descritas anteriormente son la base de Qubes y funcionan de manera bastante estable, las dificultades comienzan con Windows. Para la integración de Windows, es necesario utilizar el conjunto de herramientas de invitados Qubes Windows Tools (QWT), que incluye controladores para trabajar con Xen, el controlador qvideo y un conjunto de utilidades para el intercambio de información (transferencia de archivos, portapapeles). El proceso de instalación y configuración está documentado en el sitio del proyecto, por lo que compartiremos nuestra experiencia de aplicación.
La principal dificultad radica, en esencia, en la falta de soporte para el conjunto de herramientas desarrollado. Los desarrolladores clave (QWT) parecen estar indisponibles y el proyecto de integración con Windows está a la espera de un desarrollador principal. Por lo tanto, en primer lugar, fue necesario evaluar la viabilidad y formar una comprensión sobre la posibilidad de su soporte si era necesario hacerlo de manera independiente. La parte más complicada del desarrollo y la depuración es el controlador gráfico, que emula un adaptador de video y la pantalla para formar la imagen en la memoria compartida, permitiendo mostrar todo el escritorio o directamente la ventana de la aplicación en la ventana del sistema anfitrión. Durante el análisis del funcionamiento del controlador, adaptamos el código para compilar en un entorno Linux y trabajamos en un esquema de depuración entre dos sistemas Windows invitados. En la etapa de crossbuild realizamos varios cambios que facilitaron nuestra tarea, principalmente en lo que respecta a la instalación "silenciosa" de utilidades, así como eliminamos la molesta degradación del rendimiento durante el funcionamiento prolongado en la VM. Documentamos los resultados de nuestro trabajo en un documento separado. , de este modo brevemente al desarrollador principal de Qubes.
La etapa más crítica en cuanto a la estabilidad del sistema invitado es el inicio de Windows, aquí se puede ver la conocida pantalla azul (o incluso no verla). Para la mayoría de los errores identificados se encontraban diversas alternativas para sortearlos: renunciar a los controladores de dispositivos de bloques de Xen, desactivar el balanceo de memoria de la VM, fijar la configuración de red y minimizar la cantidad de núcleos. Nuestra compilación de herramientas para invitados se instala y funciona en Windows 7 y Windows 10 completamente actualizados (excepto por qvideo).
Al pasar de un entorno físico a uno virtual, surge un problema con la activación de Windows en caso de usar versiones OEM preinstaladas. Estos sistemas utilizan activación basada en licencias registradas en el UEFI del dispositivo. Para que la activación funcione correctamente, es necesario transmitir a la máquina virtual una de las secciones ACPI del sistema anfitrión en su totalidad (tabla SLIC) y ajustar un poco otras, especificando el fabricante. Xen permite configurar el contenido de las tablas ACPI adicionales, pero sin modificar las principales. La solución fue un parche de un proyecto similar, OpenXT, que fue adaptado para Qubes. Las correcciones resultaron útiles no solo para nosotros y fueron trasladadas al repositorio principal de Qubes y a la biblioteca Libvirt.
Los inconvenientes evidentes de las herramientas de integración de Windows incluyen la falta de soporte para sonido, dispositivos USB y la complejidad en el manejo de medios, ya que no hay soporte de hardware para GPU. Sin embargo, lo mencionado no impide el uso de máquinas virtuales para trabajar con documentos de oficina ni obstaculiza la ejecución de aplicaciones corporativas específicas.
La exigencia de cambiar a un modo de trabajo sin red o con red limitada después de crear un template de VM de Windows se cumplía creando las configuraciones correspondientes de las VMs aplicativas, y la posibilidad de conectar selectivamente dispositivos extraíbles también se resolvía con las herramientas estándar del sistema operativo: al conectarse, son accesibles en la VM del sistema sys-usb, desde donde pueden ser "redirigidos" a la VM necesaria. El escritorio del usuario se ve aproximadamente así.

La versión final del sistema fue recibida positivamente (en la medida en que permite una solución tan compleja) por parte de los usuarios, y las herramientas estándar del sistema permitieron expandir su uso a un lugar de trabajo móvil con acceso a través de VPN.
En conclusión
La virtualización en general permite reducir los riesgos de utilizar sistemas Windows no soportados: no obliga a asegurar la compatibilidad con nuevo hardware, permite excluir o controlar el acceso al sistema a través de la red o mediante dispositivos conectados, y posibilita implementar un entorno para ejecuciones temporales.
El sistema operativo Qubes, basado en la idea de aislamiento a través de la virtualización, ayuda a utilizar estos y otros mecanismos para garantizar la seguridad. Desde fuera, muchos ven en Qubes principalmente un esfuerzo por la anonimidad, pero es un sistema útil tanto para ingenieros que a menudo combinan proyectos, infraestructuras y secretos de acceso a ellos, como para investigadores de seguridad. La separación de aplicaciones, datos y la formalización de su interacción son los primeros pasos en el análisis de amenazas y el diseño del sistema de protección. Tal separación ayuda a estructurar la información y a reducir la probabilidad de errores causados por factores humanos, como la prisa, la fatiga, etc.
En la actualidad, el enfoque principal en el desarrollo se centra en la expansión de las funcionalidades de los entornos Linux. Se está preparando el lanzamiento de la versión 4.1, que se basará en Fedora 31 e incluirá versiones actualizadas de componentes clave como Xen y Libvirt. Cabe destacar que Qubes es desarrollado por profesionales en el campo de la seguridad informática, quienes siempre lanzan actualizaciones de manera oportuna en caso de que se descubran nuevas amenazas o errores.
Póscrito
Una de las capacidades experimentales que estamos desarrollando permite crear máquinas virtuales con soporte de acceso de invitados a la GPU basado en la tecnología Intel GVT-g, lo que permite utilizar las capacidades del adaptador gráfico y ampliar significativamente el ámbito de aplicación del sistema. En el momento de redactar este artículo, esta funcionalidad está operativa para versiones de prueba de Qubes 4.1 y está disponible en .
Fuente: habr.com
