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传播的电子邮件病毒都是向地址簿中存储的电子邮件地址发送内容相同的脚本附件完成的。看看如下的代码:
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尚不支持创建这样的规则。