999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

污點標記技術在惡意代碼分析中的應用

2015-04-12 00:00:00楊思燕歸達偉楊元柱
現代電子技術 2015年13期

摘 要: 利用虛擬機技術對惡意代碼進行動態分析的方法成為目前安全領域研究的重點,國內外相關的研究大部分集中于理論方面,而相關的應用較少。提出以基于全系統模擬器QEMU作為監控平臺,通過編寫遠程控制模塊,對目標程序進行動態的實時分析,提取出目標程序的API調用序列以及對應的參數信息,并利用污點標記技術對產生的數據進行關聯,有效地提取出目標代碼的行為特征,給判斷未知程序是否為惡意代碼提供了依據。實驗表明,相比同類工具,自動分析平臺具有更好的分析結果。

關鍵詞: 惡意代碼; 行為監控; QEMU; 動態污點標記

中圖分類號: TN915.08?34 文獻標識碼: A 文章編號: 1004?373X(2015)13?0076?05

Abstract: The method to dynamically analyze the malicious code with virtual machine technology has become a research emphasis in security domain. Generally speaking, most of relevant researches at home and abroad focused on theory, while less on application. In this paper, a new method is proposed, which takes full?system emulator QEMU as monitoring platform to proceed dynamic real?time analysis on the target program by programming remote control program, and to extract the API calling sequence and its corresponding parameter information of the target program. The stain labeling technique is used to relate the generated data to extract behavior features of the target program effectively. It provides a theoretical basis for judging whether unknown programs are malicious codes. Experimental results indicate that the realized automatic analysis platform can achieve better analysis result than other similar tools.

Keywords: malicious code; behavior monitoring; QEMU; dynamic stain labeling

0 引 言

Windows操作系統上運行的用戶態程序,包括病毒、木馬等常見惡意代碼,一般都通過調用Win32環境提供的Win32 API接口來完成各項操作。借助逆向工程和調試技術,反病毒工程師可以分析可疑程序API及參數的調用情況,從而判斷上報的可疑是否為惡意代碼。如何將這種人工分析的方法自動化,并最終實現自動化檢測惡意代碼,已成為反惡意代碼研究領域的一個熱點。

伴隨計算機系統發展而發展的虛擬機技術,則提供了很好的隔離機制。在虛擬機制下,一個系統可以被模擬出來,被模擬出來的系統可以完全不了解另外的系統。樣本在虛擬機中運行對客戶操作系統造成的損害,完全可以通過快照,重新還原,重啟虛擬機等方式,對宿主操作系統不造成任何實質上的危險,所以基于虛擬機的惡意代碼自動分析平臺成為解決上述難題的關鍵。

德國曼海姆大學可靠性分布式系統實驗室的CWSandbox,在虛擬機軟件VMware中分析樣本[1],采用API Hook技術跟蹤程序行為,自動化產生分析報告。Norman Sandbox是Norman公司推出的在線病毒分析服務[2],通過重新實現內核Windows系統,仿真了整個計算機和一個連接的網絡環境,仿真環境下不需要惡意進程的干預、感染、更改其他運行的進程,因為沒有其他的進程運行在仿真環境下,很多相互干涉的重要信息也會丟失。Chas Tomlin的Litterbox與之前的分析系統不同[3],這種分析方法是讓惡意軟件執行在一個真實的Window系統上,而不是模擬或仿真的系統,每過60 s系統被強制從一個Linux鏡像文件中重啟,重啟后,Litterbox加載Windows分區并提取出Windows注冊表和文件列表,這樣分區就回到了干凈的狀態。在惡意代碼執行期間,Windows主機通過虛擬網絡連接到一個正在運行的IRC服務器,它能夠應答所有到IRC的連接請求,這個工具能捕捉到所有要到其他網絡的數據包。Litterbox只是做了一個被感染的系統的鏡像,它并不能監視像新進程創建這樣的動態行為。

針對以上工具存在的問題,本文提出利用開源模擬器QEMU[4]做監控平臺,并對產生的分析結果,采用污點標記技術進行關聯,能夠更好地提供惡意代碼的行為特征。

1 系統框架

整個體系架構的最終目標是通過用戶在客戶機提交Windows PE文件樣本,網絡傳輸到服務器端上已安裝的定制虛擬環境中,獲取到目標文件的各種信息,然后通過行為抽象,對API數據報告進行處理,從而構建樣本的行為特征,通過對比數據庫中的行為庫,產生分類報告,最后通過網絡反饋給客戶機,完成一次未知程序的分析過程。

