Як перевірити, чи ввімкнено 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.