メルトダウンおよびスペクターの脆弱性からサーバーを保護する方法

メルトダウンとスペクターとは何ですか?

2018年1月4日に、最新のCPUの設計における複数の脆弱性が公開されました。 特定のプロセッサパフォーマンスの最適化を活用して、* Meltdown および Spectre *と名付けられたこれらの脆弱性により、攻撃者はアプリケーションを正しく操作すると、システムおよびアプリケーションメモリの内容を明らかにすることができます。 これらの攻撃は、投機的実行、分岐予測、アウトオブオーダー実行、キャッシングなどの機能の相互作用により、プロセッサ内の通常の特権チェック動作が破壊されるため機能します。

メルトダウンはhttps://nvd.nist.gov/vuln/detail/CVE-2017-5754[CVE-2017-5754]で開示されました。 幽霊はhttps://nvd.nist.gov/vuln/detail/CVE-2017-5753[CVE-2017-5753]およびhttps://nvd.nist.gov/vuln/detail/CVE-2017-5715で開示されました[CVE-2017-5715]。

詳細については、以下のリンク:#how-does-meltdown-work [メルトダウンの仕組み]セクションとリンク:#how-does-spectre-work [スペクターの仕組み]セクションをご覧ください。

メルトダウンとスペクターの影響を受けますか?

メルトダウンとスペクターは、最新のプロセッサーの大半に影響を与えます。 これらの脆弱性で使用されるプロセッサ最適化は、ほとんどのCPUのコア設計機能です。つまり、ほとんどのシステムは、特にパッチが適用されるまで脆弱です。 これには、クラウド環境で動作するデスクトップコンピューター、サーバー、コンピューティングインスタンスが含まれます。

メルトダウンから保護するためのパッチは、オペレーティングシステムベンダーからリリースされています。 Spectreの更新もリリースされていますが、これは脆弱性のクラス全体を表しているため、より広範な継続的な修復が必要になる可能性があります。

クラウドおよび仮想化環境では、プロバイダーはゲストを保護するために基盤となるインフラストラクチャを更新する必要があります。 ユーザーは、ゲストオペレーティングシステム内の影響を緩和するためにサーバーを更新する必要があります。

どうすれば自分を守ることができますか?

このクラスの脆弱性に対する完全な保護には、CPU設計の変更が必要になる可能性があります。 +暫定的に、ソフトウェアの更新は、これらの脆弱性につながる最適化された動作の一部を無効にするか回避することにより、エクスプロイトに対する緩和を提供できます。

残念ながら、これらのパッチはプロセッサ内の最適化ルーチンに影響するため、軽減パッチはサーバーのパフォーマンスを低下させる可能性があります。 速度低下の程度は、実行される作業のタイプに大きく依存し、I / O集約型プロセスが最大の影響を受けます。

現在の軽減パッチのステータス

執筆時点(2018年1月9日)では、Linuxディストリビューションはパッチの配布を開始していますが、まだ完全にパッチが適用されているディストリビューションはありません。

部分的な緩和(SpectのMeltdown * AND *バリアント1にパッチを適用)でカーネルアップデートをリリースしたディストリビューションには、次のものがあります。

  • CentOS 7:カーネル3.10.0-693.11.6

  • CentOS 6:カーネル2.6.32-696.18.7

部分的な緩和(Meltdown用にパッチされた)でカーネルアップデートをリリースしたディストリビューションには、次のものがあります。

  • Fedora 27:カーネル4.14.11-300

  • Fedora 26:カーネル4.14.11-200

  • Ubuntu 17.10:カーネル4.13.0-25-generic

  • Ubuntu 16.04:カーネル4.4.0-109-generic

  • Ubuntu 14.04:カーネル3.13.0-139-generic

  • Debian 9:カーネル4.9.0-5-amd64

  • Debian 8:カーネル3.16.0-5-amd64

  • Debian 7:カーネル3.2.0-5-amd64

  • Fedora 27 Atomic:カーネル4.14.11-300.fc27.x86_64

  • CoreOS:カーネル4.14.11-coreos

カーネルが少なくとも上記に対応するバージョンに更新されている場合、いくつかの更新が適用されています。

*緩和機能を備えたカーネルをまだリリースしていない*オペレーティングシステムには、次のものがあります。

  • FreeBSD 11.x

  • FreeBSD 10.x

2018年1月13日にサポートが終了するUbuntu 17.04 パッチは提供されません。 ユーザーは、更新または移行することを強くお勧めします。

この脆弱性の深刻度のため、完全なパッチセットを待つのではなく、利用可能になったアップデートを適用することをお勧めします。 これにより、今後数日および数週間にカーネルをアップグレードし、複数回再起動する必要があります。

更新を適用するにはどうすればよいですか?

