国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

一種改進(jìn)的基于在線(xiàn)解耦的輕量級(jí)動(dòng)態(tài)污點(diǎn)分析方法

2021-03-13 06:00潘家曄
關(guān)鍵詞:緩沖區(qū)污點(diǎn)線(xiàn)程

潘家曄,莊 毅

(南京航空航天大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,南京 211106)

1 引 言

當(dāng)前,惡意代碼仍然不斷以新的形式來(lái)感染和攻陷各類(lèi)終端系統(tǒng),如:勒索軟件,挖礦代碼以及隱私竊取等[1,2].由于缺少源代碼,改進(jìn)和提高二進(jìn)制程序的逆向調(diào)試和自動(dòng)化分析方法仍然是一項(xiàng)重要研究?jī)?nèi)容[3,4].在過(guò)去十年內(nèi),動(dòng)態(tài)污點(diǎn)分析方法作為一種有效的細(xì)粒度分析方法,盡管面臨性能及可應(yīng)用性等問(wèn)題,但仍有許多研究工作對(duì)其進(jìn)行改進(jìn)[5-7],例如:在更廣闊的系統(tǒng)范圍內(nèi)對(duì)目標(biāo)程序進(jìn)行分析[8,9];引入靜態(tài)分析并對(duì)動(dòng)態(tài)分析過(guò)程進(jìn)行優(yōu)化[10];將程序執(zhí)行和分析過(guò)程進(jìn)行解耦分離[11,12];采用在線(xiàn)與離線(xiàn)方式結(jié)合完成分析[13].一些代表性的研究工作如:A.Davanian等人提出改進(jìn)的全系統(tǒng)動(dòng)態(tài)污點(diǎn)分析系統(tǒng)DECAF++[14].Banerjee等人提出新的動(dòng)態(tài)分析優(yōu)化方法Iodine[15],避免在樂(lè)觀(guān)分析下引起的頻繁回滾.Kemerlis等人提出并實(shí)現(xiàn)更加通用的分析方法libdft[16],基于此方法可快速的構(gòu)建分析工具對(duì)商業(yè)軟件進(jìn)行分析.Jee等人將靜態(tài)與動(dòng)態(tài)進(jìn)行結(jié)合,通過(guò)靜態(tài)分析提取數(shù)據(jù)流跟蹤邏輯并消除冗余部分,減小動(dòng)態(tài)分析時(shí)對(duì)目標(biāo)程序的影響[10],而后又提出了加速數(shù)據(jù)流分析的方法ShadowReplica[11],將程序執(zhí)行和分析過(guò)程進(jìn)行解耦,利用多核CPU并行化完成分析.Ming等人提出了并行化的符號(hào)污點(diǎn)分析方法TaintPipe[17],同樣分離程序執(zhí)行過(guò)程與數(shù)據(jù)流分析,能夠降低目標(biāo)程序負(fù)載,提高分析速度.盡管存在針對(duì)動(dòng)態(tài)污點(diǎn)分析的各類(lèi)研究,但是在實(shí)際應(yīng)用時(shí)仍然存在很多因素,使得動(dòng)態(tài)污點(diǎn)分析難以在真實(shí)場(chǎng)景中得到更快捷及廣泛的應(yīng)用,例如:依賴(lài)一定程度的靜態(tài)分析,限制于特定的分析場(chǎng)景,分析過(guò)程的構(gòu)建比較復(fù)雜,對(duì)處理器資源消耗較大,或者難以面向現(xiàn)代大型應(yīng)用程序,缺乏通用性.

因此,在已有研究基礎(chǔ)上,本文提出一種改進(jìn)的輕量級(jí)在線(xiàn)解耦的動(dòng)態(tài)污點(diǎn)方法,稱(chēng)之為DOTA,其以解耦分析為主要思想,并具有較好的可應(yīng)用性,能夠支持對(duì)各類(lèi)復(fù)雜應(yīng)用程序進(jìn)行分析.該方法首先對(duì)目標(biāo)程序進(jìn)行攔截,記錄動(dòng)態(tài)污點(diǎn)分析所需的運(yùn)行時(shí)信息,與此同時(shí)構(gòu)建用于分析的代碼和執(zhí)行環(huán)境.與其它方法相比,本文所提的方法靈活高效,分析的構(gòu)建過(guò)程更加快捷和簡(jiǎn)單;不依賴(lài)于靜態(tài)分析而進(jìn)行優(yōu)化,能構(gòu)建相對(duì)獨(dú)立、能進(jìn)行遷移的分析環(huán)境,降低對(duì)目標(biāo)程序的影響,并且支持對(duì)各類(lèi)多線(xiàn)程程序進(jìn)行分析.

2 方法概述

