1. 程式人生 > >防毒軟體工作原理 及 現在主要防毒技術

防毒軟體工作原理 及 現在主要防毒技術

卡巴,NORTON,咖啡防毒軟體引擎技術深入探討

一、防毒軟體引擎與病毒庫的關係

首先必須指出防毒軟體的引擎與其病毒庫並沒有什麼直接的關係。防毒引擎的任務和功能非常簡單,就是對於給定的檔案或者程式程序判斷其是否是合法程式(對應於防毒軟體廠商自己定義的正常和非異常程式規範而言。正常的程式規範是指在程式所在系統平臺上操所繫統本身洗淨有定義的或者業界已經公認的程式行為過程,比如作業系統正常執行就必須要求應用程式與系統核心進行程序響應並與交換相關資料。非異常程式活動是指可能存在非法程式操作結果但能夠以較高的置信度確定其非非法程式活動規範的。一般情況下,相關檔案的複製,移動,刪除等都奔包括在該界定範圍內)。

我們知道病毒的最終目的有些是與合法活動很類似的,在這種情況下,要求軟體廠商必須自己有一個行為規範界定規則,在一個給定的範圍和置信度下,判斷相關操作是否為合法。在這方面,各個廠商的界定是有區別的,一般而言非美國廠商界定是非常嚴格的,只有有很高的置信水平的程式行為,他們才判別為非病毒操作。記得前一陣論壇上有人給了四段簡單的程式碼,很多防毒軟體將其判為病毒或有病毒性質的檔案行為,實際上看那幾段程式碼可以知道,其結果並不足以視之為病毒。美國廠商一般判斷比較複雜,這主要由於美國市場上的防毒軟體引擎來源比較複雜,比如Norton,有足夠的技術資料確信它的防毒軟體引擎是自成體系的,而Mcafee則存在一定的外界技術引進(收購所羅門)。

用簡單的話說,防毒引擎就是一套判斷特定程式行為是否為病毒程式(包括可疑的)的技術機制。一個完整的技術引擎遵守如下的行為過程:

⑴非自身程式行為的程式行為捕獲。包括來自於記憶體的程式執行,來自於給定檔案的行為虛擬判斷,來自於網路的動態的資訊等等。一般情況下,我們稱之為引擎前端。捕捉的方法非常多,除Norton以外的防毒軟體採用的都是行為規範程式碼化的方法。Norton由於與微軟有遠遠高於其它廠商合作關係,其實現過程比較獨特,另有敘述。
⑵基於引擎機制的規則判斷。這個環節代表了防毒引擎的質量水平,一個好的防毒引擎應該能在這個環節發現很多或者稱之為相當規模的病毒行為,存而避免進入下一個判斷環節。傳統的反病毒軟體引擎使用的是基於特徵碼的靜態掃描技術,即在檔案中尋找特定的十六進位制字串,如果找到,就可判定檔案感染了某種病毒。但這種方法在當今病毒技術迅猛發展的形勢下已經起不到很好的作用了。為了更好的發現病毒,相繼開發了所謂的虛擬機器,實時監控等相關技術。這個環節被叫做防毒軟體引擎工作的核心層。

⑶引擎與病毒庫的互動作用。這個過程往往被認為是收尾階段,相對於前兩個環節,這個階段速度是非常慢的,防毒引擎與要將非自身程式行為過程轉化為防毒軟體自身可識別的行為識別符號(包括靜態程式碼等),然後與病毒庫中所存貯的行為資訊進行對應,並作出相應處理。當然必須承認,當前的防毒軟體對大量病毒的識別都是在這個階段完成的。因此一個足夠龐大的病毒庫往往能夠彌補防毒軟體引擎的不足之處。但是必須意識到,如果在核心層階段就可以結束並清除病毒程式,那麼防毒軟體的工作速度將會大幅提升。“很可惜的是,當前我們沒有足夠聰明的防毒引擎來完成這個過程”,這就是為什麼有病毒庫的原因。

