<iframe align="top" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog01.html" frameborder="0" width="728" scrolling="no" height="90"></iframe>
Windows Vista操作系統(tǒng)最新安全特性分析:改進(jìn)和局限 (上)
沒有十全十美的安全系統(tǒng)。
——安全領(lǐng)域第一定律
申明。文章僅代表個人觀點(diǎn),與所在公司無任何聯(lián)系。
1.
概述
微軟最新發(fā)行的Windows Vista操作系統(tǒng),特別強(qiáng)調(diào)了對安全特性的支持。可以毫不夸張地說,安全特性的提高是Windows Vista操作系統(tǒng)同以往發(fā)布的Windows操作系統(tǒng)相比,改進(jìn)最大的地方之一,也是促使用戶升級到Windows Vista操作系統(tǒng)的重要考慮因素。
Windows Vista操作系統(tǒng)提供的各類最新的安全特性,涵蓋以下四個大部分:
·
基礎(chǔ)平臺
。包括安全軟件開發(fā)周期(SDL),系統(tǒng)服務(wù)保護(hù)(Service Hardening),防止緩存溢出,64位平臺安全改進(jìn)。
·
權(quán)限保護(hù)
。包括用戶帳戶控制(UAC),智能卡/登陸體系,網(wǎng)絡(luò)權(quán)限保護(hù)(NAP)。
·
防止有害軟件和惡意入侵
。包括安全中心,反間諜軟件(Windows Defender)和有害軟件刪除工具,防火墻,IE安全改進(jìn)。
·
數(shù)據(jù)保護(hù)
。包括BitLocker,加密文件系統(tǒng),版權(quán)保護(hù),USB設(shè)備控制。
本文會逐一分析每一個安全特性的開發(fā)背景,Windows Vista中做出的改進(jìn),及應(yīng)用范圍。并且特別強(qiáng)調(diào)了每一個安全特性的局限性。因為在安全領(lǐng)域中有一句話:比沒有安全更糟糕的是虛假的安全。
通過對每一個安全特性的分析,希望讀者能得到以下兩個關(guān)鍵信息:
·
Windows Vista 提供了許多非常好的安全特性
·
Windows Vista 不能解決你所有的安全問題。在某種程度上,意識這一點(diǎn)更為重要。
2.
安全是什么?
安全是一個整體的,系統(tǒng)的概念。安全的范圍包括硬件安全,軟件安全,員工培訓(xùn)等等。其主要目的,就是為了保證被保護(hù)的核心數(shù)據(jù)不被損害,這意味著:
·
權(quán)限控制:合法用戶擁有權(quán)限,而非法用戶則無法訪問。
·
可靠性:合法用戶可以成功執(zhí)行數(shù)據(jù)操作。
·
完整性:合法用戶所得到的數(shù)據(jù)是正確的,未經(jīng)篡改的。
無論是計算機(jī)病毒,間諜軟件,或黑客等,其行為都是針對數(shù)據(jù)的正常訪問。例如:刪除數(shù)據(jù),竊取數(shù)據(jù),篡改數(shù)據(jù),DDOS攻擊等等。
圖
1:Windows Vista在可用性和安全的取舍
在這個世界上,沒有十全十美的安全系統(tǒng)。任何一個操作系統(tǒng)必須在不同特性中作出取舍。以Windows 95舉例,它的可用性好,但安全性差。 而Windows Vista中,針對安全特性的提高,有時候則不得不犧牲部分可用性。例如,用戶帳戶控制這個Windows Vista中新增安全特性就是一個典型的例子。
3.
基礎(chǔ)平臺
3.1安全軟件開發(fā)周期
背景:沖擊波病毒。眾所周知,當(dāng)年Blaster病毒給微軟及其用戶帶來了巨大的損失。安全軟件開發(fā)周期(SDL - Security Development Lifecycle)可以說是一個微軟痛定思痛后,決心加強(qiáng)產(chǎn)品安全的產(chǎn)物。
SDL的中心思想就是將安全特性的考慮滲透到產(chǎn)品生命周期的每一個階段。
·
設(shè)計
。每一個功能模塊均需要制定其相應(yīng)的風(fēng)險模型(threat model),來預(yù)測可能的攻擊方式,相應(yīng)反制措施等等。
·
開發(fā)
。遵循嚴(yán)格的代碼規(guī)范。對禁止使用那些容易誤用的API調(diào)用。使用靜態(tài)程序分析工具查尋可疑的代碼片斷。
·
測試
。特別嚴(yán)格測試風(fēng)險模型指出的高風(fēng)險代碼。并廣泛采用“FUZZ”測試。“FUZZ”測試指通過模擬錯誤的,不合規(guī)范的輸入數(shù)據(jù),來測試軟件代碼針對錯誤處理的響應(yīng)。它被證明是一個有效的發(fā)現(xiàn)產(chǎn)品漏洞的測試手段。
·
審查
。產(chǎn)品代碼在正式發(fā)布前要經(jīng)過嚴(yán)格的安全審查,
·
維護(hù)/
響應(yīng)
。一旦正式發(fā)布的產(chǎn)品代碼中發(fā)現(xiàn)安全漏洞,需要有一套嚴(yán)格的安全響應(yīng)程序,以迅速,正確地提供安全補(bǔ)丁。
我們用對筷子的設(shè)計來舉例SDL對產(chǎn)品安全的影響。在普通設(shè)計下,考慮的因素也許是筷子的易用,結(jié)實(shí),好看。加入SDL安全考慮,就需要考慮:如何不讓別人搶走我的筷子?如何不讓別人的筷子伸到我的碗里?如何不讓別人偽造我的筷子等等在普通設(shè)計中忽視考慮的因素。
Windows Vista是第一個從頭至尾采用SDL進(jìn)行開發(fā)的操作系統(tǒng)。通過SDL嚴(yán)格的開發(fā)規(guī)程,微軟期望,Windows Vista安全水準(zhǔn)較先前Windows操作系統(tǒng)有顯著提高。
但是,任何開發(fā)人員都是無法完全預(yù)知未來攻擊的所有模式。換句話說,就是開發(fā)者是不可能預(yù)測到攻擊者是怎么想,會怎么用操作系統(tǒng)的。所以說,SDL并不能保證操作系統(tǒng)杜絕所有的安全漏洞。Windows Vista操作系統(tǒng)會有自身的安全漏洞。而我們希望的是,SDL可以減少這些安全漏洞的數(shù)目和嚴(yán)重程度。
3.2系統(tǒng)服務(wù)保護(hù)(Service Hardening)
背景:系統(tǒng)服務(wù)程序(System Service)被惡意軟件攻擊的次數(shù)日益增多。原因有以下兩點(diǎn):
·
系統(tǒng)服務(wù)無需用戶交互,即可自動運(yùn)行。
·
系統(tǒng)服務(wù)運(yùn)行于“LocalSystem”賬號下,擁有對系統(tǒng)的完全控制權(quán)。一旦被成功攻擊,惡意程序就可以在系統(tǒng)上為所欲為。
最著名的例子就是沖擊波病毒。它就是攻擊DCOM的遠(yuǎn)程調(diào)用(RPC)系統(tǒng)服務(wù)。
在Windows Vista操作系統(tǒng)提供了系統(tǒng)服務(wù)保護(hù)功能。包括:
·
許多系統(tǒng)服務(wù)程序運(yùn)行在較低權(quán)限的用戶帳號下,如LocalService or NetworkService。
·
系統(tǒng)服務(wù)程序有相應(yīng)的配置文件,用以指定該服務(wù)可以執(zhí)行的文件,注冊表和網(wǎng)絡(luò)行為。例如,遠(yuǎn)程調(diào)用(RPC)系統(tǒng)服務(wù)被限制為不能更改系統(tǒng)文件和注冊表。通過和防火墻配置的結(jié)合,可以限制系統(tǒng)服務(wù)的異常網(wǎng)絡(luò)行為。這樣,即使一個系統(tǒng)程序被攻擊,由于不能修改重要的系統(tǒng)文件和注冊信息,或者連接網(wǎng)絡(luò),它所造成的危害也會得到限制。
局限性。Service Hardening是不可能限制所有的系統(tǒng)服務(wù)的。關(guān)鍵的系統(tǒng)服務(wù)還是需要在系統(tǒng)核心權(quán)限下運(yùn)行。一旦這些服務(wù)出現(xiàn)安全漏洞,還是會導(dǎo)致嚴(yán)重的安全問題。
3.3防止緩存溢出
背景:緩存溢出是操作系統(tǒng)最為嚴(yán)重的安全漏洞。幾個有名的例子是:
·
Code Red: IIS緩存溢出
·
Blaster: DCOM RPC緩存溢出
·
Zotob: PnP緩存溢出
其原因在于,緩存溢出的安全漏洞往往導(dǎo)致惡意代碼可被遠(yuǎn)程執(zhí)行。以下是一個堆棧緩存溢出的例子:
/*以下UnSafeNetRecv代碼*/
void UnSafeNetRecv(char* payload)
{
char localBuffer[128];
… …
strcpy (localBuffer, payload);
}
在編譯過程中,堆棧空間是自高向低分配的。函數(shù)UnSafeNetRecv的堆棧分配如下:
圖
2:緩存溢出的安全漏洞
在執(zhí)行到strcpy (localBuffer, payload) 時,如果從網(wǎng)絡(luò)傳輸?shù)膒ayload長度超過128個字節(jié),函數(shù)的返回地址就被覆蓋。重新寫入的地址會指向傳入的惡意數(shù)據(jù)(代碼)。這樣,當(dāng)函數(shù)返回時,IP寄存器不是指向上一層調(diào)用,而是從惡意數(shù)據(jù)(代碼)處開始執(zhí)行。
3.3.1 NX保護(hù)
NX的含義是“No Execution”。在以上的緩存溢出的例子中,惡意代碼在堆棧上被執(zhí)行。NX保護(hù)可以指定特定的頁面(如堆棧所在頁面)是數(shù)據(jù)頁面,不允許在上運(yùn)行指令。這樣,一旦IP寄存器指向了堆棧所在頁面,會導(dǎo)致硬件異常,而不是執(zhí)行惡意數(shù)據(jù)(代碼)。
圖
3:NX保護(hù)
Windows Vista相對Windows XP SP2,提供了更多NX保護(hù)支持。在32位平臺上,Windows Vista的缺省設(shè)置是系統(tǒng)代碼設(shè)置滿足NX標(biāo)準(zhǔn)(NX-compliant)。同時,還可以指定某個特定的應(yīng)用程序是否滿足NX標(biāo)準(zhǔn)。這樣,在確保向前兼容性的前提下,可以最大可能的提高系統(tǒng)中被NX保護(hù)的比例。在64位平臺上,NX保護(hù)缺省設(shè)置為應(yīng)用于所有代碼。
3.3.2尋址空間隨機(jī)分布(ASLR)
同樣從上個堆棧溢出的例子說起。如果寫入的新的返回地址不是指回堆棧頁面,而是指向了一個系統(tǒng)函數(shù)的入口地址,那樣NX保護(hù)就不起作用。這類攻擊有一個前提,即特定系統(tǒng)函數(shù)的入口地址是可以事先確定的。
尋址空間隨機(jī)分布(ASLR: Address Space Layout Randomization)就是針對此類攻擊手段。在Windows Vista啟動時,操作系統(tǒng)隨機(jī)從256個地址空間中選出一個載入DLL/EXE。這樣攻擊方就難以事先確定系統(tǒng)函數(shù)的入口地址。
尋址空間隨機(jī)分布和
NX
保護(hù)結(jié)合在一起,可以有效限制緩存溢出危害程度。
圖
4:尋址空間隨機(jī)分布
局限性。盡管緩存溢出是操作系統(tǒng)最為嚴(yán)重的安全漏洞,并不是所有嚴(yán)重的安全漏洞都是由緩存溢出導(dǎo)致的。例如,2006年Windows系統(tǒng)最嚴(yán)重的安全漏洞之一,MS06-001 WMF安全漏洞,就和緩存溢出沒有關(guān)系。在這種情況下,NX保護(hù),或是尋址空間隨機(jī)分布,都是不起作用的。
3.4 64位平臺安全改進(jìn)
背景:有缺陷或惡意的驅(qū)動程序?qū)е孪到y(tǒng)崩潰,不穩(wěn)定,和極為嚴(yán)重的安全問題。
這里需要簡單介紹“Rootkit”這個概念。這個術(shù)語來自于Unix系統(tǒng)。最早的一個版本是出現(xiàn)在SunOS 4。它特指那些用于修改操作系統(tǒng),以改變操作系統(tǒng)的表現(xiàn)行為的工具軟件 。而這種改變,往往不是操作系統(tǒng)設(shè)計時所期望的。
Rootkit最典型的目的就是“隱藏”。隱藏的對象可以是文件,特定的注冊表,特定進(jìn)程,打開的網(wǎng)絡(luò)端口等等。這個“隱藏”是通過修改操作系統(tǒng)本身來實(shí)現(xiàn)的。下面是Win32 API的調(diào)用過程:
圖
5:Win32 API的調(diào)用過程
Rootkit可以將自身代碼插入到每一個箭頭連接處,以控制函數(shù)的返回結(jié)果。舉個例子,一個應(yīng)用程序(如反病毒軟件)需要查詢系統(tǒng)中運(yùn)行的當(dāng)前進(jìn)程,Rootkit只需要將所想隱藏的進(jìn)程從返回的進(jìn)程列表中刪除,那么上層的應(yīng)用程序就根本不知道有這樣一個進(jìn)程正在系統(tǒng)中運(yùn)行。
為什么說Rootkit會導(dǎo)致嚴(yán)重的安全問題?試想一下,如果一個惡意程序把自身文件和運(yùn)行進(jìn)程從系統(tǒng)中隱藏起來,那么如何指望反病毒軟件/反間諜軟件能成功的檢測/清除這個程序?!
在64位平臺Windows Vista,特別增加了下面兩個重要的安全特性。
·
設(shè)備驅(qū)動程序數(shù)字認(rèn)證。
在64位平臺Windows Vista中,所有工作在核心模式下的設(shè)備驅(qū)動程序都必須提供數(shù)字認(rèn)證,才能被系統(tǒng)加載。由于需要修改操作系統(tǒng)行為,Rootkit往往是一個工作在核心模式下的設(shè)備驅(qū)動程序。那么,數(shù)字認(rèn)證首先可以指明一個驅(qū)動程序是由哪個廠商發(fā)布的。其次,數(shù)字認(rèn)證可以驗證這個驅(qū)動程序的代碼完整性,也就是否被篡改過。這樣,就可以防止系統(tǒng)加載Rootkit驅(qū)動程序。
·
核心模式保護(hù)(Kernel Patch Protection
)。
這個技術(shù)也被稱為PatchGuard。它用來防止未經(jīng)認(rèn)證的代碼自由修改操作系統(tǒng)的核心狀態(tài)(Kernel State)。最為危險的Rootkit往往直接修改核心模式的重要數(shù)據(jù),例如系統(tǒng)的進(jìn)程控制表,中斷控制表等等。通過對核心狀態(tài)的保護(hù),可以有效阻止這類攻擊。
局限性。由于向前兼容的原因,設(shè)備驅(qū)動程序的數(shù)字認(rèn)證,和核心模式保護(hù)只在64位平臺上有效。也就是說,32位平臺Windows Vista上的Rootkit威脅并沒有得到有效控制。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1583601