白書 を読むと、それは運命と憂鬱のように聞こえます。メインウェブページには、「SpectreはMeltdownよりも悪用するのは難しいですが、軽減するのも困難です。ただし、ソフトウェアパッチにより、Spectreに基づく特定の既知のエクスプロイトを防止することができます。」
これは、ソフトウェアパッチを通じてSpectreに基づく未知のエクスプロイトを防止することができないことを意味するように思われますが、それは本当ですか?
Spectre攻撃の核心は、CPUの分岐予測子の誤ったトレーニングを使用して、ターゲットプログラムの実行中に攻撃者が選択したコードのフラグメントに投機的に分岐させ、そのコードの実行による間接的な影響を観察することです。これは、現在のCPUがコンピューターで実行されているすべてのスレッド間で分岐予測状態を共有しているためにのみ可能です。
各分岐の後に投機的実行を防止する命令(例:cpuid
またはmfence
命令)を挿入することにより、Spectreの影響を受けないx86/AMD64コードを作成することは可能ですが、これにはコストがかかりますかなり深刻なパフォーマンスの損失があり、新しいソフトウェアにのみ適用できます。
ブランチ予測状態のフラッシュを許可するCPUは、(一部のパフォーマンスを犠牲にして)各コンテキストスイッチで状態をリセットすることにより、Spectreの影響を受けないようにすることができます。 IntelもAMDもx86/AMD64アーキテクチャを実装していないため、そのような指示は(まだ)ないようですが、数年後には表示されると思います。これは、初期化されていない分岐予測子でも約70%正確であるため、投機的実行を防ぐよりもパフォーマンスへの影響がはるかに少ないでしょう。