什麼是 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 Documentati...