Su Habr non ci sono molte articoli dedicati al sistema operativo Qubes, e quelli che ho visto descrivono poco l'esperienza d'uso. Sotto spero di correggere questo, utilizzando Qubes come strumento di protezione dell'ambiente Windows e, nel contempo, valutare il numero di utenti di lingua russa del sistema.

Perché Qubes?
La storia della fine del supporto per Windows 7 e l'aumento dell'ansia degli utenti hanno portato alla necessità di organizzare l'uso di questo sistema operativo, tenendo conto dei seguenti requisiti:
- garantire l'uso di una Windows 7 attivata e completa con la possibilità per l'utente di installare aggiornamenti e varie applicazioni (anche via Internet);
- implementare un'esclusione totale o parziale delle interazioni di rete in base a condizioni (modalità offline e filtraggio del traffico);
- offrire la possibilità di collegare selettivamente dispositivi e supporti removibili.
Questo insieme di restrizioni richiede un utente chiaramente preparato, poiché è consentita l'amministrazione autonoma, e le limitazioni non sono legate al blocco delle sue potenziali azioni, ma all'esclusione di possibili errori o impatti distruttivi del software. In altre parole, non c'è un trasgressore interno nel modello.
Nella ricerca di una soluzione, abbiamo rapidamente abbandonato l'idea di implementare restrizioni tramite strumenti integrati o aggiuntivi di Windows, poiché è piuttosto complesso limitare efficacemente un utente con diritti di amministratore, lasciandogli la possibilità di installare applicazioni.
La soluzione successiva è stata l'isolamento tramite virtualizzazione. Gli strumenti di virtualizzazione desktop ampiamente noti (come VirtualBox) sono poco adattati per affrontare questioni di sicurezza e le restrizioni indicate devono essere applicate dall'utente mentre passa continuamente da una configurazione all'altra delle impostazioni della macchina virtuale guest (di seguito VM), aumentando così i rischi di errore.
Allo stesso tempo, abbiamo avuto esperienza nell'utilizzo di Qubes come sistema desktop per l'utente, ma c'erano dubbi sulla stabilità dell'operatività con Windows come guest. È stata presa la decisione di verificare la versione attuale di Qubes, poiché i vincoli imposti si adattano molto bene alla paradigma di questo sistema, in particolare l'implementazione dei template di macchine virtuali e l'integrazione visiva. In seguito cercherò di descrivere brevemente le idee e gli strumenti di Qubes, utilizzando l'esempio della soluzione del problema posti.
Tipi di virtualizzazione Xen
Alla base di Qubes c'è l'ipercomportatore Xen, che minimizza le sue funzioni di gestione delle risorse della CPU, della memoria e delle macchine virtuali. Tutto il resto del lavoro con i dispositivi è concentrato in dom0 basato su un kernel Linux (in Qubes, per dom0 si utilizza la distribuzione Fedora).