動(dòng)態(tài)污點(diǎn)分析屬于指令級(jí)別的細(xì)粒度分析方法,傳統(tǒng)方法在分析時(shí)需要對(duì)目標(biāo)程序進(jìn)行大范圍的插樁,同時(shí)消耗大量的內(nèi)存空間,因此本文所提方法的重要目標(biāo)是盡量降低對(duì)目標(biāo)程序執(zhí)行環(huán)境的影響.方法的總體架構(gòu)示意圖如圖1所示,當(dāng)前主要針對(duì)用戶(hù)模式下的程序進(jìn)行分析,我們?cè)讵?dú)立的進(jìn)程空間或內(nèi)核空間中構(gòu)建分析環(huán)境.針對(duì)目標(biāo)程序涉及的進(jìn)程環(huán)境中的每個(gè)線(xiàn)程,創(chuàng)建一個(gè)相對(duì)應(yīng)的分析線(xiàn)程,并且處理兩者之間的數(shù)據(jù)讀寫(xiě)與分析同步問(wèn)題.分析環(huán)境由一系列分析線(xiàn)程和輔助緩沖區(qū)構(gòu)成,可構(gòu)建于一個(gè)最基本的進(jìn)程執(zhí)行環(huán)境中,該進(jìn)程可由攔截模塊創(chuàng)建,其生存周期基本與目標(biāo)程序相同,也可直接構(gòu)建于內(nèi)核空間中.當(dāng)目標(biāo)程序執(zhí)行完成時(shí),其對(duì)應(yīng)的分析過(guò)程也將同步完成.對(duì)于污點(diǎn)分析時(shí)所需的額外輔助內(nèi)存,如構(gòu)建指令分析代碼,存儲(chǔ)分析狀態(tài)等,則直接在分析進(jìn)程空間中分配和創(chuàng)建.根據(jù)攔截方式的不同,攔截模塊可位于目標(biāo)進(jìn)程空間內(nèi)或者內(nèi)核中,當(dāng)其獲取到線(xiàn)程創(chuàng)建、內(nèi)存分配以及新程序塊執(zhí)行等事件時(shí),同時(shí)在分析環(huán)境中創(chuàng)建分析線(xiàn)程和所需的輔助空間.圖中攔截模塊出現(xiàn)在目標(biāo)進(jìn)程內(nèi),可采用動(dòng)態(tài)插樁方法來(lái)實(shí)現(xiàn)[18],實(shí)際上也可以采用其它方法.

圖1 總體架構(gòu)示意圖Fig.1 Overall architecture of the proposed method

在進(jìn)行具體分析時(shí),事實(shí)上主要需對(duì)兩大類(lèi)指令進(jìn)行處理,一是對(duì)于涉及內(nèi)存訪(fǎng)問(wèn)的指令,在執(zhí)行過(guò)程中,指令訪(fǎng)問(wèn)的內(nèi)存地址會(huì)發(fā)生變化,另外可能會(huì)受到多個(gè)線(xiàn)程以及系統(tǒng)內(nèi)核的影響.因此,在分析過(guò)程中,較好的方法是實(shí)時(shí)獲取這些信息以保證準(zhǔn)確性.二是對(duì)于僅涉及寄存器運(yùn)算的指令,在多數(shù)情況下,只會(huì)受到當(dāng)前線(xiàn)程的上下文影響,因此可以直接對(duì)其進(jìn)行分析,而無(wú)需獲知其它信息.因此,與傳統(tǒng)分析類(lèi)似,首先需對(duì)目標(biāo)程序進(jìn)行攔截并記錄一些運(yùn)行時(shí)信息,并通過(guò)共享內(nèi)存方式來(lái)進(jìn)行進(jìn)程,傳輸記錄的運(yùn)行時(shí)信息到分析環(huán)境,而后在構(gòu)建分析環(huán)境時(shí),需要對(duì)這兩種情況進(jìn)行不同的處理.需要注意的是,如果分析環(huán)境構(gòu)建于內(nèi)核中,則可直接映射并讀取目標(biāo)進(jìn)程空間的相關(guān)內(nèi)存數(shù)據(jù).

3 分析代碼構(gòu)建

3.1 分析狀態(tài)

