GNU/Linux >> Linux の 問題 >  >> Linux

LinuxでのSpectreおよびMeltdownCPUの脆弱性テストとマイクロコードの更新



SpectreおよびMeltdownCPUの脆弱性の概要

これらの攻撃をブロックする1つの方法は、特定の時間にメモリキャッシュを空にして、攻撃者がアクセスする前に盗み出された情報を排除することです。各システムコールの後にキャッシュをダウンロードすると、さまざまな投機的攻​​撃がブロックされる可能性がありますが、システムの速度が低下し、ユーザーがメカニズムを非アクティブ化する方法を探すようになります。情報のセキュリティは非常に重要ですが、メモリキャッシュを空にするとコストが高すぎて、貴重な生産時間が短縮されます。

投機的実行を使用する攻撃には、非投機的実行がたどらないルートを推測するようにプロセッサを説得することが含まれます。たとえば、カーネル関数には、コードが配列の終わりを超えてアクセスするのを防ぐ制限チェックが含まれている場合があります。これにより、エラーが返されます。 Spectreの脆弱性を使用する攻撃は、投機的な方法でそのチェックをスキップし、コードがアクセスしないように特別に作成されたデータにアクセスします。エラーリターンは、何か不適切なことが起こっている可能性があるという手がかりですが、それまでに損傷が発生します。

LinuxサーバーがSpectreCPUのバグに対して脆弱かどうかを確認する方法

スペクター&メルトダウンチェッカー は、次のIntel / AMD/ARMおよびその他のCPUにバグがないかチェックするシェルスクリプトです。

  • CVE-2017-5753:境界チェックバイパス(Spectre Variant 1)。結果のコードの適切な位置にLFENCEオペコードを導入する変更されたコンパイラを使用して、ソフトウェアとカーネルを再コンパイルする必要があります。軽減によるパフォーマンスへの影響はごくわずかです。
  • CVE-2017-5715:分岐ターゲットインジェクション(Spectre Variant 2)。 CPUに応じた軽減のパフォーマンスへの影響。
  • CVE-2017-5754:不正なデータキャッシュの読み込み(メルトダウン)。 PTI/KPTIパッチを適用した更新されたカーネルバージョンをインストールする必要があります。カーネルを更新するだけで十分です。緩和策によるパフォーマンスへの影響は、低から中程度です。

spectre-meltdown-checker.sh Linuxカーネル(インストール)が3つの「投機的実行」CVEに対して脆弱かどうかを確認するための単純なシェルスクリプトです。

インストール

スクリプトはrootとして実行する必要があります ユーザー。以下のソースコードをご覧いただけます。 wgetコマンドまたはcurlコマンドを使用して、Linuxボックスのソースコードを取得します。

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

または

$ git clone https://github.com/speed47/spectre-meltdown-checker.git

出力例:

'spectre-meltdown-checker'にクローンを作成しています...

リモート:オブジェクトのカウント:155、完了。

リモート:オブジェクトの圧縮:100%(20/20)、完了。

リモート:合計155(デルタ18)、再利用21(デルタ10)、パック再利用125

オブジェクトの受信:100%(155/155)、49.78 KiB | 145.00 KiB / s、完了。

デルタの解決:100%(88/88)、完了。

LinuxでSpectreとMeltdownの脆弱性をチェックする方法

sudoコマンドまたはsuコマンドを使用してrootユーザーとしてスクリプトを実行します。

$ sudo sh spectre-meltdown-checker.sh

Ubuntu Linuxデスクトップからの出力例:

Meltdown / Spectre v1にカーネルがパッチされたCentOS7.xサーバーからの別の出力:

$ sudo sh spectre-meltdown-checker.sh

LinuxにIntelマイクロコードファームウェアをインストール/更新する方法

マイクロコードは、IntelまたはAMDが提供するCPUファームウェアに他なりません。 Linuxカーネルは、起動時にBIOSを更新せずにCPUのファームウェアを更新できます。プロセッサのマイクロコードはRAMに保存され、カーネルは起動のたびにマイクロコードを更新します。 Intel / AMDからのこれらのマイクロコードの更新は、バグを修正するか、CPUのバグを回避するためにエラッタを適用する必要がありました。このページでは、Linuxでインテルが提供するパッケージマネージャーまたはプロセッサーのマイクロコード更新を使用して、AMDまたはインテルのマイクロコード更新をインストールする方法を示します。

マイクロコードの現在のステータスを確認する方法

次のコマンドをrootとして実行します ユーザー:

# dmesg | grep microcode

サンプル出力:


