自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

關(guān)于Windows上地址空間布局隨機化防御機制的分析(下)

安全 黑客攻防
地址空間布局隨機化是針對內(nèi)存破壞漏洞的核心防御措施,這篇文章介紹了在Windows上實施的地址空間布局隨機化的一些歷史,并探討了Windows實施的一些功能和局限性。

[[348240]]

上篇給大家介紹關(guān)于Windows上地址空間布局隨機化防御機制的分析(上),這篇文章介紹了在Windows上實施的地址空間布局隨機化的一些歷史,并探討了Windows實施的一些功能和局限性。

將32位程序重新編譯為64位程序,以使地址空間布局隨機化更有效

盡管Windows的64位版本已經(jīng)成為主流十多年了,但32位版本的使用者仍然很多。有些程序確實需要保持與第三方插件的兼容性,比如web瀏覽器。有時,開發(fā)團隊認為程序所需的內(nèi)存遠遠少于4 GB,因此32位代碼可以節(jié)省空間。甚至Visual Studio在支持構(gòu)建64位應用程序之后,在一段時間內(nèi)還仍然支持32位應用程序。

實際上,從32位代碼切換到64位代碼會產(chǎn)生很小但可觀察到的安全性好處。原因是隨機化32位地址的能力是有限的。至于具體原因,請觀察圖1中32位x86內(nèi)存地址的分解方式。更多詳細信息,請參見“物理地址擴展”。

 關(guān)于Windows上地址空間布局隨機化防御機制的分析(下)

內(nèi)存地址分為多個組件,其中只有一些可以在運行時輕松隨機化

操作系統(tǒng)不能簡單地將地址的任意位隨機化,在頁面部分(0到11位)中隨機分配偏移量將打破程序?qū)?shù)據(jù)對齊的假設。頁面目錄指針(位30和31)也不能被更改,因為第31位是為內(nèi)核保留的,而第30位被物理地址擴展用作存儲體交換技術(shù),以尋址2 GB以上的RAM,這使得32位地址中的14位不能被隨機化。

實際上,Windows只嘗試隨機化32位地址中的8位。這些是位從16到23,只影響地址的頁目錄條目和頁表條目部分。因此,在暴力情況下,攻擊者可能僅用256次猜測就能猜出EXE的基本地址。

將ASLR應用于64位二進制文件時,Windows能夠隨機分配地址的17-19位(具體取決于它是DLL還是EXE)。圖2顯示了對于64位代碼,可能的基址數(shù)量以及相應的暴力猜測數(shù)量如何顯著增加,這可以使端點保護程序或系統(tǒng)管理員可以在攻擊發(fā)生之前檢測出攻擊。

 

 將32位代碼重新編譯為64位會大大增加可供地址空間布局隨機化選擇的基本地址數(shù)量

總結(jié)起來就是:

1. 必須處理不可信數(shù)據(jù)的軟件應該始終編譯為64位,即使它不需要使用大量內(nèi)存,也可以充分利用地址空間布局隨機化。

在暴力攻擊中,地址空間布局隨機化使攻擊64位程序的難度比攻擊完全相同程序的32位版本的難度至少高了512倍。

2. 即使是64位ASLR也會受到暴力攻擊,防御者必須集中精力檢測暴力攻擊,或者避免出現(xiàn)暴力攻擊可行的情況。

假設攻擊者每秒可以對一個脆弱的系統(tǒng)進行十次暴力嘗試。在通常的情況下,由于多個實例正在運行,目標進程保留在同一地址,攻擊者會在不到一分鐘的時間內(nèi)發(fā)現(xiàn)32位程序的基地址,而在數(shù)小時內(nèi)就會發(fā)現(xiàn)64位程序的基地址。64位暴力攻擊會產(chǎn)生更多的干擾,但是管理員或安全軟件需要注意并采取行動。除了使用64位程序來提高地址空間布局隨機化的效率外,系統(tǒng)還應避免重新生成崩潰程序,以避免讓攻擊者發(fā)現(xiàn)基址,為了以防萬一最好強制重新啟動,因此應保證進程崩潰后多次刷新地址空間。

3. 針對32位和64位版本的程序開發(fā)概念驗證攻擊的研究人員應首先關(guān)注32位,只要32位程序仍然有效,針對程序的32位變體的概念驗證攻擊就可能更容易開發(fā)。由此產(chǎn)生的攻擊可能更可行且更有說服力,從而導致供應商更快地修補程序。

