Dot-Net
記憶體隨機化作為應用程序安全性增強?
我最近看到一篇微軟文章,它吹捧 Windows 7 的新“防禦性增強”。具體來說:
- 地址空間佈局隨機化 (ASLR)
- 堆隨機化
- 堆棧隨機化
文章接著說“……其中一些防禦措施存在於核心作業系統中,而 Microsoft Visual C++ 編譯器提供了其他防禦措施”,但沒有解釋這些策略實際上如何提高安全性。
任何人都知道為什麼記憶體隨機化會增加安全性,如果有的話?其他平台和編譯器是否採用類似的策略?
它通過使難以預測某些內容在記憶體中的位置來提高安全性。相當多的緩衝區溢出漏洞通過將(例如)已知常式的地址放在堆棧上,然後返回到它來工作。在不知道相關常式的地址的情況下,要做到這一點要困難得多。
據我所知,OpenBSD 是第一個這樣做的,至少在相當知名的 PC 作業系統中是這樣。
它使諸如返回 libc(或在後兩者的情況下返回使用者提供的數據緩衝區)之類的攻擊變得更加困難。是的,它適用於 Linux、BSD 和 Mac OS。如您所料,詳細資訊因作業系統而異。有關介紹,請參閱 Wikipedia 。