Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

そうでないこともある ● 例: Ubuntu20.04の/bin/sleepコマンド ● 演習 ○ sleepコマンドのreadelf -Sを見てみる ○ “sleep infinity”実行中のメモリマップを /proc//mapsで見てみる ● 違い ○ 実行ファイルのセクションに書いてあるマップ先アドレスと実際の値が違う 4

Slide 5

Slide 5 text

演習 ● “sleep infinity”をもう一度実行した後にメモリマップを確認 5

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

理由 ● sleepコマンドは実行するたびにセクションのマップ先アドレスがランダムに変わる ○ これがAddress Space Location Randomization(ASLR) ○ ASLRが機能するように実行ファイルが Position Independent Executable(PIE)になっている ● 目的 ○ 特定アドレスのコードを実行するようなセキュリティ攻撃を避ける ● どんなプログラムがPIE? ○ Ubuntuだと昔はsshなどの一部重要プログラムだけだった ○ 17.04以降はすべて(例外があるかも?よく知らない) 7