Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ヒープメモリとその脆弱性(UAF/Double-Free概念入門)

Avatar for segfo segfo
September 23, 2026
16

 ヒープメモリとその脆弱性(UAF/Double-Free概念入門)

Avatar for segfo

segfo

September 23, 2026

Transcript

  1. ヒープメモリとその脆弱性 目次 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
  2. ヒープメモリとその脆弱性 ヒープの基礎 (1/9) - ヒープとは プログラムが実行中に必要なメモリを動的に確保・解放する仕組みがヒープです。 malloc / HeapAlloc でメモリを確保し、使い終わったら

    free / HeapFree で返却します この「確保 → 使用 → 解放」のサイクルが正しく回らないと、クラッシュや脆弱性の原因になりま す Heap Memory & Vulnerability Basics 6/17
  3. ヒープメモリとその脆弱性 ヒープの基礎 (2/9) - 用語 用語 ヒープ破損 二重解放 ヒープスプレー ページヒープ

    / Address Sanitizer 説明 解放済み領域への書き込みや範囲外書き込みです。クラッシュやコード実行の 足がかりになります 同じメモリを2回解放することです。コード実行の足がかりになり得ます 同サイズの確保を大量に繰り返し、解放済みの場所を攻撃者データで埋める技 法です 確保領域の前後にガードページを置くデバッグ機能です。ヒープ破損を壊した 瞬間に検出できます Heap Memory & Vulnerability Basics 7/17
  4. ヒープメモリとその脆弱性 ヒープの基礎 (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
  5. ヒープメモリとその脆弱性 ヒープの発展編 - 二重開放「現代のヒープ実装」における二重開放 現代のヒープアロケータは同じアドレスを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