たくさん Bitdefenderの研究者は、新しい脆弱性を特定しました 最新のプロセッサで命令を投機的に実行するメカニズムでは、 SWAPGSという名前を受け取った人は 問題の原因となっているプロセッサ命令の名前に対応します。
脆弱性 特権のない攻撃者がカーネルメモリ領域の内容を判別できるようにします または仮想マシンを実行しています。 この問題はIntelプロセッサ(x86_64)で確認されており、プライマリ攻撃ベクトルが表示されないAMDプロセッサに部分的に影響します。
以前に実装されたSpectreおよびMeltdownの脆弱性防止方法は、SWAPGS攻撃から保護しません Intelプロセッサを使用していますが、Linux、ChromeOS、Android、およびWindows用のソリューションはすでに提案されています。
脆弱性はSpectrev1クラスに属します そして、命令の投機的な実行後に残っているプロセッサキャッシュからデータを取得するという考えに基づいています。
最新のCPUの変換予測ブロックは、実行される可能性が高いいくつかの命令のプロアクティブな実行を使用してパフォーマンスを向上させますが、実行を決定するすべての要因の計算を待たずに(たとえば、命令が遷移条件またはアクセスパラメータはまだ計算されていません)。
予測が確認されない場合、プロセッサは投機的実行の結果を破棄しますが、実行中に処理されたデータはプロセッサによってキャッシュされ、チャネル全体のキャッシュの内容を決定する方法を使用して復元できます。キャッシュされたデータとキャッシュされていないデータへのアクセス時間の変化を分析するサードパーティ。
SWAPGSについて
新しい攻撃の特徴は、SWAPGS命令の投機的実行中に発生するリークの使用です。 これは、制御がユーザースペースからオペレーティングシステムカーネルに移されるときにGSレジスタ値を置き換えるためにオペレーティングシステムで使用されます(ユーザースペースで使用されるGS値は、カーネル操作で使用される値に置き換えられます) 。
GSのLinuxカーネルはper_cpuポインターを格納します、カーネルデータへのアクセスに使用されます。 ユーザースペースのTLS(スレッドローカルストレージ)を指します。
カーネルスペースからカーネルアクセスを繰り返した後、またはGSレジスタの置換を必要としないコードを実行するときに、SWAPGS命令の二重呼び出しを除外するために、命令の前にチェックと条件付き遷移が実行されます。
投機的実行メカニズムは、コードの実行の前にSWAPGS命令を実行します。 検証結果を待たずに、選択したブランチが確認されない場合は、結果を破棄します。
そのため、 SWAPGSの実行を指定するブランチが投機的に選択された場合に状況が発生する可能性がありますただし、投機的実行中、GSレジスタの値はSWAPGS命令によって変更され、CPUによってキャッシュされるメモリ依存の操作で使用されます。
研究者はXNUMXつの攻撃シナリオを提案しました 悪用プロトタイプが準備された。
- 最初のシナリオは、SWAPGS命令が実際の実行で使用されているにもかかわらず、投機的に実行されない状況に基づいています。XNUMX番目のシナリオは、SWAPGS命令が投機的に実行される場合の逆であり、実際には実行されるべきではありません。
- シナリオごとに、XNUMXつの操作オプションがあります。攻撃者はコア領域の特定のアドレスの値を決定でき、攻撃者はコアのランダムアドレスの特定の値を検索できます。
このソリューションでは、ホスト環境とゲスト環境の両方にカーネルアップデートをインストールしてから、システムを再起動する必要があります。 Linuxで保護を無効にするには、「nospectre_v1」オプションを使用できます。これにより、SWAPGSの脆弱性をブロックする手段も無効になります。
このソリューションは、Linuxカーネルのパッチとして利用できます。、バージョン4.19.65、5.2.7、4.14.137、4.9.188、および4.4.188にすでに含まれていますが、さまざまなLinuxディストリビューションでは、この週と次の週に関連する修正が到着します。 。