Windows 10會比Windows 7更頻繁地重用隨機基址,這在某些情況下可能會使它變得容易受到攻擊

請注意,即使Windows系統(tǒng)必須確保一個DLL或EXE的多個實例都在相同的基址加載,系統(tǒng)也不需要在卸載DLL或EXE的最后一個實例時跟蹤基址。如果DLL或EXE再次被加載,它可以獲得一個新的基地址,這是我們在使用Windows 7時觀察到的行為。Windows 10可以以不同的方式工作,即使在DLL或EXE的最后一個實例被卸載后,它也可能至少在短時間內(nèi)保持相同的基址,與DLL相比,EXE更是如此。在多進程調(diào)試器下重復啟動命令行程序時,可以觀察到這一點。但是,如果將該程序復制到新文件名然后啟動,它將收到一個新的基地址。同樣,如果經(jīng)過了足夠長的時間,該程序?qū)⒓虞d到其他基址。當然,重新啟動會為所有DLL和EXE生成新的基地址。

總結(jié)起來就是:除了每次啟動隨機化外,不要對Windows ASLR保證做任何假設。特別是,每當加載給定EXE或DLL的第一個實例時,不要依賴Windows 7的行為來隨機分配新的地址空間。不要以為Windows天生就能以任何方式防止針對地址空間布局隨機化的暴力攻擊,特別是對于32位進程,在這種情況下,暴力攻擊可能需要256次或更少的猜測。

Windows 10對地址空間布局隨機化的利用更加積極,甚至對不與地址空間布局隨機化兼容的exe和dll也能進行有效防護,這可能使地址空間布局隨機化的應用范圍更大

Windows Vista和Windows 7是最早支持地址空間布局隨機化的系統(tǒng),因此地址空間布局隨機化在設計之初在兼容性方面進行了一些權(quán)衡。具體來說,這些舊的實現(xiàn)不會將地址空間布局隨機化應用于沒有標記為與地址空間布局隨機化兼容的映像,也不允許地址空間布局隨機化將地址推送到4 GB邊界以外。如果一個映像沒有選擇加入地址空間布局隨機化,這些Windows版本將繼續(xù)使用首選的基本地址。

可以使用Microsoft的增強緩解經(jīng)驗工具包(通常稱為EMET)進一步強化Windows 7,以更積極地將地址空間布局隨機化應用于甚至未標記為與它兼容的映像。 Windows 8引入了更多功能,可將ASLR應用于不兼容地址空間布局隨機化的映像,以更好地使堆分配隨機化,并增加64位映像的熵位數(shù)。

總結(jié)起來就是:

1. 確保程序項目使用正確的鏈接器標記來選擇最積極的地址空間布局隨機化實現(xiàn),并且不使用任何削弱地址空間布局隨機化的鏈接器標記。

如下表所示,鏈接器標記可能會影響地址空間布局隨機化應用到映像的方式。請注意,對于Visual Studio 2012及更高版本,“+”標記在默認情況下已經(jīng)啟用,并且只要不使用“-”標記,就會使用最佳的地址空間布局隨機化實現(xiàn)。使用Visual Studio 2010或更早版本(可能是出于兼容性原因)的開發(fā)人員需要檢查鏈接器支持的標記,以及默認情況下啟用的標記。

 關(guān)于Windows上地址空間布局隨機化防御機制的分析(下)

 鏈接器標記可能會影響如何將ASLR應用到映像

2. 啟用強制性地址空間布局隨機化和自下而上的隨機化,Windows 8和Windows 10包含一些可選的功能,可在未標記為與地址空間布局隨機化兼容的映像上強制被啟用,并隨機分配虛擬內(nèi)存分配,以便重新建立基礎(chǔ)的映像來獲得隨機基址。當EXE與ASLR兼容,但它使用的某個dll不兼容時,這是很有用的。防御者應該使這些特性能夠更廣泛地應用地址空間布局隨機化,而且重要的是,它有助于發(fā)現(xiàn)任何剩余的不兼容地址空間布局隨機化的程序,以便可以對其進行升級或替換。

ASLR將整個可執(zhí)行映像重新定位為一個單元

