Passare al contenuto

Mitigazioni delle vulnerabilità della CPU

Per impostazione predefinita Ditana attiva le mitigazioni delle vulnerabilità della CPU in modalità ad alta sicurezza. Il programma di installazione rileva di quali mitigazioni ha bisogno la vostra specifica CPU leggendo /sys/devices/system/cpu/vulnerabilities/, quindi le propone ciascuna come casella di controllo attivabile singolarmente nella finestra di dialogo Expert Settings → CPU Vulnerability Mitigation Options. Questa pagina descrive in dettaglio ogni opzione.

Impostazioni predefinite del kernel e mitigazioni di Ditana a confronto

Sezione intitolata «Impostazioni predefinite del kernel e mitigazioni di Ditana a confronto»

Le impostazioni predefinite upstream di Linux bilanciano sicurezza e prestazioni e lasciano alcune vulnerabilità senza mitigazione, a meno che le relative mitigazioni non vengano attivate esplicitamente. Ditana le attiva per impostazione predefinita – per la maggior parte dei carichi di lavoro il costo è trascurabile, mentre il beneficio per la sicurezza è notevole. Se avete un carico di lavoro che ne trae un vantaggio dimostrabile, potete annullare singolarmente qualsiasi mitigazione nel programma di installazione.

La logica delle mitigazioni è specifica per l’hardware. Vengono configurate solo le vulnerabilità che la vostra CPU presenta effettivamente; tutto il resto resta al valore predefinito del kernel.

Diverse mitigazioni prevedono, come ripiego, la disattivazione del Simultaneous Multi-Threading (SMT, noto anche come Hyper-Threading). L’intestazione personalizzata del terminale di Ditana mostra quali mitigazioni sono attive e se SMT è attivato o disattivato.

Potete verificarlo anche con:

Finestra del terminale
lscpu

Per confrontare le prestazioni con e senza una determinata mitigazione, modificate la riga di comando del kernel per un solo avvio e rimuovete il parametro associato alla mitigazione che volete testare. Su un’installazione ZFS, che è ciò che produce il profilo Standard, lo si fa con l’editor degli ambienti di avvio di ZFSBootMenu; su un sistema che si avvia tramite GRUB, premete e nel menu. Qui sotto, per ogni voce, i parametri sono elencati alla riga «Parametro applicato». Riavviate ed eseguite il vostro carico di lavoro reale – i benchmark sintetici colgono raramente l’impatto reale.

Per rendere permanente una modifica su un’installazione ZFS, impostate la riga di comando nell’ambiente di avvio:

Finestra del terminale
sudo zfs set org.zfsbootmenu:commandline="rw <options>" ditana-root/ROOT
zfs get org.zfsbootmenu:commandline ditana-root/ROOT

Per renderla permanente su un sistema che si avvia tramite GRUB, modificate /etc/default/grub, individuate la riga GRUB_CMDLINE_LINUX_DEFAULT (prima salvate una copia di backup), rimuovete il parametro, quindi eseguite:

Finestra del terminale
sudo grub-mkconfig -o /boot/grub/grub.cfg

Se una modifica impedisce l’avvio, modificate la riga di comando del kernel nel menu di GRUB per ripristinare il sistema, quindi ripetete la modifica ed eseguite di nuovo grub-mkconfig.

Mitigazioni che Ditana attiva per impostazione predefinita

Sezione intitolata «Mitigazioni che Ditana attiva per impostazione predefinita»

Spectre variante 2 – Branch Target Injection

Sezione intitolata «Spectre variante 2 – Branch Target Injection»

Exploit basato sull’esecuzione speculativa che consente agli aggressori di leggere dati sensibili tramite predittori delle diramazioni indirette addestrati in modo errato. Ditana applica la mitigazione completa (Indirect Branch Prediction Barrier sempre attiva anziché condizionale).

Tutte le mitigazioni di Spectre variante 2 possono essere attivate forzatamente all’avvio per tutti i programmi. Ciò comporterà un sovraccarico, poiché le speculazioni sulle diramazioni indirette di tutti i programmi saranno limitate.

kernel.org: Spectre

Identificatore lscpu Spectre v2
Nome dell’impostazione Enforce Spectre Variant 2 Mitigation
Parametro applicato spectre_v2=on

Interessa le CPU Intel e consente l’accesso non autorizzato ai dati nella cache L1. Ditana impone la mitigazione completa con uno svuotamento aggressivo della cache.