サーバーを更新するには、ディストリビューションでパッチが利用可能になったらシステムソフトウェアを更新する必要があります。 通常のパッケージマネージャーを実行して最新のカーネルバージョンをダウンロードし、サーバーを再起動してパッチを適用したコードに切り替えることで更新できます。

  • Ubuntu および Debian *サーバーの場合、ローカルパッケージインデックスを更新してからシステムソフトウェアをアップグレードすることにより、システムソフトウェアを更新できます。

sudo apt-get update
sudo apt-get dist-upgrade
  • CentOS *サーバーの場合、次のように入力して、更新されたソフトウェアをダウンロードしてインストールできます。

sudo yum update
  • Fedora *サーバーの場合は、代わりに `+ dnf +`ツールを使用します。

sudo dnf update

オペレーティングシステムに関係なく、更新が適用されたら、サーバーを再起動して新しいカーネルに切り替えます。

sudo reboot

サーバーがオンラインに戻ったら、ログインして上記のリストに対してアクティブなカーネルをチェックし、カーネルがアップグレードされたことを確認します。 新しい更新プログラムを頻繁にチェックして、利用可能になったときにさらにパッチを受け取るようにします。

追加のコンテキスト

MeltdownおよびSpectreファミリーの脆弱性は、最新のプロセッサー内のパフォーマンス強化機能を悪用します。 投機的実行、特権チェック、アウトオブオーダー実行、CPUキャッシングなどのプロセッサ機能の組み合わせにより、範囲外のメモリロケーションへの読み取りアクセスが可能になります。 その結果、特権のないプログラムは、メモリから機密データを明らかにしたり、カーネルや他のアプリケーションから特権メモリにアクセスしたりするように強制できます。

メルトダウンの仕組み

Meltdownの脆弱性は、投機的実行と呼ばれるCPU最適化の欠陥を利用して、プロセッサに境界外のメモリ位置を読み取らせることにより機能します。 一般的な考え方は次のように機能します。

  • 不正なメモリの場所が要求されました。

  • 最初のリクエストに特定の値が含まれていた場合、有効なメモリ位置を条件付きで読み取るための2番目のリクエストが行われます。

  • 投機的実行を使用して、プロセッサは両方の要求のバックグラウンド作業を完了してから、最初の要求が無効であることを確認します。 要求に範囲外のメモリが含まれることをプロセッサが認識すると、両方の要求を正しく拒否します。 特権チェックコードでメモリアクセスが無効であると識別された後、プロセッサから結果は返されませんが、アクセスされた場所は両方ともプロセッサのキャッシュに残ります。

  • これで、有効なメモリロケーションに対して新しいリクエストが行われます。 すぐに戻る場合、その場所はすでにCPUキャッシュにあり、以前に条件付きリクエストが実行されたことを示しています。 これらの条件の反復使用を使用して、境界外のメモリ位置の値を理解できます。

メルトダウンは、パッチを当てることができる特定の脆弱性を表します。

Spectreの仕組み

また、Spectreは、制限された値を読み取るためにプロセッサーを欺いて投機的実行を悪用することによって機能します。 開示通知には、複雑さと影響のレベルが異なる* 2つのバリアント*が記載されています。

Spectreの* variant 1 *の場合、境界チェックが実施される前に、プロセッサはだまされて読み取りを投機的に実行します。 最初に、攻撃者はプロセッサが有効な境界を超えてメモリロケーションに投機的に到達することを推奨します。 次に、メルトダウンのように、追加の命令が範囲外の値に基づいて条件付きで有効なアドレスをキャッシュにロードします。 正当な住所を後で取得するのにかかる時間を計ると、それがキャッシュにロードされたかどうかがわかります。 これにより、境界外のメモリ位置の値が明らかになります。

  • Variant 2 * of Spectreは、悪用と軽減の両方が最も複雑です。 プロセッサは、まだ評価できない条件ステートメントに遭遇した場合でも、多くの場合、投機的に命令を実行します。 これは、分岐予測と呼ばれるメカニズムを使用して、条件の最も可能性の高い結果を推測することでこれを行います。

分岐予測では、コードパスを介した以前の実行の履歴を使用して、投機的に実行するパスを選択します。 攻撃者はこれを使用して、プロセッサをプライミングし、誤った投機的決定を下すことができます。 ブランチ選択履歴には決定への絶対参照が保存されないため、プロセッサは、別の場所でトレーニングされていても、コードのある部分でブランチを選択するようにだまされる可能性があります。 これを利用して、許容範囲外のメモリ値を明らかにすることができます。

結論

SpectreとMeltdownは重大なセキュリティ上の脆弱性を表しています。潜在的な影響の可能性を最大限に引き出しています。

自分自身を守るために、ベンダーがパッチをリリースしている間、オペレーティングシステムソフトウェアの更新に注意し、メルトダウンとスペクターの脆弱性に関連する通信を引き続き監視してください。