Bagaimana cara memeriksa apakah KPTI diaktifkan di Ubuntu saya?

64

Kerentanan prosesor Intel Meltdown saat ini sedang diatasi dengan mengaktifkan isolasi tabel halaman. Ada pertanyaan bagaimana cara mematikannya: Bagaimana menonaktifkan Page Table Isolasi untuk mendapatkan kembali kinerja yang hilang karena patch lubang keamanan CPU Intel?

Pertanyaan saya berlawanan: apakah ada cara untuk memeriksa sistem yang sedang berjalan apakah mekanisme PTI efektif pada sistem dan dengan demikian sistem dilindungi? Saya secara khusus mencari cat /proc/somethingatau cat /sys/something, tidak memeriksa versi kernel atau parameter konfigurasi atau sejenisnya.

Martin Vysny
sumber

Jawaban:

4

Anda dapat menjalankan perintah di bawah ini untuk melihat semua mitigasi yang tersedia (tidak hanya untuk PTI tetapi juga untuk kerentanan lainnya):

$ 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
Michal Przybylowicz
sumber
Jawaban yang mengagumkan - singkat dan to the point. Terima kasih.
Martin Vysny
63
  • Grepping CONFIG_PAGE_TABLE_ISOLATION dalam konfigurasi kernel seperti yang disarankan Raniz tidak membantu pada desktop Ubuntu, tetapi dapat membantu pada instance cloud:

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

  • Anda dapat memeriksanya /proc/cpuinfoseperti yang disarankan JonasCz :

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

  • Atau dari dmesg(terima kasih kepada Jason Creighton ):

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

  • Anda dapat mengkompilasi program uji dari Raphael Carvalho untuk deteksi 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
    

pada sistem yang ditambal itu harus diakhiri dengan 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).

Pada sistem yang ditambal itu harus menunjukkan yang berikut:

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)

Jangan menginstal 4.4.0-108-generik di Xenial! Itu merusak fungsi boot / reboot / shutdown / menangguhkan !

Instal 4.4.0-109-generik ( lihat USN-3522-3 untuk detail)!


Seperti yang sudah ditulis Robie Basak , ada halaman tentang status kerentanan Specter dan Meltdown di Ubuntu .

Juga ada:

N0rbert
sumber
3
Pembaruan untuk Ubuntu dijadwalkan untuk 9 Januari. Mereka mungkin mendarat lebih awal tetapi saya tidak akan mengandalkannya. insights.ubuntu.com/2018/01/04/...
Raniz
4
Jenis jawaban "isolasi dmesg | grep" lebih disukai untuk ini, IMO. Beberapa distribusi (setidaknya peregangan Debian, mungkin yang lain) porting PTI ke kernel lama mereka, tetapi tidak bendera cpu_insecure di / proc / cpuinfo. Pada sistem itu, melihat log dmesg adalah satu-satunya cara untuk memeriksa, AFAICT.
Jason Creighton
3
Saya pikir dmesg | grep isolation && echo "patched :)" || echo "unpatched :("perintah sebagaimana tercantum tidak perlu berbahaya : tidak menunjukkan baris apa yang benar-benar cocok, dan juga akan dengan senang hati mencetak "tambalan :)" jika contoh acak "isolasi" lain dicocokkan ...
Jaap Eldering
2
Saya akan merekomendasikan terhadap saran kedua (grepping /proc/cpuinfofor cpu_insecure). Jika Anda memasukkannya ke dalam skrip dan Anda memiliki CPU di masa depan di mana masalah diperbaiki dalam mikroarsitekturnya, /proc/cpuinfotidak akan lagi mengatakan cpu_insecuredan skrip Anda akan percaya bahwa kernel tidak berpasangan meskipun ditambal . Saya juga akan merekomendasikan terhadap saran ketiga, karena terlalu mungkin bahwa mungkin ada kata isolationdalam dmesgoutput di beberapa titik tanpa mengacu pada isolasi tabel halaman kernel.
blubberdiblub
4
Setelah diselidiki lebih lanjut, ketiga saran ini rusak. Grepping for isolationakan cocok dengan keduanya Kernel/User page tables isolation: enableddan Kernel/User page tables isolation: disabled on command line.
Markus
18

Jalankan perintah berikut:

dmesg | grep 'page tables isolation'

