エンタングルメントosugi3yのブログ

14年勤めた企業をやめました。映画「時の行路」尾道市実行委員

ブランチヒストリーインジェクション〜シン・すべてがNになる〜

 

リンクを追加しました。

いやなんかインテルとARM使ってるのになんかやばそうだってんで

翻訳してみようって気になりました。

www.vusec.net

ロスプライバシー・スペクトル-v2(Spectre-v2)攻撃に対するハードウェア緩和策の有効性について

 BHI (または Spectre-BHB) は、インハードウェア防御を導入した最新のシステムにおいて、特権を超えた Spectre-v2 攻撃を復活させるものです。そして、それを証明するために、最新の Intel CPU 上で任意のカーネルメモリをリークする非常に巧妙なエンドツーエンドのエクスプロイトがあります(PoC||GTFO でしょうか?) 私たちは、ハードウェアの Spectre-v2 緩和策(Intel eIBRS と Arm CSV2)が、投機実行の領域で異なる特権ドメインを分離するという約束を果たしているかどうかを自問自答し始めまし た。その答えは、「なんとなく」です。しかし、その分離は不完全なものでした。そこで、私たちのカーネルエクスプロイトです。

youtu.be

少し巻き戻して、何が起こったのかを理解しましょう。

 Spectre が発見された当時、最も危険な Spectre の亜種である Branch Target Injection (BTI または Spectre-v2) を、特権レベルを超えて容易に悪用することができました。例えば、非特権ユーザーランドの攻撃者は、ユーザーランドから任意のブランチターゲットを間接ブランチプレディクターに送り、カーネルを騙して注入されたターゲットコードの場所に投機的にジャンプさせ、そこで見つかったコードを実行させることができます。

 Spectreの公開後、Linuxなどのソフトウェアベンダーは、その場しのぎの緩和策をソフトウェアで展開した(すなわち、retpoline)。しかし、このような緩和策には時間がかかりました。数年後、Intel と Arm は、このような些細な BTI 悪用を防止する効率的なハードウェア緩和策(eIBRS および CSV2)をリリースしました。これらのソリューションは複雑で、詳細は論文をご覧ください。しかし、その要点は、ターゲットが実行されたときの特権レベル(ユーザー/カーネル)を予測ツールが「何らかの形で」追跡していることです。そして、予想されるように、ターゲットがより低い特権レベルに属している場合、カーネル実行はそれを使用しません(つまり、推測でカーネル制御フローをハイジャックするために攻撃者が提供する任意のコードロケーションはもう存在しません。)

 ここで登場するのがBHIです。ブランチヒストリーインジェクション(BHIまたはSpectre-BHB)は、eIBRSとCSV2を回避して、特権を超えたミストレーニングを簡素化できるという点で、Spectre-v2の新しいフレーバーと言えます。ハードウェアによる緩和は、非特権攻撃者によるカーネルへのプレディクター・エントリーの注入を防止します。しかし、予測器はグローバル履歴に依存して、投機的に実行するターゲットエントリを選択します。そして、攻撃者はユーザーランドからこの履歴を汚染し、データをリークする、より「興味深い」カーネルターゲット(つまり、ガジェット)に予測を誤らせることができます。

 しかし、私たちの悪用が意味するところは、さらに広範囲にわたります。この論文では、BHIが特権を超えたSpectre-v2エクスプロイトを再び可能にするだけでなく、同一特権レベルの攻撃は実行不可能であるという根本的な前提に欠陥があることも示しています。実際、攻撃者がユーザーランドから分岐履歴をインジェクションしない、カーネル間(いわゆるイントラモードBTI)攻撃の実現可能性も実証しています。

Branch History Injectionの論文(PDF)が、31th USENIX Security Symposium 2022に採択されました。

osugi3y.hatenablog.com

インテルテクニカルペーパー翻訳版↑

osugi3y.hatenablog.com

インテル-ブログ記事翻訳版↑

 

2022 (1)
分岐履歴インジェクション。Cross-Privilege Spectre-v2攻撃に対するハードウェア緩和策の有効性について。Barberis, E.; Frigo, P.; Muench, M.; Bos, H.; and Giuffrida, C. USENIX Security, August 2022に掲載されています。インテルバウンティ報酬 

よくあるご質問

Spectre-v2とどう違うのですか?

BHI は本質的に Spectre v2 を拡張したもので、グローバル履歴を活用して、特権を超えた BTI の悪用を再導入するものです。したがって、攻撃者のプリミティブは Spectre v2 のままですが、特権の境界を越えて履歴を注入する(BHI)ことにより、新しいハードウェア内緩和策を導入したシステム(すなわち Intel eIBRS および Arm CSV2)を悪用することが可能になります。

Spectre-BHB、BHI、intra-mode BTIと聞きましたが。何が違うのでしょうか?

 ネーミングが雑なのは承知の上です。私たちの弁解としては、コミュニティのためにできるだけ賢明な命名にしようと努力したのですが、明らかに失敗しています。私たちは当初、このプリミティブを「Spectre-v2 aided by the Branch History Buffer (BHB)」という意味でSpectre-BHBと呼んでいました。