線(xiàn)程上下文信息主要涉及寄存器狀態(tài),我們采用相同大小的內(nèi)存空間來(lái)存儲(chǔ)其分析狀態(tài).即32位平臺(tái)下共有8個(gè)寄存器,對(duì)此采用32個(gè)字節(jié)存儲(chǔ)狀態(tài),這里針對(duì)的是字節(jié)級(jí)別的污染狀態(tài)傳遞情形.對(duì)于進(jìn)程內(nèi)存空間對(duì)應(yīng)的分析狀態(tài),基于虛擬地址采用相應(yīng)大小的映射空間來(lái)存儲(chǔ),即當(dāng)目標(biāo)程序分配可訪(fǎng)問(wèn)的內(nèi)存頁(yè)面時(shí),同時(shí)在分析進(jìn)程中分配相應(yīng)的內(nèi)存頁(yè)面用于存儲(chǔ)其分析狀態(tài),并且構(gòu)建映射表項(xiàng),在32位平臺(tái)中整個(gè)映射表占用2MB空間.因此,在分析過(guò)程中內(nèi)存分析狀態(tài)的更新過(guò)程將得到簡(jiǎn)化,而存儲(chǔ)分析狀態(tài)所需的內(nèi)存空間跟目標(biāo)程序在運(yùn)行時(shí)分配的內(nèi)存大小相關(guān),更具體地是跟提交分配的物理頁(yè)面數(shù)量相關(guān),這在實(shí)際應(yīng)用中是相對(duì)有限的.另外需要注意的是,如果分析線(xiàn)程執(zhí)行時(shí),讀取的分析狀態(tài)存儲(chǔ)頁(yè)面還未分配時(shí)將會(huì)產(chǎn)生訪(fǎng)問(wèn)異常,此時(shí)在異常處理程序中重新分配和構(gòu)建狀態(tài)存儲(chǔ)頁(yè)面即可.當(dāng)在分析過(guò)程中實(shí)際物理頁(yè)面還未分配時(shí),會(huì)導(dǎo)致上述情形出現(xiàn).

3.2 分析代碼塊

當(dāng)攔截模塊捕捉到新的程序基本塊出現(xiàn)時(shí),同時(shí)在分析進(jìn)程中為其構(gòu)建相應(yīng)的分析代碼塊,同時(shí)構(gòu)建描述分析代碼信息的結(jié)構(gòu)體來(lái)記錄分析代碼的相關(guān)信息并添加到映射表項(xiàng),便于獲取分析代碼信息及鏈接不同的分析代碼塊,并判斷當(dāng)前程序基本塊對(duì)應(yīng)的分析代碼是否已經(jīng)構(gòu)建過(guò),并檢查原程序代碼是否被修改.目標(biāo)程序執(zhí)行的指令地址到分析代碼信息塊的映射結(jié)構(gòu)與進(jìn)程頁(yè)表結(jié)構(gòu)類(lèi)似,這里可采用三級(jí)索引結(jié)構(gòu).對(duì)于32位地址,與上節(jié)類(lèi)似,一級(jí)索引表采用目標(biāo)地址的高20位作為索引進(jìn)行查詢(xún),而末級(jí)索引表則使用指令地址的最低2位比特.因此,一級(jí)索引表總共需要占用2MB的空間,而后兩級(jí)結(jié)構(gòu)的空間消耗取決于目標(biāo)程序?qū)嶋H加載的代碼大小.此外,為便于分析代碼獲取描述結(jié)構(gòu)體信息,同時(shí)將描述結(jié)構(gòu)地址保存在實(shí)際執(zhí)行的分析代碼之前.

污點(diǎn)分析過(guò)程中主要進(jìn)行的任務(wù)是傳遞污染狀態(tài),該功能實(shí)際上相對(duì)較容易實(shí)現(xiàn).因此,可以在分析代碼中利用固定的寄存器來(lái)表示分析上下文以外的信息,例如:用ebx表示當(dāng)前讀取的運(yùn)行時(shí)信息緩沖區(qū)地址,將edx指向存儲(chǔ)寄存器分析狀態(tài)的內(nèi)存空間.而后針對(duì)上文所述兩種類(lèi)型的指令,我們分別構(gòu)建相應(yīng)的分析代碼.對(duì)于涉及內(nèi)存訪(fǎng)問(wèn)的指令,先從記錄緩沖區(qū)中讀取相應(yīng)的內(nèi)存地址并獲取對(duì)應(yīng)的狀態(tài)存儲(chǔ)地址,同時(shí)保證數(shù)據(jù)的同步,更具體的情況將在下文作進(jìn)一步討論.對(duì)于僅涉及寄存器運(yùn)算的指令,則直接通過(guò)簡(jiǎn)單的傳送指令完成分析狀態(tài)的傳遞操作,并不依賴(lài)于其它線(xiàn)程和運(yùn)行時(shí)信息.例如:對(duì)于原指令“mov eax,ecx”,則在分析代碼中使用“mov eax,[edx+24];mov [edx+28],eax”兩條指令來(lái)完成狀態(tài)傳遞.

3.3 代碼塊的鏈接和執(zhí)行

