米Microsoftは1日(現地時間)、CPU投機実行の脆弱性の1つであるSpectre V2について、Broadwell以前のプロセッサでも性能ロスを最小限に抑えながら脆弱性を緩和する対策「retpoline」を、Windows 10バージョン1809(October 2018 Update)に実装すると発表した。

Spectre V2はCPUの間接的な分岐を悪用して、より高い特権のコンテキストにある情報を盗み取るもの。

これまでの緩和策は、CPUマイクロコードの更新によって実装された新しい機能によって、カーネルモード内での実行時に間接的な分岐の推測を制限する(IBRSおよびIBPB)ものだった。これはセキュリティ的には効果的であるが、特定のプロセッサやワークロードでは性能が大幅に低下する問題があった。

このため2018年初頭から代替案が考えられてきており、そのなかでもGoogleのretpolineというアプローチは有望視されている。簡単に言えば、retpolineはカーネルモードバイナリにあるすべての間接コールまたはジャンプ命令を、安全な投機的振る舞いをする間接分岐シーケンスに置き換えることで機能する。

この構造は一般的な間接コールやジャンプ命令ほど速くはないが、プロセッサが危険な投機的実行をしないという副作用がある。この場合、分岐投機を制限してカーネルモードコードで実行するよりもはるかに高速で、Googleによれば、retpolineによる性能低下は「ノイズ」レベルであるという。

ただしWindowsでは、互換性やデバイスドライバなどの問題から、安易にretpolineを実装せず、Microsoftはまずインサイダー向けに、64bit版のWindows 10 Insider Preview Build 18272以降でretpolineを実装した。

その結果、Officeアプリケーションの起動が25%短縮したほか、Broadwell CPUにおけるDiskspdベンチマークおよびNTttcpベンチマークで、1.5倍から2倍のスループット向上が達成できたという。

当初は、この機能を次期リリース(19H1)で実装する予定だったが、現在稼働中のWindows 10でretpolineをサポートできるようバックポートし、Windows 10 1809で利用できるようにした(KB4482887)。今後、順次有効にしていくという。

ただ、実装の複雑さと変更のため、Windows 10 1809でのみretpolineを有効にするほか、RET命令が間接分岐予測子の内容に基づいて推測しないプロセッサでのみ安全に使用できることから、Broadwell以前のIntelプロセッサ、およびすべてのAMDプロセッサ環境にのみ適用し、IntelのSkylake以降のプロセッサ環境ではretpolineを適用しないとしている。