security
タイマー割り込みが分岐予測器汚染の窓を再び開く、Zen 2向けの実動エクスプロイトで実証済み
MITの研究者2名が、精密なタイミングで割り込みを発生させることでSpectre v2への対策を回避する新たな投機的実行攻撃をDEF CON 34で発表する予定です。
MIT計算機科学・人工知能研究所(CSAIL)のDaniël Trujillo氏とMengjia Yan氏は、発表に先立ち論文[PDF]をThe Registerに提供しました。この攻撃は、機密性の高いコードが実行される前に潜在的に悪意のある分岐予測器の状態を無害化する対策を標的としています。
こうした無害化処理は、Specter系攻撃に対する重要な防御策です。対策の種類によって、プロセッサやOSは、特権コードに入る際や保護対象の分岐が実行される直前に、関連する予測器の状態を隔離、消去、あるいは安全に再学習させます。
チップメーカーによって無害化対策の実装方法は微妙に異なります。IntelのeIBRSはコンテキストスイッチの際に分岐予測器を浄化する一方、Trujillo氏が共著者を務めた2023年のInception攻撃を受けて導入されたAMDのSafe RETは、保護対象の分岐が実行される直前のタイミングに焦点を当てています。Trujillo氏とYan氏は、これらをそれぞれ「エントリ無害化」「インプレース無害化」と呼んでいます。
私たちのデモンストレーションは、システムに何ら特別な条件を仮定していません。標準的なLinuxカーネルを使用し、追加モジュールも一切なく、デフォルトの対策がすべて有効な状態です。タイマーを利用できる非特権コードを、被害者とカーネルを共有するシステム上で実行できる状況であれば、常にこの攻撃が問題になり得ます。
重要なのは、この2種類の対策がいずれも同じ前提――攻撃者は「無害化後の窓(post-neutralization window)」、すなわち状態の無害化から分岐予測器が実際に使用されるまでの期間中、その状態を変更できないという前提――に依拠している点です。
この防御策は、無害化が行われた時点から被害者側の分岐が使用されるまでの間はすべて安全である、という仮定に基づいています。Trujillo氏とYan氏の攻撃は、攻撃者がこの無害化後の窓の間に分岐予測器を再び汚染できることを示しました。
研究者たちはこの新たな攻撃分類を、Time-of-Neutralization to Time-of-Use(無害化時点から使用時点まで)を意味する「TONTOU」と名付けました。彼らは、最近のAMDおよびIntel製プロセッサ上で、攻撃者が無害化後の窓を悪用して分岐予測器の状態を再汚染できることを実証しています。
これを実現するため、研究者たちは「割り込み注入(interrupt injection)」と呼ぶ攻撃プリミティブを開発しました。非特権プログラムが高頻度のタイマー割り込みをスケジューリングし、そのうちの一つが往々にしてごく短い無害化後の窓のタイミングに命中することを狙う手法です。
無害化後の窓の間に割り込みを発生させられることで、攻撃者は制御フローを操作し、無害化フェーズの後、かつ被害者側の分岐が使用される前に割り込みハンドラを実行させることができます。
その割り込みハンドラは、リターンスタックバッファ(RSB)や分岐履歴バッファ(BHB)といった予測器の構造を再汚染し、保護対象の分岐を投機的に情報漏えいガジェットへとジャンプさせ、サイドチャネル経由でカーネルデータを漏えいさせることが可能になります。
実際の攻撃
研究者たちによると、テストの結果、TONTOU攻撃はIntel製・AMD製いずれのLinuxシステムでも機能したとのことです。
研究者たちはTONTOUを、Intelの Cascade Lake RefreshおよびArrow Lakeプロセッサ、そしてAMDのZen 2およびZen 4チップでテストしました。エンドツーエンドの完全なエクスプロイトを構築できたのはZen 2のみで、これは主にIntel向けの攻撃には特定のソフトウェア条件が必要となるためです。
投機的サイドチャネル攻撃は依然として実行が難しく、現実世界ではSpectreよりランサムウェアの被害に遭う可能性の方が高いといえます。
もう一つの重要な留意点として、エンドツーエンドの試行1回あたり約18分を要しており、そのスピードアップ版の映像はTrujillo氏がYouTubeに投稿した動画で確認できます。
Trujillo氏とYan氏は、RSBを汚染するために割り込みを注入すべき正確なタイミングを特定し、一連の攻撃を通じてLinuxのカーネルアドレス空間配置のランダム化(KASLR)を突破しました。これにより、rootパスワードのハッシュ値を含むetc/shadowといった特定の機密情報の場所を特定することができました。
合計10回の試行のうち、研究者たちは毎回KASLRの突破に成功しましたが、etc/shadowの内容を実際に特定し漏えいさせることに成功したのは、そのうち5回にとどまりました。
「決して単純な攻撃とは言えませんが、AMD Zen 2上でのエンドツーエンドのエクスプロイトによって、これが実用的であることを示しました」とTrujillo氏はThe Registerに語りました。
「私たちのデモンストレーションは、システムに何ら特別な条件を仮定していません。標準的なLinuxカーネルを使用し、追加モジュールも一切なく、デフォルトの対策がすべて有効な状態です。タイマーを利用できる非特権コードを、被害者とカーネルを共有するシステム上で実行できる状況であれば、常にこの攻撃が問題になり得ます。
「例えば、マルチテナント型のコンテナプラットフォームはこのケースに該当し、一般的なユーザー空間のプログラムが共有カーネルからメモリ情報を漏えいさせることを可能にしてしまいます」
研究者たちは、今回の成果が割り込み注入とTONTOU攻撃に関するさらなる調査を促し、Spectre系エクスプロイトに対するより堅牢な対策の開発につながることを期待しています。
調査結果をまとめた後、研究者たちはIntel、Arm、AMDに連絡を取りましたが、カーネルパッチによる対応を約束したのはAMDのみでした。
Intelは両氏に対し、情報漏えいガジェットの有無など実際の攻撃が成立するかどうかは多くの要因に左右されるため、それ以上の対策を講じる予定はないと伝えましたが、バグバウンティプログラムから数百ドル規模の報奨金を授与しています。
ArmはTONTOUの割り込み注入について、自社が「積極的に対策していない」種類の「受動的な情報漏えい」に分類されるとしています。®