Spectre 4 攻撃保護をバイパスする可能性がある eBPF の脆弱性

eBPF サブシステムが Spectre v4 (SSB、投機的ストア バイパス) 攻撃保護をバイパスできるようにする 1 つの脆弱性が Linux カーネルで確認されました。 攻撃者は、特権のない BPF プログラムを使用して、特定の操作を投機的に実行する条件を作成し、カーネル メモリの任意の領域の内容を特定することができます。 カーネル内の Escort eBPF サブシステムは、実際に攻撃を行う可能性を示すプロトタイプのエクスプロイトにアクセスできました。 この問題は、次の Linux カーネル アップデートの一部となるパッチ (2、XNUMX) の形で修正されています。 ディストリビューションの更新はまだ作成されていません (Debian、RHEL、SUSE、Arch、Fedora、Ubuntu)。

Spectre 4 の攻撃手法は、間接アドレス指定を使用して書き込みと読み取りを交互に処理する際に、演算の投機的実行の結果を破棄した後、プロセッサ キャッシュに落ち着いたデータを復元することに基づいています。 書き込み操作の後に読み取り操作が続く場合 (たとえば、mov [rbx + rcx], 0x0; mov rax, [rdx + rsi])、同様の操作が実行されるため、読み取りアドレス オフセットがすでにわかっている可能性があります (読み取り操作が実行されます)。より頻繁に、キャッシュから読み取りを実行できます)、プロセッサは、書き込み間接オフセットの計算を待たずに、書き込みの前に投機的に読み取りを実行できます。

オフセットを計算した後、書き込みと読み取りのためのメモリ領域の交差が検出された場合、プロセッサはすでに投機的に取得した読み取り結果を単純に破棄し、この操作を繰り返します。 この機能により、読み取り命令は、ストア操作がまだ完了していないときに、あるアドレスの古い値にアクセスできます。 失敗した投機操作を破棄した後、その実行の痕跡がキャッシュに残ります。その後、キャッシュされたデータとキャッシュされていないデータへのアクセス時間の変化の分析に基づいてキャッシュの内容を判断する方法の XNUMX つを使用して、キャッシュされたデータを取得できます。それ。

最初の脆弱性 (CVE-2021-35477) は、BPF プログラム検証メカニズムの欠陥によって引き起こされます。 Spectre 4 攻撃から保護するために、ベリファイアは、潜在的に問題のあるストア操作の後に追加の命令をメモリに追加し、前の操作のトレースを消去するゼロの値を保存します。 ゼロ書き込み操作は、BPF スタック フレームへのポインターのみに依存するため、非常に高速であり、投機的実行をブロックするはずです。 しかし実際には、投機的実行につながる命令がプリエンプティブ ストア操作の前に実行されるような条件を作成できることがわかりました。

2021 番目の脆弱性 (CVE-3455-XNUMX) は、潜在的に危険なメモリ保存操作が BPF ベリファイアによって検出された場合、BPF スタックの未初期化領域が考慮されず、最初の書き込み操作が保護されないという事実に関連しています。 。 この機能により、ストア命令を実行する前に、初期化されていないメモリ領域に応じて投機的読み取り操作が実行される可能性があります。 BPF スタックの新しいメモリは、割り当てられたメモリの既存の内容をチェックせずに割り当てられます。BPF プログラムの開始前に、BPF スタックに割り当てられるメモリ領域の内容を管理する方法があります。

出所: オープンネット.ru

コメントを追加します