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

Linuxでメルトダウンとスペクターの脆弱性をチェックしてパッチを当てる方法

今週初め、GoogleのProjectZeroの研究者チームが発見しました メルトダウンについて およびスペクター Intel、AMD、ARMの特定のプロセッサを含む、多くの最新のプロセッサに影響を与えた脆弱性。 AMDは、プロセッサがこれらの欠陥の影響を受ける可能性はゼロであると主張していますが、研究者は、Meltdownの脆弱性はIntelプロセッサに限定され、Spectreの脆弱性は一部のIntel、AMD、およびARMプロセッサに影響を与える可能性があることを示しています。

有線によると 、 "Intel、AMD、ARMのメーカーは、プロセッサを出荷するハードウェア会社や、Apple、Google、Microsoft、Linux Foundationなどのソフトウェア会社と緊密に協力して協力し、これらのセキュリティ上の欠陥のパッチをリリースしています。保証はできません。パッチはこれらの問題を完全に解決します。しかし、少なくとも、最初に思ったよりも優れています。」

今何ができますか?

グレッグクローハートマン は、メルトダウンとSpectreの修正が含まれる4.14.12、4.9.75、および4.4.110の安定したカーネルのリリースをすでに発表しています。したがって、Intel、AMD、またはARMプロセッサのいずれかを使用している場合は、LinuxシステムがMeltdown And Spectreの脆弱性の影響を受けているかどうかを確認し、最新のLinuxカーネルを更新してすぐにパッチを適用することを強くお勧めします。 Linuxディストリビューションに最新のLinuxカーネルアップデートがまだない場合は、今すぐLinuxディストリビューションを変更することを強くお勧めします。

メルトダウンとスペクターの脆弱性を確認する

Arch Linuxおよびその派生物では、次の2つのコマンドを使用して、システムがメルトダウン/スペクトルの脆弱性の影響を受けているかどうかを確認できます。

 $ zgrep CONFIG_PAGE_TABLE_ISOLATION /proc/config.gz 
 $ dmesg | grep iso  

上記のコマンドがNOTHINGを返す場合、システムにはまだパッチが適用されていません。したがって、次のコマンドを使用してArchベースのシステムを更新する必要があります。

 $ sudo pacman -Syu 

Archシステムを完全に更新した後、再起動して上記のコマンドを再度実行します。システムにパッチが適用されている場合、最初のコマンドについて次の出力が表示されます。

 CONFIG_PAGE_TABLE_ISOLATION =y 

そして、2番目のコマンドでこの出力が得られます。

 [0.000000]カーネル/ユーザーページテーブルの分離:有効

Archシステムのカーネルはすでに更新されています。上記の出力でわかるように、私のLinuxカーネルは4.14.12-1-ARCHであり、すでにパッチが適用されています。 Archシステムをまだ更新していない場合、出力は得られません。

上記のコマンドはUbuntuでは機能しない可能性があります。ありがたいことに、 Askubuntuの良いサマリア人 フォーラムは、次のコマンドのいずれかを使用して、Ubuntuシステムにパッチが適用されているかどうかを確認するための回避策を投稿しています。

 $ grep CONFIG_PAGE_TABLE_ISOLATION =y / boot / config-`uname -r` &&echo "patched :)" || echo "unpatched :(" 
 $ grep cpu_insecure / proc / cpuinfo &&echo "patched :)" || echo "unpatched :(" 
 $ dmesg | grep "カーネル/ユーザーページテーブルの分離:有効" &&echo "patched :)" || echo "unpatched :(" 

出力がパッチが適用されていない場合 、システムにはまだパッチが適用されていません。カーネルをすぐに更新して、パッチを適用します。

私はまだUbuntuシステムで4.4.0-104-genericを使用しているので、すべてのコマンドの結果に「パッチが適用されていません」と表示されます。

次のコマンドを使用して、カーネルをすぐに更新してください:

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

または、次のリンクで説明されているように。

  • Linuxカーネルユーティリティ–Debianおよび派生物用の最新のLinuxカーネルをコンパイルおよび更新するためのスクリプト

カーネルを更新した後、これら3つのコマンドを再度実行すると、Ubuntuシステムにパッチが適用されていることがわかります。

他のLinuxディストリビューションには、「Spectre&MeltdownChecker」という名前のスクリプトがあります。 Meltdown/Spectreの脆弱性を確認します。このスクリプトは、Linuxインストールが3つの「投機的実行」CVEに対して脆弱であるかどうかを確認するのに役立ちます。

このスクリプトのクローンを作成します:

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

これにより、現在の作業ディレクトリの「spectre-meltdown-checker」という名前のディレクトリにすべてのコンテンツが複製されます。

そのディレクトリに移動します:

 $ cd spectre-meltdown-checker / 

スクリプトを実行可能にします:

 $ chmod + x spectre-meltdown-checker.sh 

最後にそれを実行して脆弱性を見つけます:

 $ sudo ./spectre-meltdown-checker.sh 

パッチを適用したUbuntuシステムからの出力例は次のとおりです。

