ハードウェアセキュリティの最新動向
間接分岐の予測を悪用するSpectreの変種(分岐ターゲットインジェクション)への対策である、retpolineとIBRSの説明の組み合わせとして、正しいものはどれか。
- AretpolineはCPUの回路を作り直して予測器を取り除く対策で、IBRSはコンパイラが間接分岐の命令を別の命令の並びに書き換える対策である
- Bretpolineは間接分岐を予測器に頼らない命令の並びに置き換えるソフトウェアの対策で、IBRSは間接分岐の予測を制限するCPUの機能である
- CretpolineもIBRSも、CPUの投機的実行の機能そのものを止める対策で、どちらを使っても投機的実行による性能の向上はなくなる
答えと解説を見る
正解:B. retpolineは間接分岐を予測器に頼らない命令の並びに置き換えるソフトウェアの対策で、IBRSは間接分岐の予測を制限するCPUの機能である
retpolineは、コンパイラが間接分岐の命令をcallとretを組み合わせた命令の並びに置き換え、悪用されうる間接分岐の予測器ではなく戻り先の予測を使わせて、投機的な実行を無害なループの中で空回りさせます。IBRSは、マイクロコードの更新などで加わったCPUの制御の機能で、例えばカーネルの中の間接分岐の予測が、ユーザのプログラムが学習させた内容に従わないように制限します。古いCPUではIBRSを切り替えるたびに大きな時間がかかったのでretpolineが広く使われ、新しいCPUでは常に有効にしておける改良版(eIBRS)が用意されました。ただし、CPUによっては戻り先の予測も別の予測器に頼る場合があり、2022年に公表されたRetbleedなどで、retpolineだけでは不十分な場合が示されています。
- A. 逆です。retpolineはコンパイラによるソフトウェアの対策で、IBRSはCPUの機能です。
- B. 正しい。ソフトウェアで予測を避ける方法と、CPUの機能で予測を制限する方法です。
- C. どちらも投機的実行そのものはなくさず、悪用される予測を避けたり制限したりします。