本文主要工作集中在數據的獲取部分,在系統中作為前端平臺,圖1是前端平臺的框架圖。

由圖1可以看出,系統主要由四部分構成:客戶端(Client),服務器端(Sever),中間件(Coodinator),模擬器(WinQEMU)。這四部分構成了前端數據獲取平臺的主要功能模塊。

首先啟動客戶操作系統(Guest OS),運行其中的服務器端程序;然后在宿主操作系統(Host OS)上啟動客戶端程序,選擇目標程序,上傳到客戶操作系統中,并掛起;在WinQEMU里設置相關數據,若完成,則運行目標程序,開始動態監控,對獲取到的數據,通過中間件傳送到宿主操作中,從而完成一次分析過程。

通過上述四個模塊的相互協調,可以對目標程序進行API調用序列以及參數信息的獲取。下面是簡單的測試,驗證其結果的準確性以及有效性。

測試程序主要是一個實現exe注入的惡意代碼,目的是將自身代碼注入到傀儡進程,不需要DLL文件支持。工作原理如下:

(1) CreateProcess創建一個掛起的IE進程;

(2) 得到裝載基址,使用函數ZwUnmapViewOfSection卸載這個基址內存空間的數據;

(3) 用VirtualAllocEx為IE進程重新分配內存空間,大小為要注入程序的大小;

(4) 使用WriteProcessMemory重新寫IE進程的基址,就是剛才分配的內存空間地址;

(5) 用WriteProcessMemory將自己的代碼注入IE的內存空間,用SetThreadContext設置進程狀態;

(6) 使用ResumeThread繼續運行IE進程。

圖2是這個惡意代碼在工具中運行得到的報告。

通過圖2可以看出,本系統實現的監控平臺,能較好地提取出目標程序的API調用序列以及對應的參數信息。然而數據之間并無關聯,在惡意代碼檢測中,難以具有實際的應用,如何去掉冗余的API調用以及挖掘數據內在的關聯關系,更好地表現出惡意代碼的行為特征,是惡意代碼分析技術中研究的關鍵。

2 污點標記的應用

基于以上需求,提出采用污點標記技術完成基于參數規則的函數依賴關系的建立。在本文框架中,污點標記技術在兩個方面起主要作用。

(1) 在構建系統的特征行為庫中起到預處理作用。特征庫的構建一直是基于行為特征檢測惡意程序技術中的難點,大部分文獻成果基本采用人工構建的經驗分析法,這種方法強烈依賴于相關研究人員的專業素質,從而無法客觀地保證行為庫的有效性以及準確性。通過動態污點傳播分析技術,提取惡意程序的關鍵API信息,自動去掉冗余和混淆API調用,清晰地表達出API相互之間的依賴關系,從而對特征庫進行擴充,因此較好的克服了這個難點;

(2) 將目標樣本送入到分析平臺中,進行信息獲取并采取污點傳播分析技術,提取出典型特征,然后通過特征匹配算法,與已經構建的行為特征庫中的基本行為進行匹配,層次化的匹配過程中,當滿足一定的條件,必然呈現出目標樣本的高級行為,從而完成對樣本高層語義行為的理解,最終完成檢測結果。

2.1 污點標記的原理

通過對不信任的輸入數據做標記,動態跟蹤程序運行過程中污點數據的傳播路徑,檢測使用污點數據的內存區域以及操作方式,用這種方法可以檢測到敏感數據(如字符串參數)被改寫而造成的緩沖區溢出、不可靠數據的非法使用等問題。當來自內存或者網絡的數據被用到敏感操作中時,污點分析技術可以提供詳細的操作路徑,從而根據這種數據流的流向,完整地建立起操作不可靠數據的若干API函數之間的依賴關系[5]。

定理1:令(P,[≤])是任意的有限格。令([2N,?])為由[N]的有限子集形成的滿足關系的格。那么([P,≤])可以嵌入到([2N,?])中,即存在映射[φ:p→2n,]使得[a≤b?φ(a)∈φ(b)]對于任意[x∈p,][φ(x)]是N的有限子集。

對于形如函數調用語句return_value=api_call(src_1,src_2,…)

src_1對應于參數1;src_2對應于參數2;return_value表示返回值;api_call表示函數調用,可得參數與返回值之間的傳播關系。

