Як перевірити, чи ввімкнено KPTI на моєму Ubuntu?


64

Поточна вразливість процесорів Meltdown Intel в даний час усувається, включивши ізоляцію таблиці сторінок. Існує питання, як вимкнути це: Як відключити ізоляцію таблиці сторінок, щоб відновити продуктивність, втрачену через патч отвору в безпеці процесора Intel?

Моє запитання навпаки: чи існує спосіб перевірити працюючу систему, чи ефективний механізм PTI в системі і таким чином система захищена? Я спеціально шукаю cat /proc/somethingабо cat /sys/somethingне перевіряю версію ядра чи конфігураційний параметр ядра тощо.

Відповіді:


4

Ви можете запустити команду нижче, щоб побачити всі доступні пом’якшення (не тільки для PTI, але й для інших вразливих місць):

$ 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

Дивовижна відповідь - коротка і до суті. Дякую.
Мартін Висний

63
  • Збирання CONFIG_PAGE_TABLE_ISOLATION у конфігурації ядра, як пропонується Раніз, не допомагає на робочому столі Ubuntu, але може допомогти у хмарних випадках:

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

  • Ви можете перевірити, /proc/cpuinfoяк запропонував JonasCz :

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

  • Або з dmesg(завдяки Джейсону Крейтону ):

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

  • Ви можете скласти програму тестування від Рафаеля Карвальо для виявлення 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
    

у патч-системі він повинен закінчуватися результатом

...
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).

  • Зверніться за допомогою інструменту https://github.com/speed47/spectre-meltdown-checker :

    cd /tmp
    wget https://raw.githubusercontent.com/speed47/spectre-meltdown-checker/master/spectre-meltdown-checker.sh
    sudo sh /tmp/spectre-meltdown-checker.sh
    

У виправленій системі він повинен показувати наступне:

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)

Не встановлюйте 4.4.0-108-generic на Xenial! Це порушує функціональність завантаження / перезавантаження / відключення / призупинення !

Встановіть 4.4.0-109-generic (детальніше див. USN-3522-3 )!


Як вже писав Робі Басак , в Ubuntu є сторінка про статус уразливостей Spectre та Meltdown .

Також є:


3
Оновлення Ubuntu заплановано на 9 січня. Вони можуть приземлитися раніше, але я б на це не розраховував. insights.ubuntu.com/2018/01/04/…
Раніз

4
Відповіді типу "dmesg | grep isolation" є кращими для цього, IMO. Деякі дистрибутиви (принаймні, розтягування Debian, можливо, інші) перенесли PTI до свого старшого ядра, але не прапор cpu_insecure в / proc / cpuinfo. У цих системах перегляд журналу dmesg - це єдиний спосіб перевірити, AFAICT.
Джейсон Крейтон

3
Я думаю, що dmesg | grep isolation && echo "patched :)" || echo "unpatched :("перерахована команда є надмірно небезпечною : вона не показує, який рядок насправді був зібраний, а також із задоволенням надрукував би "виправлену :)", якщо випадковий інший екземпляр "ізоляції" збігався ...
Jaap Eldering

2
Я б порекомендував проти другої пропозиції (привітання /proc/cpuinfoза cpu_insecure). Якщо покласти , що в сценарій , і у вас є процесор в майбутньому , коли проблема вирішена в мікроархітектурі, /proc/cpuinfoбільше не буде говорити , cpu_insecureі ваш сценарій буде вірити ядро невиправленої , навіть якщо він виправлений . Я також рекомендую проти третьої пропозиції, оскільки це занадто ймовірно, що слово може бути isolationу dmesgвисновку в якийсь момент, без його посилання на ізоляцію таблиці сторінки ядра.
blubberdiblub

4
При подальшому розслідуванні всі три ці пропозиції порушуються. Привітання до isolationвідповіді буде і тим, Kernel/User page tables isolation: enabledі іншим Kernel/User page tables isolation: disabled on command line.
Марк

18

Виконайте таку команду:

dmesg | grep 'page tables isolation'

Якщо він відображається увімкнено, тоді PTI увімкнено. Якщо нічого не відображається або ви бачите "інвалід" у терміналі, PTI вимкнено. Ubuntu ще не опублікував патч, тому він не відображатиме жодного повідомлення.


... або пізніші повідомлення ядра витіснили завантажувальні повідомлення з буфера журналу ядра. Якщо ваше ядро ​​друкує сповіщення про речі низької суворості, як-от дивні мережеві пакети, зазвичай повідомлення про час завантаження не є частиною dmesgвиводу. Подивіться, /var/log/kern.log*чи йде вона досить далеко, щоб мати повідомлення про завантаження. Ubuntu використовується для запису часу завантаження dmesgвиходу на /var/log/dmesg, але , здається, не робити цього більше.
Пітер Кордес

14.04 я отримав dmesg: invalid option -- 'w'. -Hтакож є недійсним. Видалення прапорів спрацювало для мене добре, як у цій відповіді
wjandrea

/var/log/kern.log 14.04
eckes

12

Ви можете перевірити cat /proc/cpuinfo, чи він звітує cpu_insecureпід "помилками", тоді PTI увімкнено.

Якщо він порожній (або просто не вказаний cpu_insecure), то, швидше за все, ви працюєте з ядром, яке ще не було виправлено (Ubuntu's ні), або у вас процесор AMD (для якого це, напевно, не буде включено, оскільки вони ти не вразливий).

Наразі всі процесори вважаються вразливими в останньому ядрі 4.15.


4.15 ще не оприлюднено для публіки
Аадхіл РФ

Це якщо ви скачаєте останнього кандидата на реліз з kernel.org і складете його самостійно. @Mohammedaadhil
JonasCz

1
Кандидат у реліз - це не випуск.
Руслан

Стаття, з якою ви зв’язувались, оновлена
nixpower

2
Ядро 4.14.11 встановиться cpu_insecureдля будь-якого процесора x86; 4.14.12 і новіші встановитимуть його лише для процесорів Intel (включаючи занадто старі або занадто примітивні, щоб бути вразливими. Обидва встановлять його, навіть якщо KPTI відключений.
Марк

8

Я знайшов цей чудовий скрипт sh для перевірки вразливості Meltdown / spectre у вашій системі:

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

Сценарій перевіряє вашу систему на відомі патчі Meltdown і spectre у вашій системі, щоб повідомити, чи тепер ці вразливості усуваються вашою ОС


2

Ви можете перевірити /proc/config.gz для CONFIG_PAGE_TABLE_ISOLATION=yце означає , що ядро скомпільовано з КПТІ.

Це в моїй виправленій системі Arch Linux під керуванням 4.14.11-1:

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

3
На жаль, конфігурація запущеного в даний час ядра /proc/не включена за замовчуванням у ядрах Ubuntu. Замість /boot/config-$( uname -r )цього (набагато менш елегантний) вирішення проблем .
blubberdiblub

5
Це говорить лише про те, що ядро ​​було зібрано з KPTI, а не якщо KPTI активний (його можна вимкнути під час завантаження та, можливо, під час виконання).
Марк

Якщо ви явно відключили KPTI через параметри командного рядка ядра, вам не потрібно буде перевіряти, чи він активний чи ні.
Раніз

1

На моєму екземплярі AWS Ubuntu 14.04.5 LTS EC2 я побіг

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

Слід сказати:

CONFIG_PAGE_TABLE_ISOLATION=y

Для оновлення я зробив:

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

Я також думаю, що це нормально:

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

Щоб перевірити версію ядра:

uname -r

Потрібно бути родовим або новішим 3.13.0-139 .


Цей метод вже згадується у верхній відповіді
wjandrea
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.