Jika tampilannya diaktifkan, maka PTI diaktifkan. Jika tidak ada yang ditampilkan atau Anda melihat 'dinonaktifkan' di terminal, maka PTI dinonaktifkan. Ubuntu belum menerbitkan tambalan, sehingga tidak akan menampilkan pesan apa pun.

Aadhil RF
sumber
... atau lebih baru pesan kernel telah mendorong keluar pesan bootup dari buffer log kernel. Jika kernel Anda mencetak pemberitahuan untuk hal-hal dengan tingkat keparahan rendah seperti paket jaringan yang aneh, biasanya pesan-pesan saat boot tidak menjadi bagian dari dmesgoutput. Lihat /var/log/kern.log*apakah sudah cukup jauh untuk memiliki pesan booting. Ubuntu digunakan untuk merekam dmesgkeluaran waktu boot /var/log/dmesg, tetapi tampaknya tidak melakukan itu lagi.
Peter Cordes
Pada 14,04, saya mendapatkannya dmesg: invalid option -- 'w'. -Hjuga tidak valid. Menghapus bendera bekerja dengan baik untuk saya, seperti dalam jawaban ini
wjandrea
/var/log/kern.log pada 14,04
eckes
12

Anda dapat memeriksa cat /proc/cpuinfo, jika dilaporkan cpu_insecuredalam "bug", maka PTI diaktifkan.

Jika kosong (atau hanya tidak mencantumkan cpu_insecure), maka kemungkinan besar Anda menjalankan kernel yang belum ditambal (Ubuntu belum), atau Anda memiliki prosesor AMD (yang hal ini tentunya tidak akan diaktifkan, karena mereka tidak rentan).

Saat ini semua CPU diperlakukan sebagai rentan dalam kernel 4,15 terbaru.

JonasCz - Pasang kembali Monica
sumber
4.15 belum dirilis ke publik
Aadhil RF
Yaitu, jika Anda mengunduh kandidat rilis terbaru dari kernel.org dan mengompilasinya sendiri. @Mohammedaadhil
Pasang kembali Monica
1
Kandidat rilis bukan rilis.
Ruslan
Artikel yang Anda
tautkan
2
Kernel 4.14.11 akan ditetapkan cpu_insecureuntuk CPU x86 apa pun; 4.14.12 dan yang lebih baru hanya akan mengaturnya untuk CPU Intel (termasuk yang terlalu tua atau terlalu primitif untuk menjadi rentan. Keduanya akan mengaturnya bahkan jika KPTI dinonaktifkan.
Tandai
8

Saya menemukan skrip sh yang hebat ini untuk menguji kerentanan Meltdown / momok pada sistem Anda:

https://github.com/speed47/spectre-meltdown-checker

Script memeriksa sistem Anda ke Meltdown yang dikenal dan patch momok pada sistem Anda untuk memberi tahu Anda apakah kerentanan ini sekarang dikurangi oleh OS Anda

Compte droid
sumber
2

Anda dapat memeriksa /proc/config.gz untuk CONFIG_PAGE_TABLE_ISOLATION=yyang berarti bahwa kernel dikompilasi dengan KPTI.

Ini ada di sistem Arch Linux yang saya tambal yang menjalankan 4.14.11-1:

$ zgrep CONFIG_PAGE_TABLE_ISOLATION /proc/config.gz 
CONFIG_PAGE_TABLE_ISOLATION=y
Raniz
sumber
3
Sayangnya, konfigurasi kernel yang saat ini berjalan /proc/tidak diaktifkan secara default di kernel Ubuntu. Sebagai /boot/config-$( uname -r )gantinya ( solusi yang kurang elegan) lebih baik dipahami .
blubberdiblub
5
Itu hanya memberi tahu Anda jika kernel dikompilasi dengan KPTI, bukan jika KPTI aktif (dapat dimatikan saat boot, dan mungkin saat runtime).
Markus
Jika Anda telah secara eksplisit menonaktifkan KPTI melalui parameter baris perintah kernel Anda tidak perlu memeriksa apakah itu aktif atau tidak.
Raniz
1

Pada contoh AWS Ubuntu 14.04.5 LTS EC2 saya, saya berlari

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

Seharusnya dikatakan:

CONFIG_PAGE_TABLE_ISOLATION=y

Untuk pembaruan yang saya lakukan:

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

Saya pikir ini juga OK:

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

Untuk memeriksa versi kernel:

uname -r

Harus 3.13.0-139 generik atau lebih baru.

drKreso
sumber
Metode ini sudah disebutkan dalam jawaban teratas
wjandrea