Per impostazione predefinita il kernel non impone la disattivazione di SMT, il che lascia vulnerabili i sistemi SMT quando eseguono sistemi guest non fidati con EPT attivato.

kernel.org: L1TF

Identificatore lscpu L1tf
Nome dell’impostazione Enforce L1 Terminal Fault Mitigation
Parametro applicato l1tf=full,force

Consente agli aggressori di campionare dati dai buffer della CPU. Se necessario, la mitigazione completa può disattivare SMT.

Per impostazione predefinita il kernel non impone la disattivazione di SMT, il che lascia vulnerabili i sistemi SMT quando eseguono codice non fidato.

kernel.org: MDS

Identificatore lscpu Mds
Nome dell’impostazione Enforce MDS Mitigation
Parametro applicato mds=full,nosmt

Interessa le CPU con Transactional Synchronization Extensions. Se necessario, la mitigazione completa può disattivare SMT.

TSX potrebbe essere disattivato se il microcodice fornisce un MSR di controllo di TSX. In tal caso il sistema non è vulnerabile.

kernel.org: TAA

Identificatore lscpu Tsx async abort
Nome dell’impostazione Enforce TSX Async Abort Mitigation
Parametro applicato tsx_async_abort=full,nosmt

Exploit basato sull’esecuzione speculativa che consente di leggere la memoria del kernel dallo spazio utente. Ditana forza lo svuotamento della cache dati L1.

La riga di comando del kernel consente di controllare all’avvio le mitigazioni basate sullo svuotamento della L1D con l’opzione l1d_flush=. Per impostazione predefinita il meccanismo è disattivato.

kernel.org: L1D flush

Identificatore lscpu Meltdown
Nome dell’impostazione Enforce Meltdown Mitigation
Parametro applicato l1d_flush=on

Fuga di dati dall’I/O mappato in memoria. La mitigazione completa può disattivare SMT.

full,nosmt – Come full, con SMT disattivato sulle CPU vulnerabili. È la mitigazione completa.

kernel.org: MMIO stale data

Identificatore lscpu Mmio stale data
Nome dell’impostazione Enforce MMIO Stale Data Mitigation
Parametro applicato mmio_stale_data=full,nosmt

Retbleed – Cross-Thread Return Address Predictions

Sezione intitolata «Retbleed – Cross-Thread Return Address Predictions»

Attacco basato sull’esecuzione speculativa che lascia trapelare gli indirizzi di ritorno. La mitigazione selezionata automaticamente può disattivare SMT.

auto,nosmt – seleziona automaticamente una mitigazione, disattivando SMT se necessario per la mitigazione completa.

kernel.org: kernel parameters

Identificatore lscpu Retbleed
Nome dell’impostazione Enforce Retbleed Mitigation
Parametro applicato retbleed=auto,nosmt

Consultate anche kernel.org: Cross-Thread Return Address Predictions.

Attacchi speculativi tramite il return stack buffer. Combina le barriere IBPB con la modalità rigorosa di spectre_v2-user.

Mitigation: IBPB: protezione simile a «safe RET», ma impiega una barriera IBPB nei passaggi tra domini di privilegio (utente→kernel, guest→host).

kernel.org: SRSO

Identificatore lscpu Spec rstack overflow
Nome dell’impostazione Enforce SRSO Mitigation
Parametro applicato spec_rstack_overflow=ibpb spectre_v2_user=on

Riguarda le istruzioni AVX. Forza la mitigazione tramite microcodice oppure disattiva AVX dove il microcodice non è disponibile.

Specificando gather_data_sampling=force si userà la mitigazione tramite microcodice, se disponibile, oppure si disattiverà AVX sui sistemi interessati il cui microcodice non è stato aggiornato per includere la mitigazione.

kernel.org: Gather Data Sampling

Identificatore lscpu Gather data sampling
Nome dell’impostazione Enforce Gather Data Sampling Mitigation
Parametro applicato gather_data_sampling=force

Consente di campionare dati dai registri della CPU.

Questo parametro sostituisce il valore predefinito impostato in fase di compilazione da CONFIG_MITIGATION_RFDS.

kernel.org: kernel parameters

Identificatore lscpu Reg file data sampling
Nome dell’impostazione Enforce RFDS Mitigation
Parametro applicato reg_file_data_sampling=on