由于分析代碼塊與原程序產(chǎn)生的基本塊保持對(duì)應(yīng)關(guān)系,因此當(dāng)原程序出現(xiàn)分支指令時(shí),分析代碼也需要能夠正確的跳轉(zhuǎn)到下一分析代碼塊繼續(xù)執(zhí)行.我們分別處理兩種分支情況,一是間接跳轉(zhuǎn),如jmp eax、call [ecx]、 ret等.其中,對(duì)于涉及內(nèi)存訪(fǎng)問(wèn)的指令,由于我們已經(jīng)對(duì)其進(jìn)行攔截并記錄相關(guān)信息,因此可以從記錄緩存區(qū)中附帶取得下一個(gè)要執(zhí)行的分析代碼的指令地址.對(duì)于其它的間接跳轉(zhuǎn),同樣可通過(guò)額外插樁記錄來(lái)獲取目標(biāo)地址.二是直接跳轉(zhuǎn),即可直接從代碼中獲取跳轉(zhuǎn)目標(biāo)地址,但是對(duì)于其中的條件跳轉(zhuǎn),仍然需要根據(jù)實(shí)際執(zhí)行情況來(lái)進(jìn)行判斷.與原程序不同,分析代碼在分配時(shí)并不是連續(xù)的,因此需要重新建立不同分析代碼塊之間的依賴(lài)關(guān)系.如圖2所示,我們?cè)诜治龃a中結(jié)合無(wú)條件跳轉(zhuǎn)指令來(lái)重建構(gòu)建條件跳轉(zhuǎn)指令,從而將不同的分析代碼塊關(guān)聯(lián)在一起,保證其能連續(xù)正確的執(zhí)行,并使用直接地址跳轉(zhuǎn)來(lái)提高代碼執(zhí)行速度.

實(shí)際上分析代碼在執(zhí)行時(shí),其下一個(gè)執(zhí)行的目標(biāo)地址將會(huì)出現(xiàn)在記錄緩沖區(qū)中,為此在構(gòu)建條件跳轉(zhuǎn)指令時(shí),可通過(guò)與下一個(gè)要讀取的緩沖區(qū)內(nèi)容進(jìn)行比較來(lái)決定所要執(zhí)行的跳轉(zhuǎn)目標(biāo),如圖2中“cmp [eax-4],241200”所示.需注意的是,這里比較的對(duì)象是分析代碼所對(duì)應(yīng)的描述結(jié)構(gòu)信息,其目的是當(dāng)原程序代碼在執(zhí)行過(guò)程中被修改時(shí),實(shí)際的分析代碼仍然能夠被正確執(zhí)行,即對(duì)于起始地址相同的原程序基本塊,可能會(huì)有多個(gè)分析代碼共享同一個(gè)分析代碼描述結(jié)構(gòu).在這種情況下,我們將直接從記錄緩沖區(qū)中獲取下一個(gè)分析代碼塊并執(zhí)行,如圖2所示,100A6DE2處的代碼修改,將導(dǎo)致其對(duì)應(yīng)的分析代碼重建,同時(shí)將其原來(lái)已鏈接的分析代碼的開(kāi)頭處修改為間接跳轉(zhuǎn).

圖2 條件跳轉(zhuǎn)和分析代碼Fig.2 Conditional jump and analysis code

針對(duì)上述條件跳轉(zhuǎn)的情況,當(dāng)攔截到目標(biāo)程序執(zhí)行新的程序基本塊時(shí),由于對(duì)已經(jīng)執(zhí)行的基本塊進(jìn)行了記錄,因此我們可以獲取到跳轉(zhuǎn)至當(dāng)前基本塊的上一個(gè)基本塊,并更新其對(duì)應(yīng)的分析代碼中的無(wú)條件跳轉(zhuǎn)地址.如圖2所示,從起始地址為100A6DD2的基本塊可以執(zhí)行到地址100A6E97,這樣當(dāng)攔截到100A6E97處的基本塊時(shí),同時(shí)更新上一個(gè)基本塊對(duì)應(yīng)的分析代碼.如圖2所示,無(wú)條件跳轉(zhuǎn)目標(biāo)地址202A10為更新后的指向?qū)嶋H分配的分析代碼.

另外,由于用戶(hù)回調(diào)和異步執(zhí)行調(diào)用等機(jī)制的存在,當(dāng)用戶(hù)模式下的程序從系統(tǒng)內(nèi)核返回后未必會(huì)繼續(xù)執(zhí)行后面相鄰的指令.所以對(duì)于會(huì)導(dǎo)致處理器特權(quán)級(jí)別切換的指令,如:sysenter,int等,也需在程序執(zhí)行時(shí)記錄下其返回后的指令執(zhí)行地址,在分析代碼中按照間接跳轉(zhuǎn)的方式來(lái)處理.

4 信息記錄與線(xiàn)程同步