若src_1,src_2,return_value[∈P,]構造[φ(src_1)={1},][φ(src_2)={2},φ(return_value)={1,2},]那么由[{1}∈{1,2},][{2}∈{1,2}]可得[src_1≤][return_value,src_2≤return_value。]若不能構造滿足包含關系的子集,那么函數參數到返回值未進行污點傳播,其語義不反映污點作用。

2.2 API層技術實現

在API層實現污點標記技術,首先要考慮的是如何選取污點源以及制定傳播規則。這里的污點源主要是針對函數的參數和返回值,函數的參數在傳遞方向上有傳入參數[in]和傳出參數[out]之分,傳入的參數供函數內部使用,而傳出的參數一般用作其他函數的傳入參數,所以參數中的污點源標記部分只針對傳出參數[out],因為這樣可以記錄數據的流向。同樣,返回值的功能類似于傳出參數,也需要作為污點源進行標記。但是,返回值如果是void或者bool等類型,則明顯對后續數據操作無意義,所以返回值一般只關注句柄、指針、字符串和緩沖區等操縱資源或內存的類型。同樣針對傳出參數[out]而言,主要標記三種類型:字符串類型、句柄類型以及緩沖區類型。對于整型參數,則意義不大,而且重復性太強,沒有典型特征[6]。

這里污點傳播技術最終需要達到的目的是對上述兩種情況——參數以及返回值進行污點標記,從而構建函數間調用的依賴關系,例如:

int a[6]={1,2,3,4,5,9};

HANDLE hFile;

hFile=CreateFile(“srcfile.txt”,0,0,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_ARCHIVE, NULL);

WriteFile(hFile,(LPCVOID)a,sizeof(a[0]*6),lpNumberOfBytesWritten,NULL);

DeleteFile(“srcfile”);

首先是CreateFile函數,創建了一個“srcfile.txt”文件,然后返回所創建文件的句柄 hFile,下面有兩個函數分別用到這兩個地方:第一個是WriteFile函數,利用前面的函數返回值hFile文件句柄,查找創建的文件,寫入數據;第二個是DeleteFile函數,利用參數“srcfile.txt”作為傳入參數,查找名為“srcfile.txt”的文件,然后進行刪除。

由此可以看出,CreateFile,WriteFile,DeleteFile這三個函數,對同一個文件對象進行了相關操作,而這種操作關系構成了三者之間的依賴關系,表現出代碼的軟件行為特征。而這種對相同對象進行操作的關系則是三者之間進行關聯的規則條件,如何體現這種規則以及構建這種依賴關系,則是污點傳播技術完成的工作。就本段代碼而言,首先確定兩個污點源——CreateFile函數中的字符串類型的函數名“srcfile.txt”以及句柄類型的返回值hFile,然后根據后面兩個函數的傳入參數是否對這兩個污點源進行操作進行判斷,最終形成依賴關系序列。判斷的標準則基于污點傳播的規則制定。

API層的傳播規則制定比較復雜,不同的需求對應的規則設計不同,所以算法的設計沒有統一標準,在本文中制定的規則為:

(1) 構建兩個雙向鏈表,分別為地址鏈表以及API序列圖鏈表。地址鏈表主要是用來保存每個函數以及函數的所有參數信息和對應的內存地址(包括返回值信息和對應的內存地址),而API序列圖主要是保存具有依賴關系的API集合,雙向鏈表的結構保證了對于數據的回溯查詢,從而明確表現出傳播的路徑。

(2) 對于QEMU模擬的虛擬內存,在訪問數據時,總會通過影子頁表,轉換到宿主機上的物理內存地址,所以對于污點傳播里面重要的污點標簽操作,這里采取利用參數的真實物理機地址作為標簽。

下面是設計的具體規則:

(1) 若目標程序運行過程中,指令寄存器里面的地址匹配到一條API函數,則保存函數的所有參數到地址鏈表數組中。然后對匹配到的API進行時序判斷,是否屬于第一個需要監控的API,如果是,轉向第(2)步,如果不是,轉向第(3)步;

(2) 如果監控到的API函數屬于目標程序的第一個調用函數,此時污點傳播尚未開始,所以將API函數名加入到API序列圖中第一個位置中,加入時序信息,并且對函數中符合污點源的參數以及返回值進行污點標簽標記,然后轉向第(1)步;

