開啟Windows的DEP和ASLR安全功能很重要
問:最近讀到Secunia安全公司的一則調查報告,報告顯示許多應用程序在較新版的windows中沒有使用核心的安全功能:地址空間布局隨機化(ASLR)和數據執行保護技術(DEP)。您對這種現象有何見解?如何確保我們的內部程序開發者了解這些功能的使用?
答:在我回答你的問題之前,我想先解釋一下什么是地址空間布局隨機化(ASLR)和數據執行保護(DEP)。ASLR的作用是,將系統代碼的入口數據點分散在內存中,這樣入口數據點的位置就處于不可預測的位置。這種情況下,惡意代碼訪問系統時就難以定位系統功能的位置。例如,今天啟動電腦時,wsock32.dll在物理內存的位置是0x73200000,明天這個位置就可能是0x779b0000。DEP是一系列的軟件安全檢查,利用Windows中的異常處理機制和執行數據頁中的代碼兩項技術來阻止惡意代碼。
然而,這些安全特征只有在開發者將它們與應用程序結合的情況下才能發揮作用。Secunia的報告顯示,許多軟件應用程序并不支持這些安全功能,開發者也不能很好的使用這些安全功能。報告報出時,Java、Apple QuickTime、Foxit Reader、Google Picasa、OpenOffice.org、RealPlayer和VLC media player都沒能與DEP或ASLR整合。由此看來,許多惡意的黑客攻擊應用程序而不是Windows系統本身是有深層原因的。Windows系統充分利用了DEP和ASLR的安全功能。令人欣慰的是,該報告公布后,有些供應商在最近的補丁里增添了對這些安全選項的支持,有的也正在致力于改進這一情況。
在我看來,許多組織沒有采用Windows DEP或ASLR安全功能是基于對時間和財力的考慮。但是,讓企業開發者學習如何將這些安全控制和內部的應用程序相結合是一個好的建議。企業中的開發者如果使用微軟的Visual Studio,那么要執行這兩項安全功能就很容易了,執行的過程也會被很好地記錄。許多在線的資源介紹了將安全功能與應用程序整合的方法。Visual C++ Team Blog涉及到如何設置連接器選擇/DYNAMICBASE和/NXCOMPAT:/DYNAMICBASE 用來修改執行程序的數據頭,來顯示該程序在操作系統加載時是否需要隨意的重定基底。ASLR和/NXCOMPAT用來指定那些與DEP兼容的可執行程序。用戶可以在Visual Studio里清晰地對這兩項選擇進行設置;默認的設置是“開啟”。
Windows Vista SP1、Windows XP SP3和Windows Server 2008加入了一個新的API,即Set Process DEP Policy,它允許開發者在運行時間設置DEP而不是使用連接器選項。微軟的Michael Howard在他的博客中更加詳細的解釋道,MSDN Library有一些關于編程注意事項和應用程序兼容性的問題,并且在使用這些安全控制時你也要考慮這些問題。
ASLR和DEP是兩項企業應當與自身的應用程序相結合的安全功能。為此,微軟提供了大量的關于如何整合的信息,即使這些信息對開發者而言較新穎,可是難度并不大。另外,應用程序會因為與安全特征的結合而變得更加安全。
【編輯推薦】