Consultate anche kernel.org: RFDS.

Vulnerabilità non proposte nel programma di installazione

Sezione intitolata «Vulnerabilità non proposte nel programma di installazione»

Per queste vulnerabilità il kernel applica per impostazione predefinita la mitigazione massima – Ditana non ha nulla da aggiungere.

Il kernel ne segnala altre cinque, che non sono nominate da nessuna parte qui sopra perché anche a queste Ditana non aggiunge nulla: Ghostwrite, Indirect Target Selection, old microcode, TSA e VMSCAPE. Il kernel decide, in base al processore che trova, di che cosa ha bisogno ciascuna di esse e lascia il risultato dove lo mostrano lscpu e /sys/devices/system/cpu/vulnerabilities/.

Non esiste alcuna garanzia che tutti i possibili vettori di attacco di Spectre variante 1 siano coperti.

kernel.org: Spectre

Identificatore lscpu: Spectre v1

Identificatore lscpu: Itlb multihit. Consultate kernel.org: iTLB multihit.

SRBDS – Special Register Buffer Data Sampling

Sezione intitolata «SRBDS – Special Register Buffer Data Sampling»

Identificatore lscpu: Srbds. Consultate kernel.org: SRBDS.

Il kernel fornisce mitigazioni per tali vulnerabilità in varie forme.

kernel.org: spec_ctrl

Identificatore lscpu: Spec store bypass.

Riduzione delle mitigazioni – a proprio rischio

Sezione intitolata «Riduzione delle mitigazioni – a proprio rischio»

Il programma di installazione propone anche due opzioni che riducono le mitigazioni. Aumentano notevolmente la vostra esposizione alle vulnerabilità note della CPU. Usatele solo per un motivo chiaro e giustificato.

Disattivare l’Indirect Branch Tracking di Intel – ibt=off

Sezione intitolata «Disattivare l’Indirect Branch Tracking di Intel – ibt=off»

Disattiva l’Indirect Branch Tracking del kernel. IBT è la metà «forward-edge» della Control-flow Enforcement Technology – l’hardware verifica che ogni salto indiretto o chiamata indiretta arrivi su un’istruzione endbr, ed è questo che rende difficile la programmazione orientata ai salti e alle chiamate. Si tratta di integrità del flusso di controllo, non di una mitigazione dell’esecuzione speculativa: la Branch Target Injection è Spectre v2, trattata più sopra alla voce spectre_v2=on. Questo parametro del kernel non è documentato nel riferimento ufficiale dei parametri del kernel, anche se su alcune distribuzioni viene comunemente attivato per impostazione predefinita senza alcuna comunicazione esplicita.

Il kernel documenta l’altra metà di CET, lo shadow stack in spazio utente, alla pagina shstk; IBT stesso, invece, non ha una pagina propria in quella documentazione.

Disattivare tutte le mitigazioni – mitigations=off

Sezione intitolata «Disattivare tutte le mitigazioni – mitigations=off»

Questa opzione è più drastica che deselezionare ogni singola mitigazione nella finestra di dialogo. Con mitigations=off il kernel salta tutte le mitigazioni che conosce – comprese quelle che Ditana non propone perché sono attive per impostazione predefinita. Il tetto delle prestazioni si alza; la soglia minima di sicurezza si abbassa, e di molto.

Utile solo per benchmark, sistemi isolati dalla rete con pieno controllo fisico o ambienti in cui disponete di difese di tutt’altro genere.

Consultate kernel.org: kernel parameters.

Le indicazioni di questa pagina si basano sulla documentazione ufficiale sulle vulnerabilità della CPU e sul riferimento dei parametri della riga di comando del kernel. Rami diversi del kernel si discostano talvolta da questi valori predefiniti in modo sottile; i nostri test coprono i kernel supportati da Ditana, ma combinazioni hardware insolite possono dar luogo a casi particolari.

Se avete un carico di lavoro che trae vantaggio da un valore predefinito diverso, o se trovate un modello di CPU per il quale il rilevamento di Ditana è incompleto o errato: aprite una segnalazione su GitHub oppure scrivete a [email protected]. La logica di rilevamento è fatta di dati, non di codice – per cui i miglioramenti consistono di solito in poche righe KDL.

Questa traduzione è stata realizzata automaticamente. I lettori la migliorano su Weblate.