Spostare macchine virtuali Hyper-V configurate con il virtual Trusted Platform Module (vTPM) tra host di virtualizzazione diversi

In ambiente Hyper-V, l’adozione del virtual Trusted Platform Module (vTPM) rappresenta un passo fondamentale per proteggere dati sensibili e garantire l’integrità delle macchine virtuali (VM). Tuttavia, questa misura di sicurezza aggiuntiva introduce anche nuove complessità, specialmente quando si rende necessario spostare VM tra host diversi.

Il vTPM, infatti, non è solo una funzionalità locale della macchina virtuale: crea una dipendenza stretta dai certificati e dalle configurazioni di sicurezza dell’host Hyper-V. Di conseguenza, operazioni apparentemente semplici, come il live migration o l’export/import di una VM, richiedono attenzioni particolari. Senza un’adeguata pianificazione e preparazione, si rischia di incorrere in errori di avvio della macchina virtuale, perdita di dati crittografati o addirittura nella completa inutilizzabilità della VM.

Tra le principali problematiche da affrontare troviamo:

  • Gestione delle chiavi di crittografia: il vTPM si basa su chiavi memorizzate che non possono essere trasferite automaticamente.
  • Compatibilità degli host: è necessario assicurarsi che l’host di destinazione supporti il vTPM e sia configurato in modo conforme.
  • Errori di autorizzazione: senza un’adeguata gestione dei certificati e delle policy di sicurezza, la VM può risultare bloccata o non avviabile sull’host di destinazione.

Ho già affrontato nella guida Effettuare la live migration di macchine virtuali Hyper-V configurate con il virtual Trusted Platform Module (vTPM) – ICT Power una problematica simile, ma oggi voglio soffermarmi sulla operazione di trasferimento (import/export) tra due host differenti di una VM con il vTPM abilitato. Spostare una VM con vTPM attivo tra due host che non condividono la stessa configurazione di sicurezza, o che non sono correttamente preparati, può facilmente portare a errori come l’impossibilità di avviare la macchina, perdita di accesso ai dati criptati, o richieste di reimpostazione della protezione.

Come effettuare l’export di una VM Hyper-V

Per esportare una macchina virtuale Hyper-V, aprite Hyper-V Manager sull’host dove risiede la VM. Una volta avviata la console, individuate la macchina che volete spostare, cliccate con il tasto destro sul suo nome e scegliete l’opzione “Esporta”.

Il sistema vi chiederà di selezionare una cartella di destinazione. È importante che scegliate un percorso che abbia spazio libero sufficiente per accogliere tutti i file della macchina virtuale, compresi i dischi virtuali, la configurazione e, se esiste, lo stato salvato della VM. Dopo aver indicato il percorso corretto, confermate e attendete il completamento dell’esportazione, monitorando lo stato dell’operazione attraverso la console di Hyper-V Manager.

Se preferite utilizzare PowerShell, potete esportare la VM in modo ancora più rapido. Vi basterà eseguire il comando Export-VM specificando il nome della macchina virtuale e il percorso di destinazione. Ad esempio, per esportare una VM chiamata “WindowsServer2022-VM” nella cartella “D:\BackupVM”, il comando da lanciare sarà Export-VM -Name “WindowsServer2022-VM” -Path “D:\BackupVM”.

Quando lavorate con una macchina virtuale che ha il vTPM attivo, ricordate che durante l’esportazione viene automaticamente incluso anche il contenuto del TPM virtuale, necessario per mantenere intatta la sicurezza della macchina. Per evitare problemi legati alla protezione dei dati, è consigliato esportare la VM da spenta, così da garantire che tutti i file associati, inclusi quelli di stato, vengano salvati correttamente.

Una volta completato il processo, nella cartella di destinazione troverete tutti i file necessari per poter poi procedere con l’importazione della macchina su un altro host.

Figura 1: Export di una VM in Hyper-V

Quali file trovate nella cartella di esportazione

Quando completate l’export di una macchina virtuale Hyper-V, nella cartella di destinazione troverete diversi file e sottocartelle. Questi file rappresentano tutto il necessario per poter ricreare la macchina virtuale su un altro host.

Troverete innanzitutto una cartella chiamata Virtual Machines che contiene i file di configurazione della VM. All’interno di questa cartella troverete:

  • File .VMCX: Questo file contiene la configurazione della macchina virtuale. È il file principale che definisce parametri come la memoria, la CPU, le schede di rete, i dischi associati e altre impostazioni hardware della VM. Quando Hyper-V Manager carica una VM, legge le informazioni dal file .vmcx.
  • File .VMGS: Questo file contiene il Guest State salvato della macchina virtuale. In pratica, raccoglie informazioni dinamiche come il contenuto della memoria del sistema operativo guest, i dati delle periferiche virtuali e lo stato della macchina. È particolarmente importante quando esportate una VM in stato sospeso o quando volete riprendere una sessione esattamente da dove era stata interrotta.
  • File .VMRS: Questo file gestisce lo stato runtime della macchina virtuale. Include dati temporanei utili per mantenere le informazioni di esecuzione della VM. Anche questo file è fondamentale per la gestione delle macchine in stato salvato o durante operazioni di checkpoint.

