Bitdefender の研究者
この脆弱性は 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 カーネルに問題があります
この修正を行うには、ホスト システムとゲスト環境の両方にカーネル アップデートをインストールし、その後システムを再起動する必要があります。 Linux で保護を無効にするには、「nospectre_v1」オプションを使用できます。これにより、SWAPGS 脆弱性をブロックする手段も無効になります。 修正プログラムは次のように利用可能です
Bitdefender の研究者によると、Intel は昨年 XNUMX 月にこの問題について知らされました。 この問題はプログラムで修正することが決定され、Microsoft、Google、Linux カーネルの開発者が調整された修正の開発に参加しました。 Ivy Bridge 以前の古い Intel プロセッサは、エクスプロイトで使用される WRGSBASE 命令がサポートされていないため、攻撃がはるかに困難です。 ARM、POWER、SPARC、MIPS、および RISC-V システムは、SWAPGS 命令をサポートしていないため、この問題の影響を受けません。
この問題は主に Intel プロセッサの所有者に影響を及ぼします -
AMD システムでは、XNUMX 番目の攻撃シナリオのみが再現できました。これは、ランダム メモリ領域で特定の値を探すために使用できる、GS レジスタのベース値の投機的処理に限定されていました。 この攻撃をブロックするにはオプション
出所: オープンネット.ru