從狹義的角度來看,計算機病毒是一段程序,一段可執行代碼。像生物病毒一樣,計算機病毒有很強的自我復制能力,它能自身附加到各種類型的文件上,病毒能毀壞系統文件,干擾系統正常運行,占用系統空間,降低系統性能。病毒的種目花樣繁多,有的是利用系統漏洞,有的是利用應用程序的漏洞,還有的是利用人們的好奇心點擊頁面,將惡意代碼植入計算機中以達到不可告人的目的。總體來說,病毒有木馬病毒、蠕蟲病毒、流氓軟件、網絡釣魚、瀏覽器劫持等。下面就病毒的隱藏技術對病毒發展過程以及解決辦法作一闡述。
一、早期的病毒隱藏技術
在計算機操作系統或Windows9x時,這個時候的病毒和木馬還都是Win32應用程序,而Win32程序都用應用程序窗口,用戶通過這個窗口對應用程序進行交互式控制。但是病毒和木馬為隱藏自己,利用Microsoft一個未公開的API(應用程序接口)函數“RegisterServiceProcess”將自身注冊為服務進程。由于Win9x的任務管理器不會顯示服務進程,這個問題就被病毒鉆了空子,比較有名的病毒就是“冰河”木馬。當然早期病毒中還有不人流的隱藏方法,就是將自身變為隱藏文件。對這種病毒的處理辦法很簡單,利用第三方工具,如優化大師就可以刪除病毒。
二、線程注射隱藏技術
提到線程,首先得講講進程,任何應用程序在WinXP系統中運行都得以進程的形式來運行,進程包括私有地址空間、運行程序代碼(即對應的可執行的影像文件)、打開資源的句柄、線程。線程是程序運行的實體,應用程序的運行實際上是操作系統內核通過對該進程中的線程的調度來實現的。一般說來,任意兩個進程的私有地址空間是不可以相互訪問的,但是Windows允許在某些特殊情況下相互訪問。線程注射就是利用這點,實現進程之間跨內存訪問,其核心是將病毒和木馬做成一個DLL文件,利用加載程序將該DLL文件加載到內存中去,然后利用線程注射技術將其注入其他進程的地址空間中去,最后,這段病毒代碼就變成其他進程的一部分了,達到了隱藏的目的。對這種病毒的解決辦法是,利用進程管理器工具查找進程所加載的DLL文件,這種DLL文件為了不與系統DLL文件發生沖突,命名往往比較簡單,很容易被發現,找到該進程和DLL文件名后停止該進程,刪除DLL文件就可以了。
三、服務注射隱藏技術
目前出現了一種利用系統服務啟動自身的病毒程序,這種病毒隱藏能力強,很難被清除。這種病毒將自身做成—個Windows系統服務性質的DLL文件,放置在系統目錄下。然后調用服務管理器將其注冊為通過Svchost.exe加載的系統服務組件DLL(Svchost,exe是通用的服務宿主,好多服務都是通過它來加載對應的映像文件的),有的病毒為了提高隱藏性,甚至替換系統那些不重要卻默認啟動的服務。當感染上這種病毒后,第一步要做的是關閉那些不重要的系統服務,然后利用進程管理器察看Svchost.exe所加載的映像文件,發現可疑文件后刪除該文件即可。
四、其他高級隱藏技術
所謂“道高一尺,魔高一丈”,隨著計算機技術的進步,病毒的隱藏技術也越來越高級,越來越難以被發現,病毒已經有向驅動程序發展的趨勢,就是將病毒做成系統驅動程序,在系統引導的初期就被加載,在系統的內核模式下運行。對于這種病毒,任何工具是很難發現它的,因為我們所使用的工具都是工作在用戶模式下的,我們利用工具所獲得的進程信息只是內核的一份拷貝,內核都被欺騙了,其信息還能相信嗎?應對這種病毒只有不停安裝系統最新補丁。
最近幾年還出現了一種“加殼”的病毒程序,顧名思義就是一種包裹容器,是指把一種應用程序將自身壓縮、加密成另一種新程序,在殼運行時再還原為本來面目。目前尚未有解決辦法。
參考文獻:
[1]王學明,Windows操作系統,北京:機械工業出版社,2000.
[2]林浩,計算機病毒的防治,計算機學報,2004.
(作者單位靖江市教育局)