Norton是微軟最高階的安全方面核心合作廠商,因此它的防毒軟體在某些方面工作比較特殊。比如在防毒軟體的安裝,使用和功能實現方面,大部分廠商採用的是中介軟體技術,在系統底層與非自身應用程式之間作為中介軟體存在並實現其功能;另有一些廠商使用的是應用程式或者嵌入技術,相對而言這種方法安全性較低;Norton和Mcafee實現方式比較相似,Norton採用了基於系統最底層的系統核心驅動,這種實現方式是最安全的或者說最高階的實現方式,當然這需要微軟的系統原始碼級的支援(要花許多money),業界公認,這是最穩定的實現方法,但從目前而言,只Norton一家。Mcafee實現方式與Norton很接近,一般稱之為軟體驅動。相當於在系統中存在一個虛擬“硬體”,來實現防毒軟體功能。這些實現方式關係著防毒引擎對程式行為進行捕捉的方式。
我們使用的Intel系列處理器有兩個 Ring層,對應兩個層,微軟的作業系統將系統中的所有行為分為如下幾個層:

⑴最底層:系統核心層,這個層的所有行為都由作業系統已經內建的指令來實現,所有外界因素(即使你是系統管理員)均不能影響該層的行為。Norton的核心層既工作在這個層上。

⑵硬體虛擬層(HAL)。為了實現硬體無關性,微軟設計了該層。所有的外部工作硬體(相對於系統核心而言)都進入HAL,並被HAL處理為核心層可以相應的指令。我們所使用的硬體的驅動程式既工作在該層上。當外界硬體存在指令請求時,驅動程式作出相關處理後傳給核心層。如果無與之對應的驅動相應,那麼將按照預設硬體進行處理。好像安全模式下硬體的工作就被置於預設硬體模式。Mcafee的防毒軟體,就被認為工作在HAL層上。

⑶使用者層。我們所知的大部分防毒軟體既工作與該層上。一個完整的程式行為請求是如下流程:位於3戶層上的應用程式產生指令行為請求,被傳遞至2HAL進行處理,最後進入1最底層後進入CPU的指令處理迴圈,然後反向將軟體可識別的處理結果經1-2-3再響應給應用程式。對於Norton而言,其整個工作過程如下:3-2-1,完成;Mcafee:3-2-1-1-2,完成:其餘:3-2-1-1-2-3,完成;這個環節代表了防毒軟體引擎的前端行為規範的獲得。只從這個過程而言,Norton和Mcafee是比較先進的。具體到系統與CPU的Ring()的對應,Win NT時代,微軟的NT系統被設計成與四個Ring()層相對應,RISC系列的處理器有四個Ring。因此現在的大部分防毒軟體是不能工作在NT上的。具體來說,CISC有四個Ring(),RISC有兩個Ring()。

儘管比較先進的工作方式給Norton和Mcafee帶來了較高的系統穩定性(HAL層很少出現問題,最底層出問題的機率接近於零),較快的響應速度(減少了環節),但同時也帶來了一些問題:1.資源佔用比較厲害。在Mcafee上體現的不是很明顯,在Norton上表現非常明顯。因為對於越底層的行為,硬體資源分配越多。最好資源的是什麼?當然是作業系統。應為它最最底層。2.解除安裝問題。解除安裝底層的元件出問題的概率是相對比較高的,因此Norton的解除安裝比較慢,偶爾還容易出問題。

因此,有人質疑微軟Windows作業系統的不穩定性,是否會拖累Norton?實際上,Windows的核心層設計是非常優秀的,很多時候,作業系統的不穩定性來源於以下幾個方面:

⑴應用程式設計不合理,許多程式設計者根本就未讀過微軟的32位程式設計指南,所設計的程式並不嚴格符合微軟規範。我們看到,大量多年前設計的軟體還能運行於最新的Win XP平臺,原因很簡單:這個軟體在設計時完全遵循了微軟的程式設計規範。

⑵驅動程式的編寫有問題,與HAL層有衝突。

因此,片面地認為微軟的作業系統將會影響Norton的穩定性是不合理的。
業界有人認為,先進防毒軟體的引擎設計已經日趨複雜,類如Norton這一類的廠商其產品的引擎應該已經覆蓋了作業系統的各個層級,以提高防護能力。在一篇文件中有程式設計師提出有足夠的資訊認為Norton,Mcafee,趨勢的產品自己修改了標準的系統相關協議,比如TCP/IP等,以達到所謂的完整防護的目的。NOD32的一篇官方文件,就指出,反病毒廠商有必要全面更新系統的諸多協議,以達到最快的速度和防毒效果。