オプションがない場合は、現在カーネルを実行していることを検査します。実行していないカーネルを検査する場合は、コマンドラインでカーネルイメージを指定することもできます。

更新:

spectre-meltdown-checkerスクリプトは、一部のLinuxディストリビューションの公式リポジトリで利用できます。

Debian、Ubuntuの場合:

 $ sudo apt install spectre-meltdown-checker 

CentOSでは、RHEL:

 $ sudo yum install epel-release 
 $ sudo yum install spectre-meltdown-checker 

Fedoraの場合:

 $ sudo dnf install $ sudo apt install spectre-meltdown-checker 

spectre-meltdown-checkerをインストールした後、rootユーザーとして、またはsudo権限で実行して、SpectreとMeltdownの脆弱性を確認します。

 $ sudo spectre-meltdown-checker 

出力例:

 Spectre and Meltdown Mitigation Detection Toolv0.37現在のsystemKernelの脆弱性のチェックはLinux4.15.0-91-generic#92-Ubuntu SMP Fri Feb 28 11:09:48 UTC 2020 x86_64CPU is Intel(R)Core(TM )i3-2350M CPU @ 2.30GHzハードウェアチェック*緩和技術のためのハードウェアサポート(CPUマイクロコード)*間接分岐制限スペキュレーション(IBRS)* SPEC_CTRL MSRが利用可能:NO * CPUはIBRS機能を示します:NO *間接分岐予測バリア(IBPB)* PRED_CMD MSRが使用可能:NO * CPUはIBPB機能を示します:NO *シングルスレッド間接分岐予測(STIBP)* SPEC_CTRL MSRが使用可能:NO * CPUはSTIBP機能を示します:NO *拡張IBRS(IBRS_ALL)* CPUはARCH_CAPABILITIESを示しますMSRの可用性:NO * ARCH_CAPABILITIES MSRはIBRS_ALL機能をアドバタイズします:NO * CPUはメルトダウンに対して脆弱ではないことを明示的に示します(RDCL_NO):NO * CPUマイクロコードは安定性の問題を引き起こすことが知られています:NO(モデル42ステッピング7 ucode cpuid 0x206a7)*3つの投機的実行攻撃バリアントに対するCPUの脆弱性*バリアント1に対する脆弱性:はい  *バリアント2に対して脆弱:はい  *バリアント3に対して脆弱:はい CVE-2017-5753[境界チェックバイパス]別名'SpectreVariant 1'* / sysインターフェースに従って軽減:NO(脆弱性:__ユーザーポインターサニタイズおよびユーザーコピーバリアのみ、swapgsバリアなし)*カーネルにはarray_index_mask_nospec(x86):不明(チェックできませんでした(「readelf」ツールがありません。インストールしてください。通常は「binutils」パッケージにあります))*カーネルにはRed Hat / Ubuntuパッチがあります:不明(「strings」ツールがありません。インストールしてください。通常はbinutilsパッケージ内)*カーネルにmask_nospec64(arm)があります:不明(チェックできませんでした(「readelf」ツールがありません。インストールしてください。通常は「binutils」パッケージにあります))*ジャンプイン後のLFENCE命令の数をチェックしていますカーネル...不明(チェックできませんでした(「readelf」ツールがありません。インストールしてください。通常は「binutils」パッケージに含まれています))>ステータス:脆弱性 (脆弱性:__ユーザーポインターサニタイズおよびユーザーコピーバリアのみ。スワップバリアなし)CVE-2017-5715[分岐ターゲットインジェクション]別名「SpectreVariant2」*/ sysインターフェースに従って軽減:NO(脆弱性、STIBP:無効)*軽減1 *カーネルはIBRSサポートでコンパイルされます:YES * IBRSが有効でアクティブ:UNKNOWN *カーネルはIBPBサポートでコンパイルされます:UNKNOWN(オフラインモードでは、カーネルイメージが認識できるようにする必要があります)* IBPBが有効でアクティブ:NO *緩和策2*カーネルには分岐予測子の強化(アーム)があります:いいえ*カーネルはretpolineオプションでコンパイルされています:はい>ステータス:脆弱性 (脆弱性を軽減するには、IBRS+IBPBまたはretpoline+IBPBが必要です)>修正方法:この脆弱性を軽減するには、IBRS + IBPBのいずれかが必要です。どちらも、カーネルサポートに加えてCPUマイクロコードからのハードウェアサポートが必要か、カーネルがコンパイルされています。 retpolineとIBPB、retpolineにはretpoline対応コンパイラが必要(gccのバージョンがretpoline対応かどうかを確認するには、このスクリプトを-vで再実行)、IBPBにはCPUマイクロコードからのハードウェアサポートが必要です。パフォーマンスへの影響が少ないため、レトポリン+IBPBアプローチが一般的に推奨されます。システムでこれら2つの可能な緩和策のために欠落しているビットを有効にする方法の詳細は、次のとおりです。 2つのアプローチのいずれかを実行する必要があります。>修正方法:IBPBを使用できるようにするには、CPUのマイクロコードをアップグレードする必要があります。これは通常、カーネルによって起動時に実行されます(アップグレードは再起動後も永続的ではないため、起動ごとに実行されます)。ディストリビューションを使用している場合は、最新の状態になっていることを確認してください。マイクロコードの更新は通常、ディストリビューションカーネルと一緒に出荷されます。 CPUモデルのマイクロコード更新の可用性は、CPUベンダーによって異なります。通常、CPUID([ハードウェアチェック]セクションに示されている)を検索することで、CPUでマイクロコードの更新が利用可能かどうかをオンラインで確認できます。更新されたCPUマイクロコードには、上記のハードウェアチェックセクションに示されているIBRS/IBPB機能があります。ハイパーバイザー(KVM、Xen、VirtualBox、VMwareなど)で実行している場合、新しいホストCPUフラグをゲストにエクスポートできるようにするには、ハイパーバイザーが最新である必要があります。ホストでこのスクリプトを実行して、ホストCPUがIBRS/IBPBであるかどうかを確認できます。存在し、ゲストに表示されない場合は、ハイパーバイザーをアップグレードします。>修正方法:カーネルはIBPBをサポートしていないため、カーネルをアップグレードする必要があります(ディストリビューションを使用している場合)。または、より新しいカーネルを再コンパイルします。>修正方法:IBRSを使用できるようにするには、CPUのマイクロコードをアップグレードする必要があります。これは通常、カーネルによって起動時に実行されます(アップグレードは再起動後も永続的ではないため、起動ごとに実行されます)。ディストリビューションを使用している場合は、最新の状態になっていることを確認してください。マイクロコードの更新は通常、ディストリビューションカーネルと一緒に出荷されます。 CPUモデルのマイクロコード更新の可用性は、CPUベンダーによって異なります。通常、CPUID([ハードウェアチェック]セクションに示されている)を検索することで、CPUでマイクロコードの更新が利用可能かどうかをオンラインで確認できます。更新されたCPUマイクロコードには、上記のハードウェアチェックセクションに示されているIBRS/IBPB機能があります。ハイパーバイザー(KVM、Xen、VirtualBox、VMwareなど)で実行している場合、新しいホストCPUフラグをゲストにエクスポートできるようにするには、ハイパーバイザーが最新である必要があります。ホストでこのスクリプトを実行して、ホストCPUがIBRS/IBPBであるかどうかを確認できます。存在し、ゲストに表示されない場合は、ハイパーバイザーをアップグレードします。CVE-2017-5754[不正なデータキャッシュの読み込み]別名「メルトダウン」別名「バリアント3」* / sysインターフェースに従って軽減:NO(脆弱性)*カーネルはページテーブル分離(PTI)をサポートします:はい* PTIが有効でアクティブ:いいえ* PTIのパフォーマンスへの影響の低減:いいえ(PCID / INVPCIDはサポートされていません、PTIのパフォーマンスへの影響は重要です)* XenPVDomUとして実行:いいえ>ステータス:脆弱性 (脆弱性を軽減するにはPTIが必要です)>修正方法:ディストリビューションカーネルを使用している場合は、ディストリビューションをアップグレードして最新のカーネルを利用できるようにします。それ以外の場合は、CONFIG_PAGE_TABLE_ISOLATIONオプション(一部のカーネルではCONFIG_KAISERという名前)またはCONFIG_UNMAP_KERNEL_AT_EL0オプション(ARM64の場合)を使用してカーネルを再コンパイルします。 

