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
ヒープメモリとその脆弱性(UAF/Double-Free概念入門)
Search
segfo
September 23, 2026
16
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ヒープメモリとその脆弱性(UAF/Double-Free概念入門)
segfo
September 23, 2026
More Decks by segfo
See All by segfo
Claudeと作った7つの作品
segfo
0
31
OpenMythosとは何者なのか
segfo
0
110
AI/LLM入門
segfo
0
150
ELFバイナリ静的解析入門
segfo
0
880
RustでOS作りたい話
segfo
4
1.1k
Featured
See All Featured
Everyday Curiosity
cassininazir
0
320
Being A Developer After 40
akosma
91
590k
Designing for Performance
lara
611
70k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
203
76k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
410
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
440
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
500
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
57k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Facilitating Awesome Meetings
lara
57
7.1k
Transcript
ヒープメモリとその脆弱性 Use-After-Free・二重解放をすると脆弱性になってしまう仕組み せくふぉ
ヒープメモリとその脆弱性 目次 01 ヒープとは 02 用語 03 掲示板の比喩 04 通常の確保と解放の流れ
05 Use-After-Free (UAF) 06 二重解放(Double-free)とは 07 「管理情報に矛盾が生じる」とは Heap Memory & Vulnerability Basics 08 なぜ同じ場所が2人に渡るのか 09 二重解放が UAF につながる理由 10 まとめ 11 現代のヒープアロケータにおける二重解放 1/17
ヒープメモリとその脆弱性 はじめに ヒープメモリの動作メカニズムを詳しく知っていますか? よくわからないよ、という方がほとんどだと思います。 このスライドは「そもそもヒープって何?」という方に向けて、UAF(Use-After-Free)や二重解放(ダ ブルフリー)といった脆弱性がなぜ生じるのか、そしてなぜ悪用できてしまうのかを理解するための足 掛かりとして作りました。 「こんなこと知ってるよ」という方へ 内容に誤りや突っ込みどころがあれば、ぜひ教えてください。 Heap
Memory & Vulnerability Basics 2/17
ヒープメモリとその脆弱性 Double-free(二重開放)の例 このような形で脆弱性レポートが出ます。ただ同じヒープ領域を二重に開放しただけなのに、CVSS基本 値が高いですね。大げさだと思いませんか? Heap Memory & Vulnerability Basics 3/17
ヒープメモリとその脆弱性 Use-After-Free(UAF)の例 このような形で脆弱性レポートが出ます。ただ開放した後に使っただけなのに、CVSS基本値が高いです ね。大げさだと思いませんか? Heap Memory & Vulnerability Basics 4/17
ヒープメモリとその脆弱性 大げさではありません UAFやダブルフリーは、単なるクラッシュでは済まず、任意コード実行につながる脆弱性です。だから CVSS が高くなります。 では、なぜコード実行に至るのか? クラッシュじゃすまない理由って何なのか? それをこれから、掲示板の比喩を使って解説していきます。 Heap Memory
& Vulnerability Basics 5/17
ヒープメモリとその脆弱性 ヒープの基礎 (1/9) - ヒープとは プログラムが実行中に必要なメモリを動的に確保・解放する仕組みがヒープです。 malloc / HeapAlloc でメモリを確保し、使い終わったら
free / HeapFree で返却します この「確保 → 使用 → 解放」のサイクルが正しく回らないと、クラッシュや脆弱性の原因になりま す Heap Memory & Vulnerability Basics 6/17
ヒープメモリとその脆弱性 ヒープの基礎 (2/9) - 用語 用語 ヒープ破損 二重解放 ヒープスプレー ページヒープ
/ Address Sanitizer 説明 解放済み領域への書き込みや範囲外書き込みです。クラッシュやコード実行の 足がかりになります 同じメモリを2回解放することです。コード実行の足がかりになり得ます 同サイズの確保を大量に繰り返し、解放済みの場所を攻撃者データで埋める技 法です 確保領域の前後にガードページを置くデバッグ機能です。ヒープ破損を壊した 瞬間に検出できます Heap Memory & Vulnerability Basics 7/17
ヒープメモリとその脆弱性 ヒープの基礎 (3/9) - 掲示板の比喩 ここでは掲示板に例えて説明します。 とある場所では、あなたが掲示板に何か書きたいときは以下の運用をしてくれと言われています。 1. 使いたくなったら掲示板を管理している人に「掲示板の空き情報ください1」と聞きます。 2.
「空いてる行番号2」を教えてもらいます。 3. 使い終わったら「使い終わったので3番解放しますね3」と掲示板を管理している人に伝えます。 つまり、掲示板の管理者が「管理台帳」を持っています。 管理者が許可した場所にしか書いてはいけない代わりに、使い終わったら書いたものを消さずにそのま ま管理者に伝えればいい(消す手間が省ける)という掲示板運用になっています。 これが、この世界3での掲示板4の使い方という前提でこれから話します。 1. mallocやHeapAllocといった操作と対応します 2. メモリアドレスの(位置)情報、つまりポインタのことです 3. この世界: OS=Operating Systemやプログラミング言語内のヒープメモリのこと。OSやアプリに応じたヒープメモリの実装(世界)があります 4. 掲示板:ヒープメモリの比喩です Heap Memory & Vulnerability Basics 8/17
ヒープメモリとその脆弱性 ヒープの基礎 (4/9) - 通常の確保と解放の流れ 1スライド前で説明した話を図解するとこうなります。 Heap Memory & Vulnerability
Basics 9/17
ヒープメモリとその脆弱性 ヒープの基礎 (5/9) - Use-After-Free (UAF)で発生する問題の流れ Heap Memory & Vulnerability
Basics 10/17
ヒープメモリとその脆弱性 ヒープの基礎 (6/9) - 二重解放(Double-free)とは Heap Memory & Vulnerability Basics
11/17
ヒープメモリとその脆弱性 ヒープの基礎 (7/9) - 二重開放 なぜ同じ場所が2人に渡るのか Heap Memory & Vulnerability
Basics 12/17
ヒープメモリとその脆弱性 ヒープの基礎 (8/9) - 二重開放 なぜ同じ場所が2人に渡るのか Heap Memory & Vulnerability
Basics 13/17
ヒープメモリとその脆弱性 ヒープの基礎 (9/9) - 二重解放が UAF につながる理由 Heap Memory &
Vulnerability Basics 14/17
ヒープメモリとその脆弱性 まとめ ヒープは、プログラムが実行中にメモリを借りて返す仕組みです UAF は、返した後の領域をまだ使ってしまう問題です 二重解放は、すでに返した領域をもう一度返してしまう問題です 二重解放によって、ヒープの管理情報に矛盾が生じることがあります その結果、同じ領域が複数の確保要求に返される場合があります すると、別用途のデータを元の利用者が扱ってしまう危険があります だから、UAFや二重解放は単なるクラッシュではなく、コード実行につながり得る脆弱性なのです。
現代のヒープアロケータはもう少し賢いので、二重解放を検出して異常終了する場合もあります。 次のスライドで解説します Heap Memory & Vulnerability Basics 15/17
ヒープメモリとその脆弱性 ヒープの発展編 - 二重開放「現代のヒープ実装」における二重開放 現代のヒープアロケータは同じアドレスを2連続freeをする場合においては検出できるくらいには賢くな っています。 しかし、確保・解放・確保を行ったケースでは1回目も2回目も同じアドレス(同じ掲示板の使用枠(例 示ではNo.3))が返ってくることがあります。 例えば以下のような状況です 1.
AさんがNo3枠確保する 2. AさんがNo3枠を解放する 3. Bさんが枠を確保(No3を確保) 4. AさんがNo3枠を解放する(勝手に解放されてしまった)=Bさんが持つポインタが未使用領域を指し ていて、誰かが確保したら使われてしまう可能性がある(つまりBさんの領域が勝手に書き換えられ る可能性がある) 現実に置き換えると4番の時点で管理簿上は解放されてるけど、Bさんが使い続けているから、Cさんに 枠を渡したらBさんが書いた内容を書き換えられてしまうので、仮にCさんが悪意者ならBさんに対して 不正な命令を実行させることも可能です。 16/17 Heap Memory & Vulnerability Basics
ヒープメモリとその脆弱性 ヒープの発展編 - 二重開放「現代のヒープ実装」における二重開放 Heap Memory & Vulnerability Basics 17/17