二、病毒技術淺析

要討論怎樣反病毒,就必須從病毒技術本身的討論開始。正是所謂“知己知彼,百戰不殆”。很難想象一個毫無病毒寫作經驗的人會成為防毒高手。目前國內一些著名反病毒軟體公司的研發隊伍中不乏病毒寫作高手。只不過他們將同樣的技術用到了正道上,以毒攻毒。當今的病毒與DOS和Win 3.x時代下的從技術角度上看有很多不同。最大的轉變是:引導區病毒減少了,而指令碼型病毒開始氾濫。原因是在當今的作業系統下直接改寫磁碟的引導區會有一定的難度(DOS則沒有保護,允許呼叫INT13直接寫盤),而且引導區的改動很容易被發現,並且微軟在設計作業系統時加強了對引導區的程式行為管理,寫一個完美的引導區病毒難度很大,所以很少有人再寫了;而指令碼病毒以其傳播效率高且容易編寫而深得病毒作者的青睞。但是最最落後的防毒引擎也就是隻基於靜態程式碼的防毒引擎都能幹掉該種病毒(病毒庫搞好就行)。

要討論的技術主要來自於二進位制外殼型病毒(感染檔案的病毒),並且這些技術大都和作業系統底層機制或386以上CPU的保護模式相關,值得研究。DOS下的外殼型病毒主要感染 16位的COM或EXE檔案,由於DOS沒有(檔案和引導區)保護,它們能夠輕鬆地進行駐留,減少可用記憶體(通過修改MCB鏈),修改系統程式碼,攔截系統服務或中斷。而到了WIN9X和WINNT/2000時代,搞個執行其上的32位Windows病毒變得難了點。由於存在頁面保護,你不可能修改系統的內碼表(如果你強到連作業系統程式碼都能改,偶無話可說)。由於I/O許可點陣圖中的規定,你也不能進行直接埠訪問。在Windows中,你不可能像在 DOS裡那樣通過截獲INT21H來攔截所有檔案操作。總之,當你以一個使用者態許可權執行,你的行為就會受到作業系統嚴格的控制(在Win XP中,這種許可權管理極為嚴格,分成了好幾個等級)。Windows下采用的可執行檔案格式和DOS下的EXE檔案截然不同(普通程式採用PE,驅動程式採用LE格式),所以病毒的感染檔案的難度增大了(PE和LE比較複雜,中間分了若干個節,如果感染錯了,將導致檔案不能繼續執行)。當今病毒的新技術太多,隨便介紹幾個。

1、系統核心病毒

386及以上的X86 CPU實現了4個特權級模式(Windows只用到了其中兩個),其中特權級0(Ring0)是留給作業系統程式碼,裝置驅動程式程式碼使用的,它們工作於系統核心態;而特權極3(Ring3)則給普通的使用者程式使用,它們工作在使用者態。運行於處理器核心態的程式碼,不受任何的限制,可以自由地訪問任何有效地址,進行直接埠訪問。而運行於使用者態的程式碼則要受到處理器的諸多限制,它們只能訪問對映其地址空間的頁表項中規定的在使用者態下可訪問頁面的虛擬地址,且只能對任務狀態段(TSS)中I/O許可點陣圖(I/O Permission Bitmap)中規定的可訪問埠進行直接訪問(此時處理器狀態和控制標誌暫存器EFLAGS中的IOPL通常為0,指明當前可以進行直接I/O的最低特權級別是Ring0)。以上的討論只限於保護模式作業系統,像在DOS這種真實模式作業系統裡,則沒有這些概念,其中的所有程式碼都可被看作執行在核心態。既然執行在核心態有如此之多的優勢,那麼病毒當然沒有理由不想得到Ring0。處理器模式從Ring3向Ring0的切換髮生在控制權轉移時,有以下兩種情況:訪問呼叫門的長轉移指令CALL,訪問中斷門或陷阱門的INT指令。現代作業系統通常使用中斷門來提供系統服務,通過執行一條陷入指令完成模式切換。在X86處理器上,這條指令是INT;在Win 9X下是INT30(保護模式回撥);在Linux下則是INT80;在Win NT/2000下是INT2E。使用者模式的服務程式(如系統DLL)通過執行一個INTXX來請求系統服務,然後處理器模式將切換到核心態,工作於核心態的相應的系統程式碼將服務於此次請求,並將結果傳給使用者程式。

