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