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
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
22
Operating Systems: Three Easy Pieces, Chapter 49 / Sun's Network File System (NFS)
arata_nvm
0
23
デコンパイラ研究調査
arata_nvm
1
44
コンパイラ基盤を支える言語たち
arata_nvm
1
130
LLVMのDSL”TableGen”向け言語サーバーの開発
arata_nvm
0
46
eBPFを用いたAndroid向けデバッガ「eDBG」のx86_64 Linuxへの移植
arata_nvm
0
29
Pythonのcopy-and-patch JITの実装を読む
arata_nvm
0
200
eBPFを使った動的解析手法
arata_nvm
1
840
カーネルハック実験の振り返り
arata_nvm
1
80
Featured
See All Featured
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.2k
GraphQLとの向き合い方2022年版
quramy
50
15k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.6k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
730
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
3.2k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
350
YesSQL, Process and Tooling at Scale
rocio
174
15k
Writing Fast Ruby
sferik
630
63k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
12k
Git: the NoSQL Database
bkeepers
PRO
432
67k
エンジニアに許された特別な時間の終わり
watany
109
250k
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