在最新發布的Win XP SP2中,採用了“資料執行保護”(DEP)技術。這是一種基於處理器支援的記憶體頁面保護技術,它將更為嚴格地控制使用者訪問的許可權,它禁止在標記為資料儲存的記憶體區域中執行程式碼。當某些程式或病毒嘗試執行標記的資料頁中的程式碼時,就會立即發生異常並禁止執行程式碼。這可以防止攻擊者使用程式碼致使資料緩衝區溢位,然後執行該程式碼。

2、駐留病毒
駐留病毒是指那些在記憶體中尋找合適的頁面並將病毒自身拷貝到其中且在系統執行期間能夠始終保持病毒程式碼的存在。駐留病毒比那些直接感染(Direct-Action)型病毒更具隱蔽性,它通常要截獲某些系統操作來達到感染傳播的目的。進入核心態的病毒,可以利用系統服務來達到此目的。如CIH病毒,就通過呼叫一個由VMM匯出的服務VMMCALL _PageAllocate在大於0XC0000000的地址上分配一塊頁面空間。而處於使用者態的程式要想在程式退出後仍駐留程式碼的部分於記憶體中似乎是不可能的,因為無論使用者程式分配何種記憶體都將作為程序佔用資源的一部分,一旦程序結束,所佔資源將立即被釋放。所以我們要做的是分配一塊程序退出後仍可保持的記憶體。

另外,還可以通過修改系統動態連線模組(DLL)來進行駐留。Win 9X下系統DLL(如Kernel32.dll 對映至BFF70000)處於系統共享區域(2G-3G),如果在其程式碼段空隙中寫入一小段病毒程式碼則可以影響其它所有程序。但Kernel32.dll 的程式碼段在使用者態是隻讀的。所以,必須通過特殊手段修改其頁保護屬性。在Win NT/2000/XP系統裡,DLL所在的頁面被對映到程序的私有空間(如Kernel32.dll對映至77ED0000)中時,具有寫時拷貝屬性,即沒有程序試圖寫入該頁面時,所有程序將共享這個頁面;而當一個程序試圖寫入該頁面時,系統的頁面錯誤處理程式碼將檢查到該異常程序,並給它分配一個新頁面,並拷貝原頁面內容於其上,且更新程序的頁表以指向新分配的頁。這種共享記憶體的優化給病毒的寫作帶來了一定的麻煩,病毒不能象在Win 9X下那樣僅僅修改Kernel32.dll一處程式碼便一勞永逸。它需要利用WriteProcessMemory,向每個程序對映Kernel32.dll的地址寫入病毒程式碼,這樣每個程序都會得到病毒體的一個副本,這被稱為多程序駐留或每程序駐留(Muti-Process Residence or Per-Process Residence)。

在如今的病毒設計中,那些傳統的掛鉤――捆綁方法並不很受歡迎,原因在於新的作業系統裡,許多函式規則是不可預知的。所謂的”黑箱“設計,使得設計人員更偏愛系統級別的執行緒捆綁,或更直接的接管許可權控制的方法。採用最複雜的執行緒捆綁技術,甚至可以使防毒軟體和防火牆得不到足夠的資訊來區分一個程式是否合法。更高級別的搶奪權方法,甚至可以結束所有防毒軟體的程序,包括卡巴斯基所採用的受保護的記憶體執行緒技術。

普通病毒是通過將自身附加到宿主尾部(如此一來,宿主的大小就會增加),並修改程式入口點來使病毒得到擊活。但現在不少病毒通過使用特殊的感染技巧,能夠使宿主大小及宿主檔案頭上的入口點保持不變。附加了病毒程式碼,卻使被感染檔案大小不變聽起來讓人不可思議。其實,它利用了PE檔案格式的特點:PE檔案的每個節之間留有按簇大小對齊後的空洞,病毒體如果足夠小,則可以將自身分成幾份並分別插入到每個節最後的空隙中,這樣就不必額外增加一個節,因而檔案大小可以保持不變。著名的CIH病毒,正是運用這一技術的典型範例(它的大小隻有1K左右)。

