基本介紹
- 中文名:位址空間配置隨機載入
- 外文名:Address space layout randomization
歷史,優點,效用,作用,實現,OpenBSD,Linux,Windows,Mac OS X,iOS,Android,開發,
歷史
Linux PaX項目首先創造了術語“ASLR”,並於2001年7月發布了ASLR的第一個設計和實現,作為Linux核心的補丁。它被視為一個完整的實現,自2002年10月以來也提供了核心堆疊隨機化的補丁。
默認情況下支持ASLR的第一個主流作業系統是2003年的OpenBSD版本3.4,其次是2005年的Linux。
優點
地址空間隨機化通過使攻擊者更難以預測目標地址來阻礙某些類型的安全攻擊。例如,試圖執行返回libc攻擊的攻擊者必須找到要執行的代碼,而嘗試執行堆疊注入的shellcode的其他攻擊者必須首先找到堆疊。在這兩種情況下,系統都會掩蓋來自攻擊者的相關記憶體地址。必須猜測這些值,並且由於應用程式崩潰,通常無法恢復錯誤的猜測。
效用
地址空間布局隨機化基於攻擊者猜測隨機放置區域的位置的低機會。通過增加搜尋空間來增加安全性。因此,當隨機偏移中存在更多熵時,地址空間隨機化更有效。通過增加隨機化發生的虛擬存儲區空間量或減少隨機化發生的時間來增加熵。該周期通常儘可能小,因此大多數系統必須增加VMA空間隨機化。
為了打敗隨機化,攻擊者必須成功猜出他們想要攻擊的所有區域的位置。對於堆疊和堆等數據區域,可以載入自定義代碼或有用數據,可以使用NOP幻燈片代碼或重複複製數據來攻擊多個狀態。如果該區域被隨機化為少數幾個值中的一個,則允許攻擊成功。相反,需要準確發現諸如庫庫和主執行檔之類的代碼區域。這些區域通常是混合的,例如堆疊框架被注入堆疊並返回庫。
作用
實現
大部分主流的作業系統已經實現了ASLR。
OpenBSD
OpenBSD作為一個主流的作業系統,已在ASLR推出2年後支持,並在默認情況下是打開的。
Linux
Linux已在核心版本2.6.12中添加ASLR。自2005年6月發布的核心版本2.6.12以來,Linux核心默認啟用弱形式的ASLR。Linux核心的PaX和Exec Shield補丁集提供了更完整的實現。 Linux的Exec Shield補丁在16位元組的周期內提供19位堆疊熵,在1頁4096位元組的周期內提供8位mmap基本隨機化。這將堆疊基礎放置在8 MB寬的區域中,包含524 288個可能的位置,mmap基礎在1 MB寬的區域中,包含256個可能的位置。
與位置無關的執行檔(PIE)實現了主可執行二進制檔案的隨機基址,並且自2003年以來一直存在。它為主執行檔提供與用於共享庫相同的地址隨機性。 PIE功能僅用於面向守護進程的網路- PIE功能不能與同一執行檔的預連結功能一起使用。預連結工具在預連結時而不是運行時實現隨機化,因為通過設計prelink旨在處理動態連結器之前重定位庫,這允許重定位在程式的多次運行中發生一次。結果,真正的地址空間隨機化將破壞預連結的目的。
核心地址空間布局隨機化(KASLR),通過隨機化核心代碼在引導時放置的位置,支持地址空間隨機化以運行Linux核心映像被合併到核心版本3.14中的Linux核心主線上,發布於30 2014年3月。編譯時,可以通過將nokaslr指定為核心的引導參數之一來在引導時禁用它。
x86處理器中存在一些可能泄漏核心地址的旁路攻擊。在2017年底,開發了核心頁表隔離(KPTI aka KAISER)來抵禦這些攻擊。
Windows
Windows Server 2008,Windows 7,Windows Vista,Windows Server 2008 R2,默認情況下啟用ASLR,但它僅適用於動態程式庫和執行檔。
Mac OS X
Apple在Mac OS X Leopard 10.5(2007年十月發行)中某些庫導入了隨機地址偏移,但其實現並沒有提供ASLR所定義的完整保護能力。而Mac OS X Lion 10.7則對所有的應用程式均提供了ASLR支持。Apple宣稱為應用程式改善了這項技術的支持,能讓32及64位的應用程式避開更多此類攻擊。從OS X Mountain Lion 10.8開始,核心及核心擴充(kext)與zones在系統啟動時也會隨機配置。
iOS
在Mac OS X Leopard 10.5(2007年10月發布)中,Apple為系統庫引入了隨機化。
在Mac OS X Lion 10.7(2011年7月發布)中,Apple將其實現擴展到涵蓋所有應用程式,並聲明“地址空間布局隨機化(ASLR)已針對所有應用程式進行了改進。現在可用於32位應用程式(如堆 記憶體保護),使64位和32位應用程式更能抵禦攻擊。
從OS X Mountain Lion 10.8(2012年7月發布)及之後,整個系統(包括核心以及kexts和zone)在系統啟動期間隨機重新定位。
Android
Android 4.0提供地址空間配置隨機載入(ASLR),以幫助保護系統和第三方應用程式免受由於記憶體管理問題的攻擊,在Android 4.1中加入地址無關代碼(position-independent code)的支持。Android 4.0 Ice Cream Sandwich提供地址空間布局隨機化(ASLR),以幫助保護系統和第三方應用程式免受記憶體管理問題的攻擊。 Android 4.1中添加了與位置無關的可執行支持。Android 5.0放棄了非PIE支持,並要求所有動態連結的二進制檔案與位置無關。2015年10月26日,Android開源項目接受了庫載入順序隨機化,並包含在Android 7.0版本中。
開發
利用分支目標緩衝區的側通道攻擊被證明可以繞過ASLR保護。2017年,一場名為“ASLR⊕Cache”的攻擊被證明可以在使用JavaScript的網路瀏覽器中擊敗ASLR。