Come verificare che KPTI sia abilitato sul mio Ubuntu?


64

L'attuale vulnerabilità del processore Intel Meltdown viene attualmente risolta con l'isolamento della tabella delle pagine abilitato. C'è una domanda su come disattivarlo: come disabilitare l'isolamento della tabella delle pagine per recuperare le prestazioni perse a causa della patch della falla di sicurezza della CPU Intel?

La mia domanda è opposta: esiste un modo per verificare su un sistema in esecuzione se il meccanismo PTI è efficace sul sistema e quindi il sistema è protetto? Sto specificamente cercando cat /proc/somethingo cat /sys/something, non controllando la versione del kernel, i parametri di configurazione o simili.

Risposte:


4

È possibile eseguire il comando seguente per visualizzare tutte le mitigazioni disponibili (non solo per PTI ma anche per altre vulnerabilità):

$ cat /sys/devices/system/cpu/vulnerabilities/*
Mitigation: PTE Inversion
Mitigation: Clear CPU buffers; SMT vulnerable
Mitigation: PTI
Mitigation: Speculative Store Bypass disabled via prctl and seccomp
Mitigation: usercopy/swapgs barriers and __user pointer sanitization
Mitigation: Full generic retpoline, IBPB: conditional, IBRS_FW, STIBP: conditional, RSB filling

Risposta eccezionale - breve e al punto. Grazie.
Martin Vysny,

63
  • Greppare CONFIG_PAGE_TABLE_ISOLATION nella configurazione del kernel come suggerito da Raniz non aiuta su Ubuntu desktop, ma può aiutare su istanze cloud:

    grep CONFIG_PAGE_TABLE_ISOLATION=y /boot/config-`uname -r` && \
    echo "patched :)" || echo "unpatched :("
    

  • Puoi controllare /proc/cpuinfocome suggerito JonasCz :

    grep -q "cpu_insecure\|cpu_meltdown\|kaiser" /proc/cpuinfo && echo "patched :)" \
    || echo "unpatched :("
    

  • O da dmesg(grazie a Jason Creighton ):

    dmesg | grep -q "Kernel/User page tables isolation: enabled" \
    && echo "patched :)" || echo "unpatched :("
    

  • È possibile compilare un programma di test da Raphael Carvalho per il rilevamento di Meltdown:

    sudo apt-get install git build-essential
    cd /tmp
    git clone https://github.com/raphaelsc/Am-I-affected-by-Meltdown.git
    cd Am-I-affected-by-Meltdown
    make
    sudo sh -c "echo 0  > /proc/sys/kernel/kptr_restrict"
    ./meltdown-checker
    

sul sistema patchato dovrebbe finire con l'output

...
so far so good (i.e. meltdown safe) ...

System not affected (take it with a grain of salt though as false negative
may be reported for specific environments; Please consider running it once again).

Sul sistema con patch dovrebbe mostrare quanto segue:

Spectre and Meltdown mitigation detection tool v0.27

Checking for vulnerabilities against live running kernel Linux 4.4.0-109-generic #132-Ubuntu SMP Tue Jan 9 19:52:39 UTC 2018 x86_64
...
CVE-2017-5754 [rogue data cache load] aka 'Meltdown' aka 'Variant 3'
* Kernel supports Page Table Isolation (PTI):  YES 
* PTI enabled and active:  YES 
> STATUS:  NOT VULNERABLE  (PTI mitigates the vulnerability)

Non installare 4.4.0-108-generico su Xenial! Si rompe boot / riavvio / spegnimento / sospendere funzionalità !

Installa 4.4.0-109-generico ( vedi USN-3522-3 per i dettagli)!


Come già scritto da Robie Basak , c'è una pagina sullo stato delle vulnerabilità di Spectre e Meltdown in Ubuntu .

Inoltre ci sono:


3
Gli aggiornamenti per Ubuntu sono previsti per Januari 9. Potrebbero atterrare prima ma non ci contare. insights.ubuntu.com/2018/01/04/…
Raniz

4
Le risposte di tipo "dmesg | grep isolation" sono preferibili a questo, IMO. Alcune distribuzioni (almeno Debian stretch, forse altre) hanno portato PTI sul loro kernel più vecchio, ma non il flag cpu_insecure in / proc / cpuinfo. Su quei sistemi, guardare nel registro di dmesg è l'unico modo per verificare, AFAICT.
Jason Creighton,

3
Penso che il dmesg | grep isolation && echo "patched :)" || echo "unpatched :("comando elencato sia inutilmente pericoloso : non mostra quale riga è stata effettivamente abbinata, e sarebbe anche felicemente stampato "patchato :)" se fosse abbinata un'altra istanza casuale di "isolamento" ...
Jaap Eldering

2
Vorrei raccomandare contro il secondo suggerimento (grepping /proc/cpuinfoper cpu_insecure). Se lo inserirai in uno script e in futuro avrai una CPU in cui il problema è stato risolto nella sua microarchitettura, /proc/cpuinfonon lo diranno più cpu_insecuree il tuo script crederà che il kernel sia privo di patch anche se è patchato . Io consiglio anche contro il terzo suggerimento, in quanto è troppo probabile che ci possa essere la parola isolationin dmesguscita ad un certo punto senza riferimento al kernel pagina di isolamento tavolo.
Blubberdiblub,

4
Dopo ulteriori accertamenti, tutti e tre questi suggerimenti vengono meno. Grepping per abbinerà isolationentrambi Kernel/User page tables isolation: enablede Kernel/User page tables isolation: disabled on command line.
Mark

18

Esegui il seguente comando:

dmesg | grep 'page tables isolation'

Se viene visualizzato abilitato, PTI è abilitato. Se non viene visualizzato nulla o viene visualizzato "disabilitato" nel terminale, PTI è disabilitato. Ubuntu non ha ancora pubblicato la patch, quindi non visualizzerà alcun messaggio.


... o successivi i messaggi del kernel hanno espulso i messaggi di avvio dal buffer di registro del kernel. Se il tuo kernel stampa avvisi per cose a bassa severità come strani pacchetti di rete, è comune che i messaggi all'avvio non facciano parte dmesgdell'output. Vedi /var/log/kern.log*se risale abbastanza lontano per avere i messaggi di avvio. Ubuntu registrava l' dmesgoutput all'avvio /var/log/dmesg, ma sembra non farlo più.
Peter Cordes,

Il 14.04, ho ricevuto dmesg: invalid option -- 'w'. -Hè anche non valido. Rimuovere le bandiere ha funzionato bene per me, come in questa risposta
wjandrea, l'

/var/log/kern.log il 14.04
verifica l'

12

È possibile verificare con cat /proc/cpuinfo, se riporta cpu_insecurein "bug", quindi PTI è abilitato.

Se è vuoto (o semplicemente non elenca cpu_insecure), molto probabilmente stai eseguendo un kernel che non è stato ancora patchato (quello di Ubuntu non lo è) o hai un processore AMD (per il quale questo probabilmente non sarà abilitato, dal momento che non sei vulnerabile).

Attualmente tutte le CPU sono considerate vulnerabili nell'ultimo kernel 4.15.


4.15 non è ancora stato rilasciato al pubblico
Aadhil RF

Lo è, se scarichi l'ultima versione candidata da kernel.org e la compili tu stesso. @Mohammedaadhil
JonasCz - Ripristina Monica il

1
Un candidato al rilascio non è un rilascio.
Ruslan,

L'articolo che hai collegato è stato aggiornato
nixpower il

2
Il kernel 4.14.11 verrà impostato cpu_insecureper qualsiasi CPU x86; 4.14.12 e versioni successive lo imposteranno solo per le CPU Intel (comprese quelle troppo vecchie o troppo primitive per essere vulnerabili. Entrambi lo imposteranno anche se KPTI è disabilitato.
Segna il


2

Puoi controllare /proc/config.gz per CONFIG_PAGE_TABLE_ISOLATION=ycui significa che il kernel è stato compilato con KPTI.

Questo è sul mio sistema Arch Linux con patch in esecuzione 4.14.11-1:

$ zgrep CONFIG_PAGE_TABLE_ISOLATION /proc/config.gz 
CONFIG_PAGE_TABLE_ISOLATION=y

3
Sfortunatamente, la configurazione del kernel attualmente in esecuzione /proc/non è abilitata di default nei kernel di Ubuntu. La soluzione (molto meno elegante) è /boot/config-$( uname -r )invece grepping .
Blubberdiblub,

5
Questo ti dice solo se il kernel è stato compilato con KPTI, non se KPTI è attivo (può essere spento all'avvio e possibilmente in fase di esecuzione).
Segna il

Se hai esplicitamente disabilitato KPTI tramite i parametri della riga di comando del kernel, non dovresti aver bisogno di verificare se è attivo o meno.
Raniz,

1

Sulla mia istanza AWS Ubuntu 14.04.5 LTS EC2, ho corso

grep CONFIG_PAGE_TABLE_ISOLATION /boot/config-$(uname -r)

Dovrebbe dire:

CONFIG_PAGE_TABLE_ISOLATION=y

Per l'aggiornamento ho fatto:

sudo apt-get update && sudo apt-get install linux-image-generic

Penso che anche questo sia OK:

sudo apt-get update
sudo apt-get dist-upgrade

Per verificare la versione del kernel:

uname -r

Deve essere 3.13.0-139-generico o più recente.


Questo metodo è già menzionato nella risposta principale
wjandrea,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.