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

Address Space Layout Randomization(ASLR)

Address Space Layout Randomization(ASLR)

以下動画のテキストです
https://youtu.be/iCCNEoCKdHE

842515eaf8fbb2dfcc75197e7797dc15?s=128

Satoru Takeuchi
PRO

January 08, 2022
Tweet

Transcript

  1. Address Space Location Randomization (ASLR) Jan. 8th, 2022 Satoru Takeuchi

    twitter: satoru_takeuchi, EnSatoru 1
  2. 前回までのあらすじ • Executable and Linking Format(ELF)というフォーマット • 実行ファイルのコードやデータはメモリ上にマップされる • どこのオフセットのデータをどこにマップするるか実行ファイルに書いてる

    2 test(実行ファイル) メモリ コード データ コード データ マップ
  3. そうでないこともある • 例: Ubuntu20.04の/bin/sleepコマンド • 演習 ◦ sleepコマンドのreadelf -Sを見てみる ◦

    “sleep infinity”実行中のメモリマップを /proc/<pid>/mapsで見てみる 3
  4. そうでないこともある • 例: Ubuntu20.04の/bin/sleepコマンド • 演習 ◦ sleepコマンドのreadelf -Sを見てみる ◦

    “sleep infinity”実行中のメモリマップを /proc/<pid>/mapsで見てみる • 違い ◦ 実行ファイルのセクションに書いてあるマップ先アドレスと実際の値が違う 4
  5. 演習 • “sleep infinity”をもう一度実行した後にメモリマップを確認 5

  6. 演習 • “sleep infinity”をもう一度実行した後にメモリマップを確認 • 結果 ◦ さっきとアドレスが違う! 6

  7. 理由 • sleepコマンドは実行するたびにセクションのマップ先アドレスがランダムに変わる ◦ これがAddress Space Location Randomization(ASLR) ◦ ASLRが機能するように実行ファイルが

    Position Independent Executable(PIE)になっている • 目的 ◦ 特定アドレスのコードを実行するようなセキュリティ攻撃を避ける • どんなプログラムがPIE? ◦ Ubuntuだと昔はsshなどの一部重要プログラムだけだった ◦ 17.04以降はすべて(例外があるかも?よく知らない) 7