Spectre-v2ミストレーニングのためのこのプリミティブは、インターモード(例:ユーザー→カーネル)でも、イントラモード(例:カーネルカーネル)でも行使することが可能です。Intelはこの2つの攻撃モデルの名称を提案しており、モード間の履歴ミストレーニングを定義するためにBHI(Branch History Injection)を使用し(CVE-2022-0001)、ミストレーニングとミス予測に使用する特定の分岐が、分岐履歴に関わらず同じ特権ドメインにある悪用に対してモード内BTI(CVE-2022-0002)であるとしています。

 Armはまだ私たちの最初の命名規則、すなわちSpectre-BHB (CVE-2022-23960)に頼っています。つまり、Spectre-BHB == BHI == cross-mode history injectionです。モード内履歴インジェクションについては、ArmはカーネルオンリーのSpectre-BHBという名称を使用しています。
カーネルオンリーSpectre-BHBとイントラモードBTIは、前者がカーネル内で直接ヒストリーインジェクションが可能であることを示すのに対し、後者はミストレーニングの手段が何であれ、セイムモードのSpectre-v2攻撃のみを示すという点で若干異なっています。

Intel eIBRSとArm CSV2は壊れているのでしょうか?

 そんなところです。つまり、緩和策は意図したとおりに機能しますが、残存する攻撃対象はベンダーが当初想定していたよりもはるかに大きなものになります。Armは、CSV2で間接的な分岐予測器を制御できるのは「判断しにくい方法のみ」であることをドキュメントで示唆している(攻撃者にマージンがあることを示唆している)ほどだ。とはいえ、攻撃者は特権の境界を越えて予測器のターゲットを直接注入することができないため、悪用可能なガジェットを見つけるのは以前より難しくなっています。つまり、カーネルは攻撃者が提供する任意のターゲットに推測でジャンプすることはなく、過去に実行した有効なコードスニペットのみを推測で実行することになるのです。その結果、攻撃者はBHIを介してミストレインすることはできますが、カーネルに任意のコード位置へのジャンプを強制することはできません。

BHIの影響を受けるのはどのシステムですか?

 簡単に説明します。もしあなたがSpectre-v2の影響を受けたIntelやArmのCPUを持っているなら、BHIの影響も受ける可能性が高いです。AMDは影響を受けていないようです。

 長い回答です。インテルによると、Atom CPU ファミリーを除いたほとんどの CPU が影響を受けるそうです(全リストはホワイトペーパーに掲載されています)。そして、BHI (CVE-2022-0001) と intra-mode BTI (CVE-2022-0002) から保護するためのソフトウェアソリューションをリリースしています。
Armは、アドバイザリにおいて、影響を受けるプロセッサをすべてリストアップしています。Cortex-A15, Cortex-A57, Cortex-A72, Cortex-A73, Cortex-A75, Cortex-A76, Cortex-A76AE, Cortex-A77, Cortex-A78, Cortex-A78AE, Cortex-A78C, Cortex-X1, Cortex-X2, Cortex-A710, Neoverse N1, Neoverse N2 及び Neoverse V1です。また、システムに応じて5種類の緩和策をリリースしています。詳細については、アドバイザリを参照してください。

 カーネル間攻撃は実用的か?

 私たちはそう考えています。私たちの研究では、eBPFを悪用した完全なカーネル間エクスプロイトを披露しています。しかし、はっきりさせておきたいのは、eBPFは単なるツールであって、根本的な問題ではないことです。私たちは、非特権攻撃者がJIT化されていないカーネルに既に存在するリークガジェットを悪用することで、同様に強力なエクスプロイトが可能であると信じています。私たちは過去に、カーネル内で悪用可能なSpectre-v1、MDS、およびLVIガジェットを検索するフレームワークであるKasperを開発しました。Kasperは、自動化されたガジェットスキャナーが、手動によるコード監査から逃れることができる新しい攻撃表面を容易に発見できることを実証しています。同様に、悪用可能な非eBPF Spectre-v2ガジェットを見つけるために、より多くのガジェットスキャン作業が必要であることを示しました。

では、非特権eBPFを無効化すればよいのでしょうか?

 上記の回答で示唆されているように、そのようなことはないと考えています。しかし、非特権eBPFは投機的実行(および他の)攻撃を非常に促進すると考えています。したがって、私たちはそれを無効にすることを推奨します。ほとんどのLinuxディストリビューションは、私たちの公開や他の脆弱性の後、ここ数ヶ月でこの道を歩んでいます。/proc/sys/kernel/unprivileged_bpf_disabled を見ることによって、あなたのシステムが非特権 eBPF を無効にしていることを簡単に確認することができます。

公式のセキュリティ勧告やCVEはありますか?

 インテルは、この問題を説明するホワイトペーパーセキュリティアドバイザリを発表しました。また、CVE-2022-0001をBHIに、CVE-2022-0002をイントラモードのBTIに割り当てた。

 また、Arm社はホワイトペーパーを公開し、両問題にCVE- 2022-23960を割り当てています。

謝辞

 貴重なコメントをいただいた匿名査読者の方々に感謝します。また、Alyssa Milburn と Andrew Cooper のフィードバックに感謝する。この研究は、EUのHorizon 2020研究革新プログラムの助成金契約番号825377(UNICORE)、Intel CorporationによるSide Channel Vulnerability ISRA、Netherlands Organisation for Scientific Researchによるプロジェクト「TROPICS」、「Theseus」、「Intersect」によって支援されています。

www.DeepL.com/Translator(無料版)で翻訳しました。

何かわかるかと思ったけどさっぱりです。続報を待ちます。

f:id:osugi3y:20211127012152p:plain

N