新しいNetSpectre攻撃では、被害者が悪意のあるコードをダウンロードまたは実行する必要はありません

セキュリティ / 新しいNetSpectre攻撃では、被害者が悪意のあるコードをダウンロードまたは実行する必要はありません

NetSpectreがマシンポートを攻撃してエントリを獲得

読んだ4分

新しいSpectreクラスのCPU攻撃は、このクラスのCPU攻撃がどのように機能するかについて詳細に説明した「NetSpectre:ネットワーク経由の任意のメモリの読み取り」というタイトルの研究論文を最近リリースしたため、学術研究者から注目を集めています。



新しいSpectreCPU攻撃を少し怖いものにしているのは、 必要ありません 攻撃者は、被害者をだまして自分のマシンに悪意のあるスクリプトをダウンロードして実行させたり、ユーザーのブラウザで悪意のあるJavaScriptを実行するWebサイトにアクセスさせたりします。

NetSpectreは、目標を達成する方法が見つかるまで、マシンのネットワークポートを攻撃するだけです。



「スペクター攻撃は、プログラムの命令の厳密にシリアル化された順序付け処理では発生しない操作を投機的に実行するように被害者を誘導し、秘密チャネルを介して被害者の機密情報を攻撃者に漏らします。」



ただし、NetSpectreには独自の欠陥がないわけではありません。非常に遅い抽出速度で、ネットワーク接続を介して攻撃が実行される場合は1時間あたり約15ビットであり、CPUのキャッシュに保存されているデータを標的にします。



研究論文では、学者は、Intel CPUに固有のCPUのAVX2モジュールを介して処理されたデータを対象としたNetSpectreの特別なバリエーションで、最大60ビット/時間を達成することができました。

いずれの場合も、NetSpectreは現在、攻撃者にとって価値がないと見なされています。つまり、NetSpectreは 理論的 脅威であり、企業がカバーするためにダッキングすべきものではありません まだ 。ただし、テクノロジーが進歩するにつれて、抽出速度は間違いなく増加し、心配する必要のあるCPU攻撃を実行するためのまったく新しいクラスの実行可能で非常に簡単なものになります。

新しいNetSpectre攻撃は、Googleの研究者が今年(2018年)に明らかにしたSpectre V1の脆弱性(CVE-2017-5753)に関連しています。これは、Spectre V1の影響を受ける可能性のあるすべてのCPUも、適切なOSとCPUファームウェアで展開されている場合、NetSpectreであると考えられることを意味します。



現在、NetSpectreには2つの攻撃バリアントがあります。ターゲットシステムからデータを抽出することと、ターゲットシステムでASLR(アドレス空間配置のランダム化)をリモートで破壊することです。

最初の種類の攻撃の一連のイベントは次のようになります。

  1. 分岐予測子を誤って調整します。
  2. マイクロアーキテクチャ要素の状態をリセットします。
  3. マイクロアーキテクチャ要素に少し漏れます。
  4. マイクロアーキテクチャ要素の状態をネットワークに公開します。
  • ステップ1で、攻撃者は被害者の分岐予測子を誤ってトレーニングしてSpectre攻撃を実行します。分岐予測子を誤ってトレーニングするために、攻撃者は有効なインデックスを持つリークガジェットを利用します。有効なインデックスは、分岐予測子が常に分岐を取ることを学習することを保証します。つまり、分岐予測子は条件が真であると推測します。この手順はリークガジェットのみに依存していることに注意してください。攻撃者へのフィードバックはないため、マイクロアーキテクチャの状態をリセットまたは送信する必要はありません。
  • ステップ2では、攻撃者はマイクロアーキテクチャの状態をリセットして、マイクロアーキテクチャ要素を使用してリークされたビットのエンコードを有効にする必要があります。この手順は、使用するマイクロアーキテクチャ要素に大きく依存します。たとえば、キャッシュを利用する場合、攻撃者は被害者から大きなファイルをダウンロードします。 AVX2が使用されている場合、攻撃者は1ミリ秒以上待機するだけです。このステップの後、被害者から少し漏れるすべての要件が満たされます。
  • ステップ3では、攻撃者はSpectreの脆弱性を悪用して、被害者から1ビットをリークします。ステップ1で分岐予測子が誤ってトレーニングされているため、リークガジェットにアウトオブバウンズインデックスを提供すると、インバウンドパスが実行され、マイクロアーキテクチャ要素が変更されます。つまり、ビットはマイクロアーキテクチャ要素にエンコードされます。
  • ステップ4では、攻撃者はエンコードされた情報をネットワーク経由で送信する必要があります。このステップは、元のSpectre攻撃の第2フェーズに対応します。攻撃者は、送信ガジェットによって処理されるネットワークパケットを送信し、パケットを送信してから応答が到着するまでの時間を測定します。

攻撃方法#2:リモートでASLRを破壊する

  1. 分岐予測子を誤って調整します。
  2. 範囲外のインデックスにアクセスして、(既知の)メモリ位置をキャッシュします。
  3. ネットワークを介して関数の実行時間を測定し、範囲外のアクセスが関数の一部をキャッシュしたかどうかを推測します。

スペクター対策

IntelとAMDは、推測の障壁としてlfence命令を使用することを推奨しています。この命令は、投機的実行を停止するために、セキュリティクリティカルな境界チェックの後に挿入する必要があります。ただし、これをすべての境界チェックに追加すると、パフォーマンスのオーバーヘッドが大幅に増加します。

NetSpectreはネットワークベースの攻撃であるため、Spectreを軽減するだけでなく、ネットワーク層での対策によっても防止できます。些細なNetSpectre攻撃は、DDoS保護によって簡単に検出できます。これは、同じ送信元から数千の同一のパケットが送信されるためです。

ただし、攻撃者は1秒あたりのパケット数と1秒あたりのリークビット数の間のトレードオフを選択できます。したがって、ビットがリークされる速度は、DDoS監視が検出できるしきい値よりも簡単に下げることができます。これは、侵入検知システムなど、進行中の攻撃を検出しようとするすべての監視に当てはまります。

理論的には攻撃を防ぐことはできませんが、少しリークする時間が大幅に増えるため、ある時点で攻撃が実行不可能になります。 NetSpectreを軽減する別の方法は、ネットワーク遅延に人為的なノイズを追加することです。測定の数はネットワーク遅延の変動に依存するため、追加のノイズにより、攻撃者はより多くの測定を実行する必要があります。したがって、ネットワーク遅延の変動が十分に大きい場合、必要な測定数が多いため、NetSpectre攻撃は実行不可能になります。