目標(biāo)程序在執(zhí)行時(shí)同步記錄進(jìn)行污點(diǎn)分析所需的運(yùn)行時(shí)信息,主要為涉及的內(nèi)存地址與值,以及必要的分支信息,通常采用代碼插樁的方式來(lái)完成.主要原因是這些信息容易發(fā)生變化,我們需保證整個(gè)分析過(guò)程的準(zhǔn)確性.針對(duì)分支信息的記錄,包括兩種情況,一是如果當(dāng)前程序基本塊中包含有內(nèi)存操作指令,則在第一個(gè)訪(fǎng)存指令處同時(shí)記錄當(dāng)前基本塊地址;另一種是當(dāng)前基本塊不包含訪(fǎng)存指令,則在基本塊開(kāi)頭處作額外插樁并記錄其起始地址.在大多數(shù)情況下,基本塊內(nèi)都會(huì)有指令涉及內(nèi)存訪(fǎng)問(wèn)操作.另外,對(duì)于不含訪(fǎng)存指令的基本塊,事實(shí)上可以從當(dāng)前線(xiàn)程的上一次記錄處開(kāi)始,通過(guò)寄存器運(yùn)算來(lái)得到跳轉(zhuǎn)目標(biāo)地址,但可能會(huì)增加上下文切換的額外開(kāi)銷(xiāo)和出錯(cuò)的可能性.

在進(jìn)行信息記錄時(shí),為減小內(nèi)存開(kāi)銷(xiāo),可以采用單個(gè)環(huán)形隊(duì)列或者多個(gè)緩沖區(qū)輪流記錄的方式[17],同樣可減少因線(xiàn)程同步所帶來(lái)的額外開(kāi)銷(xiāo).目標(biāo)程序線(xiàn)程與分析線(xiàn)程并行同步執(zhí)行,即當(dāng)原線(xiàn)程被創(chuàng)建時(shí),同步創(chuàng)建并執(zhí)行對(duì)應(yīng)的分析線(xiàn)程.多數(shù)情況下,由于分析線(xiàn)程完成的工作量要比原線(xiàn)程少,因此在每次從記錄緩沖區(qū)中讀取數(shù)據(jù)時(shí),需要判斷取值是否為空,以保證分析執(zhí)行的一致性.如圖3所示,當(dāng)分析線(xiàn)程從緩沖區(qū)中讀取到的值為空時(shí),則繼續(xù)讀取直到其值不為空.在此情況下,各個(gè)分析線(xiàn)程間的同步基本能夠得到保證.另外,為控制分析線(xiàn)程對(duì)處理器資源的占用,當(dāng)目標(biāo)程序進(jìn)出系統(tǒng)內(nèi)核執(zhí)行時(shí),在保存記錄時(shí)設(shè)置特殊標(biāo)記,這樣分析線(xiàn)程可根據(jù)該標(biāo)記來(lái)進(jìn)行等待和被喚醒.同樣,若采用多個(gè)緩沖區(qū)時(shí),在單個(gè)寫(xiě)滿(mǎn)時(shí)也應(yīng)添加標(biāo)記.如圖3中的數(shù)字順序所示,中間當(dāng)目標(biāo)線(xiàn)程遇到系統(tǒng)調(diào)用時(shí),則向緩沖區(qū)中寫(xiě)入e,而對(duì)應(yīng)的分析線(xiàn)程如果讀取到該值,則進(jìn)一步讀取緩沖區(qū)中的下一個(gè)值,如果下一個(gè)值為空,則表明目標(biāo)線(xiàn)程還未從內(nèi)核返回,此時(shí)分析線(xiàn)程則可進(jìn)入睡眠狀態(tài),直到目標(biāo)線(xiàn)程返回時(shí)被喚醒.

圖3 線(xiàn)程同步示意圖Fig.3 Synchronization between the native thread and analysis thread

5 實(shí)驗(yàn)與分析

本文在Windows平臺(tái)上實(shí)現(xiàn)了該方法的原型,采用Intel Pin對(duì)目標(biāo)程序進(jìn)行插樁和攔截,并利用其提供的INS_InsertFillBuffer接口來(lái)記錄目標(biāo)程序的運(yùn)行時(shí)信息[18],在記錄緩存區(qū)滿(mǎn)時(shí)使用系統(tǒng)函數(shù)WaitOnAddress來(lái)進(jìn)行等待同步,具體的污點(diǎn)分析代碼基于libdft的核心部分進(jìn)行構(gòu)建,并在實(shí)驗(yàn)中與之進(jìn)行性能比較.實(shí)驗(yàn)環(huán)境為安裝Intel Core i7-7700 CPU @ 3.60GHz、16GB內(nèi)存的普通桌面終端,其中安裝的操作系統(tǒng)為Windows 10 64-bit,當(dāng)前測(cè)試目標(biāo)為32位應(yīng)用程序.

5.1 性能評(píng)估

采用Windows平臺(tái)下多種常見(jiàn)應(yīng)用程序來(lái)測(cè)試分析性能以及資源占用情況,具體列表如圖4所示.具體的實(shí)驗(yàn)場(chǎng)景為,分別使用程序makecab、winzip(v21)及openssl(v1.0.2n)對(duì)大小為10MB的文本文件進(jìn)行壓縮或加密,其中openssl首

圖4 針對(duì)多種應(yīng)用程序的分析性能比較Fig.4 Comparisons of analysis performance for different programs

