官术网_书友最值得收藏!

2.6.8 檢測和恢復(fù)

地址空間布局隨機化(Address Space Layout Randomization,ASLR)是許多操作系統(tǒng)的一項安全功能,其目的是為了防止執(zhí)行任意代碼。該功能對程序所使用的內(nèi)存頁的地址隨機化。ASLR不能防止在棧上的返回地址被基于棧的溢出覆寫。然而,通過對棧頁地址隨機化,可以防止攻擊者正確地預(yù)測外殼代碼、系統(tǒng)函數(shù),或他們想調(diào)用的面向返回值編程的小工具地址。一些ASLR實現(xiàn)在每次程序運行時對內(nèi)存地址隨機化。因此,如果重新啟動該程序(也許是因為崩潰),泄漏的內(nèi)存地址就沒用了。

ASLR降低成功攻擊的可能性,但并沒有消除這種可能性。因為在理論上,攻擊者是有可能正確地預(yù)測或猜測他們的外殼代碼的地址并用這個值覆寫棧上的返回指針的。

此外,即使基于每次調(diào)用都隨機化地址的實現(xiàn),ASLR仍可以被一個長期運行的進程上的攻擊者繞過。如果攻擊者能發(fā)現(xiàn)它的地址,他們就可以執(zhí)行他們的外殼代碼,而無須終止進程。例如,通過利用一個格式字符串漏洞或其他信息泄露來顯示內(nèi)存的內(nèi)容,就可以做到這一點。

Linux。ASLR技術(shù)于2000年首次引入到Linux的PaX項目。雖然PaX補丁并沒有被提交到主流Linux內(nèi)核,但它的許多功能都被納入主流的Linux發(fā)行版。例如,自2008年以來和自2007年以來的ASLR一直是Ubuntu和Debian的一部分。這兩個平臺都允許通過下面的命令對ASLR進行精細的調(diào)優(yōu):


sysctl -w kernel.randomize_va_space=2

大多數(shù)平臺在引導(dǎo)過程中執(zhí)行此命令。randomize_va_space參數(shù)可能會取以下值:

0.完全關(guān)閉ASLR。這僅在不支持此功能的平臺上是默認的。

1.對棧、庫和位置無關(guān)的二進制程序打開ASLR。

2.對堆以及對由選項1隨機化的內(nèi)存打開ASLR。

Windows。自從Vista以來,ASLR一直在Windows中可用。在Windows中,當系統(tǒng)啟動后,ASLR把可執(zhí)行映像移動到任意位置,使利用代碼更難執(zhí)行可預(yù)見的操作。對于一個支持ASLR技術(shù)的組件,它加載的所有組件也必須支持ASLR。例如,如果A.exe依賴于B.dll和C.dll,那么所有這三個程序都必須支持ASLR。默認情況下,Windows Vista和Windows操作系統(tǒng)的后續(xù)版本對系統(tǒng)的動態(tài)鏈接庫(DLL)和可執(zhí)行文件(EXE文件)進行隨機化。然而,自定義DLL和EXE的開發(fā)人員必須選擇使用/DYNAMICBASE鏈接器選項以支持ASLR。

Windows的ASLR也隨機化堆和棧內(nèi)存。堆管理器會在一個隨機位置創(chuàng)建堆,以幫助減少企圖利用基于堆的緩沖區(qū)溢出的漏洞利用獲得成功的機會。對運行于Windows Vista和更高版本上的所有應(yīng)用程序,默認情況下,堆隨機化都是啟用的。當一個線程在一個用/DYNAMICBASE鏈接的進程中啟動時,Windows Vista和更高版本的Windows把線程的棧移動到一個隨機位置,以幫助減少基于棧的緩沖區(qū)溢出的利用代碼獲得成功的機會。

要在Microsoft Windows下啟用ASLR,你應(yīng)該遵循如下規(guī)范。

·用微軟的鏈接器版本8.00.50727.161(第一個支持ASLR的版本)或更高版本來鏈接

·用/DYNAMICBASE鏈接開關(guān)鏈接,若使用微軟鏈接器版本10.0或更高版本,則默認啟用/DYNAMICBASE

·在Windows Vista和更高版本測試你的應(yīng)用程序,并記錄和修復(fù)由于使用ASLR產(chǎn)生的故障

主站蜘蛛池模板: 扎兰屯市| 革吉县| 夏津县| 陵川县| 通州市| 合肥市| 宿州市| 仪征市| 车险| 饶阳县| 木兰县| 搜索| 河池市| 通城县| 海盐县| 嵊州市| 望都县| 裕民县| 乌拉特前旗| 建平县| 乐东| 兴业县| 淄博市| 芮城县| 天门市| 定结县| 阳城县| 沂南县| 政和县| 广河县| 滨海县| 金塔县| 平潭县| 新干县| 新邵县| 巫山县| 海晏县| 高淳县| 清远市| 申扎县| 五大连池市|