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

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

ブランチヒストリインジェクションおよびイントラモードブランチターゲットインジェクション / CVE-2022-0001, CVE-2022-0002 / INTEL-SA-00598〜シン・すべてがNになる〜

 

ブランチターゲット・インジェクション(BTI)(Spectre variant 2とも呼ばれる)は、攻撃者が間接的な分岐予測の後に開示ガジェットを投機的に実行させようとするクロスドメインの過渡実行攻撃として知られているものです。

 一般に、一過性の実行攻撃では、攻撃者がデータを読み取ろうとするのと同じマシン(または同じ仮想マシン)上でコードを実行できることが必要ですが、データへのアクセス権は持っていません(特権レベルの分離が行われている場合など)。この記事の推奨事項は、一過性の実行攻撃がユーザーの脅威モデルの範囲内にある場合に適用されます。

 イントラモードBTI(IMBTI)とは、BTIの一種で、間接ブランチが同じ予測モードで別の間接ブランチ1用のエイリアス予測エントリに投機し、予測されたターゲットの開示ガジェットが一時的に実行されることを指します。 このような予測エントリには、たとえこれらのブランチが一時的にしか実行されなかったとしても、間接的なnear jump命令、間接的なnear call命令、near return命令のターゲットに対応するターゲットが含まれる可能性があります。管理されたランタイムは、モード内BTI攻撃に必要なエイリアシングを作成する手段を攻撃者に提供することができます。IMBTI には、CVE-2022-0002 が割り当てられており、CVSS の基本スコアは 4.7 (Medium) CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:N/A:N となっています。

 ブランチヒストリーインジェクション(BHI)は、モード内BTIの特定の形態について説明します。攻撃者は、ユーザーモードからスーパーバイザーモードに移行する前(またはVMXノンルート/ゲストモードからルートモードに移行する前)にブランチヒストリーを操作し、間接ブランチ予測ツールに間接ブランチの特定の予測エントリを選択させ、予測ターゲットの開示ガジェットを一時的に実行させようとすることがあります。これは、関連するブランチ履歴が以前のセキュリティコンテキスト、特に他の予測モードで実行されたブランチを含む可能性があるためです。BHIには、CVE-2022-0001が割り当てられ、CVSSの基本スコアは4.7(中) CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:N/A:N.

 アムステルダム大学の研究者は、eBPF (extended Berkeley Packet Filter) として知られる機能を使用してカーネルモード開示ガジェットを作成し、Linux* カーネルに対する BHI およびモード内 BTI 攻撃を実証しました。Linuxシステムコールディスパッチャの間接分岐は、攻撃者が部分的に制御する分岐履歴に基づき、攻撃者のeBPF開示ガジェットに対応する間接分岐予測器エントリを推測で選択することができます。カーネルの eBPF 検証機能は、ほとんどの一過性実行攻撃のバリエーションを軽減しますが、執筆時点では、この形式の攻撃を防御することはできません。

 BHIの影響を受けたプロセッサでは、Linuxの「非特権eBPF」を無効化し、eIBRSを有効化し、SMEPを有効化することを推奨します。 これにより、実証されたBHI攻撃や、eBPFを使用した他のイントラモードBTI攻撃を軽減することができます。これは、一般的に過渡的な実行攻撃をより困難にするもので、現在、ほとんどの Linux ディストリビューションのデフォルト設定となっています。

 今回実証されたeBPFを用いた攻撃以外にも,今後,BHI攻撃が確認される可能性がある.このようなBHI攻撃の可能性がある場合、悪用可能であることが判明した特定のガジェットにLFENCEを追加することで緩和することができる。この記事では、ドメイン間の移行時に実行可能なソフトウェア BHB クリアシーケンス、BHB 固有の間接予測器無効化制御、または retpoline など、さまざまな脅威モデルで検討可能なこの他の緩和オプションの詳細について説明します。

 将来のプロセッサは、BHI 攻撃をハードウェアで緩和することが期待されており、この記事では、将来のハードウェアがそのようなハードウェア緩和策を列挙する方法についても説明します。これらの BHI ミティゲーションが実行できない状況や、モード内 BTI が懸念される環境(たとえば、「非特権 eBPF」などのマネージドランタイムが使用されている場合)では、モード内 BTI に対する潜在的なミティゲーションも紹介されています。

背景

 このセクションでは、この記事で説明されている問題や脆弱性を理解するために有用な、いくつかの追加的な背景情報を紹介します。これは、Branch Target Injection および Indirect Branch Restricted Speculation (IBRS) などの関連する緩和策に関するインテルの過去のドキュメントを補足するものです。