(3) 查看函數名是否屬于終止類型函數,比如關閉進程,關閉句柄,關閉文件等,如果是,則將函數中的參數對比前面保存的打開進程,創建句柄和文件等參數,若相同,則結束本條污點傳播路徑;若不同,則轉向第(4)步。

(4) 根據函數名對應的參數數組,找出已經保存的參數序列,參數類型為前面介紹的APIParam類型。取出第一個參數,判斷其type的類型,主要分為三種:字符串類型,句柄類型,緩沖區類型(整型比較的意義不大,忽略);然后分別送到相應的處理函數中(分為三個處理函數:句柄類型handle_cmp(DWORD handle_addr),緩沖區類型buffer_cmp(char buff[],int length),字符串類型string_cmp(char*str)),與地址序列圖中其他相同類型的參數或者返回值進行比較,如果相同,證明參數之間或者參數和返回值之間操縱了同一資源對象或者內存對象等,具有一定的依賴關系,轉向第(5)步;若不同,則繼續查找函數的第二個參數,做相同的操作,直到參數全部比較完畢。若此函數的參數與其他函數的參數并無關系,則屬于單獨節點,轉向第(6)步;

(5) 遍歷鏈表,找出操作相同對象的參數所對應的API函數名,然后存入數組,作個函數標記。隸屬于同一函數的參數在與其他函數參數進行比較的過程中,所有獲取的關聯API函數名,存入一個數組中,說明這個函數與其他若干個函數發生依賴關系;然后根據數組里面保存的API函數名對比API序列圖中的函數名,利用函數name_cmp(const char* name)分別找出對應的序列號,然后將此函數的API函數名分別加入到相應序列號中的API函數名的位置add_namelist(const char* name),跳向第(1)步;

(6) 在API序列表中新加入節點,然后將此函數加入到新節點的API函數名位置,同時轉向第(1)步,進行循環。

通過上面的規則,最終完成污點傳播路徑的標記,經測試,可以成功構建出函數在API層的依賴關系,如圖3所示。

2.3 實驗結果分析

從通過添加污點標記之后的測試結果圖3可以看出,API函數調用之間存在的參數依賴關系已經根據相應的規則歸類到同一依賴關系序列中。例如圖中所示的1,2,3這三個數字標記,API函數VirtualAllocEx的返回值是一個內存句柄類型,值是0x00400000,而后面的API函數WriteProcessMemory的第三個調用參數,方向是傳入[in],參數類型也是地址指針類型,符合API層的污點傳播規則,兩者值進行比較,由于函數WriteProcessMemory的值也是0x00400000,所以函數WriteProcessMemory和VirtualAllocEx則構成一定的依賴關系,其依賴序列采用VirtualAllocEx的時序序號25。因此WriteProcessMemory的依賴關系序列中添加序號25。

觀察標記在依賴關系序列10上的三個梯形粗線。可以看出三個時序序號為24,25,26的三個函數ZwUnmapViewOfSection,VirtualAllocEx和WriteProcessMemory均在參數調用中操作了具有相同句柄值0x0000007d0的對象,而這三個函數都歸類于依賴關系10序列,說明時序序號為10的API函數的返回值或者傳出參數產生了句柄值為0x0000007d0的對象,而后續的API函數對此進行了某種操作,因而它們之間構成依賴關系,如圖3所示,在行為依賴關系中給予表現。

實驗結果表明污點標記在函數依賴關系建立中具有重要的意義。通過對API層以及指令層的污點技術應用,可以看出,原本孤立毫無關系的單獨API調用,由于參數之間的相互調用關系,結合污點標記的路徑傳播,若干個API函數之間構建起依賴關系,從而為后續工作——提取惡意代碼的行為特征以及構建軟件行為特征庫提供了準確且完善的數據信息。

3 結 語

本文的主要工作是實現了對惡意代碼的動態監控,實時分析,并結合動態污點標記技術,對提取的信息進行管理,挖掘數據間的依賴關系,更好地表現出惡意代碼的行為特征。但是由于全系統模擬器QEMU的效率不高,運行較慢,且分析一次需要重新啟動,較難大批量的分析惡意代碼,構建惡意代碼行為庫,因此,后續的工作將集中在改進QEMU的執行效率,加快分析過程,從而更好地實際應用。

參考文獻

[1] WILLEMS C. CWSandbox: automatic behaviour analysis of malware [J/OL]. [2006?09?12]. http://www.cwsandbox.org/,2006.