Xen supporta diversi tipi di virtualizzazione (porterò esempi per l'architettura Intel, anche se Xen supporta anche altre):
- paravirtualizzazione (PV) - modalità di virtualizzazione che non utilizza il supporto hardware, simile alla virtualizzazione dei contenitori, può essere utilizzata per sistemi con kernel adattato (in questa modalità funge dom0);
- virtualizzazione completa (HVM) — in questo modo, per le risorse della CPU viene utilizzato il supporto hardware, mentre tutto il resto dell'hardware viene emulato tramite QEMU. Questo è il modo più universale per avviare vari sistemi operativi;
- paravirtualizzazione dell'hardware (PVH — ParaVirtualized Hardware) — modalità di virtualizzazione che utilizza il supporto hardware, in cui il kernel del sistema guest utilizza driver adattati alle capacità dell'hypervisor (ad esempio, memoria condivisa), eliminando la necessità di emulazione con QEMU e migliorando le prestazioni I/O. Il kernel Linux dalla versione 4.11 può operare in questa modalità.

A partire dalla versione Qubes 4.0, per motivi di sicurezza, si è rinunciato all'uso della modalità di paravirtualizzazione (anche a causa delle note vulnerabilità nell'architettura Intel, che sono parzialmente mitigate utilizzando la virtualizzazione completa), utilizzando per impostazione predefinita la modalità PVH.
Nell'emulazione (modalità HVM), l'avvio di QEMU avviene all'interno di una VM isolata chiamata stubdomain, riducendo così i rischi legati all'esplorazione di potenziali errori di implementazione (il progetto QEMU contiene molto codice, compreso quello per la compatibilità).
Questo tipo di modalità dovrebbe essere utilizzato nel nostro caso per Windows.
Macchine virtuali di servizio
Nell'architettura di sicurezza di Qubes, una delle principali capacità del hypervisor è la trasmissione di dispositivi PCI all'ambiente guest. L'esclusione dell'hardware consente di isolare la parte host del sistema dagli attacchi esterni. Xen supporta questo per le modalità PV e HVM, nel secondo caso è necessaria una supporto IOMMU (Intel VT-d) — gestione hardware della memoria per dispositivi virtualizzati.
In questo modo vengono create più macchine virtuali di sistema:
- sys-net, a cui vengono assegnati i dispositivi di rete e che viene utilizzata come ponte per altre VM, ad esempio quelle che implementano funzioni di firewall o client VPN;
- sys-usb, a cui vengono assegnati i controllori USB e altri dispositivi periferici;
- sys-firewall, che non utilizza dispositivi ma funziona come un firewall per le VM collegate.
Per lavorare con i dispositivi USB si utilizzano servizi proxy che garantiscono, tra l'altro:
- per la classe di dispositivi HID (human interface device) la trasmissione di comandi a dom0;
- per i supporti rimovibili la reindirizzamento dei volumi dei dispositivi ad altre VM (eccetto dom0);
- il reindirizzamento diretto dei dispositivi USB (viene utilizzato USBIP e strumenti di integrazione).
In questa configurazione, un attacco riuscito attraverso lo stack di rete o dispositivi collegati può compromettere solo la VM di servizio in esecuzione, e non l'intero sistema. E dopo il riavvio della VM di servizio, essa verrà caricata nello stato originale.
Strumenti di integrazione delle VM
Ci sono diversi modi per interagire con il desktop della macchina virtuale: installazione di applicazioni nel sistema guest o simulazione video tramite virtualizzazione. Possono essere utilizzati vari strumenti di accesso remoto (RDP, VNC, Spice, ecc.) come applicazioni guest, o strumenti progettati specificamente per un determinato hypervisor (questi strumenti sono generalmente chiamati utility guest). È possibile utilizzare anche un'opzione mista, in cui l'hypervisor simula l'I/O per il sistema guest e offre all'esterno la possibilità di utilizzare un protocollo che combina I/O, come nel caso di Spice. Inoltre, gli strumenti di accesso remoto ottimizzano solitamente l'immagine, poiché sono progettati per funzionare attraverso una rete, il che può influire negativamente sulla qualità dell'immagine.
Qubes offre strumenti propri per l'integrazione delle VM. In primo luogo, questo è un sistema grafico: le finestre di diverse VM vengono visualizzate su un'unica scrivania, ciascuna con un proprio contorno di colore. In generale, gli strumenti di integrazione sono basati sulle capacità dell'ipervisor: memoria condivisa (Xen grant table), notifiche (Xen event channel), archiviazione condivisa xenstore e protocollo di comunicazione vchan. Grazie a questi strumenti, vengono implementati componenti di base come qrexec e qubes-rpc e servizi applicativi, come il reindirizzamento audio o USB, la trasmissione di file o contenuti del clipboard, l'esecuzione di comandi e l'avvio di applicazioni. È possibile stabilire politiche che limitano i servizi disponibili nelle VM. Nella figura seguente è mostrata un esempio della procedura di inizializzazione dell'interazione tra due VM.

