ESXiの透過的なページ共有 (TPS:Transparent Page Sharing)と脆弱性の研究論文

ESXiの透過的なページ共有 (TPS:Transparent Page Sharing)が学術論文の指摘でデフォルトOFFになったと聞くが、攻撃をうけるケースが分からず調べたのでメモ。
(どうやら正しくは、VM間のTPSとVM内のTPSの2パターンがあり、デフォルトOFFはVM間のTPSの模様)

公開されている学術論文では、透過的なページ共有が 2 つの仮想マシンの間で有効化されている場合、キャッシュ メモリのフラッシュとリロードを強制することにより、ホスト サーバの同じ物理プロセッサで実行している別の仮想マシンで使用される AES 暗号キーを試して決定するためのメモリ タイミングを計測することは可能であることが示されています。この技術は、VMware で本番環境では再作成されないと考えている標準以外の方法で構成された高度に管理されたシステムでのみ動作します。

https://kb.vmware.com/s/article/2080735?lang=ja


脆弱性研究論文はなかなか見つけられなかったが「Wait a minute! A fast, Cross-VM attack on AES」という論文該当しそうに見える。確かにAbstractで「Cross-VM Flush+Reload cache attacks in VMware VMs to recover the keys of an AES」と記載しているので後ほど読んで仕組みを理解したいと思う。

Abstract. In cloud computing, efficiencies are reaped by resource sharing such as co-location of computation and deduplication of data. This work exploits resource sharing in virtualization software to build a powerful cache-based attack on AES. We demonstrate the vulnerability by mounting Cross-VM Flush+Reload cache attacks in VMware VMs to recover the keys of an AES implementation of OpenSSL 1.0.1 running inside the victim VM. Furthermore, ...

Wait a minute! A fast, Cross-VM attack on AES

斜めみの範囲では以下の理由と原理で「Flush+Reload cache attacks」が成功するように理解した。

  • TPSで2つのVMのメモリーがHV上で共有状態(EPTは別だが、最終的は物理メモリーが共有された状態)になる前提
  • この時、物理メモリーが共有状態のため、CPUのキャッシュメモリーも双方のVMで共有状態になる
  • この時に1つ目のVMは該当の共有状態のメモリーアドレスのキャッシュをFLUSHし、他方のVMがメモリを書き換えるのを待つ
  • 2つめのVMがメモリーを書き換えた瞬間(実際はキャッシュメモリーのみ更新されているタイミング)を見計らって該当アドレスを参照する。この時、メモリーが書き換わっていればアクセス時間の変化が観測でき、ここから内容を推測できる可能性がある。