Spectre 攻撃に対する保護をバイパスできる eBPF サブシステムの脆弱性

Linux カーネル (CVE-2021-33624) で、eBPF サブシステムを使用して Spectre クラスの脆弱性に対する保護をバイパスできる脆弱性が確認されました。これにより、特定の操作の投機的な実行。 Spectre 攻撃では、特権コード内に特定のコマンド シーケンスが存在する必要があり、これにより命令が投機的に実行されます。 実行のために送信された BPF プログラムを操作することにより、eBPF で同様の命令を生成し、サイド チャネルを通じてカーネル メモリおよび物理メモリの任意の領域の内容を漏洩することが可能になります。

この脆弱性は、BPF プログラムのエラーや許容できないアクティビティを検出するために使用されるベリファイアーの欠陥によって引き起こされます。 ベリファイアは可能なコード実行パスを列挙しますが、命令セット アーキテクチャのセマンティクスの観点から許容できない分岐オプションはスキップします。 BPF プログラムを実行する場合、検証者が考慮しない分岐オプションは、プロセッサによって誤って予測され、投機モードで実行される可能性があります。 たとえば、「ロード」操作を分析する場合、検証者は、値が常に指定された境界内にあるアドレスを持つレジスターを命令が使用することを期待しますが、攻撃者は、プロセッサーが投機的に操作を実行しようとする条件を作成する可能性があります。検証条件を満たしていないアドレスです。

この問題はカーネル 4.15 のリリース以来発生しており、パッチ (1、2、3、4) の形で修正されています。 この脆弱性はディストリビューション (Debian、RHEL、Ubuntu、Fedora、SUSE、Arch) では未修正のままです。

さらに、Spectre の脆弱性から保護するツールのパフォーマンスへの影響に関するメモにも注意してください。 このメモは、Firefox で再現困難なエラーをデバッグするために、かつて Mozilla で作成された rr (記録と再生) デバッガの最適化の結果を要約しています。 ディレクトリの存在を確認するために使用されるシステム コールをキャッシュすると、テスト プロジェクトの「rr ソース」操作が 3 分 19 秒から 36 秒に短縮されました。

最適化の作成者は、Spectre 保護を無効にした後にパフォーマンスがどのように変化するかを確認することにしました。 「mitigations=off」パラメータを指定してシステムを起動した後、最適化なしの「rr ソース」の実行時間は 2 分 5 秒 (1.6 倍高速)、最適化すると 33 秒 (9% 高速) でした。 興味深いことに、Spectre 保護を無効にすると、カーネル レベルでのコード実行時間が 1.4 倍 (2 分 9 秒から 1 分 32 秒) 短縮されただけでなく、ユーザー空間での実行時間も半分になりました (1 分 9 秒から 0 分 33 秒)。これは、おそらく CPU キャッシュ操作と TLB の効率が低下したことが原因と考えられます。 Spectre 保護が有効になるとリセットされます。

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

コメントを追加します