米Microsoft Windows and Devices GroupでExecutive Vice Presidentを務めるTerry Myerson氏は9日(現地時間)にブログ記事を公開し、Googleらが3日に発表したCPUの投機実行機能に関連する脆弱性の修正を取りまとめた。

既報のとおり、今回発見されたCPUの投機実行機能の脆弱性は3つ。1つ目は「Bounds Check Bypass」で、いわゆるサイドチャネル攻撃(CPUが何をやろうとしているのか、外部から観測することで解析)によって投機実行しようとしているデータを推測するもの。2つ目はBranch Target Injectionで、間接分岐予測器を使い悪質なコードを投機的に実行するもの。そして3つ目の「Rogue Data Cache Load」は、L1データキャッシュに投機的な操作の実行を常駐させることで、投機的に実行されたデータを照会するものだ。

1つ目および2つ目の脆弱性を突いた攻撃は「Spectre」、3つ目の脆弱性を突いた攻撃は「Meltdown」と呼ばれる。このうち手法1と3に対してはソフトウェアの更新で対策が行なえるが、手法2はCPUのMicrocodeを修正することで対策を行なう。

攻撃手法1に対して、IntelはLFENCE命令を挿入することでの対策を促している。このLFENCE命令は若い命令(新たに来た命令)が実行されてしまうのを防ぎ、古い命令から順番に実行する。こうすることで外部から投機実行を観測しにくくするわけだ。ただし、命令をシリアライズしてしまうと、投機実行できない分性能が低下する。

攻撃手法2に対しては2種類の対策法がある、1つ目は、Intelは間接分岐予測を適度にフラッシュするといった新しいインターフェイスをCPUとソフトウェアに盛り込むことで対策する。Intelが言う「過去5年のCPUに対して今月中に対策を完了させる」とはこの対策のことだ。

新たに盛り込まれるのは、「間接分岐制限付き投機(IBRS)」、「シングルスレッド間接分岐予測器(STIBP)」、初期コードの動作を制御できないようにする「Indirect Branch Predictor Barrier(IBPB)」の3つ、既存製品に対してはMicrocodeの更新で対策する一方で、将来の製品については性能低下を抑えながら投機実行の脆弱性を回避する。

もう1つの対策法は「リターントランポリン」と呼ばれるソフトウェアの技法で、リターン命令を保護する特殊な操作を行なうもので、先に挙げた手法よりも優れた性能を実現するという。現在IntelはOSベンダーなどとサポートしてこの手法を推奨しており、とくにBroadwell以降では性能低下は少ないという。

攻撃手法3(Meltdown)への対策についてはOS側で行ない、ユーザーモードでユーザーコードを実行するさいに特権ページがマップされていないことを保証させるため、“ユーザーページング”と“スーパーバイザーページング”のデュアルページテーブルをサポートすることで解決する。ただ、現時点ではTLBをフラッシュする必要があるため性能低下が生じる。Intelの将来CPUではこの性能低下を抑えるとしている。

さて、実際に低下する性能だが、Myerson氏によれば、1つ目および3つ目の攻撃に対する対策の性能低下は最小限だが、2つ目の対策に対してはMicrocodeおよびOSの更新が伴うためそこそこあるという。

・Windows 10とSkylake世代以降のCPUに関しては1桁台の性能低下。ただしユーザーは感知できないレベル

・Windows 10とHaswell世代以前のCPUでは、一部のベンチマークでは性能低下が見られる。また、ユーザーはその性能低下を体感できる

・Windows 8/7とHaswell世代以前のCPUでは多くのユーザーが性能低下を体感できる

・Windows ServerではいずれのCPU上でも、とくにI/O集中型アプリケーションでは性能への影響が顕著。このため環境に対するセキュリティと性能のトレードオフを慎重に評価する必要がある

としている。

なお、攻撃手法1に関して、AMDプロセッサでも同様の影響を受けるが、OSの修正で済むため性能低下は少ない。攻撃手法2に関してはアーキテクチャが異なるため、影響を受けるリスクはゼロに近い。一方で攻撃手法3に関してはAMDアーキテクチャが異なるため影響を受けないとしている。

しかし、一部AMDシステムで、Windowsの脆弱性修正パッチを当てるとOSが起動できなくなる問題が発見されており、MicrosoftではAMDと協業し、AMDシステム向けのWindows Updateによる更新はもうじき配布するとしている。