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