先要基于源碼進(jìn)行編譯并使用aes-256-cbc加密模式.使用pscp(1)城鎮(zhèn)化之前川渝地區(qū)鄉(xiāng)下人居的正屋(又稱(chēng)“堂屋”)用作逢年過(guò)節(jié)祭祀點(diǎn)香用。從本地服務(wù)器下載大小為10MB的文件.而后使用7zip(v18.05)將大小為5MB的文本壓縮為默認(rèn)7z格式,使用ffmpeg(v4.0.2)將大小為1MB的wmv文件轉(zhuǎn)換為mp4格式.最后使用系統(tǒng)內(nèi)置程序xcopy復(fù)制系統(tǒng)分區(qū)中的WindowsINF文件夾到其它分區(qū).選擇不同的文件大小主要是基于執(zhí)行時(shí)間和對(duì)比展示的綜合考慮.在實(shí)驗(yàn)時(shí),各場(chǎng)景重復(fù)多次并對(duì)相關(guān)結(jié)果計(jì)算平均值,并將結(jié)果與經(jīng)典分析方法進(jìn)行比較,主要結(jié)果如圖4和圖5所示.

圖5 對(duì)不同程序進(jìn)行分析時(shí)的CPU占用率Fig.5 CPU usage in the analysis of different programs

在采用本文DOTA方法對(duì)不同程序進(jìn)行分析時(shí),其分析性能均會(huì)有提高,提高程度取決于具體的應(yīng)用程序.如圖4所示,對(duì)7zip和ffmpeg這類(lèi)內(nèi)存讀寫(xiě)密集型程序,其分析效率提升效果會(huì)更加明顯.另外圖中DOTA_R表示僅對(duì)目標(biāo)程序進(jìn)行插樁并記錄信息,但不進(jìn)行分析的結(jié)果,與之相比,整個(gè)分析過(guò)程的效率降低并不明顯.該情況表明線(xiàn)程同步和具體污點(diǎn)分析實(shí)際未對(duì)性能造成明顯影響.多數(shù)情況下應(yīng)用程序涉及內(nèi)存訪(fǎng)問(wèn)的指令執(zhí)行數(shù)量會(huì)占有較大的比例,由于實(shí)驗(yàn)中采用Pin來(lái)獲取運(yùn)行時(shí)信息,因此實(shí)際分析性能仍會(huì)受制于在線(xiàn)記錄過(guò)程,盡管其可能不是速度最優(yōu)的選擇,但是較容易應(yīng)用和部署的工具.從圖5來(lái)看,分析線(xiàn)程導(dǎo)致的CPU占用率升高程度在可接受范圍內(nèi),因?yàn)槠胀ńK端的總共可用CPU核心數(shù)量并不會(huì)太多,我們需要考慮其影響.另外,進(jìn)行上述實(shí)驗(yàn)時(shí),每個(gè)線(xiàn)程的記錄緩沖區(qū)大小為256KB,記錄時(shí)采用雙緩沖來(lái)進(jìn)行.

事實(shí)上,為控制CPU使用率,分析線(xiàn)程和原線(xiàn)程之間的同步仍然存在一定的開(kāi)銷(xiāo),也會(huì)受到緩沖區(qū)大小的影響,其影響程度還依賴(lài)于目標(biāo)程序的特點(diǎn).我們選擇上面的7zip程序進(jìn)行同樣的實(shí)驗(yàn),但是改變記錄緩沖區(qū)的數(shù)量來(lái)分析其帶來(lái)的影響.從實(shí)驗(yàn)結(jié)果得知,當(dāng)緩沖區(qū)數(shù)量為單個(gè)時(shí),當(dāng)其滿(mǎn)時(shí)會(huì)因同步問(wèn)題,導(dǎo)致分析效率明顯下降.在其它情況下,完成分析所需時(shí)間和CPU占用率均隨著緩沖區(qū)數(shù)量緩慢增長(zhǎng).其中一個(gè)主要原因是內(nèi)存分配以及緩沖隊(duì)列維護(hù)帶來(lái)的開(kāi)銷(xiāo).另外,若在實(shí)驗(yàn)中將緩沖區(qū)的數(shù)量固定為2個(gè),則在此情況下,當(dāng)單個(gè)緩沖區(qū)大小增加時(shí),其分析性能并未一直隨著提高.其原因是Pin會(huì)對(duì)已滿(mǎn)的緩沖區(qū)進(jìn)行清零處理,當(dāng)其大小增加時(shí),其對(duì)目標(biāo)程序執(zhí)行的影響程度會(huì)累積.總的來(lái)看,緩沖區(qū)的不同設(shè)置并不會(huì)對(duì)分析造成嚴(yán)重影響.

針對(duì)各程序進(jìn)行分析時(shí)的內(nèi)存資源占用情況如表1所示,分析代碼的內(nèi)存消耗情況跟實(shí)際執(zhí)行的基本塊數(shù)量相關(guān),多數(shù)情況下處于較小的范圍內(nèi).分析代碼映射表中的二級(jí)索引大小與加載代碼保持一致,而末級(jí)索引的內(nèi)存開(kāi)銷(xiāo)可以忽略不計(jì).依賴(lài)目標(biāo)程序?qū)嶋H加載代碼大小的還有污染狀態(tài)存儲(chǔ)空間,并且其還與程序執(zhí)行時(shí)實(shí)際分配的內(nèi)存相關(guān).注意的是,實(shí)驗(yàn)中是根據(jù)目標(biāo)程序分配的虛擬地址來(lái)分配狀態(tài)存儲(chǔ)空間的,而實(shí)際已分配物理頁(yè)面并使用的虛擬地址數(shù)量會(huì)更少,但當(dāng)前總體內(nèi)存消耗在可接受范圍.

表1 資源占用情況統(tǒng)計(jì)Table 1 Statistics of other resource occupations

在采用真實(shí)環(huán)境程序進(jìn)行實(shí)驗(yàn)的基礎(chǔ)上,我們基于基準(zhǔn)測(cè)試工具SPEC CPU 2006中的部分程序做進(jìn)一步的性能測(cè)試,采用ref工作負(fù)載進(jìn)行,并以程序原始執(zhí)行所消耗的時(shí)間為基線(xiàn)值來(lái)計(jì)算其它兩種分析環(huán)境下的執(zhí)行速度的降低比率.如圖6所示,從實(shí)驗(yàn)結(jié)果來(lái)看,在長(zhǎng)時(shí)間的運(yùn)行過(guò)程中,DOTA分析與傳統(tǒng)分析相比仍然取得一定的分析性能的提升.由于基準(zhǔn)測(cè)試程序運(yùn)行時(shí)采用單線(xiàn)程,所以總體的CPU的開(kāi)銷(xiāo)為原來(lái)兩倍左右.

圖6 采用基準(zhǔn)程序進(jìn)行測(cè)試的性能開(kāi)銷(xiāo)對(duì)比Fig.6 Performance comparisons for the tests on benchmark programs

5.2 案例分析

我們通過(guò)多個(gè)實(shí)際數(shù)據(jù)流分析的場(chǎng)景來(lái)驗(yàn)證本文所提方法的有效性.首先使用openssl對(duì)大小為1K的文件進(jìn)行加密并將其內(nèi)容保存至另一個(gè)文件;而后分別使用系統(tǒng)內(nèi)置程序certutil,以及第三方應(yīng)用程序aria2(v1.34)、curl for Windows(v7.61)、wget2所提供的下載功能從本地服務(wù)器上下載大小為1K的文件;最后對(duì)Trickbot惡意代碼樣本的數(shù)據(jù)發(fā)送功能進(jìn)行分析,其在被感染的終端上啟動(dòng)運(yùn)行后會(huì)創(chuàng)建文件client_id,讀取內(nèi)容后通過(guò)https協(xié)議發(fā)送到服務(wù)器端.而后在分析時(shí),我們同時(shí)攔截NtReadFile、NtWriteFile和NtDeviceIoControlFile等系統(tǒng)函數(shù),在其中標(biāo)記相關(guān)內(nèi)存地址為污染狀態(tài),并且及時(shí)檢測(cè)數(shù)據(jù)污染情況.實(shí)驗(yàn)結(jié)果表明,本文方法均能夠檢測(cè)到污點(diǎn)數(shù)據(jù)的寫(xiě)入或者發(fā)送操作,并且通過(guò)多次重復(fù)實(shí)驗(yàn)得知其污點(diǎn)狀態(tài)的傳播情況基本上與傳統(tǒng)分析時(shí)保持一致,而且不同的應(yīng)用程序用于存儲(chǔ)污點(diǎn)狀態(tài)的內(nèi)存開(kāi)銷(xiāo)在20MB至45MB之間,占用相對(duì)較低的內(nèi)存資源,其它的統(tǒng)計(jì)信息如表2所示.

表2 功能分析的數(shù)據(jù)統(tǒng)計(jì)Table 2 Statistics of the functionality analysis

另外,certutil和trickbot程序在運(yùn)行時(shí)由不同的線(xiàn)程來(lái)完成網(wǎng)絡(luò)通信和文件讀寫(xiě)過(guò)程,并且使用本文所提方法能夠正確的進(jìn)行污點(diǎn)分析,跨線(xiàn)程來(lái)傳遞污染狀態(tài),能檢測(cè)到網(wǎng)絡(luò)數(shù)據(jù)到目標(biāo)文件的映射關(guān)系.此外,從表2中可以看出,盡管目標(biāo)程序?yàn)槎嗑€(xiàn)程應(yīng)用,但是與分析場(chǎng)景相關(guān)的往往只是部分線(xiàn)程以及部分執(zhí)行代碼.因此在實(shí)際分析中,我們可以只對(duì)相關(guān)線(xiàn)程涉及的代碼進(jìn)行攔截和分析,這將有利于對(duì)現(xiàn)代大型應(yīng)用程序的分析.

6 討 論

本文提供了一種針對(duì)多線(xiàn)程程序,快速構(gòu)建在線(xiàn)解耦分析的思路,旨在充分利用現(xiàn)有插樁工具并進(jìn)一步提高分析效率,通過(guò)實(shí)際程序驗(yàn)證了其可行性.與其它解耦分析相比,進(jìn)一步提高了易用性和適用范圍,并合理控制目標(biāo)環(huán)境的資源開(kāi)銷(xiāo).

該方法在線(xiàn)獲取的運(yùn)行時(shí)信息較為充分,盡管也會(huì)帶來(lái)一定的性能開(kāi)銷(xiāo),但是能夠簡(jiǎn)化分析過(guò)程并保證準(zhǔn)確性.當(dāng)前分析效率仍受限于信息記錄過(guò)程,而目標(biāo)程序運(yùn)行時(shí)的信息記錄也可以采用其它更高效的插樁和記錄方法來(lái)進(jìn)行.在分析中該方法也可以采用其它污點(diǎn)分析引擎.

當(dāng)前分析代碼采用匯編語(yǔ)言編寫(xiě)構(gòu)建,會(huì)導(dǎo)致分析缺乏一些靈活性.在實(shí)際中,如果有其它分析需求,可以先使用高級(jí)語(yǔ)言編寫(xiě),再通過(guò)編譯器優(yōu)化功能來(lái)提取字節(jié)代碼.

分析線(xiàn)程也可以在目標(biāo)進(jìn)程內(nèi)執(zhí)行,但這樣會(huì)占用更多的目標(biāo)進(jìn)程的虛擬地址空間,也可以將其放入內(nèi)核層.而其它的輔助緩沖區(qū)等內(nèi)存也可以通過(guò)共享內(nèi)存來(lái)進(jìn)行.

在極端情況下,當(dāng)不同目標(biāo)線(xiàn)程間采用原子方式在極短時(shí)間內(nèi)完成同步時(shí),由于操作系統(tǒng)的線(xiàn)程調(diào)度機(jī)制,相對(duì)應(yīng)的分析線(xiàn)程可能會(huì)未能及時(shí)處理該情況,此時(shí)需要加入額外的檢查代碼.

7 結(jié) 論

本文提出一種改進(jìn)的輕量級(jí)在線(xiàn)解耦的動(dòng)態(tài)污點(diǎn)分析方法,相比于傳統(tǒng)分析方法能更高效的對(duì)目標(biāo)程序進(jìn)行細(xì)粒度分析,通過(guò)分離出部分可獨(dú)立于原程序執(zhí)行的分析任務(wù),并構(gòu)建相對(duì)應(yīng)的分析代碼,可降低對(duì)目標(biāo)程序執(zhí)行環(huán)境的影響并提高分析效率.本文通過(guò)采用多種真實(shí)程序及案例研究來(lái)驗(yàn)證了該方法的有效性和易用性.后續(xù)將針對(duì)任務(wù)分割、多線(xiàn)程同步以及64位平臺(tái)開(kāi)展進(jìn)一步研究,以提高分析效率和部署靈活性.

猜你喜歡
緩沖區(qū)污點(diǎn)線(xiàn)程
5G終端模擬系統(tǒng)隨機(jī)接入過(guò)程的設(shè)計(jì)與實(shí)現(xiàn)
實(shí)時(shí)操作系統(tǒng)mbedOS 互斥量調(diào)度機(jī)制剖析
淺析體育賽事售票系統(tǒng)錯(cuò)票問(wèn)題的對(duì)策研究
黑螞蟻
污點(diǎn)
緩沖區(qū)溢出漏洞攻擊及其對(duì)策探析
一節(jié)生物課的課堂生成
初涉緩沖區(qū)
本期導(dǎo)讀
Linux系統(tǒng)下緩沖區(qū)溢出漏洞攻擊的防范
怀宁县| 托克托县| 峨眉山市| 湘乡市| 章丘市| 拜泉县| 合作市| 攀枝花市| 赤峰市| 翁源县| 鄂托克前旗| 梅州市| 韩城市| 河东区| 阿拉尔市| 永清县| 延庆县| 边坝县| 台江县| 方城县| 辉南县| 施秉县| 五莲县| 沧州市| 泌阳县| 长白| 泗阳县| 临夏县| 庐江县| 金阳县| 山西省| 旌德县| 江门市| 紫阳县| 锡林浩特市| 仁化县| 金溪县| 鹤山市| 连江县| 辽中县| 鄯善县|