Linee guida per la mitigazione delle vulnerabilità micro-architetturali e speculative dell'esecuzione side channel basata su silicon
Si applica a: ✔️ macchine virtuali Linux ✔️ macchine virtuali Windows ✔️ set di scalabilità flessibili ✔️ set di scalabilità uniformi
Questo articolo fornisce indicazioni per una nuova classe di vulnerabilità microarchitetturali basate su silicio e del canale laterale per l'esecuzione speculativa che interessano molti processori e sistemi operativi moderni. Sono inclusi Intel, AMD e ARM. Per informazioni specifiche su queste vulnerabilità basate sul silicio, vedere gli avvisi di sicurezza e le CVE seguenti:
- ADV180002 - Indicazioni per mitigare le vulnerabilità del canale laterale per l'esecuzione speculativa
- ADV180012 - Linee guida Microsoft per il bypass dello store speculativo
- ADV180013 - Linee guida Microsoft per lettura del registro di sistema non autorizzata
- ADV180016 - Linee guida Microsoft per il ripristino dello stato FP differito
- ADV180018 - Linee guida Microsoft per mitigare la variante L1TF
- ADV190013 - Linee guida Microsoft per mitigare le vulnerabilità di campionamento dei dati microarchitetturali
- ADV220002 - Linee guida Microsoft sulle vulnerabilità dei dati non aggiornati del processore Intel MMIO
- CVE-2022-23816 - Confusione del tipo di ramo CPU AMD
- CVE-2022-21123 - Confusione del tipo di ramo CPU AMD
La pubblicazione di queste vulnerabilità della CPU ha portato a domande dei clienti alla ricerca di maggiore chiarezza.
Microsoft ha distribuito soluzioni di mitigazione dei rischi in tutti i servizi cloud. L'infrastruttura che esegue Azure e isola i carichi di lavoro dei clienti gli uni da gli altri è protetta. Ciò significa che un potenziale utente malintenzionato che usa la stessa infrastruttura non potrà attaccare l'applicazione sfruttando queste vulnerabilità.
Azure usa la manutenzione con mantenimento della memoria, laddove possibile, per ridurre al minimo l'impatto sul cliente ed eliminare la necessità di riavvii. Azure continuerà a usare questi metodi nell'esecuzione di aggiornamenti a livello di sistema per l'host e per proteggere i clienti.
Altre informazioni sul modo in cui la sicurezza è integrata in ogni aspetto di Azure sono disponibili sul sito relativo alla documentazione di sicurezza di Azure.
Nota
Poiché questo documento è stato pubblicato prima di tutto, sono state comunicate più varianti di questa classe di vulnerabilità. Microsoft continua a investire in modo consistente nella protezione dei clienti e a fornire informazioni aggiuntive. Questa pagina verrà aggiornata per rilasciare altre correzioni.
I clienti che eseguono codice non attendibile all'interno della macchina virtuale devono intervenire per proteggersi da queste vulnerabilità leggendo di seguito per altre indicazioni su tutte le vulnerabilità.
Altri clienti devono valutare queste vulnerabilità dal punto di vista della difesa avanzata e prendere in considerazione le implicazioni relative alla sicurezza e alle prestazioni della configurazione scelta.
Mantenere aggiornati i sistemi operativi
Benché non sia necessario un aggiornamento del sistema operativo per isolare le applicazioni in esecuzione in Azure da altri clienti Azure, è sempre consigliabile mantenere aggiornate le versioni del software. Gli aggiornamenti della sicurezza più recenti per Windows contengono soluzioni di mitigazione dei rischi per queste vulnerabilità. Analogamente, le distribuzioni Linux hanno rilasciato più aggiornamenti per risolvere tali vulnerabilità. Di seguito sono illustrate le azioni consigliate per aggiornare il sistema operativo:
Offerta | Azione consigliata |
---|---|
Servizi cloud di Azure | Abilitare l'aggiornamento automatico o assicurarsi che sia in esecuzione il sistema operativo guest più recente. |
Macchine virtuali Linux in Azure | Installare aggiornamenti dal provider del sistema operativo. Per altre informazioni, vedere Linux più avanti in questo documento. |
Macchine virtuali Windows in Azure | Installare il rollup della sicurezza più recente. |
Altri servizi PaaS di Azure | Non sono necessarie azioni da parte dei clienti che usano questi servizi. Azure aggiorna automaticamente le versioni del sistema operativo. |
Indicazioni aggiuntive in caso di esecuzione di codice non attendibile
Per i clienti che consentono agli utenti non attendibili l'esecuzione arbitraria del codice potrebbe essere necessario implementare alcune funzionalità di sicurezza aggiuntive all'interno delle macchine virtuali di Azure o di Servizi cloud. Queste funzionalità proteggono contro i vettori di diffusione all'interno del processo descritti da numerose vulnerabilità di esecuzione speculativa.
Scenari di esempio in cui sono consigliate funzionalità di sicurezza aggiuntive:
- Si consente l'esecuzione di codice non attendibile all'interno della macchina virtuale.
- Ad esempio, si consente a un cliente di caricare un file binario o uno script che viene quindi eseguito all'interno dell'applicazione.
- Si consente a utenti non attendibili di accedere alla macchina virtuale usando account con privilegi bassi.
- Ad esempio, si consente a un utente con privilegi limitati di accedere a una delle macchine virtuali tramite desktop remoto o SSH.
- Si consente a utenti non attendibili l'accesso alle macchine virtuali implementate tramite virtualizzazione annidata.
- Ad esempio, si controlla l'host Hyper-V, ma si allocano le macchine virtuali a utenti non attendibili.
I clienti che non implementano uno scenario che include codice non attendibile non devono abilitare queste funzionalità aggiuntive di sicurezza.
Abilitazione della sicurezza aggiuntiva
Se si esegue codice non attendibile, è possibile abilitare altre funzionalità di sicurezza all'interno della macchina virtuale o del servizio cloud. In parallelo, assicurarsi che il sistema operativo sia aggiornato per abilitare le funzionalità di sicurezza all'interno della macchina virtuale o del servizio cloud
Finestre
Per abilitare queste funzionalità di sicurezza aggiuntive, il sistema operativo di destinazione deve essere aggiornato. Sebbene numerose mitigazioni siano abilitate per impostazione predefinita, le funzionalità aggiuntive descritte di seguito devono essere abilitate manualmente e possono causare una riduzione delle prestazioni.
Opzione 1
Passaggio 1: seguire le istruzioni riportate in KB4072698 per assicurarsi che le protezioni siano abilitate usando il modulo SpeculationControl di PowerShell.
Nota
Se il modulo è stato scaricato in precedenza, sarà necessario installare la versione più recente.
Per convalidare le protezioni abilitate da queste vulnerabilità, vedere Informazioni sull'output dello script di PowerShell Get-SpeculationControlSettings.
Se le protezioni non sono abilitate, contattare il supporto tecnico di Azure per abilitare controlli aggiuntivi nella macchina virtuale di Azure.
Passaggio 2: per abilitare il supporto del sistema operativo per KVAS (Kernel Virtual Address Shadowing) e BTI (Branch Target Injection), seguire le istruzioni riportate in KB4072698 per abilitare le protezioni usando le chiavi del Registro di sistema Session Manager
. È necessario riavviare.
Passaggio 3: per le distribuzioni che usano la virtualizzazione annidata (solo D3 ed E3): queste istruzioni si applicano all'interno della macchina virtuale usata come host Hyper-V.
- Seguire le istruzioni riportate in KB4072698 per abilitare le protezioni usando le chiavi del Registro di sistema
MinVmVersionForCpuBasedMitigations
. - Impostare il tipo di utilità di pianificazione dell'hypervisor su
Core
seguendo le istruzioni riportate qui.
Opzione 2
Disabilitare l'hyper-threading nella macchina virtuale: i clienti che eseguono codice non attendibile in una macchina virtuale con hyper-threading potrebbero scegliere di disabilitare l'hyper-threading o di passare a una macchina virtuale senza hyper-threading. Fare riferimento a questo documento per un elenco delle dimensioni delle macchine virtuali con hyper-threading (dove il rapporto tra vCPU e Core è 2:1). Per verificare se l'hyper-threading è abilitato nella macchina virtuale, vedere lo script seguente usando la riga di comando di Windows dall'interno della macchina virtuale.
Digitare wmic
per accedere all'interfaccia interattiva. Digitare quindi il comando seguente per visualizzare la quantità di processori fisici e logici nella macchina virtuale.
CPU Get NumberOfCores,NumberOfLogicalProcessors /Format:List
Se il numero di processori logici è maggiore dei processori fisici (core), l'hyper-threading è abilitato. Se si esegue una macchina virtuale con hyper-threading, contattare il supporto tecnico di Azure per disabilitare l'hyper-threading. Una volta disabilitato l'hyper-threading, il supporto richiederà un riavvio completo della macchina virtuale. Fare riferimento al numero di core per capire perché il numero di core della macchina virtuale è diminuito.
Opzione 3
Per CVE-2022-23816 e CVE-2022-21123 (Confusione del tipo di ramo CPU AMD), seguire sia l'opzione 1 che l'opzione 2 sopra riportate.
Linux
Per abilitare il set di funzionalità di sicurezza aggiuntive all'interno è necessario che il sistema operativo di destinazione sia completamente aggiornato. Alcune soluzioni di mitigazione verranno abilitate per impostazione predefinita. La sezione seguente descrive le funzionalità che sono disattivate per impostazione predefinita e/o fanno affidamento su supporto hardware (microcodice). L'abilitazione di queste funzionalità può causare un impatto sulle prestazioni. Fare riferimento alla documentazione del provider del sistema operativo per altre istruzioni
Passaggio 1: disabilitare l'hyper-threading nella macchina virtuale: i clienti che eseguono codice non attendibile in una macchina virtuale con hyper-threading dovranno disabilitare l'hyper-threading o passare a una macchina virtuale senza hyper-threading. Fare riferimento a questo documento per un elenco delle dimensioni delle macchine virtuali con hyper-threading (dove il rapporto tra vCPU e Core è 2:1). Per verificare se si esegue una macchina virtuale con hyper-threading, eseguire il comando lscpu
nella macchina virtuale Linux.
Se Thread(s) per core = 2
, l'hyper-threading è stato abilitato.
Se Thread(s) per core = 1
, l'hyper-threading è stato disabilitato.
Output di esempio per una macchina virtuale con hyper-threading abilitato:
CPU Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 8
On-line CPU(s) list: 0-7
Thread(s) per core: 2
Core(s) per socket: 4
Socket(s): 1
NUMA node(s): 1
Se si esegue una macchina virtuale con hyper-threading, contattare il supporto tecnico di Azure per disabilitare l'hyper-threading. Una volta disabilitato l'hyper-threading, il supporto richiederà un riavvio completo della macchina virtuale. Fare riferimento al numero di core per capire perché il numero di core della macchina virtuale è diminuito.
Passaggio 2: per attenuare le vulnerabilità di memoria basate sulla CPU seguenti, vedere la documentazione del provider del sistema operativo:
Numero di core
Quando viene creata una macchina virtuale con hyper-threading, Azure alloca 2 thread per core, denominati vCPU. Quando l'hyper-threading viene disabilitato, Azure rimuove un thread ed espone core a thread singolo (core fisici). Il rapporto tra vCPU e CPU è di 2:1, quindi una volta disabilitato l'hyper-threading, il numero di CPU nella macchina virtuale risulterà ridotto della metà. Ad esempio, una macchina virtuale D8_v3 è una macchina virtuale con hyper-threading in esecuzione su 8 vCPU (2 thread per core x 4 core). Quando l'hyper-threading viene disabilitato, le CPU scenderanno a 4 core fisici con 1 thread per core.
Passaggi successivi
Per altre informazioni sul modo in cui la sicurezza è integrata in ogni aspetto di Azure, vedere la Documentazione sulla sicurezza di Azure.