VBScript和JScript腳本語言可以完成操作系統的大部分功能,于是它們也就成了病毒編寫者最關注的語言,利用它們來編制病毒程序不但容易,而且利用電子郵件來傳遞使得病毒的傳播非常迅速。傳統的殺毒軟件對這種類型病毒的防治總會有一定的滯后性,所以我們必須自己采取一些有效措施來防治這類病毒,以保護的數據和郵件免受侵害。
目前的郵件型病毒絕大多數是用VBScript(JScript)編寫,或是在HTML格式郵件中嵌入Script,針對這些現狀,本文提出以下幾種解決辦法。
1.防止病毒發作
由于電子郵件型病毒多數是用VBScript腳本語言編寫的,而VBScript代碼是通過 Windows Script Host來解釋執行的,因此將Windows Script Host刪除,就再也不用擔心這些用VBScript和JScript編寫的病毒了!從另一個角度來說,Windows Script Host本來是被系統管理員用來配置桌面環境和系統服務、實現最小化管理的一個手段,但對于大部分一般用戶而言,Windows Script Host并沒有多大用處,所以最好禁止Windows Script Host,也就是禁止VBScript、JScript文件的運行環境。在企業環境中,系統管理員禁止那些不需要VBScript(Jscript)的客戶機,甚至比一臺臺地安裝防病毒軟件更為簡單有效。禁止了Windows Script Host后,可以防止大部分郵件型病毒的發作。
禁止VBScript(Jscript)文件執行的幾個辦法列舉如下。
(1)在“我的電腦”→“工具”→“文件夾選項”對話框中,點擊“文件類型”,刪除 VBS、VBE,JS,JSE文件后綴名與應用程序的映射;
(2)在Windows目錄中,找到WScript.exe和JScript.exe,更改其名稱或者干脆刪除;
(3)在Windows 98中(NT4.0以上同理),打開“控制面板”,打開“添加/刪除程序”,點選“Windows安裝程序”,再用鼠標雙擊其中的“附件”一項,然后再在打開的窗口中將“Windows Scripting Host”一項前的“對勾”去掉,然后點“確定”,再點“確定”,這樣就可以將Windows Scripting Host卸載。
2.防止病毒發作后自我復制
通過Outlook傳播的病毒基本上都是用VBScript編寫的,其自我復制的原理基本上是利用程序將本身的腳本內容復制一份到一個臨時文件,然后在傳播的環節將其作為附件發送出去。在此期間離不開FileSystemObject,VBScript(Jscript)中的磁盤文件和目錄操作幾乎都是通過FileSystemObject類來實現的,而對于絕大多數一般戶來說,FileSystemObject也沒有什么大的作用,所以可以從注冊表中刪除或更名FileSystemObject類,使得病毒代碼無法創建對象,從而可以有效地防止病毒復制自身。
我們還是舉個實例來看看腳本是怎么樣完成這個功能的。
Set so=CreateObject(“Scripting.FileSystemObject”)
so.GetFile(WScript.ScriptFullName).Copy(“C:\dateiname.vbs”)
就是這么兩行就可以將自身復制到c盤根目錄下dateiname.vbs這個文件。第一行是創建一個文件系統對象,第二行前面是打開這個腳本文件,WScript.ScriptFullName指明是這個程序本身,這是一個完整的路徑文件名。GetFile函數獲得這個文件,Copy函數將這個文件復制到c盤根目錄下dateiname.vbs這個文件。這就是大多數利用VBscript編寫的病毒的一個特點。從這里可以看出,禁止了FileSystemObject這個對象就可以很有效地控制這種病毒的傳播。
禁止使用FileSystemObject對象,可以使用以下三種方法。
(1)修改注冊表,將FileSystemObject改成一個任意的名字,只有知道該名字的用戶才可以創建該對象,命令如下:
[HKEY_LOCAL_MACHINE\SOFFWARE\Classes\CLSID\{OD43FE01-F093-11CF-8940-
00AOC9054228}ProgID]
@=“Scripting.FileSystemObject”
(2)運行Regsvr32 scrrun.dll/u,這樣所有用戶都無法創建FileSystemObject。
(3)運行cacls%systemroot%ksystem32scrrun.dll/dguests,使匿名用戶(包括IUSR_Ma_chinename用戶)將無法使用FileSystemObject,我們可以對ASP文件或者腳本文件設置NTFS權限,通過驗證的非Guests組用戶可以使用FileSystemObject。
在企業環境中,系統管理員可以編制一個自動執行上述操作的VBScript(Jscript)程序,來完成在所有客戶機上快速配置的工作(其實這才是Microsoft開發WSH的本意)。
3.防止病毒發作后傳播
毒需要傳播,電子郵件病毒的傳播無疑是通過電子郵件傳播的。對于Outlook來說地址簿的功能相當不錯,可是也給病毒的傳播打開了方便之門。幾乎所有通過Outlook傳播的電子郵件病毒都是向地址簿中存儲的電子郵件地址發送內容相同的腳本附件完成的??纯慈缦碌拇a:
Set objOA=Wscript.CreateObject(“Outlook.Application”) 創建一個Outlook應用的對象。
Set objMapi=objOA.GetNameSpace(“MAPI”)‘取得MAPl名字空間。
For i=1 to objMapi.AddressLists.Count‘遍歷地址簿。
Set objAddList=objMapi.AddressLists(i)
Forj=1 To objAddList.AddressEntries.Count
Set objMail=objOA.CreateItem(O)
objMail.Recipients.Add(objAddList.AddressEntries(j))‘取得收件人郵件地址。
objMail.Subject=“您好!”‘設置郵件主題。
objMail.Body=“這次給您的附件是我的新文檔!”‘設置信件內容。
objMail.Attachments.Add(“c:\virus.vbs”)‘把自己作為附件擴散出去。
objMail.Send‘發送郵件。
Next
Next
Set objMapi=Nothing‘清空objMapi變量,釋放資源。
Set objOA=Nothing‘清空objOA變量。
這一小段代碼的功能是向地址簿中的用戶發送電子郵件,并將自己作為附件擴散出去。這段代碼中的第一行是創建一個Outlook的對象,是必不可少的。在其下是一個循環,在循環中不斷地向地址簿中的電子郵件地址發送內容相同的信件。電子郵件型病毒就是這樣進行傳播的。
另外,我們知道病毒代碼發郵件一般采取兩種辦法,一是利用Windows自帶的CDO(Collaboration Data Object——協作數據對象)或通過OOM(Outlook Obiect Model—— Outlook對象模型)來發送,用CDO來發送郵件的時候,必須要有Microsoft SMTP服務器,如果機器上沒有安裝Microsoft SMTP服務器,病毒就不能發送郵件。注意:Windows 9x系統上不能安裝SMTP服務器,Windows 2000 Professional默認不安裝此服務,而Windows 2000 Server與Advanced Server默認情況下是安裝此服務的。
(1)如果機器已安裝了SMTP服務器,可以通過給SMTP服務器加入安全驗證,以避免病毒代碼利用CDO來匿名發送郵件,詳細信息及相關配置可參見Windows 2000 SMTP Server文檔。
(2)要阻止病毒利用Outlook來發送郵件,可以利用Outlook的“郵件傳遞推遲”特性, Outlook的這個特性可以讓用戶在撰寫一個郵件,并點擊“發送”按鈕后,郵件并不會馬上提交給MTA(郵件傳輸代理)來傳輸,而只是暫時保存在用戶的“發件箱”文件夾中,待指定的時間過后,再進行真正的郵件發送。這個特性是通過Outlook的“規則”來實現的,成功地設置了這樣的規則后,如果用戶不小心打開并執行了Homepage這樣的病毒代碼,在一陣硬盤狂響之后,就會馬上注意到“發件箱”文件夾中有大量待發郵件突然出現,這樣就可以確認機器已遭到病毒的騷擾,應該立即刪除“發件箱”中的這些郵件,并從“已刪除郵件”文件夾中清空,這樣就可以保證病毒不會再由這兒傳播到其他人的郵箱中。另外,有了這個郵件延遲的特性,可以讓用戶在不小心發錯郵件后有更正的機會。
郵件傳遞推遲特性是通過創建Outlook規則來實現,具體步驟如下。
1)打開Outlook,點擊“工具”→“規則向導”菜單;
2)“新建”一個規則,選擇“發送郵件后檢查”,然后選擇對哪些郵件或所有郵件進行檢查:
3)選擇“傳遞推遲若干分鐘”,點擊“若干”二字,輸入推遲的分鐘數;
4)保存并應用此規則;
5)如果是在企業環境中,系統管理員可以將此規則導出成文件,然后在客戶機上直接導入就行了。
注意,上述設置是針對Outlook的,目前版本的Outlook Express尚不支持創建這樣的規則。