[2] Norman. Normal sandbox [EB/OL]. [2006?07?23]. http://sandbox.norman.no/.2006.

[3] TOMLIN C. LitterBox [EB/OL]. [2005?02?09]. http://www.wiul.org/.2005.

[4] BELLARD F. QEMU [EB/OL]. [2005?03?21]. http://fabrice.bellard.free.fr/qemu/.2005.

[5] 孔德光,鄭烇,帥建梅,等.基于污點分析的源代碼脆弱性檢測技術[J].小型微型計算機系統,2009,30(1):78?83.

[6] BAYER U, KRUEGEL C, KIRDA E. TTAnalysz: a tool for analyzing malware [C]// Annual Conference of the 15th European Institute for Computer Antivirus Research. Vienna: EICAR. 2005, 128?131.

[7] BELLARD F. Qemu, a fast and portable dynamic translator [C]// Proceedings of 2005 USENIX Conference on Annual Usenix Technical. Marriott Anaheim, USA: USENIX, 2005: 41?46.

[8] 吳浩.二進制翻譯系統QEMU的優化技術[D].上海:上海交通大學,2007.

[9] 柏志文.基于動態二進制翻譯的污點檢測設計和實現[D].西安:西安電子科技大學,2008.

[10] 陳培,高維.惡意代碼行為獲取的研究與實現[J].計算機應用,2009(z2):76?78.

[11] 梁曉.惡意代碼行為自動化分析的研究與實現[D].成都:電子科技大學,2008.

[12] 張斌,李孟君,吳波,等.基于動態污點分析的二進制程序導向性模糊測試方法[J].現代電子技術,2014,37(19):89?94.

主站蜘蛛池模板: 热久久综合这里只有精品电影| 69免费在线视频| 精品第一国产综合精品Aⅴ| 精品午夜国产福利观看| 亚洲色图欧美视频| 亚洲成AV人手机在线观看网站| 精品撒尿视频一区二区三区| 亚洲综合二区| 欧美日本二区| 亚洲国产中文在线二区三区免| 精品成人一区二区| 亚洲IV视频免费在线光看| 日韩免费毛片视频| 国产1区2区在线观看| 欧美一级夜夜爽www| 午夜啪啪福利| 国产精品成人一区二区不卡| 亚卅精品无码久久毛片乌克兰| 国产一区二区免费播放| 99视频在线看| AV在线天堂进入| 国产精品粉嫩| 狠狠色香婷婷久久亚洲精品| 凹凸国产分类在线观看| 国内精品久久人妻无码大片高| 国产精品夜夜嗨视频免费视频| 午夜欧美在线| 美女被躁出白浆视频播放| 国产免费久久精品99re不卡| Jizz国产色系免费| 国产成人区在线观看视频| 精品亚洲国产成人AV| 女人一级毛片| 国产亚洲高清在线精品99| 91在线无码精品秘九色APP| 精品少妇人妻一区二区| 99视频全部免费| 99ri精品视频在线观看播放| 日韩小视频在线播放| 亚洲Av综合日韩精品久久久| 波多野结衣一区二区三区四区| 国产剧情国内精品原创| 亚洲清纯自偷自拍另类专区| 中文精品久久久久国产网址 | 美女裸体18禁网站| 色网站在线免费观看| 手机永久AV在线播放| 波多野结衣中文字幕一区| 国产综合在线观看视频| 最新国产精品鲁鲁免费视频| 内射人妻无套中出无码| 亚洲精品欧美重口| 亚洲天堂伊人| 亚洲国产高清精品线久久| 亚洲第一成年网| 国产成人区在线观看视频| 久久精品欧美一区二区| 在线一级毛片| 久久无码av三级| 99爱在线| 国产成人毛片| 亚洲第一区在线| 亚洲国产精品久久久久秋霞影院| 久久久久亚洲AV成人网站软件| 黑色丝袜高跟国产在线91| 亚洲日本中文综合在线| 国产一二三区在线| 欧美h在线观看| 国产精品第| 超薄丝袜足j国产在线视频| 国产69精品久久| 国产一级在线观看www色| 色综合热无码热国产| 亚洲成人精品在线| 日韩天堂视频| 成·人免费午夜无码视频在线观看| 国产va免费精品| 美女裸体18禁网站| 久久这里只有精品8| 亚洲AⅤ综合在线欧美一区| 国产在线观看成人91| 伊人久久大线影院首页|