病毒在不修改檔案頭入口點的前提下,要想獲得控制權並非易事:入口點不變,意味著程式是從原程式的入口程式碼處開始執行的,病毒必須要將原程式程式碼中的一處修改為導向病毒入口的跳轉指令。一些查毒工具通過掃描可執行檔案頭部的入口點域,如果發現它指向的地方不正常,即不在程式碼節而在資源節或重定位節中,則有懷疑檔案感染了某種病毒。而病毒界中的EPO(入口點模糊)技術,則可以很好的對付這樣的掃描,同時它還是反虛擬執行的重要手段。

另外,值得一提的是現在不少病毒已經支援對壓縮檔案的感染。如Win32.crypto病毒就可以感染ZIP,ARJ,RAR,ACE,CAB等型別的壓縮檔案。這些病毒的程式碼中,含有對特定壓縮檔案型別解壓並壓縮的程式碼段,可以先把壓縮檔案中的內容解壓出來,然後對合適的檔案進行感染,最後再將感染後文件壓縮回去並同時修改壓縮檔案頭部的校驗和。目前不少反病毒軟體都支援掃描多種格式的壓縮檔案,但是對有些染毒的壓縮檔案無法殺除。

目前,防毒軟體在對待加殼病毒的時候,表現比較差的是瑞星。可能是瑞星的防毒引擎對加殼的程式不靈敏,瑞星自己甚至加殼了很多病毒放到病毒庫裡

三、防毒引擎的實現

防毒引擎目前主流有以下一些實現方式:虛擬機器技術,實時監控技術,智慧碼標識技術,行為攔截技術。其中,後面兩個為近年來出現的技術。採用智慧碼標識技術的目的是提高防毒速度並且預防未知病毒,但就現實而言,除了東方衛士不成功的試驗外,其餘廠商並未開發完全基於該技術的引擎,Norton的開發人員認為:“沒有足夠的技術手段來實現這種防毒理念。而行為攔截技術(或者別的什麼智慧防毒技術)也是一種預防未知病毒的方法,與虛擬機器技術相似,通過對程式行為的分析來判斷其是否為病毒。

對於未知病毒的判斷,實際上代表著防毒軟體廠商在引擎研究方面的最高能力。業界公認,防止未知病毒是“代表研究水平的”。業界上,對於防毒軟體防止未知病毒能力是按照如下方法衡量的:以評測當日的防毒軟體最新版本為該廠商的供測試版本,未知病毒通常由以下途徑得來:

⑴病毒作者提供。有些病毒作者在將自己的病毒釋出前,也許為了炫耀技術,總愛送給一些業界的安全雜誌供其評測(最佩服這種人)。

⑵專業研究實驗室。大部分業界安全雜誌都有自己的研究實驗室,他們的研究人員會根據最新的趨勢和技術手段及工具,編寫一些病毒。一般情況下,這些病毒不會洩漏到網上。

⑶假病毒。一些類似於病毒行為的檔案,程式等。測試的時候病毒庫被置空(就是防毒軟體試圖呼叫病毒庫時採用程式方法向其返回一個空結果),在這種情況下進行測試。如果有人有興趣,可以到病毒論壇上搞點新手寫的小病毒(一般也就100-200行),弄上幾十個拿自己的防毒軟體試一試,就會發現在平均狀態下,從Norton病毒庫被置空時起,對未知病毒判斷能力還是挺強的。對於其他許多防毒軟體,就沒有那麼好遠了,尤其在對付比較複雜的蠕蟲病毒時,某些廠商的產品近乎全軍覆沒。
下面對防毒引擎最主要的兩種技術――虛擬機器和實時監控進行介紹。

1、虛擬機器
虛擬機器,在反病毒界也被稱為通用解密器,已經成為反病毒軟體中最重要的組成部分之一。防毒引擎中的虛擬機器,和那些諸如VMWare的“虛擬機器”是有區別的。

