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

2.6.8 檢測和恢復(fù)

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

ASLR降低成功攻擊的可能性,但并沒有消除這種可能性。因?yàn)樵诶碚撋希粽呤怯锌赡苷_地預(yù)測或猜測他們的外殼代碼的地址并用這個(gè)值覆寫棧上的返回指針的。

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

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


sysctl -w kernel.randomize_va_space=2

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

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

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

2.對(duì)堆以及對(duì)由選項(xiàng)1隨機(jī)化的內(nèi)存打開ASLR。

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

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

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

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

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

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

主站蜘蛛池模板: 西城区| 沿河| 水城县| 光泽县| 南丹县| 安泽县| 抚顺市| 南投县| 安西县| 吴旗县| 榆中县| 疏附县| 黄陵县| 黑水县| 隆德县| 拉萨市| 奉节县| 新余市| 金华市| 长丰县| 信丰县| 陆良县| 明溪县| 金秀| 道孚县| 黔东| 威海市| 日土县| 宝应县| 石柱| 敦化市| 剑河县| 驻马店市| 宽甸| 钟山县| 玉溪市| 南投县| 香港 | 河津市| 容城县| 休宁县|