/********************************************************************* * Author : Samson * Date : 12/07/2014 * Test platform: * 3.13.0-24-generic * GNU bash, 4.3.11(1)-release * *******************************************************************/
ASLR:
Address space layout randomization:地址空間布局隨機化,是參與保護緩沖區溢出問題的一個計算機安全技術。是為了防止攻擊者在內存中能夠可靠地對跳轉到特定利用函數。ASLR包括隨機排列程序的關鍵數據區域的位置,包括可執行的部分、堆、棧及共享庫的位置。
歷史:
在1997年,Memco軟件公司實現了一個有限的堆棧隨機化作為SeOS訪問控制產品的一部分。
Linux Pax項目第一次創建了ASLR這個術語。ASLR的第一次設計實現是在2001年7月。從2002年10月開始提供內核棧隨機化的實現。ASLR相對於其他實現方式提供了更多的熵。
作用:
ASLR通過制造更多讓攻擊者預測目標地址的困難以阻礙一些類型的安裝攻擊。例如:攻擊者試圖執行返回到libc的攻擊必須要找到要執行的代碼,而其他攻擊者試圖執行shellcode注入棧上則必須首先到棧。在這兩種情況下,系統將模糊攻擊者相關的存儲器地址。這些值被猜中,並且錯誤的猜測由於應用程序崩潰通常是不可恢復的。
有效性
地址空間布局隨機化是基於攻擊者猜測隨機化空間位置的可能性降低。安全是通過增加搜索空間的方式來實現的。因此,ASLR提供更多的熵存在於隨機偏移中時是更有效的。熵增加或許提高了其隨機出現虛擬內存區域的空間量或減少了其隨機發生的時期。該期間通常被實現盡可能小,因此,大多數系統必須增加VMA空間隨機化。
要打敗隨機化,攻擊者必須成功猜出所有他們想要攻擊的區域的位置。為數據區,如堆和棧,定制代碼或者有用的數據可以被加載,一個以上的狀態可以通過使用NOP滑動代碼或數據的重復拷貝被攻擊。如果一個區域被分配到少數值中的一個將被允許攻擊成功。與此相反,代碼區域例如:基礎庫,主要的可執行的需要准確地發現。通常這些區域被混合,例如堆棧楨被注入到棧和動態庫中。
英文原文地址:
http://en.wikipedia.org/wiki/Address_space_layout_randomization#Linux
ps:
GNU Linux中關閉ASLR的方法:
disable ASLR:
echo 0 > /proc/sys/kernel/randomize_va_space
cat /proc/sys/kernel/randomize_va_space