web-dev-qa-db-ja.com

分岐予測子フラッシュ命令は完全なSpectre修正ですか?

Spectreは主に分岐予測子の状態を利用することで機能することを理解しました。バウンドチェックバイパスと分岐ターゲットの注入は、同じコインの2つの面であり、投機的実行と分岐予測子の相互作用です。

さて、これを聞いた直後に、分岐予測子の状態をクリアするための指示が必要だと思いました。このような命令は、コンテキストをユーザー空間からカーネル空間に、またはその逆に、または2つのユーザー空間プロセス間で切り替えるときに使用できます。

どうやら私は一人ではありません。 Markは質問に対して優れた答えを持っています Spectreはどれほど悪いのですか? とMarkは同じことを提案します。これは Real World Techディスカッションフォーラム でも提案されています。

ただし、これはSpectreに対する完全な修正ですか?信頼できるコードを実行する同じユーザー空間プロセスで信頼できないコードを実行する必要があるJVMなどのVMはどうですか?この説明は、このようなVMのセキュリティ保護に役立ちますか?

6
juhist

予測子フラッシュ命令は必要ですが、Spectreからの保護には不十分です。 A Spectre攻撃に対する完全な保護には2つのことが必要です

  1. コンテキストスイッチで分岐予測子の状態をフラッシュします。これにより、各プロセスに独自のブランチ予測状態を与えることにより、1つのプロセスが別のプロセスを攻撃するのを防ぎます。ただし、プロセスのサンドボックス化されたコンポーネント(JITでコンパイルされたJavascriptなど)が同じプロセスの他のコンポーネントを攻撃するのを防ぐことはできません。
  2. 分岐予測子の状態では、分岐命令の完全なアドレスを考慮する必要があります(現在、スペースを節約するために、下位ビットのみが使用されています)。プロセスの異なる部分は異なるアドレスを持つ必要があるため、これはプロセスがそれ自体を攻撃することを防ぎます。ただし、異なるプロセスが同じアドレスを使用する可能性があるため、1つのプロセスが別のプロセスを攻撃するのを防ぐことはできません。
5
Mark