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