ASLR通過選擇一個隨機偏移量來重定位可執(zhí)行映像,并將其應用于映像中與它的基本地址相關(guān)的所有地址。也意味著:如果EXE中的兩個函數(shù)位于地址0x401000和0x401100,那么即使在重新定位映像之后,它們之間仍然保持0x100字節(jié)的距離。很明顯,這很重要,因為x86代碼中普遍存在相對調(diào)用和jmp指令。同樣,無論位于何處,位于0x401000處的函數(shù)將與映像的基本地址保持0x1000字節(jié)的距離。同樣,如果兩個靜態(tài)變量或全局變量在映像中相鄰,則在應用地址空間布局隨機化后它們?nèi)詫⒈3窒噜?。相反,堆棧和堆變量以及?nèi)存映射文件不是映像的一部分,可以隨意隨機分配,而不需要考慮選擇的基址。

總結(jié)起來就是:

1. 可執(zhí)行映像中僅一個指針的泄漏就可以暴露整個映像的隨機地址。

ASLR最大的限制和煩人之處在于,一些看似無害的特性,如調(diào)試日志消息或堆棧跟蹤會泄漏映像中的指針,從而成為漏洞。如果攻擊者擁有相同程序或DLL的副本,并且可以觸發(fā)它產(chǎn)生相同的泄漏,那么他們可以計算地址空間布局隨機化和地址空間布局隨機化之前指針之間的差異來確定隨機化前后的偏移量。然后,攻擊者可以將該偏移量應用到其攻擊有效載荷中的每個指針,以繞過地址空間布局隨機化。防御者應該培訓軟件開發(fā)人員關(guān)于指針暴露漏洞的知識,以便他們認識到這個漏洞的嚴重性,并且作為軟件開發(fā)生命周期的一部分,定期評估軟件的這些漏洞。

2. 某些類型的內(nèi)存損壞漏洞超出了ASLR能夠保護的范圍。

并不是所有的內(nèi)存損壞漏洞都需要直接實現(xiàn)遠程代碼執(zhí)行,比如有這樣一個程序,它包含一個緩沖區(qū)變量,用于從網(wǎng)絡中接收不可信的數(shù)據(jù),以及一個標記變量,該變量位于其后的內(nèi)存中。標記變量包含一些位,這些位指定用戶是否已登錄以及該用戶是否為管理員。如果程序在接收緩沖區(qū)的末尾寫入數(shù)據(jù),則“標記變量將被覆蓋,攻擊者可以同時設置已登錄和is-admin標記。由于攻擊者無需知道或?qū)懭肴魏蝺?nèi)存地址,因此地址空間布局隨機化不會阻止攻擊。只有當另一種強化技術(shù)(如編譯器強化標志)重新排序變量,或者更好地使變量在程序中的位置獨立移動時,此類攻擊才會被阻止。

總結(jié)

地址空間布局隨機化是針對內(nèi)存破壞漏洞的核心防御措施,這篇文章介紹了在Windows上實施的地址空間布局隨機化的一些歷史,并探討了Windows實施的一些功能和局限性。通過閱讀這篇文章,防御者可以熟知如何構(gòu)建程序來更好地利用地址空間布局隨機化和Windows中提供的其他功能。不過地址空間布局隨機化的防御機制也不是完美的,攻擊者可以利用地址空間布局隨機化的限制,例如只在每次重啟時應用地址空間隨機化和將整個映像重新定位為一個單元隨機化,從而使用暴力和指針泄漏攻擊來繞過地址空間隨機化的防護。

 本文翻譯自:https://www.fireeye.com/blog/threat-research/2020/03/six-facts-about-address-space-layout-randomization-on-windows.html如若轉(zhuǎn)載,請注明原文地址。

 

責任編輯:姜華 來源: 嘶吼網(wǎng)
相關(guān)推薦

2020-10-22 10:26:37

Windows10

2010-10-16 11:43:45

WindowsDEPASLR

2011-10-28 15:50:45

C程序

2017-12-12 09:06:14

UbuntuMAC地址網(wǎng)絡管理器

2019-01-28 18:05:04

2019-02-13 13:31:42

2019-01-11 09:00:00

2016-09-21 10:11:19

2010-03-31 22:28:40

2010-03-30 09:31:09

2017-02-20 15:51:07

2011-08-05 09:59:54

2016-09-29 22:54:55

2012-02-20 14:57:59

殺毒軟件漏洞安全

2019-03-06 09:00:38

ASLRLinux命令

2018-01-26 17:36:12

2015-10-20 18:43:43

2024-01-17 10:01:05

2023-02-06 00:26:02

2021-03-12 10:06:58

人工智能機器學習技術(shù)
點贊
收藏

51CTO技術(shù)棧公眾號