2010-04-21 74 views
6

我最近一經問世即Windows 7的具體的吹捧新的 「防禦性增強」 一位微軟的文章:隨着應用程序安全性增強,內存隨機化?

  • 地址空間佈局隨機化(ASLR)
  • 堆隨機
  • 堆棧隨機

文章接着說:「......這些防禦措施中的一部分是在覈心操作系統中,而Microsoft Visual C++編譯器提供了其他」,但沒有解釋這些策略如何實際上增加安全性。

任何人都知道爲什麼內存隨機化增加安全性,如果有的話?其他平臺和編譯器是否採用類似的策略?

+2

一個小小的nit:在Vista中增加了ASLR,而不是Win7。 – 2010-04-24 05:30:51

回答

9

它增加了安全性,使其難以預測內存中的內容。通過將已知例程的地址放在堆棧上,然後返回到它,很多緩衝區溢出漏洞都可以工作。如果不知道相關例程的地址,就很難做到這一點。

據我所知,OpenBSD是第一個這樣做的人,至少在PC相當知名的操作系統中是這樣做的。

+0

請提供鏈接! – 2010-08-31 01:09:59

+0

@Matt:鏈接到什麼? – 2010-08-31 02:49:37

+0

鏈接以支持您的聲明,我想詳細瞭解它們。 – 2010-08-31 11:32:25

2

它使得像return to libc這樣的攻擊(或者在後兩者的情況下返回到用戶提供的數據緩衝區)困難得多。是的,它可以在Linux,BSD和Mac OS上使用。正如你所期望的那樣,細節因操作系統而異。請參閱維基百科an introduction

0

通過隨機化堆棧,你不可能進行香草緩衝區溢出攻擊,如Aleph One's Smashing the Stack for Fun Profit。原因是因爲攻擊依賴於將一小部分可執行代碼放在內存中的可預測位置。函數堆棧幀已損壞,其返回地址被攻擊者選擇的值覆蓋。當損壞的函數返回時,執行流程將移至攻擊者的shellcode。傳統上,這種內存地址是如此可預測的,以至於在運行相同版本軟件的所有機器上都是相同的。

儘管在Windows 7上實現的高級內存保護仍然可以執行遠程代碼執行。最近在CanSecWest上運行Windows 7和IE 8的機器在幾秒鐘內就被黑了。這是一個technical description現代內存腐敗攻擊利用懸空指針結合堆溢出。