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.
Dopo l’installazione
Sezione intitolata «Dopo l’installazione»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:
lscpuPer 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:
sudo zfs set org.zfsbootmenu:commandline="rw <options>" ditana-root/ROOTzfs get org.zfsbootmenu:commandline ditana-root/ROOTPer 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:
sudo grub-mkconfig -o /boot/grub/grub.cfgSe 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.
Identificatore lscpu |
Spectre v2 |
| Nome dell’impostazione | Enforce Spectre Variant 2 Mitigation |
| Parametro applicato | spectre_v2=on |
L1 Terminal Fault (L1TF)
Sezione intitolata «L1 Terminal Fault (L1TF)»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.
Identificatore lscpu |
L1tf |
| Nome dell’impostazione | Enforce L1 Terminal Fault Mitigation |
| Parametro applicato | l1tf=full,force |
Microarchitectural Data Sampling (MDS)
Sezione intitolata «Microarchitectural Data Sampling (MDS)»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.
Identificatore lscpu |
Mds |
| Nome dell’impostazione | Enforce MDS Mitigation |
| Parametro applicato | mds=full,nosmt |
TSX Asynchronous Abort (TAA)
Sezione intitolata «TSX Asynchronous Abort (TAA)»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.
Identificatore lscpu |
Tsx async abort |
| Nome dell’impostazione | Enforce TSX Async Abort Mitigation |
| Parametro applicato | tsx_async_abort=full,nosmt |
Meltdown (svuotamento della cache L1D)
Sezione intitolata «Meltdown (svuotamento della cache L1D)»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.
Identificatore lscpu |
Meltdown |
| Nome dell’impostazione | Enforce Meltdown Mitigation |
| Parametro applicato | l1d_flush=on |
MMIO Stale Data
Sezione intitolata «MMIO Stale Data»Fuga di dati dall’I/O mappato in memoria. La mitigazione completa può disattivare SMT.
full,nosmt– Comefull, con SMT disattivato sulle CPU vulnerabili. È la mitigazione completa.
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.
Identificatore lscpu |
Retbleed |
| Nome dell’impostazione | Enforce Retbleed Mitigation |
| Parametro applicato | retbleed=auto,nosmt |
Consultate anche kernel.org: Cross-Thread Return Address Predictions.
Speculative Return Stack Overflow (SRSO)
Sezione intitolata «Speculative Return Stack Overflow (SRSO)»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).
Identificatore lscpu |
Spec rstack overflow |
| Nome dell’impostazione | Enforce SRSO Mitigation |
| Parametro applicato | spec_rstack_overflow=ibpb spectre_v2_user=on |
Gather Data Sampling (GDS)
Sezione intitolata «Gather Data Sampling (GDS)»Riguarda le istruzioni AVX. Forza la mitigazione tramite microcodice oppure disattiva AVX dove il microcodice non è disponibile.
Specificando
gather_data_sampling=forcesi userà la mitigazione tramite microcodice, se disponibile, oppure si disattiverà AVX sui sistemi interessati il cui microcodice non è stato aggiornato per includere la mitigazione.
Identificatore lscpu |
Gather data sampling |
| Nome dell’impostazione | Enforce Gather Data Sampling Mitigation |
| Parametro applicato | gather_data_sampling=force |
Register File Data Sampling (RFDS)
Sezione intitolata «Register File Data Sampling (RFDS)»Consente di campionare dati dai registri della CPU.
Questo parametro sostituisce il valore predefinito impostato in fase di compilazione da
CONFIG_MITIGATION_RFDS.
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/.
Spectre variante 1 – Bounds Check Bypass
Sezione intitolata «Spectre variante 1 – Bounds Check Bypass»Non esiste alcuna garanzia che tutti i possibili vettori di attacco di Spectre variante 1 siano coperti.
Identificatore lscpu: Spectre v1
iTLB multihit
Sezione intitolata «iTLB multihit»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.
Speculative Store Bypass (SSB)
Sezione intitolata «Speculative Store Bypass (SSB)»Il kernel fornisce mitigazioni per tali vulnerabilità in varie forme.
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.
Avvertenza
Sezione intitolata «Avvertenza»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.