SWAPGS - CPU 投機実行メカニズムの新しい脆弱性

Bitdefender の研究者 明らかに 新たな脆弱性(CVE-2019-1125) 最新の CPU の投機的命令実行メカニズムに含まれる SWAPGS という名前は、問題の原因となっているプロセッサ命令の名前に対応しています。 脆弱性 許可する 権限のない攻撃者がカーネル メモリ領域や実行中の仮想マシンの内容を特定できるようになります。 問題 確認済み Intel プロセッサー (x86_64) および部分的に 影響を与える 主な攻撃ベクトルが現れない AMD プロセッサ。 Spectre および Meltdown の脆弱性に対抗するために以前に実装された方法では、Intel プロセッサを使用する場合は SWAPGS 攻撃を防ぐことができませんが、Linux、ChromeOS、Android、および Windows 向けの修正がすでに提案されています。

この脆弱性は Spectre v1 クラスに属しており、命令の投機的実行後に残ったプロセッサ キャッシュからデータを復元するという考えに基づいています。 パフォーマンスを向上させるために、最新の CPU の分岐予測ユニットは、実行される可能性が最も高い一部の命令をプリエンプティブに実行しますが、その実行を決定するすべての要素の計算を待たずに (たとえば、分岐条件やアクセス パラメーターが設定されていない場合)まだ計算されていません)。 予測が確認されない場合、プロセッサは投機実行の結果を破棄しますが、投機実行中に処理されたデータはプロセッサのキャッシュに残り、サイドチャネルを通じてキャッシュの内容を判断し、アクセスの変化を分析する方法を使用して復元できます。キャッシュされたデータとキャッシュされていないデータにかかる時間。

新しい攻撃の特徴は、SWAPGS 命令の投機的実行中に発生するリークを利用することです。SWAPGS 命令は、制御がユーザー空間から OS カーネル (GS に移るときに、オペレーティング システムで GS レジスタの値を置き換えるために使用されます)ユーザー空間で使用される値は、カーネルでの操作中に使用される値に置き換えられます。) Linux カーネルでは、GS はカーネル データへのアクセスに使用される per_cpu ポインタを格納し、ユーザー空間は TLS (Thread Local Storage) へのポインタを格納します。

カーネル空間からカーネルに再度アクセスするとき、または GS レジスタの変更を必要としないコードを実行するときに、SWAPGS 命令が XNUMX 回呼び出されるのを避けるために、命令の前にチェックと条件分岐が実行されます。 投機的実行エンジンは、チェックの結果を待たずに SWAPGS 命令を使用してコードの実行を積極的に開始し、選択された分岐が確認されない場合は結果を破棄します。 したがって、SWAPGS 実行を含まない分岐が投機的に選択される場合に状況が発生する可能性がありますが、投機的実行中に GS レジスタの値が SWAPGS 命令によって変更され、最終的に CPU キャッシュに保存される依存メモリ操作に使用されます。

研究者らは、エクスプロイトのプロトタイプが準備された XNUMX つの攻撃シナリオを提案しました。 最初のシナリオは、SWAPGS 命令が実際には実行に使用されているにもかかわらず、投機的に実行されない状況に基づいています。XNUMX つ目はその逆で、SWAPGS 命令が実際には実行されるべきではないにもかかわらず、投機的に実行される場合です。 各シナリオには、悪用のための XNUMX つのオプションがあります。攻撃者がカーネル領域の特定のアドレスで値を決定する方法と、攻撃者がカーネル内のランダムなアドレスで特定の値を検索する方法です。 攻撃の実行には長い時間がかかり、エクスプロイトによる漏洩が完了するまでに数時間かかる場合があります。

Linux カーネルに問題があります 排除された 他の Spectre v1 クラスの脆弱性の修正と同様に、SWAPGS 命令を呼び出すロジックを変更する (投機的実行をブロックする) ことによって。 追加された保護は、一般的なワークロードのパフォーマンスに最小限の影響を与えると予想されます。 ユーザー空間とカーネル空間の間の切り替えフェーズ中に遅延が発生し、たとえばアプリケーションからのシステム呼び出しが多かったり、NMI や割り込みが頻繁に生成されたりすると、パフォーマンスが低下する可能性があります。

この修正を行うには、ホスト システムとゲスト環境の両方にカーネル アップデートをインストールし、その後システムを再起動する必要があります。 Linux で保護を無効にするには、「nospectre_v1」オプションを使用できます。これにより、SWAPGS 脆弱性をブロックする手段も無効になります。 修正プログラムは次のように利用可能です パッチ Linux カーネル用 (すでにリリースに含まれています) 4.19.65, 5.2.7、4.14.137、4.9.188、4.4.188。 Linux ディストリビューションのアップデートはまだリリースされていません (Debianの, RHEL, フェドーラ, アーチのLinux, SUSE/openSUSE, Ubuntu)。 Windows では、この問題はひっそりと修正されました。 XNUMX月のアップデート。 グーグル社 準備した ChromeOS に同梱されているカーネル 4.19 の修正と Android.

Bitdefender の研究者によると、Intel は昨年 XNUMX 月にこの問題について知らされました。 この問題はプログラムで修正することが決定され、Microsoft、Google、Linux カーネルの開発者が調整された修正の開発に参加しました。 Ivy Bridge 以前の古い Intel プロセッサは、エクスプロイトで使用される WRGSBASE 命令がサポートされていないため、攻撃がはるかに困難です。 ARM、POWER、SPARC、MIPS、および RISC-V システムは、SWAPGS 命令をサポートしていないため、この問題の影響を受けません。

この問題は主に Intel プロセッサの所有者に影響を及ぼします -
AMD システムでは、XNUMX 番目の攻撃シナリオのみが再現できました。これは、ランダム メモリ領域で特定の値を探すために使用できる、GS レジスタのベース値の投機的処理に限定されていました。 この攻撃をブロックするにはオプション 十分な Spectre v1 に対する既存の保護方法。

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

コメントを追加します