Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
5分でわかるPage-Fault Weird Machine
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Arata
March 21, 2026
450
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
5分でわかるPage-Fault Weird Machine
Arata
March 21, 2026
More Decks by Arata
See All by Arata
Black Hat USA 2026の面白かった発表を紹介
arata_nvm
1
19
Operating Systems: Three Easy Pieces, Chapter 49 / Sun's Network File System (NFS)
arata_nvm
0
21
デコンパイラ研究調査
arata_nvm
1
39
コンパイラ基盤を支える言語たち
arata_nvm
1
120
LLVMのDSL”TableGen”向け言語サーバーの開発
arata_nvm
0
43
eBPFを用いたAndroid向けデバッガ「eDBG」のx86_64 Linuxへの移植
arata_nvm
0
28
Pythonのcopy-and-patch JITの実装を読む
arata_nvm
0
180
eBPFを使った動的解析手法
arata_nvm
1
830
カーネルハック実験の振り返り
arata_nvm
1
76
Featured
See All Featured
Building a Scalable Design System with Sketch
lauravandoore
464
34k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
4 Signs Your Business is Dying
shpigford
187
23k
How to Think Like a Performance Engineer
csswizardry
28
2.8k
We Have a Design System, Now What?
morganepeng
55
8.3k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
560
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
35
2.8k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
520
The Mindset for Success: Future Career Progression
greggifford
PRO
0
490
Statistics for Hackers
jakevdp
799
230k
First, design no harm
axbom
PRO
2
1.3k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
3k
Transcript
5分でわかる Page-Fault Weird Machine 2026/03/21 情報科学若手の会・セキュリティ若手の会 春の陣2026 @Arata
2026/03/21 5分でわかるPage-Fault Weird Machine | Arata x86のページフォルトの仕組みを悪用して、 CPU命令を1つも実行せずに計算を行う手法 元論文: Bangert
et al. "The Page-Fault Weird Machine: Lessons in Instruction-less Computation" (WOOT'13) Page-Fault Weird Machineとは 2
2026/03/21 5分でわかるPage-Fault Weird Machine | Arata • ページフォルトでmovdbz命令を構成する方法を理解する ◦ movdbz命令1つでチューリング完全
目標 3
2026/03/21 5分でわかるPage-Fault Weird Machine | Arata movdbz dst, src, label_zero,
label_nonzero 意味: • srcをデクリメントしてdstに書き込み、 ◦ dst > 0 ならば label_nonzeroにジャンプする ◦ dst = 0 ならば label_zeroにジャンプする • 要するにデクリメントと分岐ができる movdbz命令 4
2026/03/21 5分でわかるPage-Fault Weird Machine | Arata • x86ではページテーブルを使って仮想アドレスを物理アド レスに割り当てる •
割り当てられていない仮想アドレスにアクセスすると、 ページフォルトという例外が発生する x86速習(1/3): ページフォルト 5 割り当て済み 未割り当て OK ページフォルト
2026/03/21 5分でわかるPage-Fault Weird Machine | Arata • 例外が起きるとCPUは例外ハンドラを呼び出す • x86ではハンドラとしてタスクスイッチを行える
• 例 ◦ #PF (ページフォルト)発生 → タスクAに切り替え ◦ #DF (ダブルフォルト)発生 → タスクBに切り替え x86速習(2/3): 例外ハンドラ 6
2026/03/21 5分でわかるPage-Fault Weird Machine | Arata • レジスタの値を入れ替える機能 • タスク毎のTSSを用意して保存・復元
タスクスイッチ時の動作 1. レジスタを今のタスクのTSSに保存 2. 次のタスクのTSSからレジスタを復元 x86速習(3/3): タスクスイッチ 7 TSS
2026/03/21 5分でわかるPage-Fault Weird Machine | Arata • movdbz1命令ごとにタスクと例外ハンドラを用意 • ページフォルトをトリガとしたタスクスイッチを繰り返
して計算を進める • ESPを(movdbzの世界の)レジスタとして用いる movdbz命令の構成 8 タスクA タスクB #PF / #DF #PF / #DF タスクC #PF / #DF movdbz movdbz movdbz
2026/03/21 5分でわかるPage-Fault Weird Machine | Arata Q1. ページフォルトを発生させる方法 Q2. デクリメントの実現方法
Q3. 分岐の実現方法 movdbz命令の構成 9 タスクA タスクB #PF / #DF #PF / #DF タスクC #PF / #DF movdbz movdbz movdbz
2026/03/21 5分でわかるPage-Fault Weird Machine | Arata Q1. ページフォルトを発生させる方法 Q2. デクリメントの実現方法
Q3. 分岐の実現方法 movdbz命令の構成 10 タスクA タスクB #PF / #DF #PF / #DF タスクC #PF / #DF movdbz movdbz movdbz
2026/03/21 5分でわかるPage-Fault Weird Machine | Arata タスクのEIP(命令ポインタ)を未割り当てのアドレスに設 定しておく → タスクスイッチ直後にEIPを読んで命令をフェッチ
→ 未割り当てなのでフェッチできない → ページフォルトが発生 タスクスイッチ直後にページフォルトを起こせる movdbz命令の構成: ページフォルト 11
2026/03/21 5分でわかるPage-Fault Weird Machine | Arata ✅ Q1. ページフォルトを発生させる方法 Q2.
デクリメントの実現方法 Q3. 分岐の実現方法 movdbz命令の構成 12 タスクA タスクB #PF / #DF #PF / #DF タスクC #PF / #DF movdbz movdbz movdbz
2026/03/21 5分でわかるPage-Fault Weird Machine | Arata ページフォルトでerror codeがスタックにプッシュされる → ESP(スタックポインタ)が4減算される
ページフォルトでESPを4減算できる=デクリメント movdbz命令の構成: デクリメント 13
2026/03/21 5分でわかるPage-Fault Weird Machine | Arata ✅ Q1. ページフォルトを発生させる方法 ✅
Q2. デクリメントの実現方法 Q3. 分岐の実現方法 movdbz命令の構成 14 タスクA タスクB #PF / #DF #PF / #DF タスクC #PF / #DF movdbz movdbz movdbz
2026/03/21 5分でわかるPage-Fault Weird Machine | Arata #PF時にESP=0だとダブルフォルトが発生することを利用 • ESP >
0の場合 ◦ ESP -= 4 ◦ ページフォルト発生 • ESP = 0の場合 ◦ ESP -= 4 → オーバーフローするので実行できない! ◦ ダブルフォルト発生 ESP>0かどうかで#PF,#DFどちらかのハンドラが実行される ref: https://hikalium.github.io/opv86/sdmparser/pdf/325383-sdm-vol-2abcd.pdf#page=1253 movdbz命令の構成: 分岐 15
2026/03/21 5分でわかるPage-Fault Weird Machine | Arata • タスク1にスイッチ ◦ EIPが未割り当てアドレスなのでページフォルト発生
◦ error codeをスタックにプッシュしようとする(分岐) ▪ ESPが0より大きい • プッシュに成功する(デクリメント) • #PFのハンドラ実行 • タスク2にスイッチ ▪ ESPが0と等しい • プッシュに失敗する • #DFのハンドラ実行 • タスク3にスイッチ movdbz命令の構成: まとめると 16
2026/03/21 5分でわかるPage-Fault Weird Machine | Arata tkbctf5でPage-Fault Weird Machineを題材にした Reversing問題を作りました
解いてみてください! https://alpacahack.com/challenges/classic おわりに 17
2026/03/21 5分でわかるPage-Fault Weird Machine | Arata • IDTの変更には通常lidt命令の実行が必要 ◦ 一方で、もちろん命令は実行したくない
• TSSのCR3でページテーブルを切り替えられることを利用 • 各タスクのページテーブルで、IDTを0x40000にマップす るよう設定 • タスクスイッチでCR3が切り替わり、自動でそのタスク に対応するIDTが参照される 付録: タスクごとにIDTを切り替える方法 18
2026/03/21 5分でわかるPage-Fault Weird Machine | Arata • タスクスイッチでタスクにbusy flagが立ち、そのタスク にスイッチできなくなる
• TSSのEAXと、GDT descriptorを同じ物理アドレスに マップするよう設定しておく ◦ また、EAXをbusy flagなしのdescriptorの値に設定しておく ◦ これでレジスタの保存でbusy flagがクリアされるようになる • 1つのタスクはbusy flagが立っているので、TSSをマップ するスロットが最低3つは必要になる 付録: TSSのbusy flagの回避 19
2026/03/21 5分でわかるPage-Fault Weird Machine | Arata • タスクスイッチでESPの値も保存・復帰されてしまうた め、複数タスクでESPを共有できない •
TSSをページ境界を跨ぐように配置し、ESP以前と以降を 別のページにマップする • これでESPを特定の物理アドレスにマップできるので、同 じ物理アドレスにマップするよう設定すれば複数のタス クでESPを共有できる 付録: 複数のタスクでESPを共有する方法 20
2026/03/21 5分でわかるPage-Fault Weird Machine | Arata • https://www.usenix.org/system/files/conference/wo ot13/woot13-bangert.pdf •
https://github.com/kristerw/instless_comp ◦ https://kristerw.blogspot.com/2015/08/instruction-less-c omputation.html ◦ https://kristerw.blogspot.com/2015/08/instruction-less-c omputation-technical.html • https://github.com/jbangert/trapcc 参考文献 21