3つのバリアント
Project Zero が報告したサイドチャネル攻撃による特権メモリーの漏洩に関する脆弱性では、以下の3つの変種が指摘されている。
-
Variant 1: bounds check bypass (CVE-2017-5753)
-
Variant 2: branch target injection (CVE-2017-5715)
-
Variant 3: rogue data cache load (CVE-2017-5754)
Variant 1 については、
Spectre 脆弱性について
https://qiita.com/noumia/items/303e890fb50730bd5115
で解説している。
Variant 3 は、いわゆる Meltdown 脆弱性であり
Meltdown 脆弱性と緩和策について
https://qiita.com/noumia/items/a4a53e2325dfea820658
で解説している。
投機的実行における分岐先のインジェクション
Variant 2 では、分岐命令の投機的実行において、悪意ある攻撃者による分岐先予測の制御の可能性が指摘されている。
分岐命令の投機的実行では、フラグによる分岐の可否の予測に加えて、分岐先の予測が行われている。
これは、間接分岐命令においては、分岐先アドレスの確定に時間がかかる場合があり、また、命令のフェッチがパイプライン上で最初に行われる処理であるので、分岐先アドレスを可能な限り速やかに入手する必要があるためである。
分岐先予測を行うプロセッサーでは、BTB (Branch Target Buffer) が実装されており、命令実行の履歴に基づいて分岐先アドレスの予測を行っている。
さて、ターゲットプロセス上に、攻撃者の意図する副作用を起こすコード片 (元 paper では、gadget と呼ばれている) がマッピングされているとする。
現在の実用システムのプログラムでは、数 MB に及ぶ共用ライブラリーのコードがリンクされており、このようなコード片を見出すことは、必ずしも困難でないとされている。
BTB は、プロセッサー上の資源なので、プロセス間で共有されており、BTB 予想が命令実行の履歴に依存すると仮定するならば、攻撃者の制御するプロセスで誘導したいアドレスへの分岐を繰り返す等の手法で、予測アドレスがコントロール可能となる。
攻撃者は、ターゲットプロセス上の特定の間接分岐命令を目標として、意図した命令群の投機的実行の強制を試みることができ、サイドチャネルによる情報漏洩につながるものと指摘されている。