其實,對於虛擬機器,其設計思想是有淵源可尋的。VMWare作為原作業系統下的一個應用程式,可以為運行於其上的目標作業系統創建出一部虛擬的機器,目標作業系統就象執行在單獨一臺真正機器上,絲毫察覺不到自己處於VMWare的控制之下。當在VMWare中按下電源鍵(Power On)時,窗口裡出現了機器自檢畫面,接著是作業系統的載入,一切都和一臺真正的計算機一樣。至於Win XP,則是採用區域記憶體訪問,來實現對16位程式的支援。 VM是一個完全由軟體虛構出來的東西,以和真實電腦完全相同的方式來對應用程式所提出的需求進行響應。從某種角度來看,你可以將一部標準的PC的結構視為一套 API。這套API的元素包括硬體I/O系統,和以中斷為基礎的BIOS和MS-DOS。Win 9X常常以它自己的軟體,來代理這些傳統的API元素,以便能夠對珍貴的硬體多重發訊。在VM上執行的應用程式認為自己獨佔整個機器,它們相信自己是從真正的鍵盤和滑鼠獲得輸入,並從真正的螢幕上輸出。稍被加一點限制,它們甚至可以認為自己完全擁有CPU和全部記憶體。

查毒引擎中的虛擬機器,並不是像VMWare的工作原理那樣,為待查的可執行程式建立一個虛擬的執行環境,提供它可能用到的一切元素,包括硬碟,埠等,讓它在其上自由發揮,最後根據其行為來判定是否為病毒。(當然這是個不錯的構想,但考慮到其設計難度過大,需模擬元素過多且行為分析要藉助人工智慧理論,因而只能作為以後發展的方向。)就目前而言,卡巴斯基在這方面做得還可以。而Mcafee的新產品中,則加入了一種緩衝區溢位保護技術,本質上其實也是一種虛擬技術。查毒引擎的虛擬機器是一個軟體模擬的CPU,它可以象真正CPU一樣取值,譯碼,執行,可以模擬一段程式碼在真正CPU上執行得到的結果。給定一組機器碼序列,虛擬機器就會自動從中取出第一條指令操作碼部分,判斷操作碼型別和定址方式以確定該指令長度,然後在相應的函式中執行該指令,並根據執行後的結果確定下條指令的位置,如此迴圈反覆直到某個特定情況發生以結束工作,這就是虛擬機器的基本工作原理和簡單流程。

設計虛擬機器查毒的目的,就是為了對付加密變形病毒,虛擬機器首先從檔案中確定並讀取病毒入口處程式碼,然後以上述工作步驟解釋執行病毒頭部的解密段(Decryptor),最後在執行完的結果(解密後的病毒體明文)中查詢病毒的特徵碼。這裡所謂的“虛擬”,並非是指建立了什麼虛擬環境,而是指染毒檔案並沒有實際執行,只不過是虛擬機器模擬了其真實執行時的效果。這就是虛擬機器查毒基本原理。

早期病毒沒有使用任何複雜的反檢測技術,如果拿反彙編工具開啟病毒體程式碼,看到的將是真正的機器碼。因而可以由病毒體內某處一段機器程式碼和此處距離病毒入口(注意不是檔案頭)偏移值,來唯一確定一種病毒。查毒時,只需簡單的確定病毒入口並在指定偏移處掃描特定程式碼串。這種靜態掃描技術對付普通病毒是萬無一失的。

隨著病毒技術的發展,出現了一類加密病毒。這類病毒的特點是:其入口處具有解密子(Decryptor),而病毒主體程式碼被加了密。執行時首先得到控制權的解密程式碼將對病毒主體進行迴圈解密,完成後將控制交給病毒主體執行,病毒主體感染檔案時會將解密子,用隨機金鑰加密過的病毒主體,和儲存在病毒體內或嵌入解密子中的金鑰一同寫入被感染檔案。由於同一種病毒的不同傳染例項的病毒主體是用不同的金鑰進行加密,因而不可能在其中找到唯一的一段程式碼串和偏移來代表此病毒的特徵,似乎靜態掃描技術對此即將失效。但是,因為不同傳染例項的解密子仍保持不變機器碼明文,所以如果應用特徵碼查毒技術,雖然有一定的誤報風險(解密子中程式碼缺少病毒特性,同樣的特徵碼也會出現在正常程式中),但仍不失為一種有效的方法。