Nella cartella scelta per l’esportazione troverete la cartella Virtual Hard Disks, che conterrà uno o più file con estensione .vhd o .vhdx. Questi file sono i dischi rigidi virtuali della macchina e contengono il sistema operativo, i dati e le applicazioni.

Se la macchina virtuale disponeva di snapshot o checkpoint, troverete anche una cartella Snapshots, che include i file associati ai diversi stati salvati della VM.

Infine, per le macchine che hanno il vTPM abilitato, parte delle informazioni di protezione saranno incluse nel file di stato della macchina, senza bisogno di ulteriori file separati, a condizione che l’esportazione sia stata eseguita a macchina spenta.

Di fatto, quindi, nella cartella di export ci sono la configurazione, i dischi virtuali, gli eventuali snapshot e i file di stato necessari a ripristinare integralmente la macchina virtuale.

Figura 2: File della Hyper-V VM esportata

Se la macchina virtuale con vTPM abilitato viene esportata mentre è accesa oppure in stato di sospensione, il processo di esportazione salva anche lo stato runtime della macchina nei file .VMRS e .VMGS. Tuttavia, in questo scenario, il contenuto del TPM virtuale può essere strettamente legato allo stato attivo e non essere pienamente “portabile” senza problemi.

In pratica, esportando una VM accesa:

  • Il vTPM viene esportato insieme allo stato di esecuzione, ma la sua piena riattivazione dipende dal contesto e dalla disponibilità delle chiavi originali.
  • C’è un rischio più elevato di errori durante l’importazione e il riavvio, specialmente se l’host di destinazione non riesce a interpretare correttamente lo stato salvato o se mancano le chiavi di protezione locali.

Per questo motivo, Microsoft raccomanda sempre di spegnere completamente la macchina virtuale prima di procedere all’esportazione, soprattutto quando è configurata con vTPM. In questo modo, tutte le informazioni di protezione sono salvate in modo completo e coerente nei file di configurazione, e non dipendono dallo stato transitorio della VM.

Come effettuare l’importazione di una VM Hyper-V

Per importare una macchina virtuale esportata, aprite Hyper-V Manager sull’host di destinazione. Dal menu delle azioni a destra selezionate “Importa macchina virtuale”.

A questo punto vi verrà chiesto di indicare il percorso della cartella dove avete salvato i file esportati. Navigate fino alla cartella principale dell’esportazione, selezionatela e confermate. Hyper-V rileverà automaticamente la macchina virtuale disponibile e vi guiderà attraverso il processo di importazione.

Durante l’importazione dovrete scegliere tra tre modalità:

  • Potete scegliere di registrare la macchina virtuale nel nuovo host senza copiarne i file, mantenendo la posizione attuale.
  • Oppure potete ripristinare la macchina virtuale nella posizione originale, se volete replicare esattamente la struttura dell’host sorgente.
  • In alternativa potete copiare la macchina virtuale in una nuova posizione, opzione consigliata se volete organizzare meglio i file o conservare una copia indipendente.

Se state importando una VM con vTPM, non dovrete compiere operazioni aggiuntive particolari, a patto che l’export sia stato effettuato correttamente da macchina spenta. Al termine dell’importazione, la macchina sarà visibile in Hyper-V Manager e pronta per essere avviata.

Prima di avviare la macchina virtuale, controllate sempre che tutte le impostazioni, come la rete virtuale o l’assegnazione delle risorse, siano correttamente configurate per il nuovo host.

Figura 3: Importazione della Hyper-V VM in un differente host di virtualizzazione Hyper-V

Io ho registrato la macchina in-place, mantenendo la posizione attuale.

Figura 4: Macchina virtuale importate correttamente nel nuovo host di virtualizzazione

Quando però ho avviato la VM ho avuto un’amara sorpresa. Mi è apparsa una schermata di errore che mi avvisava che la VM non poteva essere avviata:

“The key protector could not be unwrapped”
“Details are included in the HostGuardianService-Client event log”
Codice errore: 0x80070057 (The parameter is incorrect)”

Ve lo ripeto ancora una volta: quando importate una macchina virtuale Hyper-V protetta da vTPM, il sistema si aspetta di trovare sull’host di destinazione la stessa chiave di protezione che era presente sull’host di origine. Se questa chiave non è disponibile, Hyper-V non riesce a sbloccare il contenuto protetto del TPM virtuale e impedisce l’avvio della macchina. Anche in assenza di Host Guardian Services, il vTPM utilizza meccanismi di protezione locale, legati al sistema che ha creato la VM, per garantire l’integrità e la sicurezza dei dati.

Figura 5: Hyper-V non riesce a sbloccare la configurazione sicura della VM e non può avviarla

Figura 6: Dettaglio del messaggio di errore presente nell’Event Viewer

Figura 7: La VM importata era configurata per utilizzare un vTPM

Come risolvere il problema

