什麼是 ASLR?
緩衝區溢位攻擊的核心前提是「攻擊者能預測目標記憶體位址」。ASLR(Address Space Layout Randomization)正是針對這點的作業系統防禦機制——每次程式執行時,將堆疊、堆積、共享函式庫等區段載入至隨機化的記憶體位址,讓攻擊者的跳轉目標失效。
ASLR 如何抵禦攻擊?
傳統緩衝區溢位攻擊(如 ret2libc)需要硬編碼 system() 或 /bin/sh 的固定位址。啟用 ASLR 後,每次執行的 libc 基址皆不同,攻擊者必須先洩漏(leak)記憶體位址才能繼續利用漏洞,大幅提高攻擊複雜度。Linux 核心以 /proc/sys/kernel/randomize_va_space 控制 ASLR 等級:0 為關閉,1 為部分隨機化,2 為完整隨機化(預設值)。
# 查看目前 ASLR 狀態(Linux)
cat /proc/sys/kernel/randomize_va_space
# 執行兩次,觀察 libc 載入位址是否不同
ldd /bin/ls | grep libc
ldd /bin/ls | grep libc
💡 重點整理
- 隨機化範圍:涵蓋堆疊(stack)、堆積(heap)、共享函式庫(libc 等)三大區段。
- 必要搭配:ASLR 需與 PIE(Position Independent Executable) 同時啟用,才能隨機化主程式本體位址。
- 已知限制:32 位元系統熵值(entropy)僅約 16 bits,可被暴力破解(brute-force);64 位元系統熵值達 28~40 bits,實務上難以暴力破解。
- 常見繞過手法:資訊洩漏(info leak)、部分位址覆寫(partial overwrite)、Heap Spray 等仍可削弱 ASLR 防護效果。
ASLR 是現代作業系統(Linux、Windows、macOS)的標配防禦層。它無法單獨杜絕所有攻擊,但能與 Stack Canary、NX(No-Execute) 共同構成縱深防禦,顯著提高漏洞利用的門檻與成本。
📚 參考文獻
- Linux Kernel Documentation — kernel.randomize_va_space 官方說明
- PaX Team — ASLR 原始設計文件(PaX Project)
- OWASP — Buffer Overflow Attack 技術說明
⚠️ 本文內容基於撰寫時的最新資訊,實際應用時請參考官方文件的最新版本。
留言
張貼留言