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