Downfall攻撃(CVE-2022-40982, Intel CPUの脆弱性)
IntelのCPUの脆弱性が見つかったらしいので、ちょっと調べてみた。
Downfall攻撃とは
IntelのCPUのAVX2,AVX-512のgather命令を用いることでCPUのSIMDレジスタバッファに読み込まれたデータにアクセスすることができ、同じCPUコアを使う他プロセス(カーネルプロセス含む)の情報を盗むという攻撃及び脆弱性。
対象となるCPU
第6世代から第11世代のCPU。
詳しくはIntel提供の一覧を参照(Gather Data Samplingの列がMCUとなっているCPUが該当)
攻撃方法
Intel CPUのAVX2,AVX-512(AVXはAdvanced Vector Extensionsでベクトル演算を高速に実行する命令セット)にgather命令(ex. vpgatherdd)がある。gather命令は、インデックスで指定されたメモリ上に散らばったデータをくっつけて1つのAVX用レジスタ(256bit or 512bit)に保存する命令である。
論文の図がイメージしやすい。
Maskは実際にレジスタに保存するかどうかのフラグ(1つのインデックスに対して1bit)を表している。
この命令はCPU上の一時バッファ(SIMDレジスタバッファ)にアクセスする。SIMDレジスタバッファには他プロセスが利用した古いデータが残っており、gather命令を使うとその古いデータにもアクセスすることができて、データを漏洩させることができる。
攻撃対象の命令
論文によると以下の命令がSIMDレジスタバッファを使っており、攻撃することができるようである。
AVX2,AVX-512の命令だけでなく、AES-NI(AES暗号化の命令セット)やrep mov(movの繰り返し実行)なども含まれていることに注目すべきである。特にrep movはmemcpy/memmoveなどで利用されうるため、ほとんどのプログラムが攻撃対象になると考えられる。
攻撃シナリオ
- ユーザスペースからカーネルのメモリへのアクセス
- ユーザから他のユーザのプロセスのメモリへのアクセス
- ゲストからホストのメモリへのアクセス
- ゲストから他のゲストのメモリへのアクセス
などが考えられる。Spectreのようにブラウザの別タブのメモリへのアクセスも理論上はあり得るとのこと。
AES暗号鍵の取得
論文によると、SIMDレジスタバッファの内容を8バイトずつランダムに取得してヒストグラムを作成、これを2回繰り返し高頻度のものをくっつけて16バイトの暗号鍵候補を生成している。暗号鍵候補は7.4bitの鍵空間(128候補程度)になる。
評価は、この鍵候補で平文を暗号化してみて、実際の暗号文と比較している。その結果AES-128の場合は100の異なる暗号鍵に対して100%成功したとしている。
なので、1つの暗号鍵を確実に取得できるというわけではなく、候補をかなり絞り込めるが検証には平文、暗号文のサンプルが必要である。
緩和策
基本的にIntelがマイクロコードのアップデートを出しているので、ファームウェアのアップデートやOSのアップデートで対応するのが良い。
2023/8/18時点ではRedhatは未提供、Ubuntuはintel-microcodeを提供しているようである。
クラウドの場合、GCPは対策済み、AWSは影響しないとのこと。
Linuxカーネルの対応
- カーネルパラメタgather_data_samplingの追加(マイクロコードアップデート緩和策の有効/無効フラグ)
- /sys/devices/system/cpu/vulnerabilities/gather_data_samplingにアクセスすることでこの脆弱性への対策状況を確認することができる。
という修正のようである。
マイクロコードアップデートによる性能劣化
Intelによると最悪50%の性能劣化がみられる。マイクロコードの修正がgather命令に対するもののようなので、おそらくgather命令を多用する場合なのだと思う。
When the mitigation is enabled, there is additional latency before results of the gather load can be consumed. Although the performance impact to most workloads is minimal, specific workloads may show performance impacts of up to 50%. Depending on their threat model, customers can decide to opt-out of the mitigation.
マイクロコードアップデートの緩和策を有効にしつつ、性能の劣化を抑える方法として、Intelはgather命令を使わないコンパイルオプションの情報も提供している(Table 5)。3rd-Partyのライブラリまでには適用できないが、緩和策を適用しつつ性能劣化を抑えたい場合には、選択肢の1つにはなると思う。
推奨されていない緩和策
AVXを無効化してリコンパイルするなどは推奨されていない。攻撃対象となる命令はAVXの命令だけではなくrep movなど一般的な命令を含む。そのため、攻撃を防ぐことはできない。
Discussion