モード内分岐予測

 IBRSは、特権の低いプレディクタモードで実行されるソフトウェアが、特権の高いプレディクタモードで実行されるソフトウェアの間接分岐予測のターゲットを制御することを防ぐことを目的としています2。eIBRSでは、間接分岐予測は他のプレディクタモードでの分岐のターゲットを使用しません。

 しかし、 一時的な実行攻撃(Transient Execution Attack: TEA)はドメイン内("in-domain")でも起こりうる。JavaScriptエンジンやLinuxのeBPFのような管理実行時ガイダンスは、攻撃者が別のドメインで生成・実行されるコードに影響を与えることができるかもしれません。インテルは、信頼できないコードが同じドメインに存在する場合、モード内ブランチターゲットインジェクション(BTI)や他のTEAを緩和するためのマネージドランタイムのガイダンスを提供します。また、インテルは、LinuxのeBPFを特定の攻撃から保護するためのガイダンスを、Mitigation Overview for Side Channel Exploits in Linuxで提供しています。

 なお、先に述べたように、間接JMP/CALLに続く命令バイトへのフォールスルー投機も発生する可能性があります。

ブランチヒストリーとブランチヒストリーバッファー(BHB)

 分岐は過去の動作に基づいて予測できるため、モード内BTIがなくても、他のドメインが間接的な分岐予測に影響を与える可能性があります。例えば、OSのシステムコールディスパッチャがsys_readに分岐するようなreadシステムコールを実行すると、その分岐の後の実行でsys_readをターゲットとして予測する可能性があります。

 分岐履歴バッファ(BHB)は、最近の分岐履歴を記録することにより、間接的な分岐予測を含む分岐予測の精度を向上させるために使用されます。BHB は間接的な分岐予測エントリーの選択に影響を与えることがあり、eIBRS が有効な場合や IBRS が適切に使用されている場合には分岐予測エントリーはモード間で分離されますが、現在の多くの Intel プロセッサでは BHB 自体がモード間で分離されていません。例えば、OSのシステムコールディスパッチャーにおける間接分岐の予測は、ユーザーモードブランチからの分岐履歴を含むBHBに基づいて行われる場合があります。

緩和措置の推奨事項

 以下の推奨事項は、業界関係者がこれらの潜在的な攻撃を軽減するために、十分な情報を得た上で意思決定を行うための、短期的なガイダンスです。このセクションでは、VU Amsterdam の研究者が開発した BHI 攻撃と、関連するモード内 BTI 攻撃の可能性について、OS および VMM の防御に焦点を当てながら、その防御方法に関する推奨事項を説明します。また、将来的に確認される可能性のある、BHI攻撃を可能にするその他の情報漏えいガジェットを緩和するためのガイダンスも提供します。

Linux* カーネル。特権のない eBPF を無効にする

 Linuxの「非特権eBPF」のように、非特権ユーザが特権領域でコードを生成・実行できるように設定できる特権管理型ランタイムは、モード内BTIに対する防御が存在する場合でも、一過性実行攻撃のリスクを大幅に増加させます。一般に、非特権コードを実行する特権付きマネージドランタイムは、攻撃者がガジェットを作成することを可能にし、アーキテクチャ攻撃を含む他の様々な攻撃に有用であることが実証されています。管理者は、非特権ユーザーに対して特権付きマネージドランタイムを有効にする前に、このような攻撃の可能性を認識し、その脅威モデルを慎重に検討する必要があります。

 カーネルは、デフォルトで非特権eBPFへのアクセスを拒否するように設定することができ、一方で管理者は必要に応じてランタイムでそれを有効にすることができるようになっています。これは、Debian*、Ubuntu*、Red Hat*、Fedora*など、多くのLinuxディストリビューションですでにデフォルトとなっており、Linux 5.16+でもデフォルトとなっています。他の Linux カーネルでは、CONFIG_BPF_UNPRIV_DEFAULT_OFF (Linux カーネル 5.13+ や最近の安定版カーネルで利用できるはずです) を使用してこのデフォルトを設定することができます。非特権 eBPF は kernel.unprivileged_bpf_disabled sysctl を使って実行時に無効にしたり有効にしたりすることも可能である。

SMEPの有効化とIBRSの強化の継続

 SMEP と Enhanced IBRS3 はハードウェアによる緩和策で、サポートされている場合、ほとんどのオペ レーティングシステムで既にデフォルトで有効になっています。eIBRS は、低特権モードが間接ジャンプの予測ターゲットを指定できないようにすることで、Branch Target Injection (Spectre v2) を防止します。SMEPは、過渡的な実行を含め、ユーザモードページからのスーパーバイザモード実行を防止します。IBPBは分岐予測バリアであり、異なるコンテキストを互いに分離するために使用することができます。 これらは、本来のBranch Target Injection攻撃の緩和に加え、Defense-in-Depthの観点からも重要である。

なんか翻訳したけどよく分からない事案でした。

 

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

f:id:osugi3y:20211127012152p:plain

N