パッケージマネージャーを使用してLinuxにインテルマイクロコードファームウェアをインストールする方法

x86/amd64用のCPUマイクロコードアップデートを変換および展開するためのツールはLinuxに付属しています。 LinuxにAMDまたはIntelマイクロコードファームウェアをインストールする手順は次のとおりです。

  1. ターミナルアプリを開きます
  1. Debian / Ubuntu Linuxユーザータイプ:sudo apt install intel-microcode
  1. CentOS / RHEL Linuxユーザータイプ:sudo yum install microcode_ctl

人気のあるLinuxディストリビューションのパッケージ名は次のとおりです。

  • microcode_ctlおよびlinux-firmware– CentOS/RHELマイクロコード更新パッケージ
  • Intel-microcode – Debian/UbuntuおよびIntelCPUS用のマイクロコード更新パッケージのクローン
  • amd64-microcode – Debian/UbuntuおよびAMDCPU用のマイクロコードファームウェアのクローン
  • linux-firmware – AMD CPU用のArchLinuxマイクロコードファームウェア(デフォルトでインストールされており、ユーザー側でのアクションは不要です)
  • intel-ucode –IntelCPU用のArchLinuxマイクロコードファームウェア
  • microcode_ctl、linux-firmware、ucode-intel – Suse /OpenSUSELinuxマイクロコードアップデートパッケージ

警告:場合によっては、マイクロコードの更新により、サーバーがハングしたり、起動時に自動的にリセットされたりするなど、起動の問題が発生する可能性があります。自己責任で行ってください。

次のaptコマンド/apt-getコマンドを入力します IntelCPU用のDebian/Ubuntu Linuxの場合:

$ sudo apt-get install intel-microcode

サンプル出力:



マイクロコードの更新を有効にするには、ボックスを再起動する必要があります。

$ sudo reboot

再起動後に確認します:

# dmesg | grep 'microcode'

RHEL / CentOSを使用している場合は、yumコマンドを使用して次の2つのパッケージをインストールまたは更新してみてください。

$ sudo yum install linux-firmware microcode_ctl
$ sudo reboot
$ sudo dmesg | grep 'microcode'

インテルサイトからダウンロードしたマイクロコードを更新/インストールする方法

次の方法は、ベンダーが推奨する場合にのみ使用してください。それ以外の場合は、上記のLinuxパッケージを使用してください。ほとんどのLinuxディストリビューションメンテナは、パッケージマネージャを介してマイクロコードを更新します。パッケージマネージャーの方法は、多くのユーザーによってテストされているように安全です。

Linux用のインテルプロセッサーマイクロコードブロブ(20180108リリース)をインストールするにはどうすればよいですか?

AMDまたはIntelのサイトにアクセスして、最新のマイクロコードファームウェアを入手してください。まず、tarコマンドを使用して抽出します:

$ mkdir firmware
$ cd firmware
$ tar xvf ~/path/to/file/microcode-20180108.tgz
$ ls –l

サンプル出力:

/ sys / devices / system / cpu / microcode /reloadが終了することを確認してください:

$ ls -l /sys/devices/system/cpu/microcode/reload

cpコマンドを使用して、すべてのファイルをintel-ucodeから/ lib /firmware /intel-ucode/にコピーする必要があります。

$ sudo cp -v intel-ucode/* /lib/firmware/intel-ucode/

intel-ucodeディレクトリを/lib/firmware/にコピーしました。マイクロコードファイルをリロードするには、リロードインターフェイスを1に書き込みます。

# echo 1 > /sys/devices/system/cpu/microcode/reload

次回カーネル経由でロードされるように、既存のinitramfsを更新します。

$ sudo update-initramfs -u
$ sudo reboot

マイクロコードが起動時に更新されたか、echoコマンドによって再ロードされたことを確認します:

# dmesg | grep microcode

以上です。 IntelCPUのファームウェアを更新しました。


Linux
  1. Linux –カスタムLinuxカーネルの構成、コンパイル、およびインストール?

  2. Linuxカーネルは2.35.25に更新されませんか?

  3. Linux システムの Spectre および Meltdown の脆弱性を軽減する方法は?

  1. LinuxにAnsibleをインストールしてテストする方法

  2. Linux –ユーザースペースとカーネルスペースの違いは?

  3. Linux 割り込みと CPU SMP アフィニティの紹介

  1. Linuxカーネルが割り込みを処理する方法

  2. Glanceを使用したLinuxおよびWindowsホストの監視

  3. bash および Linux カーネルでの Shebang 行の制限