Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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