上記の出力でわかるように、SpectreとMeltdownの問題にはまだパッチが適用されていません。

パッチメルトダウンとスペクターの脆弱性

すでに述べたように、カーネルとシステム、およびすべてのソフトウェアを最新の状態に保つことを強くお勧めします。これには、他の多くのセキュリティ修正も含まれているためです。

Arch Linuxを更新/アップグレードするには、以下を実行します:

 $ sudo pacman -Syu 

Debian、Ubuntuを更新するには:

 $ sudo apt-get update &&sudo apt-get dist-upgrade 

Fedoraを更新するには:

 $ sudo dnf update 

RHEL / CentOSを更新するには:

 $ sudo yum update 

Linuxシステムを更新したら、再起動することを忘れないでください。

繰り返しになりますが、これらの問題はまだ完全には解決されていないことを忘れないでください。すべてが修正されるまで、今後数週間にわたってLinuxシステムを更新し続ける必要があります。

推奨される読み物:

  • LinuxシステムをIntelCPUでより高速に実行する方法

Linux
  1. netstat、lsof、およびnmapを使用してLinuxで開いているポートを確認する方法

  2. OSとLinuxのバージョンを確認する方法

  3. Linuxコマンドを保存してオンデマンドで使用する方法

  1. Linux – Linuxディストリビューションが安全で、悪意のあるコードがないことを確認する方法は??

  2. Ubuntu 20.04にClamAVをインストールし、脆弱性をスキャンする方法

  3. 新しい Linux インスタンスのインストール後の手順とそれらを自動化する方法

  1. Linuxでのファイルパスとその使用方法を理解する

  2. Linux コマンドを使用して OS とバージョンを確認する方法

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