Altre mitigazioni dello spettro in MSVC

Altre mitigazioni dello spettro in MSVC

In un precedente post sul blog, Microsoft ha descritto le attenuazioni dello spettro disponibili in /Qspectre . Queste mitigazioni, sebbene non incidano in modo significativo sulle prestazioni, non proteggono da tutti i possibili attacchi di carico speculativi, descritti nella ricerca di settore come Load Value Injection. Ora stiamo aggiungendo due nuovi switch /Qspectre-load e /Qspectre-load-cf per fornire una mitigazione più completa degli attacchi Spectre in base ai carichi per i clienti. Questi switch sono disponibili solo su piattaforme x86 e x64.

Cosa fanno i nuovi switch?

Il /Qspectre-load flag specifica la generazione del compilatore di istruzioni di serializzazione per ogni istruzione di caricamento. Per la maggior parte dei carichi, ciò comporta l'aggiunta di un LFENCE istruzione dopo l'istruzione di carico. Tuttavia, per le istruzioni del flusso di controllo, questo approccio non funziona. Nella maggior parte dei casi, l'istruzione può essere suddivisa in carico e flusso di controllo, quindi un LFENCE può essere inserito dopo il carico. Quando ciò non è possibile, come per jmp [rax] il compilatore utilizza una strategia di mitigazione alternativa, caricando il target in modo non distruttivo prima di inserire un LFENCE come segue:

xor rbx, [rax]
xor rbx, [rax] 
lfence
jmp [rax]

Il /Qspectre-load-cf flag fornisce un sottoinsieme di questo comportamento, proteggendo solo le istruzioni del flusso di controllo:JMP , RET e CALL .

Se sono presenti blocchi di codice critici per le prestazioni che non richiedono protezione, puoi disabilitare queste attenuazioni utilizzando __declspec(spectre(nomitigation)) . Poiché questi interruttori interrompono la speculazione su tutti i carichi, l'impatto sulle prestazioni è molto elevato, quindi questa mitigazione non è appropriata ovunque.

Quali versioni di MSVC supportano le opzioni /Qspectre-load e /Qspectre-load-cf ?

Queste opzioni sono disponibili a partire da Visual Studio 16,5 Preview 3 e saranno disponibili nei set di strumenti MSVC inclusi in tutte le versioni future di Visual Studio (incluse le anteprime). Sono stati inoltre rilasciati in tutte le versioni attualmente supportate di Visual Studio 2017 e 2019 come segue:

  • Visual Studio 15.9
  • Studio visivo 16.0
  • Studio visivo 16.4

Come lo abilito?

A partire da Visual Studio 2019 versione 16.5 Preview 3, gli sviluppatori possono usare queste nuove opzioni di mitigazione dello spettro. Per abilitare uno dei nuovi flag, seleziona il flag che desideri da "Mitigazione dello spettro" nella sezione "Generazione del codice" delle pagine delle proprietà del progetto:

Il tuo feedback è fondamentale per offrire la migliore esperienza. Se hai domande, non esitare a chiederci di seguito. Puoi anche inviarci i tuoi commenti tramite e-mail. Se riscontri problemi con l'esperienza o hai suggerimenti per il miglioramento, segnala un problema o contatta tramite la Community degli sviluppatori. Puoi trovarci anche su Twitter@VisualC.