李俊 李佟鴻
湖北警官學院信息安全教研室 湖北 430032
隨著網(wǎng)絡的飛速發(fā)展,網(wǎng)絡成為了當前計算機病毒最主要的傳播途徑。出現(xiàn)了木馬、蠕蟲、僵尸網(wǎng)絡、拒絕服務攻擊等技術(shù),這些技術(shù)越來越多的被利用于具有商業(yè)目的的攻擊。例如盜竊銀行賬戶、獲取機密文件或數(shù)據(jù)、奪取主機的控制權(quán)然后進行出售等。傳統(tǒng)病毒技術(shù),木馬技術(shù),蠕蟲技術(shù)等攻擊技術(shù)結(jié)合在一起的病毒將會有十分強大的功能,將對計算機安全產(chǎn)生巨大的威脅,本文將此類病毒概括為功能型計算機病毒。因為這類病毒具有很強的目的性,通過研究此種類型的病毒對維護國家,集體和個人的利益都具有十分重要的意義。
病毒的加載運行大體可分為下面幾種技術(shù)。
為了讓自己可以在每次開機后自動運行,病毒一般會采用修改注冊表,系統(tǒng)服務,系統(tǒng)文件等自啟動技術(shù)。
(1) 注冊表自啟動
病毒在注冊表中Run鍵、RunOnce鍵、RunServicesOnce鍵、RunServices鍵、RunOnceEx鍵、load鍵、Winlogon鍵等
如:Run鍵是病毒最青睞的自啟動之所,該鍵位置是[HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurr entVersionRun]和[HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRun],其下的所有程序在每次啟動登錄時都會按順序自動執(zhí)行。
(2) 啟動文件夾自啟動
最常見的自啟動程序文件夾。它位于系統(tǒng)分區(qū)的“Documents and Settings用戶名「開始」菜單程序啟動”目錄,以及位于系統(tǒng)分區(qū)的“Documents and SettingsAll Users「開始」菜單程序啟動”目錄下。前者是登錄用戶的自啟動程序,后者是在所有用戶下都有效。
(3) 系統(tǒng)配置文件自啟動
在Windows的配置文件(包括Win.ini、System.ini和wininit.ini文件)也會加載一些自動運行的程序。
(4) 開/關(guān)機/登錄/注銷腳本自啟動
在Windows 系統(tǒng)中,單擊“開始→運行”,輸入gpedit.msc回車可以打開“組策略編輯器”,在左側(cè)窗格展開“本地計算機策略→用戶配置→管理模板→系統(tǒng)→登錄”,然后在右窗格中雙擊“在用戶登錄時運行這些程序”,單擊“顯示”按鈕,在“登錄時運行的項目”下就顯示了自啟動的程序。
(5) 任務計劃自啟動
在默認情況下,“任務計劃”程序隨Windows一起啟動并在后臺運行。如果把某個程序添加到計劃任務文件夾,并將計劃任務設置為“系統(tǒng)啟動時”或“登錄時”,這樣也可以實現(xiàn)程序自啟動。
(6) 文件關(guān)聯(lián)啟動
通過修改一些常用文件的關(guān)聯(lián)的方式也可以實現(xiàn)病毒啟動,比如將修改注冊表HKEY_CLASSES_ROOT xtfileshellopencommand 的值由“C:WINDOWSNOTEPAD.EXE%1”改為“C:WINDOWSVIRUS.EXE %1”,其中VIRUS.EXE就是要啟動的病毒程序。當用戶打開一個txt文檔時,就會啟動VIRUS.EXE。病毒啟動后再調(diào)用notepad.exe打開txt文件,這樣用戶就不會發(fā)現(xiàn)已經(jīng)運行了病毒程序。
(7) 修改系統(tǒng)程序自啟動
可以通過修改系統(tǒng)程序如explorer.exe實現(xiàn)開機自啟動。此種方法和病毒感染exe文件類似,在系統(tǒng)程序中插入一段啟動病毒的代碼,當該程序運行時將會運行該段代碼。
為了躲避殺毒軟件和用戶的查殺,許多病毒都會采取變形,進程隱藏等自我保護技術(shù)。
1.2.1 代碼演化技術(shù)
采用代碼演化技術(shù)可以有效的欺騙防毒軟件的特征碼掃描器,該技術(shù)主要以下三種形式:
(1) 加密(Encryption)
加密是最簡單的隱藏病毒代碼功能的技術(shù)之一。加密病毒(encrypted viruses)包括一個解密頭,該解密頭用來解密加密的病毒代碼段,代碼解密后就可以被執(zhí)行了。該類病毒通常具有以下結(jié)構(gòu):
圖1 加密病毒結(jié)構(gòu)
如圖1所示,當病毒獲得程序執(zhí)行的控制權(quán)后,先執(zhí)行自己的解密頭,解密頭解密加密過的病毒代碼段,然后將控制權(quán)交給剛被解密的病毒代碼段。
(2) 多態(tài)(Polymorphism)
比加密難度更進一步的是多態(tài)。普通的加密病毒最大的缺點是他們的解密頭總是不變的,這樣很容易被提取出特征值。多態(tài)病毒(Polymorphic viruses)可以使他們的解密頭變異出許多不同的實體,這些實體具有相同的功能,但在代碼級上有很大的區(qū)別,檢測這種病毒的難度就要高于普通的加密病毒。
圖2顯示了多態(tài)病毒的一般結(jié)構(gòu)。
圖2 多態(tài)病毒一般結(jié)構(gòu)
(3) 變形(Metamorphism)
變形是一種很高級的代碼演化技術(shù)。變形病毒(Metamorphic viruses)沒有解密頭和不變的代碼段,看起來每一代的代碼都不同,但都完成同樣的功能。變形病毒最大的特點就是可以根據(jù)偽代碼來生成實際的病毒代碼。
圖3顯示了變形病毒的一般結(jié)構(gòu)。
圖3 變形病毒一般結(jié)構(gòu)
1.2.2 自我隱藏
當病毒運行時,為了躲避用戶和防毒軟件的查殺,病毒可以采用隱藏技術(shù)使自己在系統(tǒng)中“消失”。通常需要隱藏的對象有進程,端口和注冊表等。
(1) 進程隱藏
通常有兩種主要途徑來實現(xiàn)進程隱藏,一種是將進程實體做成DLL文件插入到其他進程或者使用Rundll32.exe來啟動,避免使用獨立進程來實現(xiàn)進程隱藏,另一種就是通過對枚舉進程的函數(shù)或者相關(guān)數(shù)據(jù)結(jié)構(gòu)進行修改來實現(xiàn)進程隱藏。前一種稱為無進程實體隱藏,后一種成為進程實體隱藏。
(2) 端口隱藏
要想實現(xiàn)遠程控制,病毒必須使用端口與控制端進行網(wǎng)絡連接??梢酝ㄟ^端口隱藏來減少病毒使用網(wǎng)絡的痕跡,通常的端口隱藏方法有API Hook,端口復用和Http-Tunnel(Http隧道)。
1.2.3 加殼
殼是專門用來保護軟件的不被非法修改和反編譯的程序。它一般先于被保護的程序運行,完成了保護功能后再將控制權(quán)交給被保護的程序。
加殼的過程就是改變了原程序的可執(zhí)行文件的結(jié)構(gòu),同時可以進行數(shù)據(jù)壓縮。加過殼后的程序在可執(zhí)行文件的結(jié)構(gòu)上,與原程序有很大的區(qū)別,隱藏了原程序的特征代碼。當病毒用這些軟件加殼后,防毒軟件必須先進行脫殼,才能掃描到原程序的代碼,直接掃描很難分辨出是否為病毒。
加殼通常包含以下幾個步驟:
(1) 獲取殼自己所需要使用的API地址
加殼后的輸入函數(shù)表所引入的DLL和API函數(shù)很少,甚至只有Kernel32.dll以及GetProcAddress這個API函數(shù)。殼實際上還需要其他的API函數(shù)來完成它的工作,為了隱藏這些API,它一般只在殼的代碼中,用顯式鏈接方式動態(tài)加載這些API函數(shù)。
(2) 解密原程序的各個節(jié)(section)的數(shù)據(jù)
殼出于保護原程序代碼和數(shù)據(jù)的目的,一般都會加密原程序文件的各個節(jié),在程序執(zhí)行時外殼將會對這些節(jié)的數(shù)據(jù)解密,以便讓程序能正常運行。殼一般是按節(jié)加密的,那么在解密時也按節(jié)解密,并且把解密的節(jié)的數(shù)據(jù)按照節(jié)的定義放在合適的內(nèi)存位置。
(3) 重定位
文件執(zhí)行時將被映像到指定內(nèi)存地址中,這個初始地址稱為基地址(ImageBase)。對于EXE的程序文件來說,Windows系統(tǒng)會盡量滿足。例如某EXE文件的基地址為0x400000,而運行是Windows系統(tǒng)提供給程序的基地址,也同樣是0x400000。在這種情況下就不需要進行地址“重定位”了,所以加殼軟件把原程序文件中,用于保存重定位信息節(jié)干脆也刪除了,這樣使得加殼后的文件更加小巧。
不過對于DLL的動態(tài)鏈接庫文件來說,Windows系統(tǒng)沒有辦法保證每一次DLL運行時提供相同的基地址。這樣“重定位”就很重要了,此時殼中也需要提供進行“重定位”的代碼,否則原程序中的代碼是無法正常運行起來的。從這點來說,加殼的DLL比加殼的EXE更難修正。
(4) HOOK-API
程序文件中的輸入函數(shù)表的作用,是讓Windows系統(tǒng)在程序運行時,提供API的實際地址給程序使用。在程序的第一行代碼執(zhí)行之前,Windows系統(tǒng)就完成了這個工作。殼一般都修改了原程序文件的輸入函數(shù)表,然后自己模仿Windows系統(tǒng)的工作,來填充輸入函數(shù)表中相關(guān)的數(shù)據(jù)。在填充過程中,外可就可填充HOOK-API的代碼地址,這樣就可間接地獲得程序的控制權(quán)。
(5) 跳轉(zhuǎn)到程序原入口點(OEP)
從這個時候起殼就把控制權(quán)交給原程序了,一般的殼在這里會有明顯的一個“分界線”。
加過殼的EXE文件是可執(zhí)行文件,它可以同正常的EXE文件一樣執(zhí)行。目前有許多加殼軟件,按照其加殼的目的和作用,可以分為兩類:一是壓縮(Packers),二是保護(Protectors)。壓縮類殼主要作用是減小程序體積,如ASPack,UPX和PECompact等。保護類殼主要作用是用各種反跟蹤技術(shù),保護程序不被調(diào)試、脫殼等,其加殼后的體積大小,不是其考慮的主要因素,如ASProtect,tElock、幻影等。隨著加殼技術(shù)的發(fā)展,這兩類殼之間的界限越來越模糊,很多加殼軟件除了具有較強的壓縮性能,同時也有較強的保護性能。
自我更新對于功能型病毒來說更具意義,因為通過自我更新,功能型病毒可以對變化的任務需求做出反應,調(diào)整、增加或刪除其所攜帶的某些功能模塊。除此之外,通過更新病毒文件還可以改變病毒的特征值,增強其對抗防毒軟件的能力。如Hybris病毒擁有帶身份驗證功能的更新機制,保證病毒能獲得正確的更新。從而來獲得新的傳播能力,其更新過程如圖4所示。
圖4 Babylonia自我更新
(1) 攻擊者將一個可以利用某個漏洞進行傳播的功能模塊發(fā)送到Web服務器,并在服務器上的可用更新列表上加入該模塊的相關(guān)信息。
(2) 已經(jīng)在運行的病毒會定期到Web服務器上查詢可用更新列表,發(fā)現(xiàn)該模塊后就會下載并安裝。
(3) 安裝更新后的病毒除了可以使用以前的電子郵件方式傳播,還可以借助新的模塊利用某個漏洞進行傳播。
當前以獲取經(jīng)濟利益為目的的計算機病毒越來越多,它們可以盜取用戶銀行賬號和密碼、網(wǎng)絡游戲賬號、即時通訊軟件賬號等用戶信息,還可以留下后門給攻擊者,嚴重威脅著計算機網(wǎng)絡的健康發(fā)展。對功能型計算機病毒的研究有助于了解此類病毒的運行機理和特點,對防治此類病毒具有十分重要的意義。
[1] Computer virus[EB/OL].http://en.wikipedia.org/wiki/Computer_virus.
[2] Types of Computer Viruses[EB/OL].http://www. typesofcomputerviruses.net/.
[3] 楊亮.網(wǎng)絡蠕蟲和病毒的共生傳播模型研究[D].遼寧:東北大學.2007.
[4] 傅建明等.計算機病毒與對抗.武漢大學出版社[M].2005.
[5] 余寶明.淺析計算機病毒的加載運行技術(shù).科技信息[J].2010.