UbuntuでKPTIが有効になっていることを確認する方法は?


64

現在のMeltdown Intelプロセッサの脆弱性は、現在、ページテーブル分離を有効にすることで改善されています。これをオフにする方法について質問があります。IntelCPUセキュリティホールパッチにより失われたパフォーマンスを回復するためにページテーブル分離を無効にする方法はありますか?

私の質問は反対です:PTIメカニズムがシステムで有効であり、したがってシステムが保護されているかどうかを実行中のシステムで確認する方法はありますか?私は、特に探していますcat /proc/somethingcat /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
  • Ranizが推奨するようにカーネル構成でCONFIG_PAGE_TABLE_ISOLATIONを削除しても、デスクトップUbuntuには役立ちませんが、クラウドインスタンスには役立ちます。

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

  • JonasCzが提案した/proc/cpuinfoように確認できます:

    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 :("
    

  • メルトダウン検出のために、Raphael Carvalhoからテストプログラムをコンパイルできます。

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

パッチが適用されたシステムでは、次のように表示されます。

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)

Xenialに4.4.0-108-genericをインストールしないでください!これは、ブート/リブート/シャットダウンを破る/機能を一時停止します

4.4.0-109-genericをインストールします(詳細についてはUSN-3522-3を参照)!


以下のようRobie Basakはすでに書いた、およそページがあるスペクターとメルトダウンのUbuntuでのステータスを脆弱性は

またあります:


3
Ubuntuのアップデートは、Januari 9で予定されています。それらは早く着陸するかもしれませんが、私はそれを期待しません。insights.ubuntu.com/2018/01/04/...
Raniz

4
「dmesg | grep isolation」タイプの回答は、これよりも望ましいIMOです。一部のディストリビューション(少なくともDebianストレッチ、おそらく他のディストリビューション)はPTIを古いカーネルに移植しましたが、/ proc / cpuinfoのcpu_insecureフラグは移植していません。それらのシステムでは、dmesgログを調べることが確認する唯一の方法です。
ジェイソンクレイトン

3
私が考えるdmesg | grep isolation && echo "patched :)" || echo "unpatched :("記載されたコマンドは不必要である危険な:それは実際にマッチしたものをライン表示されていない、とも喜んで「パッチを適用:)」印刷し、「隔離」のランダム他のインスタンスがマッチした場合...
ヤープEldering

2
2番目の提案(cpu_insecure /proc/cpuinfoの削除)に反対することをお勧めします。スクリプトの中にそれを入れて、あなたは問題がそのマイクロアーキテクチャに固定されている将来のCPUを持っている場合は、/proc/cpuinfoもはや言わないだろうcpu_insecureし、あなたのスクリプトは、カーネルがあると信じていますパッチを適用していない、それがされていてもパッチを適用。それは言葉があるかもしれないことにも可能性がありますように私はまた、第三の提案に対して推薦isolationdmesgは、ページ・テーブル・アイソレーションカーネルを参照することなく、いくつかの点で出力。
blubberdiblub

4
さらに調査すると、これら3つの提案はすべて壊れています。のグレーピングはisolationとの両方に一致Kernel/User page tables isolation: enabledKernel/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 on 14.04
eckes

12

「バグ」cat /proc/cpuinfoで報告さcpu_insecureれる場合は、で確認でき、PTIが有効になります。

空白の場合(または単に表示されない場合cpu_insecure)、おそらくまだパッチが適用されていないカーネルを実行している(Ubuntuのカーネルが実行されていない)か、AMDプロセッサを使用している(おそらくこれは有効にされません) 「脆弱ではありません)。

現在、最新の4.15カーネルでは、すべてのCPUが脆弱として扱われています。


4.15は、公衆にまだリリースされていない
Aadhil RFを

kernel.orgから最新のリリース候補をダウンロードして、自分でコンパイルする場合です。@Mohammedaadhil
JonasCzは、

1
リリース候補はリリースではありません。
ルスラン

リンクした記事が更新されました
-nixpower

2
カーネル4.14.11はcpu_insecureすべてのx86 CPUに設定されます。4.14.12のみ古すぎるか脆弱であるには余りにも原始的なものも含めて(インテルのCPUのためにそれを設定しますどちらがKPTIが無効になっている場合でも、それを設定します新しい。。
マーク・

8

システムのメルトダウン/スペクトルの脆弱性をテストするための次の素晴らしいshスクリプトを見つけました。

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

このスクリプトは、システムを既知のMeltdownとシステム上のスペクターパッチでチェックし、これらの脆弱性がOSによって緩和されているかどうかを通知します


2

/proc/config.gzを確認できます。CONFIG_PAGE_TABLE_ISOLATION=yこれは、カーネルがKPTIでコンパイルされたことを意味します。

これは、4.14.11-1を実行しているパッチを適用したArch Linuxシステム上にあります。

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

3
残念ながら、現在実行中のカーネルの/proc/設定は、Ubuntu カーネルではデフォルトで有効になっていません。(はるかにエレガントではない)回避策は、/boot/config-$( uname -r )代わりにgrepを使用することです。
blubberdiblub

5
これは、カーネルがKPTIでコンパイルされているかどうかを示すものであり、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-generic以降である必要があります。


この方法は、トップアンサー
-wjandrea
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.