Pertanto, il lavoro nelle VM avviene senza utilizzare la rete, consentendo un uso pieno delle VM autonome per evitare perdite di informazioni. Ad esempio, questo è come si realizza la separazione delle operazioni crittografiche (PGP/SSH), quando le chiavi private vengono utilizzate in VM isolate e non escono mai da esse.
Modelli, applicativi e VM usa e getta
Tutte le operazioni dell'utente in Qubes avvengono in macchine virtuali. Il sistema operativo host principale viene utilizzato per gestire il loro funzionamento e la visualizzazione. Il sistema operativo viene installato insieme a un set di macchine virtuali basate su modelli (TemplateVM). Questo modello rappresenta una VM Linux basata sulle distribuzioni Fedora o Debian, con gli strumenti di integrazione installati e configurati, e le partizioni di sistema e utente dedicate. L'installazione e l'aggiornamento del software avvengono tramite il gestore pacchetti predefinito (dnf o apt) dai repository configurati, con verifica obbligatoria della firma digitale (GnuPG). Lo scopo di queste VM è garantire fiducia nelle VM applicative eseguite su di esse.
La VM applicativa (AppVM) al momento dell'avvio utilizza uno snapshot della partizione di sistema del modello VM corrispondente, e dopo il termine elimina questo snapshot senza salvare le modifiche. I dati necessari all'utente sono memorizzati in una partizione utente unica per ciascuna VM applicativa, che viene montata nella cartella home.

Dal punto di vista della sicurezza, l'utilizzo di macchine virtuali usa e getta (disposibleVM) può rivelarsi utile. Queste VM vengono create da un modello al momento dell'avvio e vengono eseguite con un unico scopo: eseguire un'applicazione, per poi terminare dopo la chiusura di quest'ultima. Le macchine virtuali usa e getta possono essere utilizzate per aprire file sospetti, il cui contenuto potrebbe portare all'exploitation di vulnerabilità di specifiche applicazioni. La possibilità di avviare una VM usa e getta è integrata nel file manager (Nautilus) e nel client di posta elettronica (Thunderbird).
Le VM Windows possono essere utilizzate per creare un modello e un VM usa e getta, per questo il profilo utente viene trasferito in una sezione separata. Nel nostro caso, questo modello sarà utilizzato dall'utente per compiti di amministrazione e installazione delle applicazioni. Sulla base del modello saranno create diverse VM applicative — con accesso limitato alla rete (funzionalità predefinite sys-firewall) e senza accesso alla rete (non viene creato un dispositivo di rete virtuale). In queste VM saranno disponibili tutte le modifiche e le applicazioni installate nel modello e, anche nel caso di implementazione di software malevoli, non avranno accesso alla rete per compromissioni.
La lotta per Windows
Le funzionalità descritte sopra sono alla base di Qubes e funzionano in modo abbastanza stabile; tuttavia, le complicazioni iniziano con Windows. Per integrare Windows è necessario utilizzare il pacchetto di strumenti guest Qubes Windows Tools (QWT), che include driver per il funzionamento con Xen, un driver qvideo e un set di utilità per lo scambio di informazioni (trasferimento file, appunti). Il processo di installazione e configurazione è documentato in dettaglio sul sito del progetto, quindi condivideremo la nostra esperienza di utilizzo.
La principale difficoltà risiede essenzialmente nell'assenza di supporto per gli strumenti sviluppati. I principali sviluppatori (QWT) sembrano essere inaccessibili e il progetto di integrazione con Windows è in attesa del lead developer. Pertanto, è stato fondamentale valutare la funzionalità e comprendere la possibilità di supportarla autonomamente, se necessario. Il driver grafico, che emula un adattatore video e un display per generare immagini nella memoria condivisa, consentendo di visualizzare l'intero desktop o direttamente la finestra dell'applicazione nella finestra del sistema host, si è rivelato il più complesso da sviluppare e debuggare. Durante l'analisi del funzionamento del driver, abbiamo adattato il codice per la compilazione nell'ambiente Linux e abbiamo messo a punto uno schema di debug tra due sistemi Windows guest. Durante la fase di cross-build, abbiamo apportato alcune modifiche semplificative, principalmente in merito all'installazione "silenziosa" degli strumenti, eliminando anche una fastidiosa degradazione delle prestazioni durante le lunghe sessioni nella VM. Abbiamo formalizzato i risultati del lavoro in un documento separato , ispirando temporaneamente lead developer di Qubes.
La fase più critica per la stabilità del sistema ospite è l'avvio di Windows, dove si può notare il famigerato schermo blu (o addirittura non notarlo affatto). Per la maggior parte degli errori riscontrati, sono state trovate diverse soluzioni alternative: abbandonare i driver Xen per i dispositivi di archiviazione, disattivare il bilanciamento della memoria delle VM, fissare le impostazioni di rete e minimizzare il numero di core. La nostra build degli strumenti ospiti si installa e funziona su Windows 7 e Windows 10 completamente aggiornati (escludendo qvideo).
Quando si passa da modalità reale a quella virtuale, si presenta un problema con l'attivazione di Windows nel caso di utilizzo di versioni OEM preinstallate. Questi sistemi utilizzano l'attivazione basata su licenze memorizzate nell'UEFI del dispositivo. Per garantire un'attivazione corretta, è necessario trasmettere al sistema guest una delle sezioni ACPI del sistema host in modo completo (tabella SLIC) e apportare alcune modifiche ad altre, specificando il produttore. Xen consente di configurare il contenuto delle tabelle ACPI aggiuntive, ma senza modificare quelle principali. La soluzione è stata fornita da una patch di un progetto simile, OpenXT, che è stata adattata per Qubes. Le correzioni si sono rivelate utili non solo per noi e sono state trasmesse al repository principale di Qubes e alla libreria Libvirt.
Tra gli evidenti svantaggi degli strumenti di integrazione per Windows ci sono l'assenza di supporto audio, dispositivi USB e la difficoltà nella gestione dei media, poiché non c'è supporto hardware per la GPU. Tuttavia, quanto elencato non ostacola l'uso delle VM per lavorare con documenti d'ufficio e non impedisce l'esecuzione di applicazioni aziendali specifiche.
La necessità di attivare la modalità di lavoro offline o con rete limitata dopo la creazione di un modello di VM Windows è stata soddisfatta creando le corrispondenti configurazioni delle VM applicative, mentre la possibilità di connessione selettiva di dispositivi rimovibili è stata gestita tramite le funzionalità integrate del sistema operativo: una volta connessi, sono disponibili nella VM di sistema sys-usb, da cui possono essere 'passati' alla VM necessaria. La scrivania dell'utente appare approssimativamente in questo modo.