由於加密病毒還沒有能夠完全逃脫靜態特徵碼掃描,所以病毒寫作者在加密病毒的基礎之上進行改進,使解密子的程式碼對不同傳染例項呈現出多樣性,這就出現了加密變形病毒。它和加密病毒非常類似,唯一的改進在於病毒主體在感染不同檔案會構造出一個功能相同但程式碼不同的解密子,也就是不同傳染例項的解密子具有相同的解密功能但程式碼卻截然不同。比如,原本一條指令完全可以拆成幾條來完成,中間可能會被插入無用的LJ程式碼。這樣,由於無法找到不變的特徵碼,靜態掃描技術就徹底失效了。在這種情況下,虛擬機器技術將會派上用場。

2、實時監控
實時監控,其實並非什麼新技術,早在DOS時代就出現了。在Windows下要實現實時監控決非易事,因為普通使用者態程式是不可能監控系統的活動的,這也是出於系統安全的考慮。病毒實時監控普遍使用了驅動程式設計技術,讓工作於系統核心態的驅動程式去攔截所有的檔案訪問。當然由於工作系統的不同,驅動程式無論從結構還是工作原理都不盡相同的,當然程式寫法和編譯環境更是千差萬別了。上面提到的病毒實時監控,實質就是對檔案的監控。除了檔案監控外,還有各種各樣的實時監控工具,都具有各自不同的特點和功用。現在流行的網路監控,郵件監控基本上是對檔案監控的改進,革命性的改動沒有。

病毒實時監控,其實就是一個檔案監視器。它會在檔案開啟,關閉,清除,寫入等操作時檢查檔案是否是病毒攜帶者,如果是則根據使用者的決定選擇不同的處理方案,如清除病毒,禁止訪問該檔案,刪除該檔案或簡單地忽略。這樣就可以有效地避免病毒在本地機器上的感染傳播,因為可執行檔案裝入器在裝入一個檔案執行時首先會要求開啟該檔案,而這個請求又一定會被實時監控在第一時間截獲到,它確保了每次執行的都是乾淨的不帶毒的檔案從而不給病毒以任何執行和發作的機會。以上僅僅是病毒實時監控的主要工作過程,設計上還存在以下幾個難點:

⑴驅動程式的編寫不同於普通使用者態程式的寫作,難度很大。
編寫使用者態程式時,你需要的僅僅就是呼叫一些熟知的API函式來完成特定目的,比如開啟檔案你只需呼叫CreateFile就可以了;但在驅動程式中,你將無法使用熟悉的CreateFile。在Win NT/2000下,你可以使用ZwCreateFile 或NtCreateFile(Native API),但這些函式通常會要求執行在某個IRQL(中斷請求級)上,如果你對中斷請求級或延遲/非同步過程呼叫中非分頁/分頁記憶體的概念不清楚,那麼你的驅動將很容易導致藍屏宕機。Ring0下的異常,將往往導致系統崩潰,因為它對於系統總是被信任的,所以沒有相應處理程式碼去捕獲這個異常。在Win NT下對KeBugCheckEx的呼叫將導致藍屏的出現,接著系統將進行轉儲並隨後重啟。另外驅動程式的除錯不如使用者態程式那樣方便,用象VC ++那樣的偵錯程式是不行的,你必須使用系統級偵錯程式,如SoftIce,KD,TRW等。

現今國內主要防毒技術

