Skip to content

sslab-keio/mergeable-page-demo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

レジスタ

RMP_BASE ... RMP 用領域の始端アドレス (Page-Aligned) RMP_END ... RMP 用領域の終端アドレス (Page-Aligned)

(RMP_END - RMP_BASE) / (RMPE サイズ) * 4096 = RMP に守られた物理メモリの上限

RMP エントリ(RMPE)の構造

RMP に守られた物理メモリにはページ毎に RMPE エントリが割り当てられ、以下のフィールドを保持する。

ASID 対象の VM の ID (0 は VMM に割当)
TYPE 割当の種類(SHARED|PRIVATE|MERGEABLE|LEAF)
GPA type=MERGEABLE かつ FIXED=1 のとき:RMPE Leaf への物理アドレス
type=MERGEABLE かつ FIXED=0 、又は type=PRIVATE:割り当てた VM における gPA
VALIDATED VM からの PVALIDATE 命令が成功するとセットされ、VMM による RMPUPDATE でクリアされる
FIXED VMM による PFIX 命令が成功するとセット
FIXED=1 のときは VALIDATED は常に 1

RMP Leaf の構造

ASID をインデックスとした 8 バイトのエントリを 512 個保持する。 ある VM に対応する物理ページが PMERGE されると、ASID からエントリを参照し、その gPA が書き込まれる。その際 x86 の Present ビットと同様に 0 ビット目がセットされる。

gPT 及び nPT の拡張

各 PTE の[53:52]は割当の種類(SHARED|PRIVATE|MERGEABLE|LEAF)を表す

RMPUPDATE

引数: HPA, GPA, ASID, TYPE

  • VMM のみにより実行可能
  • HPA に対応する RMPE の各フィールドを更新する
  • 成功時には RMPE 中の VALIDATED はクリアされる
  • 既に TYPE=LEAF である RMPE は更新できない
  • ASID を変更する場合は対応する物理ページはゼロ埋めされる

PVALIDATE

引数: GVA, TYPE

  • VM のみのより実行可能
  • GVA に対応する RMPE の VALIDATED をセットする
  • RMPE 内の TYPETYPE と一致しない場合エラー

PFIX

引数: HPA, LEAF

  • VMM のみにより実行可能
  • HPA が指す物理ページを読み込み専用にし、LEAF が指す物理ページを RMP Leaf として使用する
  • HPA に対応する RMPE の FIXED がセットされ、GPA には LEAF が代入され、ASID を RMPE Leaf のインデックスとして参照したエントリ内に GPA の値が入る
  • HPA に対応する RMPE は TYPE=MERGEABLE かつ FIXED=0 かつ VALIDATED=1 である必要がある
  • LEAF に対応する RMPE は TYPE=LEAFである必要がある
  • TLB はクリア

PMERGE

引数: HPA1, HPA2

  • VMM のみにより実行可能
  • HPA1 が指す物理ページに HPA2 が指す物理ページをマージする
  • HPA1 に対応する RMPE の GPA 及び HPA2 に対応する RMPE の ASID から RMP Leaf エントリを参照し、HPA2 に対応する RMPE の GPA を書き込む
  • マージ後の HPA2 が指す物理ページはゼロ埋めされる
  • VMM はその後 nPT エントリ内の hPA を変更することが期待される
  • HPA1HPA2 が指す物理ページの内容は同じである必要がある
  • HPA1HPA2 に対応する RMPE は TYPE=MERGEABLE かつ VALIDATED=1 である必要がある
  • HPA1 に対応する RMPE は FIXED=1、 HPA2 に対応する RMPE は FIXED=0 である必要がある
  • TLB はクリア

PUNMERGE