Per risolvere questo problema è necessario rendere disponibile sull’host di destinazione la stessa chiave di protezione utilizzata dalla macchina virtuale sul server di origine. Nel nostro caso, ho proceduto esportando i certificati digitali dal vecchio server, che custodivano le chiavi associate al vTPM, e successivamente importandoli nel nuovo host. Questa operazione ha permesso a Hyper-V di riconoscere correttamente il materiale crittografico e di riattivare senza errori la macchina virtuale importata.

Nel momento in cui assegnate per la prima VM un vTMP in un host Hyper-V, verranno generati due certificati digitali che si trovano nello store dei certificati macchina e precisamente nella cartella Shielded VM Local Certificates: Shielded VM Encryption Certificate e Shielded VM Signing Certificate.

Il Shielded VM Encryption Certificate è utilizzato per crittografare i dati sensibili all’interno della VM schermata, inclusi i dischi virtuali e gli stati di configurazione. Questo certificato assicura che solo gli host autorizzati possano decifrare e quindi avviare la VM.

Il Shielded VM Signing Certificate è usato per firmare i dati e garantire l’integrità del codice o della configurazione eseguiti sulla VM. Questo certificato contribuisce a proteggere le VM schermate da software malevolo e manomissioni, assicurando che solo codice verificato e firmato possa essere eseguito sulla VM.

Nella figura sotto sono mostrati i due certificati creati sull’host Hyper-V di partenza chiamato Nicola1. Dovete esportare questi certificati, assicurandovi di includere anche la chiave privata durante l’esportazione. L’esportazione può essere fatta attraverso gli strumenti di gestione dei certificati disponibili nel sistema operativo.

Figura 8: Esportazione di Shielded VM Encryption Certificate e Shielded VM Signing Certificate dal server su cui è stata creata la VM

Figura 9: Certificati esportati dal server su cui è stata creata la VM

Importate i due certificati sul secondo host, quello dove avete importato la VM che non si avviava. Questo assicurerà che l’host di destinazione abbia le credenziali necessarie per gestire la sicurezza delle VM con vTMP.

Figura 10: Importazione dei certificati sul secondo host Hyper-V

Figura 11: Importazione dei certificati sul secondo host Hyper-V

Assicuratevi che i certificati siano importati nello store dei certificati macchina e precisamente nella cartella Shielded VM Local Certificates

Figura 12: I certificati devono essere importati nella cartella Shielded VM Local Certificates

NOTA: Se non vedete la cartella sul secondo server è perché non sono state mai create VM con il vTPM. Quando creerete (o modificherete) una VM configurandola per utilizzare il vTPM, apparirà la cartella con i certificati. Quindi assicuratevi che la cartella sia presente prima dell’importazione.

Figura 13: Importazione dei certificati completata

Adesso la macchina virtual importata potrà essere avviata senza problemi.

Figura 14: Avvio della macchina virtuale importata effettuato con successo

Cosa succede alla scadenza dei certificati?

Se scade il Shielded VM Signing Certificate le VM schermate non possono essere convalidate o avviate, causando interruzioni del servizio. Questo certificato è utilizzato per firmare i metadati delle VM schermate, garantendo che provengano da una fonte attendibile. È cruciale rinnovare questi certificati prima della scadenza per evitare downtime.

Se il Shielded VM Encryption Certificate scade le macchine virtuali schermate non possono essere decrittografate e quindi non si avviano, causando interruzioni del servizio.

NOTA: È essenziale monitorare e rinnovare questi certificati prima della scadenza per mantenere l’integrità e la disponibilità delle VM. Inoltre, è consigliabile implementare procedure di gestione dei certificati per garantire che siano sempre validi e aggiornati.

Dopo aver rinnovato i certificati, ad esempio con i comandi New-SelfSignedCertificate -DnsName “shieldedvm.signing” -CertStoreLocation “Cert:\LocalMachine\My” e New-SelfSignedCertificate -DnsName “shieldedvm.encryption” -CertStoreLocation “Cert:\LocalMachine\My” e averli scambiati tra i diversi host Hyper-V, dovete aggiornare le impostazioni del TPM virtuale per utilizzare il nuovo certificato, utilizzando il comando Set-VMKeyProtector -VMName “NomeVM” -NewCertificateThumbprint “ThumbprintNuovoCertificato”.

Conclusioni

Spostare una macchina virtuale Hyper-V con vTPM abilitato tra due host diversi richiede particolare attenzione alla gestione delle chiavi di protezione. Anche senza l’utilizzo di soluzioni più complesse come Host Guardian Services, il solo fatto di avere il TPM virtuale attivo impone di mantenere la continuità del materiale crittografico tra l’host di origine e quello di destinazione.

Operare su macchine virtuali protette con vTPM richiede non solo una buona conoscenza dei meccanismi di esportazione e importazione, ma anche una corretta gestione delle componenti di sicurezza. Pianificare attentamente ogni fase, dal backup alla migrazione delle chiavi, vi permette di evitare interruzioni di servizio e di garantire la protezione dei dati sensibili anche durante lo spostamento tra ambienti diversi.