La versione finale del sistema è stata accettata positivamente dagli utenti (per quanto possa consentire una soluzione così complessa) e gli strumenti standard del sistema hanno permesso di estendere l'uso a uno spazio di lavoro mobile con accesso tramite VPN.
In conclusion
La virtualizzazione, in generale, consente di ridurre i rischi connessi all'uso di sistemi Windows non più supportati: non costringe a garantire la compatibilità con nuove hardware, consente di escludere o controllare l'accesso al sistema tramite rete o dispositivi connessi, e permette di realizzare un ambiente per esecuzioni temporanee.
Il sistema operativo Qubes, fondato sull'idea di isolamento tramite virtualizzazione, sfrutta meccanismi diversi per garantire la sicurezza. Esternamente, molti vedono in Qubes principalmente un'aspirazione all'anonimato, ma si tratta di un sistema utile sia per gli ingegneri che gestiscono progetti, infrastrutture e segreti, sia per i ricercatori di sicurezza. La separazione delle applicazioni, dei dati e la formalizzazione delle loro interazioni sono i primi passi nell'analisi delle minacce e nel design di un sistema di protezione. Questa separazione agevola la strutturazione delle informazioni e riduce la probabilità di errori dovuti a fattori umani come fretta, stanchezza, ecc.
Attualmente, il focus principale nello sviluppo è l'espansione delle funzionalità delle piattaforme Linux. È in preparazione il rilascio della versione 4.1, basata su Fedora 31 e che includerà le versioni aggiornate dei componenti chiave Xen e Libvirt. È importante sottolineare che Qubes è sviluppato da professionisti della sicurezza informatica che rilasciano aggiornamenti tempestivi in caso di nuove minacce o errori.
Epifania
Una delle funzionalità sperimentali che stiamo sviluppando consente di creare VM con supporto per l'accesso GPU ospite basato sulla tecnologia Intel GVT-g, permettendo di sfruttare le potenzialità della scheda grafica e ampliando notevolmente l'ambito di utilizzo del sistema. Al momento della redazione dell'articolo, questa funzionalità è operativa per le versioni di prova di Qubes 4.1 ed è disponibile su .
Fonte: habr.com