引数: HPA1, HPA2, ASID

  • VMM のみにより実行可能
  • HPA1 が指す FIXED な物理ページからページの内容を HPA2 が指す位置にコピーし、それを ASID に対応する VM のみからアクセスできるようにする
  • HPA1 に対応する RMPE の GPAASID から RMP Leaf のエントリを参照し、そこに記された gPA 及び ASID を、 HPA2 に対応する新たに作成された RMPE にコピーし、エントリを削除する。
  • VMM はその後 nPT エントリ内の hPA を変更することが期待される
  • 新たに作成された RMPE は VALIDATED=1, TYPE=MERGEABLE, FIXED=0 となる
  • HPA1 に対応する RMPE は MERGEABLE=1 かつ FIXED =1 である必要がある
  • HPA1 に対応する RMPE の GPA の指す RMP Leaf 内の ASID が指すエントリが存在する必要がある
  • HPA2 に対応する RMPE は TYPE=SHARED である必要がある
  • TLB はクリア

PUNFIX

引数:HPA

  • VMM のみにより実行可能
  • MERGEABLE なページの読み取り専用状態を解除し、RMP Leaf に使用されていたページを開放する
  • HPA に対応する RMPE の ASIDGPA から RMP Leaf エントリを辿り、gPA を RMPE 内の GPA にセットし、RMP Leaf に使用されたページに対応する RMPE は TYPE=SHARED とする
  • HPA に対応する RMPE の ASIDGPA から参照する RMP Leaf エントリが存在する必要がある
  • HPA に対応する RMPE は FIXED=1 である必要がある

メモリ参照

  • RMP 用領域への書き込みは不可
  • RMP に保護された領域外へのアクセスはいずれも可
  • gPTE と nPTE の[53:52]からメモリアクセスタイプ(SHARED | PRIVATE | MERGEABLE)決める
  • メモリアクセスタイプと RMPE の TYPE が異なる場合はエラー
  • FIXED=1 のページへの書き込みは不可
  • PRIVATE=1 又は、 MERGEABLE=1 かつ FIXED=0 のページでは GPA とメモリアクセス時の gPA が同じであることを確認
  • MERGEABLE=1 かつ FIXED=1 のページでは GPA から RMP Leaf を辿り、その中に ASID に対応するエントリが存在することを確認し、それが指す gPA がメモリアクセス時の gPA と同じであることを確認

考えられる攻撃とその対応

  • MERGEABLE / PRIVATE なページの ASID 変更による他の VM からの参照
  • MERGEABLE / PRIVATE なページを SHARED に変更することによる他の VM/VMM からの参照
    • RMPUPDATE 時にページをゼロ埋め
  • MERGEABLE / PRIVATE なページに対応する RMPE を VMM が更新し、そのページに対して他の gPA / VM から読み書きする (Memory Aliasing)
    • RMPUPDATE 時に VALIDATED=0 となるため書き込み時にメモリ参照失敗
  • VMM が nPT を更新し、MERGEABLE / PRIVATE なページを他の hPA に割り当てる (Memory Re-mapping)
    • VM が 2 回 PVALIDATE を行わない限り VM からはメモリアクセスできない
  • マージ済ページへの未登録な VM からのアクセス
    • RMP Leaf にエントリが存在せず、メモリ参照失敗
  • 内容の異なるページのマージによるメモリ内容改ざん
    • PMERGE 失敗
  • マージ済みのページへの VMM/VM からの改ざん
    • FIXED=1 によりメモリ参照失敗
  • VMM が任意にエントリを編集したページを RMP Leaf として PFIX を行うことで、VM から PVALIDATE を行わずに gPA->hPA のマッピングを改ざんする
    • PFIX 時に RMP Leaf はゼロ埋めされる
  • VMM による RMP Leaf の改ざん
    • TYPE=LEAF のページは書き込み不可
  • マージによって開放されたページの VMM / 他の VM からのアクセス
    • PMERGE 時にマージ元のページはゼロ埋めされる
  • 悪意ある VM が他の VM のページの内容を予想し、その内容と同じページを用意し、VMM からの PMERGE による TLB キャッシュクリアを観測することで、他の VM のメモリ内容を観測する
    • 要検討
  • 悪意ある VM が他の VM のページの内容を予想し、その内容と同じページを用意し、VMM による PMERGE を待った後に書き込みを行うことで CoW のレイテンシを観測し、他の VM のメモリ内容を観測する
    • 要検討
    • MERGEABLE なページは常に読み込み専用にする?

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages