|
1.什么是殺毒軟件引擎,與病毒庫的關(guān)系?
首先必須指出殺毒軟件的引擎與其病毒庫并沒(méi)有什么直接的關(guān)系。殺毒引擎的任務(wù)和功能非常簡(jiǎn)單,就是對于給定的文件或者程序進(jìn)程判斷其是否是合法程序(對應于殺毒軟件廠(chǎng)商自己定義的正常和非異常程序規范而言。正常的程序規范是指在程序所在系統平臺上操所系統本身洗凈有定義的或者業(yè)界已經(jīng)公認的程序行為過(guò)程,比如操作系統正常運行就必須要求應用程序與系統核心進(jìn)行進(jìn)程響應并與交換相關(guān)數據。非異常程序活動(dòng)是指可能存在非法程序操作結果但能夠以較高的置信度確定其非非法程序活動(dòng)規范的。一般情況下,相關(guān)文件的復制,移動(dòng),刪除等都奔包括在該界定范圍內)。
我們知道病毒的最終目的有些是與合法活動(dòng)很類(lèi)似的,在這種情況下,要求軟件廠(chǎng)商必須自己有一個(gè)行為規范界定規則,在一個(gè)給定的范圍和置信度下,判斷相關(guān)操作是否為合法。在這方面,各個(gè)廠(chǎng)商的界定是有區別的,一般而言非美國廠(chǎng)商界定是非常嚴格的,只有有很高的置信水平的程序行為,他們才判別為非病毒操作。記得前一陣論壇上有人給了四段簡(jiǎn)單的代碼,很多殺毒軟件將其判為病毒或有病毒性質(zhì)的文件行為,實(shí)際上看那幾段代碼可以知道,其結果并不足以視之為病毒。美國廠(chǎng)商一般判斷比較復雜,這主要由于美國市場(chǎng)上的殺毒軟件引擎來(lái)源比較復雜,比如諾頓,有足夠的技術(shù)資料確信它的殺毒軟件引擎是自成體系的,而mcafee則存在一定的外界技術(shù)引進(jìn)(收購所羅門(mén))。 用簡(jiǎn)單的話(huà)說(shuō),殺毒引擎就是一套判斷特定程序行為是否為病毒程序(包括可疑的)的技術(shù)機制。一個(gè)完整的技術(shù)引擎遵守如下的行為過(guò)程:
1. 非自身程序行為的程序行為捕獲。包括來(lái)自于內存的程序運行,來(lái)自于給定文件的行為虛擬判斷,來(lái)自于網(wǎng)絡(luò )的動(dòng)態(tài)的信息等等。一般情況下,我們稱(chēng)之為引擎前端。捕捉的方法非常多,除諾頓以外的殺毒軟件采用的都是行為規范代碼化的方法。諾頓由于與微軟有這遠遠高于其它廠(chǎng)商合作關(guān)系,其實(shí)現過(guò)程比較獨特,另有敘述。
2.基于引擎機制的規則判斷。這個(gè)環(huán)節代表了殺毒引擎的質(zhì)量水平,一個(gè)好的殺毒引擎應該能在這個(gè)環(huán)節發(fā)現很多或者稱(chēng)之為相當規模的病毒行為,存而避免進(jìn)入下一個(gè)判斷環(huán)節。傳統的反病毒軟件引擎使用的是基于特征碼的靜態(tài)掃描技術(shù),即在文件中尋找特定十六進(jìn)制串,如果找到,就可判定文件感染了某種病毒。但這種方法在當今病毒技術(shù)迅猛發(fā)展的形勢下已經(jīng)起不到很好的作用了。為了更好的發(fā)現病毒,相繼開(kāi)發(fā)了所謂的虛擬機,實(shí)時(shí)監控等相關(guān)技術(shù)。這個(gè)環(huán)節被叫做殺毒軟件引擎工作的核心層。
3.引擎與病毒庫的交互作用。這個(gè)過(guò)程往往被認為是收尾階段,相對于前兩個(gè)環(huán)節,這個(gè)階段速度是非常慢的,殺毒引擎與要將非自身程序行為過(guò)程轉化為殺毒軟件自身可識別的行為標識符(包括靜態(tài)代碼等),然后與病毒庫中所存貯的行為信息進(jìn)行對應,并作出相應處理。當然必須承認,當前的殺毒軟件對大量病毒的識別都是在這個(gè)階段完成的。因此一個(gè)足夠龐大的病毒庫往往能夠彌補殺毒軟件引擎的不足之處。但是必須意識到,如果在核心層階段就可以結束并清除病毒程序,那么殺毒軟件的工作速度將會(huì )大幅提升。"很可惜的是,當前我們沒(méi)有足夠聰明的殺毒引擎來(lái)完成這個(gè)過(guò)程 ",這就是為什么有病毒庫的原因。 諾頓是微軟最高級的安全方面核心合作廠(chǎng)商,因此它的殺毒軟件在某些方面工作比較特殊。比如在殺毒軟件的安裝,使用和功能實(shí)現方面,大部分廠(chǎng)商采用的是中間件技術(shù),在系統底層與非自身應用程序之間作為中間件存在并實(shí)現其功能;另有一些廠(chǎng)商使用的是應用程序或者嵌入技術(shù),相對而言這種方法安全性較低;諾頓和 mcafee實(shí)現方式比較相似,諾頓采用了基于系統最底層的系統核心驅動(dòng),這種實(shí)現方式是最安全的或者說(shuō)最高級的實(shí)現方式,當然這需要微軟的系統源代碼級的支持(要花許多money),業(yè)界公認,這是最穩定的實(shí)現方法,但從目前而言,只諾頓一家。Mcafee實(shí)現方式與諾頓很接近,一般稱(chēng)之為軟件驅動(dòng)。相當于在系統中存在一個(gè)虛擬"硬件",來(lái)實(shí)現殺毒軟件功能。這些實(shí)現方式關(guān)系著(zhù)殺毒引擎對程序行為進(jìn)行捕捉的方式。 我們使用的intel系的處理器有兩個(gè) ring層,對應兩個(gè)層,微軟的操作系統將系統中的所有行為分為如下幾個(gè)層:
1.最底層:系統核心層,這個(gè)層的所有行為都由操作系統已經(jīng)內置的指令來(lái)實(shí)現,所有外界因素(即使你是系統管理員)均不能影響該層的行為。諾頓的核心層既工作在這個(gè)層上。
2. 硬件虛擬層,一般稱(chēng)之為HAL。為了實(shí)現硬件無(wú)關(guān)性,微軟設計了該層。所有的外部工作硬件(相對于系統核心而言)都進(jìn)入HAL,并被HAL處理為核心層可以相應的指令。我們所使用的硬件的驅動(dòng)程序既工作在該層上。當外界硬件存在指令請求時(shí),驅動(dòng)程序作出相關(guān)處理后傳給核心層。如果無(wú)與之對應的驅動(dòng)相應,那么將按照默認硬件進(jìn)行處理。好像安全模式下硬件的工作就被置于默認硬件模式。Mcafee被認為工作與該層上。
3.用戶(hù)層(分為兩個(gè)子層,不詳細敘述,感興趣的可以查閱《windows xp入門(mén)到精通》(有中文版),第二部分四節有敘述)。我們所知的大部分殺毒軟件既工作與該層上。一個(gè)完整的程序行為請求是如下流程:位于3戶(hù)層上的應用程序產(chǎn)生指令行為請求,被傳遞至2HAL進(jìn)行處理,最后進(jìn)入1最底層后進(jìn)入CPU的指令處理循環(huán),然后反向將軟件可識別的處理結果經(jīng)1-2-3再響應給應用程序。對于諾頓而言,其整個(gè)工作過(guò)程如下:3-2-1,完成;mcafee:3-2-1-1-2,完成:其余:3-2-1-1-2-3,完成;這個(gè)環(huán)節代表了殺毒軟件引擎的前端行為規范的獲得。只從這個(gè)過(guò)程而言,諾頓和mcafee是比較先進(jìn)的。(具體的系統與CPU的ring()的對應,記不清楚了。 WinNT時(shí)代,微軟的NT系統被設計有與四個(gè)ring()層相對應,RISC系列的處理器有四個(gè)ring。因此現在的大部分殺毒軟件是不能工作與NT上的。具體的CISC和RISC的ring()數我記得可能有誤,反正是一個(gè)2ring(),一個(gè)4ring().)。 盡管比較先進(jìn)的工作方式給諾頓和mcafee帶來(lái)了較高的系統穩定性(HAL層很少出現問(wèn)題,最底層出問(wèn)題的幾率接近于零),較快的響應速度(減少了環(huán)節),但同時(shí)也帶來(lái)了一些問(wèn)題:1.資源占用比較厲害。在mcafee上體現的不是很明顯,在諾頓上表現非常明顯。因為對于越底層的行為,硬件資源分配越多。最好資源的是什么?當然是操作系統。應為它最最底層。2.卸載問(wèn)題。卸載底層的組件出問(wèn)題的概率是相對比較高的,因此諾頓的卸載比較慢,偶爾還出問(wèn)題。 有人質(zhì)疑由于微軟操作系統的不穩定性是否會(huì )拖累諾頓,想開(kāi)發(fā)人士詢(xún)問(wèn)后得知,微軟操作系統的內核層設計是非常優(yōu)秀的,很多時(shí)候操作系統的不穩定性來(lái)源于以下幾個(gè)方面:
1.應用程序設計不合理,許多程序設計者根本就未讀過(guò)微軟的32位程序設計指南,所設 計的程序并不嚴格符合微軟規范。我們看到很多軟件多年前設計還能運行于最新的xp平臺,原因很簡(jiǎn)單:這個(gè)軟件在設計時(shí)完全遵循了微軟的程序設計規范。
2. 驅動(dòng)程序的編寫(xiě)有問(wèn)題,與HAL層有沖突。 因此認為微軟的操作系統將會(huì )影響諾頓的穩定性是不合理的。 注:剛才問(wèn)了一下偶MM,她告訴我應該是CISC有四個(gè)ring(),RISC有兩個(gè)ring().對應于系統的最低層而言,工作在ring0()上。應用程序工作在ring3()上 。偶的記憶力比較差,文中可能有部分技術(shù)錯誤,請原諒。 業(yè)界有人認為,先進(jìn)殺毒軟件的引擎設計已經(jīng)日趨復雜,類(lèi)如諾頓這一類(lèi)的廠(chǎng)商其產(chǎn)品的引擎應該已經(jīng)覆蓋了操作系統的各個(gè)層級,以提高防護能力。在一篇文檔中有程序員提出有足夠的信息認為諾頓,mcafee,趨勢的產(chǎn)品自己修改了標準的系統相關(guān)協(xié)議,比如TCP/IP等,以達到所謂的完整防護的目的。NOD32 的一篇官方文檔(說(shuō)實(shí)話(huà),我沒(méi)有看到過(guò))指出有必要全面更新(說(shuō)白了就是修改)系統的諸多協(xié)議,以達到最快的速度和殺毒效果。 要討論怎樣反病毒,就必須從病毒技術(shù)本身的討論開(kāi)始。正是所謂"知己知彼,百戰不殆"。很難想象一個(gè)毫無(wú)病毒寫(xiě)作經(jīng)驗的人會(huì )成為殺毒高手。目前國內一些著(zhù)名反病毒軟件公司的研發(fā)隊伍中不乏病毒寫(xiě)作高手。只不過(guò)他們將同樣的技術(shù)用到了正道上,以‘毒‘攻‘毒‘。當今的病毒與DOS和WIN3.x時(shí)代下的從技術(shù)角度上看有很多不同。最大的轉變是:引導區病毒減少了,而腳本型病毒開(kāi)始泛濫。原因是在當今的操作系統下直接改寫(xiě)磁盤(pán)的引導區會(huì )有一定的難度(DOS則沒(méi)有保護,允許調用 INT13直接寫(xiě)盤(pán)),而且引導區的改動(dòng)很容易被發(fā)現,并且微軟在設計操作系統時(shí)加強了對引導區的程序行為管理,寫(xiě)一個(gè)完美的引導區病毒難度很大,所以很少有人再寫(xiě)了;而腳本病毒以其傳播效率高且容易編寫(xiě)而深得病毒作者的青睞。但是最最落后的殺毒引擎也就是只基于靜態(tài)代碼的殺毒引擎都能干掉該種病毒(病毒庫搞好就行)。 要討論的技術(shù)主要來(lái)自于二進(jìn)制外殼型病毒(感染文件的病毒),并且這些技術(shù)大都和操作系統底層機制或386以上CPU 的保護模式相關(guān),值得研究。DOS下的外殼型病毒主要感染 16位的COM或EXE文件,由于DOS沒(méi)有(文件和引導區)保護,它們能夠輕松地進(jìn)行駐留,減少可用內存(通過(guò)修改MCB鏈),修改系統代碼,攔截系統服務(wù)或中斷。而到了WIN9X和WINNT/2000時(shí)代,搞個(gè)運行其上的32位WINDOWS病毒變得難了點(diǎn)。由于存在頁(yè)面保護,你不可能修改系統的代碼頁(yè)(如果你強到連操作系統代碼都能改,偶無(wú)話(huà)可說(shuō))。由于I/O許可位圖中的規定,你也不能進(jìn)行直接端口訪(fǎng)問(wèn)(29A的一個(gè)美女[聽(tīng)說(shuō)叫 Mercy.Chan]可以通過(guò)匯編方法直接訪(fǎng)問(wèn)端口的目的,但是沒(méi)有見(jiàn)過(guò)給出事例代碼。知道得給介紹一下她的程序代碼)WINDOWS中你不可能象在 DOS中那樣通過(guò)截獲INT21H來(lái)攔截所有文件操作??傊?,你以一個(gè)用戶(hù)態(tài)權限運行,你的行為將受到操作系統嚴格的控制,不可能再象DOS下那樣為所欲為了(在xp中,這種權限管理極為嚴格,大致分成了4-8個(gè)等級)。 WINDOWS下采用的可執行文件格式和DOS下的 EXE截然不同(普通程序采用PE格式,驅動(dòng)程序采用LE),所以病毒的感染文件的難度增大了(PE和LE比較復雜,中間分了若干個(gè)節,如果感染錯了,將導致文件不能繼續執行)。當今病毒的新技術(shù)太多,隨便介紹幾個(gè)。
1.系統核心態(tài)病毒 386及以上的CPU實(shí)現了4個(gè)特權級模式(WINDOWS只用到了其中兩個(gè)),其中特權級0(Ring0)是留給操作系統代碼,設備驅動(dòng)程序代碼使用的,它們工作于系統核心態(tài);而特權極3 (Ring3)則給普通的用戶(hù)程序使用(我想知道一個(gè)問(wèn)題,ring1,2是干什么的?),它們工作在用戶(hù)態(tài)。運行于處理器核心態(tài)的代碼不受任何的限制,可以自由地訪(fǎng)問(wèn)任何有效地址,進(jìn)行直接端口訪(fǎng)問(wèn)。而運行于用戶(hù)態(tài)的代碼則要受到處理器的諸多檢查,它們只能訪(fǎng)問(wèn)映射其地址空間的頁(yè)表項中規定的在用戶(hù)態(tài)下可訪(fǎng)問(wèn)頁(yè)面的虛擬地址,且只能對任務(wù)狀態(tài)段(TSS)中I/O許可位圖(I/O Permission Bitmap)中規定的可訪(fǎng)問(wèn)端口進(jìn)行直接訪(fǎng)問(wèn)(此時(shí)處理器狀態(tài)和控制標志寄存器EFLAGS中的IOPL通常為0,指明當前可以進(jìn)行直接I/O的最低特權級別是Ring0)。以上的討論只限于保護模式操作系統,象DOS這種實(shí)模式操作系統則沒(méi)有這些概念,其中的所有代碼都可被看作運行在核心態(tài)。既然運行在核心態(tài)有如此之多的優(yōu)勢,那么病毒當然沒(méi)有理由不想得到Ring0。處理器模式從Ring3向Ring0的切換發(fā)生在控制權轉移時(shí),有以下兩種情況:訪(fǎng)問(wèn)調用門(mén)的長(cháng)轉移指令CALL,訪(fǎng)問(wèn)中斷門(mén)或陷阱門(mén)的INT指令。具體的轉移細節由于涉及復雜的保護檢查和堆棧切換,不再贅述,請參閱相關(guān)資料?,F代的操作系統通常使用中斷門(mén)來(lái)提供系統服務(wù),通過(guò)執行一條陷入指令來(lái)完成模式切換,在INTEL X86上這條指令是INT,如在WIN9X下是INT30(保護模式回調),在LINUX下是INT80,在WINNT/2000下是INT2E。用戶(hù)模式的服務(wù)程序(如系統DLL)通過(guò)執行一個(gè)INTXX來(lái)請求系統服務(wù),然后處理器模式將切換到核心態(tài),工作于核心態(tài)的相應的系統代碼將服務(wù)于此次請求并將結果傳給用戶(hù)程序。 在即將發(fā)布的xp-sp2中采用所謂增強的內存頁(yè)面保護將會(huì )更為嚴格的控制用戶(hù)權限,據說(shuō)在訪(fǎng)問(wèn)內存地址時(shí)得到的將是經(jīng)過(guò)系統映射處理的對應內存范圍,在內存實(shí)地址與用戶(hù)層之間,搞了一個(gè)類(lèi)似于轉換協(xié)議的東西,害的很多軟件都不能運行,應為他們總是試圖按照原有的HAL層訪(fǎng)問(wèn)規則進(jìn)行工作。
2.駐留病毒 駐留病毒是指那些在內存中尋找合適的頁(yè)面并將病毒自身拷貝到其中且在系統運行期間能夠始終保持病毒代碼的存在。駐留病毒比那些直接感染(Direct- action)型病毒更具隱蔽性,它通常要截獲某些系統操作來(lái)達到感染傳播的目的。進(jìn)入了核心態(tài)的病毒可以利用系統服務(wù)來(lái)達到此目的,如CIH病毒通過(guò)調用一個(gè)由VMM導出的服務(wù)VMMCALL _PageAllocate在大于0xC0000000的地址上分配一塊頁(yè)面空間。而處于用戶(hù)態(tài)的程序要想在程序退出后仍駐留代碼的部分于內存中似乎是不可能的,因為無(wú)論用戶(hù)程序分配何種內存都將作為進(jìn)程占用資源的一部分,一旦進(jìn)程結束,所占資源將立即被釋放。所以我們要做的是分配一塊進(jìn)程退出后仍可保持的內存。 病毒寫(xiě)作小組29A的成員GriYo 運用的一個(gè)技術(shù)很有創(chuàng )意:他通過(guò)CreateFileMappingA 和MapViewOfFile創(chuàng )建了一個(gè)區域對象并映射它的一個(gè)視口到自己的地址空間中去,并把病毒體搬到那里,由于文件映射所在的虛擬地址處于共享區域(能夠被所有進(jìn)程看到,即所有進(jìn)程用于映射共享區內虛擬地址的頁(yè)表項全都指向相同的物理頁(yè)面),所以下一步他通過(guò)向Explorer.exe中注入一段代碼(利用WriteProcessMemory來(lái)向其它進(jìn)程的地址空間寫(xiě)入數據),而這段代碼會(huì )從Explorer.exe的地址空間中再次申請打開(kāi)這個(gè)文件映射。如此一來(lái),即便病毒退出,但由于Explorer.exe還對映射頁(yè)面保持引用,所以一份病毒體代碼就一直保持在可以影響所有進(jìn)程的內存頁(yè)面中直至Explorer.exe退出(我直接試過(guò)該種方法,在xp下注意要寫(xiě)一個(gè)空循環(huán)語(yǔ)句,以免被踢出處理隊列)。 另外還可以通過(guò)修改系統動(dòng)態(tài)連接模塊(DLL)來(lái)進(jìn)行駐留。WIN9X下系統DLL(如Kernel32.dll 映射至BFF70000)處于系統共享區域(2G-3G),如果在其代碼段空隙中寫(xiě)入一小段病毒代碼則可以影響其它所有進(jìn)程。但Kernel32.dll 的代碼段在用戶(hù)態(tài)是只能讀不能寫(xiě)的。所以必須先通過(guò)特殊手段修改其頁(yè)保護屬性;而在WINNT/2000/xp系統DLL所在頁(yè)面被映射到進(jìn)程的私有空間(如 Kernel32.dll 映射至77ED0000)中,并具有寫(xiě)時(shí)拷貝屬性,即沒(méi)有進(jìn)程試圖寫(xiě)入該頁(yè)面時(shí),所有進(jìn)程共享這個(gè)頁(yè)面;而當一個(gè)進(jìn)程試圖寫(xiě)入該頁(yè)面時(shí),系統的頁(yè)面錯誤處理代碼將收到處理器的異常,并檢查到該異常并非訪(fǎng)問(wèn)違例,同時(shí)分配給引發(fā)異常的進(jìn)程一個(gè)新頁(yè)面,并拷貝原頁(yè)面內容于其上且更新進(jìn)程的頁(yè)表以指向新分配的頁(yè)。這種共享內存的優(yōu)化給病毒的寫(xiě)作帶來(lái)了一定的麻煩,病毒不能象在WIN9X下那樣僅修改Kernel32.dll一處代碼便可一勞永逸。它需要利用 WriteProcessMemory來(lái)向每個(gè)進(jìn)程映射Kernel32.dll的地址寫(xiě)入病毒代碼,這樣每個(gè)進(jìn)程都會(huì )得到病毒體的一個(gè)副本,這在病毒界被稱(chēng)為多進(jìn)程駐留或每進(jìn)程駐留(Muti-Process Residence or Per-Process Residence )。 文中列舉方法在xp-sp1下略作修改即可使用 ,大部分為在代碼段內加入空循環(huán) 。在sp2下,很多時(shí)候報如下類(lèi)型的錯誤不可訪(fǎng)問(wèn)的內存地址段.........。
在原來(lái)的帖子中我援引了另一篇文檔中的例子,但經(jīng)MM告知那些掛鉤-捆綁等方法在如今的設計中并不是很受歡迎,原因在于新的操作系統許多函數規則是不可預知的,也就是所謂的"黑箱"設計使得設計人員更加偏愛(ài)系統級別的線(xiàn)程捆綁或者更加直接的接管權限控制的方法,采用最復雜的線(xiàn)程捆綁技術(shù)甚至可以使殺毒軟件和防火墻得不到足夠的信息來(lái)區分一個(gè)程序是否合法。更高級別的搶奪權限控制甚至可以結束所有殺毒軟件的進(jìn)程,包括卡巴斯基所采用的受保護的內存線(xiàn)程技術(shù)。 盡管微軟隱藏了很多系統函數,但是經(jīng)過(guò)很多高手的努力,許多隱藏的系統函數已經(jīng)被找出,并且微軟也有意識的減少隱藏函數的數量。在前段時(shí)間網(wǎng)上泄漏的 2000的部分代碼中,其中關(guān)于磁盤(pán)文件讀寫(xiě)的部分(大小為700M的那個(gè)壓縮包里標號為115BH的那個(gè)文件其中的第三節子代碼)其中有很多進(jìn)程是微軟的開(kāi)發(fā)文檔中是沒(méi)有給出介紹的,不知道以后會(huì )不會(huì )有人利用這些東西寫(xiě)病毒。對病毒稍微有些常識的人都知道,普通病毒是通過(guò)將自身附加到宿主尾部(如此一來(lái),宿主的大小就會(huì )增加),并修改程序入口點(diǎn)來(lái)使病毒得到擊活。但現在不少病毒通過(guò)使用特殊的感染技巧能夠使宿主大小及宿主文件頭上的入口點(diǎn)保持不變。附加了病毒代碼卻使被感染文件大小不變聽(tīng)起來(lái)讓人不可思議,其實(shí)它是利用了PE文件格式的特點(diǎn):PE文件的每個(gè)節之間留有按簇大小對齊后的空洞,病毒體如果足夠小則可以將自身分成幾份并分別插入到每個(gè)節最后的空隙中,這樣就不必額外增加一個(gè)節,因而文件大小保持不變。著(zhù)名的CIH病毒正是運用這一技術(shù)的典型范例(它的大小只有1K左右)。 病毒在不修改文件頭入口點(diǎn)的前提下要想獲得控制權并非易事:入口點(diǎn)不變意味著(zhù)程序是從原程序的入口代碼處開(kāi)始執行的,病毒必須要將原程序代碼中的一處修改為導向病毒入口的跳轉指令。原理就是這樣,但其中還存在很多可討論的地方,如在原程序代碼的何處插入這條跳轉指令。一些查毒工具掃描可執行文件頭部的入口點(diǎn)域,如果發(fā)現它指向的地方不正常,即不在代碼節而在資源節或重定位節中,則有理由懷疑文件感染了某種病毒。所以剛才討論那種病毒界稱(chēng)之為EPO(入口點(diǎn)模糊)的技術(shù)可以很好的對付這樣的掃描,同時(shí)它還是反虛擬執行的重要手段。
另外值得一提的是現在不少病毒已經(jīng)支持對壓縮文件的感染。如Win32.crypto病毒就可以感染ZIP,ARJ,RAR,ACE,CAB 等諸多類(lèi)型的壓縮文件。這些病毒的代碼中含有對特定壓縮文件類(lèi)型解壓并壓縮的代碼段,可以先把壓縮文件中的內容解壓出來(lái),然后對合適的文件進(jìn)行感染,最后再將感染后文件壓縮回去并同時(shí)修改壓縮文件頭部的校驗和。目前不少反病毒軟件都支持查多種格式的壓縮文件,但對有些染毒的壓縮文件無(wú)法殺除。原因我想可能是怕由于某種緣故,如解壓或壓縮有誤,校驗和計算不對等,使得清除后壓縮文件格式被破壞。病毒卻不用對用戶(hù)的文件損壞負責,所以不存在這種擔心。 個(gè)人看來(lái),目前的殺毒軟件在對待加殼病毒的時(shí)候表現比較差的為瑞星,懷疑瑞星的殺毒引擎對加殼的東西放映不靈敏,因此瑞星自己加殼了很多病毒放到病毒庫里,我曾使用一些很少用的加殼方式對某些普通病毒加殼,結果瑞星沒(méi)查出來(lái),有待改進(jìn)。 以上關(guān)于病毒的相關(guān)文字均來(lái)源于 某病毒論壇的文章 ,我個(gè)人作了少量修改 。再往下為引擎部分的實(shí)現 。 殺毒引擎目前主流有兩種實(shí)現方式:1.虛擬機技術(shù) 2.實(shí)時(shí)監控技術(shù) 3.智能碼標識技術(shù)
4. 行為攔截技術(shù) 3.4.為最近兩年搞出來(lái)的技術(shù)。3的目的是提高殺毒速度并且預防未知病毒,但就現實(shí)而言,除了東方衛士試驗了一下(并且不成功),其余廠(chǎng)商未開(kāi)發(fā)完全基于該技術(shù)的引擎,諾頓的開(kāi)發(fā)人員認為:"沒(méi)有足夠的技術(shù)手段來(lái)實(shí)現文中所提出的殺毒理念(翻譯的可能有不準確之處。‘文中‘是指智能碼標示技術(shù)的理論基礎:IBM :Another way to the end (實(shí)現目的的另一種方式),在該文中提出了基于預定規則的智能殺毒技術(shù))"。行為攔截技術(shù)(或者別的什么智能殺毒技術(shù))也是一種預防未知病毒的方法,與虛擬機技術(shù)相似,通過(guò)對程序行為的分析來(lái)判斷其是否為病毒。 對于未知病毒的判斷實(shí)際上代表著(zhù)殺毒軟件廠(chǎng)商在引擎研究方面的最高能力。業(yè)界公認,防止未知病毒是"代表研究水平的"。平心而論,非美國廠(chǎng)商在這方面能力較差。業(yè)界對于防止未知病毒能力是按照如下方法衡量的:以評測當日的殺毒軟件最新版本為該廠(chǎng)商的供測試版本,未知病毒由如下而來(lái): 1.病毒作者提供。有些病毒作者在將自己的病毒發(fā)布以前總愛(ài)送給一些業(yè)界的安全雜志供其評測(最佩服這種人)2.大部分真正的業(yè)界安全雜志都有自己的研究實(shí)驗室,他們自己的研究人員會(huì )根據最新的趨勢和技術(shù)手段及工具寫(xiě)一些病毒。一般情況下,這些病毒是不會(huì )流到網(wǎng)上去的。3.假病毒。一些很類(lèi)似于病毒行為的文件,程序等。測試的時(shí)候病毒庫被置空(就是殺毒軟件試圖調用病毒庫時(shí)采用程序方法向其返回一個(gè)空結果),在這種情況下進(jìn)行測試。如果有人有興趣,可以到病毒論壇上搞點(diǎn)新手寫(xiě)的小病毒(一般也就100-200行),弄上幾十個(gè)拿自己的殺毒軟件試一試,就會(huì )發(fā)現在平均狀態(tài)下諾頓病毒庫被置空時(shí)起對未知病毒判斷能力還是挺強的,怎么著(zhù)也到了x%,(x為兩位數),很多殺毒軟件結果挺慘的,尤其在對付比較復雜的蠕蟲(chóng)病毒時(shí),某廠(chǎng)商的產(chǎn)品近乎全軍覆沒(méi)。下面對虛擬機和實(shí)時(shí)監控進(jìn)行介紹。由于大家認為在文中加入程序代碼看著(zhù)很累,因此不再給出技術(shù)實(shí)現代碼,其實(shí)根據原理你自己也可以寫(xiě)出來(lái)。 虛擬機,在反病毒界也被稱(chēng)為通用解密器,已經(jīng)成為反病毒軟件中最重要的部分之一虛擬機的概念和它與諸如Vmware和WIN9X下的VDM(DOS虛擬機,它用來(lái)在32位保護模式環(huán)境中運行16實(shí)模式代碼)是有區別的。其實(shí)這些虛擬機的設計思想是有淵源可尋的,都來(lái)自于IBM的一批研究人員搞的一套東西。 Vmware作為原操作系統下的一個(gè)應用程序可以為運行于其上的目標操作系統創(chuàng )建出一部虛擬的機器,目標操作系統就象運行在單獨一臺真正機器上,絲毫察覺(jué)不到自己處于Vmware的控制之下。當在Vmware中按下電源鍵(Power On)時(shí),窗口里出現了機器自檢畫(huà)面,接著(zhù)是操作系統的載入,一切都和真的一樣。而WIN9X為了讓多個(gè)程序共享CPU和其它硬件資源決定使用VMs(所有Win32應用程序運行在一部系統虛擬機上;而每個(gè)16位DOS程序擁有一部DOS虛擬機),winxp是采用區域內存訪(fǎng)問(wèn)來(lái)實(shí)現16位程序支持的。 VM是一個(gè)完全由軟件虛構出來(lái)的東西,以和真實(shí)電腦完全相同的方式來(lái)回應應用程序所提出的需求。從某種角度來(lái)看,你可以將一部標準的PC的結構視為一套 API。這套API的元素包括硬件I/O系統,和以中斷為基礎的BIOS和MS-DOS。WIN9X常常以它自己的軟件來(lái)代理這些傳統的API元素,以便能夠對珍貴的硬件多重發(fā)訊。在VM上運行的應用程序認為自己獨占整個(gè)機器,它們相信自己是從真正的鍵盤(pán)和鼠標獲得輸入,并從真正的屏幕上輸出。稍被加一點(diǎn)限制,它們甚至可以認為自己完全擁有CPU和全部?jì)却妗?br> 查毒的虛擬機并不是象某些人想象的:如Vmware一樣為待查可執行程序創(chuàng )建一個(gè)虛擬的執行環(huán)境,提供它可能用到的一切元素,包括硬盤(pán),端口等,讓它在其上自由發(fā)揮,最后根據其行為來(lái)判定是否為病毒。當然這是個(gè)不錯的構想,但考慮到其設計難度過(guò)大(需模擬元素過(guò)多且行為分析要借助人工智能理論),因而只能作為以后發(fā)展的方向。就目前可以知道的信息而言,卡巴斯基在這方面做得還可以, mcafee的新產(chǎn)品中加入了一種溢出保護技術(shù),本質(zhì)上而言也是一種所謂的虛擬技術(shù)。查毒的虛擬機是一個(gè)軟件模擬的CPU,它可以象真正CPU一樣取指,譯碼,執行,它可以模擬一段代碼在真正CPU上運行得到的結果。給定一組機器碼序列,虛擬機會(huì )自動(dòng)從中取出第一條指令操作碼部分,判斷操作碼類(lèi)型和尋址方式以確定該指令長(cháng)度,然后在相應的函數中執行該指令,并根據執行后的結果確定下條指令的位置,如此循環(huán)反復直到某個(gè)特定情況發(fā)生以結束工作,這就是虛擬機的基本工作原理和簡(jiǎn)單流程。設計虛擬機查毒的目的是為了對付加密變形病毒,虛擬機首先從文件中確定并讀取病毒入口處代碼,然后以上述工作步驟解釋執行病毒頭部的解密段(decryptor),最后在執行完的結果(解密后的病毒體明文)中查找病毒的特征碼。這里所謂的"虛擬",并非是創(chuàng )建了什么虛擬環(huán)境,而是指染毒文件并沒(méi)有實(shí)際執行,只不過(guò)是虛擬機模擬了其真實(shí)執行時(shí)的效果。這就是虛擬機查毒基本原理。曾經(jīng)跟搞殺毒的技術(shù)人員探討是否可以采用模擬實(shí)際執行的方法來(lái)搞一套殺毒軟件,回答是微軟可以,因為微軟可以在系統底層搞一套硬件虛擬層,來(lái)實(shí)現硬件虛擬。我忽然想到,如果微軟真的搞殺毒軟件,其實(shí)無(wú)論別的殺毒軟件公司多么強,大家都得徹底玩完。
早期病毒沒(méi)有使用任何復雜的反檢測技術(shù),如果拿反匯編工具打開(kāi)病毒體代碼看到的將是真正的機器碼。因而可以由病毒體內某處一段機器代碼和此處距離病毒入口(注意不是文件頭)偏移值來(lái)唯一確定一種病毒。查毒時(shí)只需簡(jiǎn)單的確定病毒入口并在指定偏移處掃描特定代碼串。這種靜態(tài)掃描技術(shù)對付普通病毒是萬(wàn)無(wú)一失的。 隨著(zhù)病毒技術(shù)的發(fā)展,出現了一類(lèi)加密病毒。這類(lèi)病毒的特點(diǎn)是:其入口處具有解密子(decryptor),而病毒主體代碼被加了密。運行時(shí)首先得到控制權的解密代碼將對病毒主體進(jìn)行循環(huán)解密,完成后將控制交給病毒主體運行,病毒主體感染文件時(shí)會(huì )將解密子,用隨機密鑰加密過(guò)的病毒主體,和保存在病毒體內或嵌入解密子中的密鑰一同寫(xiě)入被感染文件。由于同一種病毒的不同傳染實(shí)例的病毒主體是用不同的密鑰進(jìn)行加密,因而不可能在其中找到唯一的一段代碼串和偏移來(lái)代表此病毒的特征,似乎靜態(tài)掃描技術(shù)對此即將失效。但仔細想想,不同傳染實(shí)例的解密子仍保持不變機器碼明文(從理論上講任何加密程序中都存在未加密的機器碼,否則程序無(wú)法執行),所以將特征碼選于此處雖然會(huì )冒一定的誤報風(fēng)險(解密子中代碼缺少病毒特性,同樣的特征碼也會(huì )出現在正常程序中),但仍不失為一種有效的方法。 由于加密病毒還沒(méi)有能夠完全逃脫靜態(tài)特征碼掃描,所以病毒寫(xiě)作者在加密病毒的基礎之上進(jìn)行改進(jìn),使解密子的代碼對不同傳染實(shí)例呈現出多樣性,這就出現了加密變形病毒。它和加密病毒非常類(lèi)似,唯一的改進(jìn)在于病毒主體在感染不同文件會(huì )構造出一個(gè)功能相同但代碼不同的解密子,也就是不同傳染實(shí)例的解密子具有相同的解密功能但代碼卻截然不同。比如原本一條指令完全可以拆成幾條來(lái)完成,中間可能會(huì )被插入無(wú)用的LJ代碼。這樣,由于無(wú)法找到不變的特征碼,靜態(tài)掃描技術(shù)就徹底失效了。在這種情況下,虛擬機技術(shù)將會(huì )派上用場(chǎng)。 實(shí)時(shí)監控技術(shù)其實(shí)并非什么新技術(shù),早在DOS編程時(shí)代就有之。只不過(guò)那時(shí)人們沒(méi)有給這項技術(shù)冠以這樣專(zhuān)業(yè)的名字而已。在WINDOWS下要實(shí)現實(shí)時(shí)監控決非易事,普通用戶(hù)態(tài)程序是不可能監控系統的活動(dòng)的,這也是出于系統安全的考慮。病毒實(shí)時(shí)監控(For WIN9X&WINNT/2000)都使用了驅動(dòng)編程技術(shù),讓工作于系統核心態(tài)的驅動(dòng)程序去攔截所有的文件訪(fǎng)問(wèn)。當然由于工作系統的不同,驅動(dòng)程序無(wú)論從結構還是工作原理都不盡相同的,當然程序寫(xiě)法和編譯環(huán)境更是千差萬(wàn)別了,上面提到的病毒實(shí)時(shí)監控其實(shí)就是對文件的監控,說(shuō)成是文件監控應該更為合理一些。除了文件監控外,還有各種各樣的實(shí)時(shí)監控工具,它們也都具有各自不同的特點(diǎn)和功用?,F在流行的什么網(wǎng)絡(luò )監控,郵件監控基本上是對文件監控的改進(jìn),革命性的改動(dòng)沒(méi)有。
病毒實(shí)時(shí)監控其實(shí)就是一個(gè)文件監視器,它會(huì )在文件打開(kāi),關(guān)閉,清除,寫(xiě)入等操作時(shí)檢查文件是否是病毒攜帶者,如果是則根據用戶(hù)的決定選擇不同的處理方案,如清除病毒,禁止訪(fǎng)問(wèn)該文件,刪除該文件或簡(jiǎn)單地忽略。這樣就可以有效地避免病毒在本地機器上的感染傳播,因為可執行文件裝入器在裝入一個(gè)文件執行時(shí)首先會(huì )要求打開(kāi)該文件,而這個(gè)請求又一定會(huì )被實(shí)時(shí)監控在第一時(shí)間截獲到,它確保了每次執行的都是干凈的不帶毒的文件從而不給病毒以任何執行和發(fā)作的機會(huì )。以上說(shuō)的僅是病毒實(shí)時(shí)監控一個(gè)粗略的工作過(guò)程,病毒實(shí)時(shí)監控的設計主要存在以下幾個(gè)難點(diǎn): 其一是驅動(dòng)程序的編寫(xiě)不同于普通用戶(hù)態(tài)程序的寫(xiě)作,其難度很大。寫(xiě)用戶(hù)態(tài)程序時(shí)你需要的僅僅就是調用一些熟知的API函數來(lái)完成特定的目的,比如打開(kāi)文件你只需調用 CreateFile就可以了;但在驅動(dòng)程序中你將無(wú)法使用熟悉的CreateFile。在NT/2000下你可以使用 ZwCreateFile 或NtCreateFile(native API),但這些函數通常會(huì )要求運行在某個(gè)IRQL(中斷請求級)上,如果你對如中斷請求級,延遲/異步過(guò)程調用,非分頁(yè)/分頁(yè)內存等概念不是特別清楚,那么你寫(xiě)的驅動(dòng)將很容易導致藍屏死機(BSOD),Ring0下的異常將往往導致系統崩潰,因為它對于系統總是被信任的,所以沒(méi)有相應處理代碼去捕獲這個(gè)異常。在NT下對KeBugCheckEx的調用將導致藍屏的出現,接著(zhù)系統將進(jìn)行轉儲并隨后重啟。另外驅動(dòng)程序的調試不如用戶(hù)態(tài)程序那樣方便,用象VC ++那樣的調試器是不行的,你必須使用系統級調試器,如softice,kd,trw等。 其二是驅動(dòng)程序與ring3下客戶(hù)程序的通信問(wèn)題。這個(gè)問(wèn)題的提出是很自然的,試想當驅動(dòng)程序截獲到某個(gè)文件打開(kāi)請求時(shí),它必須通知位于ring3下的查毒模塊檢查被打開(kāi)的文件,隨后查毒模塊還需將查毒的結果通過(guò)某種方式傳給ring0下的監控程序,最后驅動(dòng)程序根據返回的結果決定請求是否被允許。這里面顯然存在一個(gè)雙向的通信過(guò)程。寫(xiě)過(guò)驅動(dòng)程序的人都知道一個(gè)可以用來(lái)向驅動(dòng)程序發(fā)送設備I/O控制信息的API調用DeviceIoControl,它的接口在MSDN中可以找到,但它是單向的,即ring3下客戶(hù)程序可以通過(guò)調用DeviceIoControl將某些信息傳給ring0下的監控程序但反過(guò)來(lái)不行。既然無(wú)法找到一個(gè)現成的函數實(shí)現從ring0下的監控程序到ring3下客戶(hù)程序的通信,則我們必須采用迂回的辦法來(lái)間接做到這一點(diǎn)。為此我們必須引入異步過(guò)程調用(APC)和事件對象的概念,它們就是實(shí)現特權級間喚醒的關(guān)鍵所在?,F在先簡(jiǎn)單介紹一下這兩個(gè)概念,具體的用法請參看后面的每子章中的技術(shù)實(shí)現細節。異步過(guò)程調用是一種系統用來(lái)當條件合適時(shí)在某個(gè)特定線(xiàn)程的上下文中執行一個(gè)過(guò)程的機制。當向一個(gè)線(xiàn)程的APC隊列排隊一個(gè)APC時(shí),系統將發(fā)出一個(gè)軟件中斷,當下一次線(xiàn)程被調度時(shí),APC函數將得以運行。APC分成兩種:系統創(chuàng )建的APC稱(chēng)為內核模式APC,由應用程序創(chuàng )建的APC稱(chēng)為用戶(hù)模式APC。另外只有當線(xiàn)程處于可報警(alertable)狀態(tài)時(shí)才能運行一個(gè)APC。比如調用一個(gè)異步模式的ReadFileEx時(shí)可以指定一個(gè)用戶(hù)自定義的回調函數 FileIOCompletionRoutine,當異步的I/O操作完成或被取消并且線(xiàn)程處于可報警狀態(tài)時(shí)函數被調用,這就是APC的典型用法。 Kernel32.dll中導出的QueueUserAPC函數可以向指定線(xiàn)程的隊列中增加一個(gè)APC對象,因為我們寫(xiě)的是驅動(dòng)程序,這并不是我們要的那個(gè)函數。很幸運的是在Vwin32.vxd中導出了一個(gè)同名函數QueueUserAPC,監控程序攔截到一個(gè)文件打開(kāi)請求后,它馬上調用這個(gè)服務(wù)排隊一個(gè)ring3下客戶(hù)程序中需要被喚醒的函數的APC,這個(gè)函數將在不久客戶(hù)程序被調度時(shí)被調用。這種APC喚醒法適用于WIN9X,在 WINNT/2000下我們將使用全局共享的事件和信號量對象來(lái)解決互相喚醒問(wèn)題。有關(guān)WINNT/2000下的對象組織結構我將在3.4.2節中詳細說(shuō)明。NT/2000版監控程序中我們將利用KeReleaseSemaphore來(lái)喚醒一個(gè)在ring3下客戶(hù)程序中等待的線(xiàn)程。目前不少反病毒軟件已將驅動(dòng)使用的查毒模塊移到ring0,即如其所宣傳的"主動(dòng)與操作系統無(wú)縫連接",這樣做省卻了通信的消耗,但把查毒模塊寫(xiě)成驅動(dòng)形式也同時(shí)會(huì )帶來(lái)一些麻煩,如不能調用大量熟知的API,不能與用戶(hù)實(shí)時(shí)交互,所以我們還是選擇剖析傳統的反病毒軟件的監控程序。 其三是驅動(dòng)程序所占用資源問(wèn)題。如果由于監控程序頻繁地攔截文件操作而使系統性能下降過(guò)多,則這樣的程序是沒(méi)有其存在的價(jià)值的。本論文將對一個(gè)成功的反病毒軟件的監控程序做徹底的剖析,其中就包含有分析其用以提高自身性能的技巧的部分,如設置歷史記錄,內置文件類(lèi)型過(guò)濾,設置等待超時(shí)等。 這段文字也是從關(guān)于病毒工作原理那篇文章里搞出來(lái)的,由于那是一片老文章,因此其中的很多觀(guān)點(diǎn)可能在現在已經(jīng)不再適用,很多加密方式已經(jīng)變得很強。本人并不非常贊同文章關(guān)于實(shí)時(shí)監控技術(shù)的解釋。MM告訴我,現在的基于NT內核的操作系統應用程序文件-應用程序-操作系統之間的響應關(guān)系與原9x時(shí)代還是有一定區別的,特別是加入了很多線(xiàn)程級的權限控制,殺毒軟件現在可以采用實(shí)時(shí)內存監控的方法來(lái)影射應用程序的活動(dòng)。為什么歐美的軟件廠(chǎng)商沒(méi)有搞出那么多的監控方式像什么"網(wǎng)頁(yè)監控,聊天軟件監控等",原因很簡(jiǎn)單,因為病毒能夠起作用,就必須在內存中運行,因此良好的文件監控和內存監控足以解決病毒,國內搞出那么多名堂更多的是出于市場(chǎng)商業(yè)考慮。 毋庸置疑,現在的殺毒軟件引擎都是虛擬機技術(shù)和實(shí)時(shí)監控技術(shù)的復合體。由于各家研發(fā)人員所研究的方向不同,各產(chǎn)品的殺毒品質(zhì)也非常迥異。比如諾頓的殺毒理念就是在確保系統正常運行的前提下,控制最終消除可能影響系統穩定的因素;而另有些廠(chǎng)商則認為殺毒軟件應該最快的消除有害程序。業(yè)界一種獲得公認的設計底線(xiàn)是殺毒軟件絕對不能因為殺毒導致系統崩潰,可惜的是現在很多廠(chǎng)商屢屢撞線(xiàn)。 以下為各家廠(chǎng)商的殺毒引擎簡(jiǎn)介,文中有一部分來(lái)源于業(yè)已公開(kāi)的技術(shù)資料,有一部分來(lái)源于在病毒論壇上被奉為經(jīng)典的反編,還有一部分來(lái)源于廠(chǎng)商技術(shù)人員的介紹(官方和私下的都有)。
1. 諾頓:這個(gè)最熟悉了,諾頓的殺毒軟件實(shí)際上防止偵測方面做得并不是很好,很多病毒程序在子程序段中經(jīng)常借鑒搞崩諾頓的代碼,希望在新版本中諾頓可以采用更強的自身防護技術(shù)。諾頓的引擎應該是完全自成封閉體系的,沒(méi)有資料證實(shí)諾頓曾經(jīng)購買(mǎi)或者借鑒過(guò)別的殺毒引擎。傳聞很多公司都在設計時(shí)參考過(guò)卡巴斯基的泄漏版引擎設計,因此曾經(jīng)在微軟社區在線(xiàn)聊天時(shí),問(wèn)過(guò)這個(gè)問(wèn)題?;刭N一致認為諾頓借鑒卡巴斯基的殺毒引擎毫無(wú)必要,它自己的引擎搞得挺好的。有一個(gè)叫 fenssa的家伙甚至回貼說(shuō)不考慮病毒庫因素,諾頓的殺毒引擎相當先進(jìn),綜合防護性能很好。在微軟,除了用mcafee的就使用諾頓的(這一點(diǎn)我比較相信,很少見(jiàn)到別的殺軟在微軟被使用)。從諾頓的技術(shù)文檔描述和在病毒論壇上流傳的29A的一個(gè)家伙搞的一篇叫虛擬機環(huán)境下諾頓工作過(guò)程的步進(jìn)追蹤和反編的文章來(lái)看,諾頓的殺毒引擎應該是傳統的靜態(tài)代碼對應與實(shí)時(shí)監控的完美結合,應該有一些改進(jìn)的虛擬機技術(shù)在里面(諾頓的人并不怎么推崇虛擬機技術(shù))。諾頓的殺毒速度慢,應該源于諾頓采用了較多的靜態(tài)代碼這種傳統的檢查方式有關(guān)。我個(gè)人非常喜歡諾頓的隔離機制,我認為在沒(méi)有確定完全正確的處理方式之前,刪除是不應該被采用的。一個(gè)高手寫(xiě)的病毒應該能盡可能的與系統進(jìn)程相關(guān),在這種情況下,隔離的優(yōu)勢立刻顯現。諾頓資源占用量比較大,但實(shí)現了如下設計目標:能識別的病毒和被識別為病毒的進(jìn)程完全可以正確處理,對已經(jīng)不可能產(chǎn)生破壞作用的‘病毒尸體‘不會(huì )產(chǎn)生誤判,更不會(huì )出現出現一次又一次的在處理完某病毒后又檢測其為病毒的狀況。 很多人認為諾頓企業(yè)版和個(gè)人板采用的引擎完全一致這種理解不很正確。實(shí)際上企業(yè)版在個(gè)人板的技術(shù)上還是有改進(jìn)的。zdnet上刊登過(guò)一篇文章指出:企業(yè)版和個(gè)人版引擎的核心規則完全一樣,但在前端文件匯入部分企業(yè)版是優(yōu)于個(gè)人版的,企業(yè)版使用了更多的API接口。文章中說(shuō),在大規模文件掃描時(shí),企業(yè)版明顯優(yōu)于個(gè)人版。并且由于使用了負載技術(shù),企業(yè)版資源占用還好一點(diǎn)。另外據說(shuō)企業(yè)版支持基于網(wǎng)絡(luò )的多重負載技術(shù)。
2.Mcafee: 記得看過(guò)一篇報道說(shuō)mcafee收購過(guò)別的殺毒軟件引擎設計公司,據回貼可知為所羅門(mén)。在網(wǎng)上很少能看到關(guān)于對mcafee的殺毒引擎進(jìn)行過(guò)分析的技術(shù)文檔,但從他自己宣傳的資料看,mcafee對虛擬機技術(shù)和實(shí)時(shí)監控研究的都挺徹底的。比如他最近宣傳防止應用程序溢出(大致這個(gè)名字)的技術(shù),應該是在不考慮硬件平臺的情況下虛擬機技術(shù)和實(shí)時(shí)監控技術(shù)結合的上乘之作,盡管經(jīng)常出現錯誤的溢出偵測(軟件層面的放溢出技術(shù)確實(shí)不很穩定)。在處理大量的文件時(shí), mcafee有一定的速度優(yōu)勢(微軟社區中有這個(gè)問(wèn)題的論述)。有來(lái)自于mcafee論壇的消息說(shuō),mcafee 正在研究更先進(jìn)的智能碼掃描技術(shù),估計肯定比東方衛士搞得要好。根據組長(cháng)的回貼,McAfee自發(fā)布VSE8.0i以來(lái)就著(zhù)重于"前懾防范"這一新型的安全領(lǐng)域,并且NORTON也在超這一方向邁進(jìn)。"前懾防范"一共分為兩個(gè)部分,其一為運用部分防火墻技術(shù)外加其入侵檢測技術(shù)有效的阻斷病毒的傳播源,以至于病毒在傳染的初期無(wú)法得到大面積的傳播降低了危害性;其二為依靠其強大的特征碼檢測技術(shù)(Extra.dat)對病毒的行為方式、特征代碼等進(jìn)行檢測,依靠它強大的研發(fā)團隊以及策略聯(lián)盟伙伴使其在這一領(lǐng)域獨樹(shù)一幟。諾頓能在其新版產(chǎn)品中也加入了一些原本屬于防火墻的功能。發(fā)郵件詢(xún)問(wèn)諾頓的研究人員為什么沒(méi)有采用特征碼殺毒技術(shù),回應說(shuō)一個(gè)完美的特征碼掃描技術(shù)應該能夠達到根據用戶(hù)的指定加入特定文件為病毒的目的,也就是當用戶(hù)指定某個(gè)活動(dòng)程序為病毒時(shí),殺毒軟件的引擎能夠根據自身的規則為該活動(dòng)程序定義一個(gè)特征碼,并且在控制該活動(dòng)程序時(shí),能夠有效地斷絕其與系統正常進(jìn)程的關(guān)聯(lián)。在沒(méi)有這個(gè)水平之前,諾頓不會(huì )大規模采用特征碼技術(shù)。從mcafee的技術(shù)文檔來(lái)看,mcafee也只是有限度的試驗性的研究該技術(shù),并在比較有把握的地方應用。實(shí)際上兩家公司在這方面還有很長(cháng)的路要走。
3.卡巴斯基:本論壇上被過(guò)度神話(huà)的殺毒軟件。我個(gè)人非常尊重卡巴斯基的高水準,但說(shuō)句實(shí)話(huà),在不考慮資源占用的情況下,卡巴斯基并沒(méi)有什么足夠的理由能夠讓我放棄諾頓,二者的水平并沒(méi)有什么差異。在穩定性上,卡巴斯基比諾頓要差一些。由于早些年卡巴斯基的引擎曾經(jīng)泄漏(實(shí)際上泄漏的并不是初始源代碼,只是泄漏的引擎可以比較容易的反編),因此網(wǎng)上可以找到很多關(guān)于卡巴斯基引擎的非常詳細的技術(shù)分析,尤其是德國的病毒高手寫(xiě)的關(guān)于如何優(yōu)化卡巴斯基殺毒引擎的文章,被認為是所有采用卡巴斯基引擎的殺毒軟件廠(chǎng)商必看的文章之一,就象美國人寫(xiě)的那篇VB100到底怎么測試殺毒軟件(里面作者綜合近幾年的測試結果推測了VB100在測試時(shí)可能使用的病毒類(lèi)型,相關(guān)比例等)是殺毒軟件廠(chǎng)商在將自己的軟件送測前必看的文章一樣。從網(wǎng)上大量的分析文檔看卡巴斯基的虛擬機技術(shù)是很優(yōu)秀的,但是去年有人發(fā)貼認為卡巴斯基的良好的性能來(lái)源于它非常龐大的病毒庫和良好的升級速度,其殺毒引擎設計水平并不高于其余的公司??ò退够囊娌捎昧怂^的單一形式的規則判斷,眾所周知諾頓是基于分類(lèi)的規則處理??ò退够囊嬖谖募俗R比對病毒庫的時(shí)候被認為有著(zhù)很好的性能,充分利用了處理器的處理能力,"但令人擔憂(yōu)的是,該公司對最新出現的技術(shù)并不充分重視"(英國的計算機雜志去年年末的評論),究竟是對原有引擎進(jìn)行徹底改進(jìn)還是大量使用新技術(shù),估計誰(shuí)都不知道??ò退够囊娲嬖诮凶鏊^的"過(guò)與簡(jiǎn)短的文件碼"問(wèn)題,說(shuō)白了就是有時(shí)候會(huì )鞭尸,它的研究人員說(shuō)正在改進(jìn)。前段時(shí)間有人發(fā)帖子中指出病毒編寫(xiě)者只認可卡巴斯基,說(shuō)實(shí)話(huà)看了很多論壇文檔,好像沒(méi)有哪個(gè)強人這么說(shuō)過(guò)??ò退够叩氖桥c美國廠(chǎng)商有很大區別的研發(fā)道路,卡巴斯基很少引用別的公司開(kāi)發(fā)的技術(shù),而是在不斷的深化,改進(jìn)自身的殺毒引擎,單從某些方面評論,卡巴斯基的引擎代表著(zhù)業(yè)界最高水準,但并不是全部??ò退够且豢詈芎玫臍⒍拒浖?,但并不是神。應該說(shuō)它與諾頓,mcafee一樣都站在殺毒軟件的頂峰水平上。
在國內,一直有江民的殺毒軟件采用卡巴斯基引擎的傳聞,說(shuō)句實(shí)話(huà)業(yè)界相當一部分殺毒軟件都參考了其引擎設計,即使在國內也沒(méi)有足夠的信息證實(shí)只是江民參考了其引擎設計。很多人都使用各種各樣的病毒包對卡巴斯基和江民進(jìn)行測試,測試結果是完全一樣。說(shuō)句實(shí)話(huà),這種測試并沒(méi)有什么可信性,對化石孢的檢測各種殺毒軟件結果幾乎都一樣。只有兩種方法能夠說(shuō)兩者的引擎如何:1.將兩款軟件送至VB100或者類(lèi)似的權威機構進(jìn)行測試,如果兩者對其中未知病毒的測試結果(這個(gè)結果并不公布,廠(chǎng)商自己去買(mǎi))完全一樣,那什么都沒(méi)說(shuō)的。兩個(gè)不同的引擎機制在對待同樣大規模的未知病毒庫時(shí)出現相同的檢測結果近乎是不可能的??上У氖?,江民沒(méi)有參加過(guò)VB100測試,好像也不大可能個(gè)人有足夠龐大的未知病毒庫來(lái)進(jìn)行檢測。2.采用類(lèi)似于破解的方法進(jìn)行反編,分析整個(gè)軟件的工作機制,工作量有多大相信都能猜出來(lái),也沒(méi)有見(jiàn)過(guò)有人搞過(guò)這種研究。因此我個(gè)人只能認為江民可能(較大程度的)參考了卡巴斯基的殺毒引擎設計,但從兩款殺毒軟件的靈敏程度,殺毒速度等諸多方民看,即使江民采用了卡巴斯基的引擎,江民也應該進(jìn)行了很大程度的源代碼修改或者優(yōu)化,另外也有消息說(shuō)江民在引擎中加入了一些自己開(kāi)發(fā)的技術(shù),在實(shí)現方法上類(lèi)似于數字碼技術(shù)。霏凡上曾有高手指出假如公布兩款軟件的源代碼,可能并不會(huì )有人能看出二者有什么關(guān)系。實(shí)際上,當發(fā)現江民的軟件并不能使用卡巴斯基的病毒庫的時(shí)候,我們就應該知道即便曾經(jīng)借鑒過(guò),二者也已經(jīng)可以被認為是不同的殺毒引擎??赡茉趙in3.x平臺下,二者曾經(jīng)很相近;但是今天我們在使用winxp.即使江民確實(shí)采用過(guò)卡巴斯基的引擎,那么可以說(shuō)江民在某些方面發(fā)展了這套引擎,盡管這種發(fā)展未必與原始的研發(fā)方向相符。但無(wú)論基于何種角度考慮,我認為江民的殺毒軟件還是有優(yōu)秀之處的。畢竟你回頭看一看國內的殺毒軟件廠(chǎng)商,在真正的技術(shù)研發(fā)領(lǐng)域只有這么一面旗幟偶爾飄揚。一步步走下來(lái),江民還是有技術(shù)進(jìn)步的。只就純技術(shù)因素而論,假如江民采用了卡巴斯基的引擎,那么今天兩家廠(chǎng)商在不同的方向上發(fā)展著(zhù)那套原始的引擎,這未必是壞事,只要不固步自封,我們好像沒(méi)什么必要爭論兩家廠(chǎng)商是否一個(gè)原始祖先,怕的就是在別人都往前跑的時(shí)候自己停下來(lái),這跟自取滅亡沒(méi)什么區別。盡管市場(chǎng)是殺毒軟件廠(chǎng)商的第一要素,但別忘了技術(shù)是一個(gè)殺毒軟件能否基業(yè)常青的決定性力量。 |