特徵碼技術:運用程式中某一段或幾段64位元組以下的程式碼作為判別程式病毒的主要依據,幾乎所有國內防毒軟體都在用.

  複合特徵碼技術:下面給圖, 因為本人藝術細胞原因 所以點到為止

  abcd 所有都在的情況下, 木馬可以被殺到 不管有幾個a 或者幾個b

  虛擬機器技術:卡巴運用的技術,它表現在穿殼能力的強大

  行為查殺技術:根據某些病毒會在計算機裡面的行為作為依據(如在登錄檔內增加什麼鍵值),滿足三個以上就視為木馬或病毒.

  啟發式防毒技術:運用病毒特有的結構,來檢測病毒(如nod32)

  國內外部分防毒軟體的特點:

  金山:超級垃圾的防毒軟體,花哨東西多得要死,實際防毒功能卻屬於世界數一數二地弱,如果不想中木馬,你最好別裝.它甚至連木馬也殺不清

  江民或KV:跟金山差不多,稍微比它好點,但是也比較垃圾,它的技術都是買來經過二次改造,沒什麼特色.

  瑞星:個人認為是國內是國內出的最強地防毒,經過分析,它有三套毒庫

  瑞星的記憶體防毒我們也搞不清楚核心機制,所以分析的只是現象:

  1、普通的木馬病毒(不常見的),瑞星不進行記憶體特徵碼定義,,

  檔案免殺了記憶體就免殺了

  2、瑞星的右鍵快捷查殺和執行主程式查殺,效果不一樣,右鍵不殺不代

  表執行主程式不殺,有些記憶體殺的木馬病毒,修改了執行主程式查殺的特

  徵碼,記憶體就免殺了。網路氾濫的木馬病毒(如鴿子,密碼神通,廣外幽靈等),瑞星進行記憶體特徵碼定義,通常是多區段特徵碼定義,其中有些用免殺殼加密加花後,OD載入不殺,但執行後被殺

  這樣看來感覺瑞星象是3套特徵碼定義,1是右鍵查殺,2是主程式執行查殺,

  3是記憶體查殺,我是這樣分類的

  針對上述現象,瑞星記憶體免殺我們通常這樣做,OD分段定位,先NOP入口點區段,仍被殺則NOP其他區段,直到不殺,找出記憶體特徵碼進行修改

  說明:A B C代表的是病毒特徵碼,括號()表示可能不存在

  關於OD載入入記憶體不殺,執行後被記憶體查殺的問題:

  OD載入的和真正的執行有區別,一些加殼的東西加了木馬OD載入不殺記憶體,真正運行了就被殺,說明真正運行了記憶體中會還原某些程式碼,所以遇到加殼OD不殺,執行被殺的情況,平時我們遇到的木馬,未加密加殼前在OD中是可以被殺和定位記憶體特徵碼的至於一種情況,如果木馬未做任何處理的時候,就是一個原始木馬,拿來OD載入不殺記憶體,運行了就殺,這種情況我沒遇到過,如果你遇到了無殼的出現這種情況,基本上就是被一個記憶體免殺技術不過關的人修改過的,碰巧被你用了

  如果你在免殺過程中遇到了OD載入不殺,執行記憶體被殺的情況,請嘗試修改

  特徵碼,而不是給它加花或加密,正確修改了記憶體特徵碼是可以完全記憶體免殺的

  以上就是黑客小熊所分析的瑞星,瑞星不是用來實時監控,是用來手動查殺記憶體用的.

  諾頓:它查殺的是PE檔案頭,就是那一串程式碼,有一個加殼程式可以把它打亂,高技術的甚至可以把它整個移走以免殺.

  卡巴斯基:國內外數一數二的防毒軟體,曾獲世界第一的稱號.它的優點就是穿殼能力牆(虛擬機器技術),弱點是一見花指令就怕.免殺它一般是加花指令.

  NOD32:啟發式防毒技術,不再是單純的特徵碼技術,就是運用一些木馬程式特有的結構來判別是否木馬,但是缺點是解密能力差,免殺它通常加一個殼再加一個花.

  Ewido:一款非常不錯的殺木馬軟體,它的記憶體查殺和瑞星一樣變態,而且穿花能力強,比起國內木馬克星來說它不知道好多少倍.而且他加入了登錄檔查殺,免殺它要先過記憶體再加強殼

  運用軟體進行埠及程序防禦

  冰刃:用於檢視隱藏埠,程序,服務等,是一個非常好的安全工具.

  埠關聯檢視器:看埠工具.

  木馬輔助查詢器:灰鴿子工作室出品,用於監視檔案.

  Regmon登錄檔監視器:用來監視登錄檔.

  Filemon檔案監視器,用來檢視檔案呼叫的所有DLL