一種惡意軟件的多執(zhí)行路徑構(gòu)造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于計算機軟件安全領(lǐng)域,特別涉及一種惡意軟件的多執(zhí)行路徑構(gòu)造方法。
【背景技術(shù)】
[0002]近幾年來,越來越多的惡意軟件不僅對計算機用戶數(shù)據(jù)的安全性和隱私造成了嚴重的威脅,而且會造成巨大的經(jīng)濟損失。惡意軟件被定義為在計算機系統(tǒng)上執(zhí)行惡意任務(wù)的病毒、蠕蟲和特洛伊木馬的程序,通過破壞軟件進程來實施控制,讓受害者的電腦不斷彈出色情網(wǎng)站或者是惡意廣告的程序,也叫做流氓軟件。惡意軟件分析是確定一個惡意軟件樣本(如病毒、蠕蟲和特洛伊木馬等)的行為和目的的過程。這個過程是能夠開發(fā)有效的檢測技術(shù)和刪除工具的一個必要步驟。
[0003]例如采用動態(tài)分析方法的CwSandbox系統(tǒng)。該系統(tǒng)將惡意程序樣本放置在虛擬機軟件環(huán)境中運行,采用用戶態(tài)的API Hooking方法來監(jiān)視惡意代碼的動態(tài)行為。CwSandbox系統(tǒng)的主進程在開始惡意程序的進程之后,監(jiān)控該進程的執(zhí)行過程。通過改寫系統(tǒng)API函數(shù),實現(xiàn)API的攔截,目標進程調(diào)用系統(tǒng)API時會先進入CwSandbox的hook函數(shù)中。在運行可疑程序時,將DLL注入目標進程空間,監(jiān)控進程的行為并通過進程間通信的方式向主進程發(fā)送目標進程的行為信息。同時,在運行的過程中生成惡意程序?qū)ο到y(tǒng)資源(主要是文件,注冊表,網(wǎng)絡(luò)連接等資源)進行操作的報告。
[0004]在實現(xiàn)本發(fā)明的過程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術(shù)至少存在以下問題:
[0005]當前的分析系統(tǒng)有個嚴重的問題:這些分析都是基于程序的單一執(zhí)行路徑。然而,有可能某些惡意行為只能在特定的環(huán)境下觸發(fā)。如米開朗基羅病毒,大部分時間保持休眠狀態(tài),只有在3月6日米開朗基羅的生日時觸發(fā)。再如bots (—種能執(zhí)行外部命令的自動運行型木馬)自動登錄到IRC服務(wù)器經(jīng)常通過監(jiān)控關(guān)鍵字列表觸發(fā)某些有效載荷的例程。也就是當用單一的執(zhí)行路徑確定一個程序的行為時,很容易導(dǎo)致很多行動無法被觀測到,這可能導(dǎo)致軟件分析師對某些樣本的風(fēng)險得出錯誤結(jié)論,從而造成經(jīng)濟損失。
【發(fā)明內(nèi)容】
[0006]為了解決現(xiàn)有技術(shù)的問題,本發(fā)明提供了一種惡意軟件的多執(zhí)行路徑構(gòu)造方法,所述惡意軟件的多執(zhí)行路徑構(gòu)造方法,包括:
[0007]步驟一,導(dǎo)入目標程序,檢測所述目標程序是否為可執(zhí)行文件,如果所述目標程序為所述可執(zhí)行文件,則執(zhí)行所述目標程序;
[0008]步驟二,在所述目標程序的執(zhí)行過程中,檢測到條件轉(zhuǎn)移指令時,創(chuàng)建程序快照,將所述程序快照保存至快照鏈表中;
[0009]步驟三,在所述目標程序的執(zhí)行過程中,監(jiān)測所述目標程序的運行狀態(tài),當所述目標程序?qū)⒁Y(jié)束時,暫停所述目標程序的運行,根據(jù)此時所述目標程序的執(zhí)行過程信息,構(gòu)建初級控制流圖,進行污點分析和控制依賴分析,根據(jù)所述污點分析和控制依賴關(guān)系分析的結(jié)果進行指令標記,從所述快照鏈表中載入與被標記指令對應(yīng)的程序快照,根據(jù)所述程序快照恢復(fù)所述目標程序;
[0010]步驟四,在載入所述程序快照后,從所述快照鏈表中刪除已載入的所述程序快照以及與未標記指令對應(yīng)的程序快照,進而修改與已載入的所述程序快照對應(yīng)的條件轉(zhuǎn)移指令,按所述修改后的條件轉(zhuǎn)移指令對應(yīng)的程序路徑執(zhí)行所述目標程序;
[0011]在執(zhí)行所述步驟四后,重復(fù)執(zhí)行步驟二至步驟四的內(nèi)容,直至所述快照鏈表中程序快照數(shù)量為零時終止;
[0012]步驟五,結(jié)合在步驟三中構(gòu)建的所述初級控制流圖構(gòu)建完整控制流圖,以便基于所述完整控制流圖獲取所述目標程序的多執(zhí)行路徑。
[0013]可選的,所述在所述目標程序的執(zhí)行過程中,監(jiān)測所述目標程序的運行狀態(tài),當所述目標程序?qū)⒁Y(jié)束時,暫停所述目標程序的運行,根據(jù)此時所述目標程序的執(zhí)行過程信息,構(gòu)建初級控制流圖,進行污點分析和控制依賴關(guān)系分析,根據(jù)所述污點分析和控制依賴關(guān)系分析的結(jié)果進行指令標記,從所述快照鏈表中載入與被標記指令對應(yīng)的程序快照,根據(jù)所述程序快照恢復(fù)所述目標程序,包括:
[0014]監(jiān)測所述目標程序的運行狀態(tài),當所述目標程序?qū)⒁Y(jié)束時,調(diào)用中斷服務(wù)暫停所述目標程序的運行;
[0015]根據(jù)此時所述目標程序的執(zhí)行過程信息,構(gòu)建此時的初級控制流圖;
[0016]對所述目標程序進行污點分析,獲取帶有污點標記的指令序列,進而確定所述帶有污點標記的指令序列對應(yīng)的基本塊,根據(jù)所述基本塊進行控制依賴分析進行指令標記,確定被標記的指令;
[0017]從所述快照鏈表提取與所述被標記的指令對應(yīng)的程序快照,將所述程序快照進行載入,根據(jù)所述程序快照對所述目標程序進行恢復(fù)。
[0018]可選的,所述監(jiān)測所述目標程序的運行狀態(tài),當所述目標程序?qū)⒁Y(jié)束時,調(diào)用中斷服務(wù)暫停所述目標程序的運行,包括:
[0019]監(jiān)測所述目標程序的運行狀態(tài),獲取函數(shù)KiUserExcept1nDispatcher和函數(shù)NtTerminateProcess的混淆保護情況;
[0020]如果所述函數(shù)KiUserExcept1nDispatcher 和所述函數(shù) NtTerminateProcess的應(yīng)用程序接口沒有被混淆保護,則跟蹤在導(dǎo)入地址表中所述函數(shù)KiUserExcept1nDispatcher和所述函數(shù)NtTerminateProcess的應(yīng)用程序接口是否被調(diào)用;
[0021]如果所述函數(shù)KiUserExcept1nDispatcher 和所述函數(shù) NtTerminateProcess的應(yīng)用程序接口已經(jīng)被混淆保護,則跟蹤在ntdll輸出表中所述函數(shù)KiUserExcept1nDispatcher和所述函數(shù)NtTerminateProcess的應(yīng)用程序接口是否被調(diào)用;
[0022]如果在執(zhí)行所述目標程序的過程中,檢測到中央處理器的程序計數(shù)器中存儲的地址等于所述函數(shù)NtTerminateProcess的起始地址時,確認所述目標程序?qū)儆谡=Y(jié)束;
[0023]如果在執(zhí)行所述目標程序的過程中,檢測到所述中央處理器的程序計數(shù)器中存儲的地址等于所述函數(shù)KiUserExcept1nDispatcher的起始地址時,確認所述目標程序因出現(xiàn)異常而中止。
[0024]可選的,所述根據(jù)此時所述目標程序的執(zhí)行過程信息,構(gòu)建此時的初級控制流圖,包括:
[0025]根據(jù)此時所述目標程序的執(zhí)行過程信息,在所述執(zhí)行過程信息中標記全部的首指令;
[0026]令每兩個相鄰的所述首指令之間的內(nèi)容為一個基本塊,基于所述基本塊構(gòu)建初始控制流圖。
[0027]可選的,所述對所述目標程序進行污點分析,獲取帶有污點標記的指令序列,進而確定所述帶有污點標記的指令序列對應(yīng)的基本塊,根據(jù)所述基本塊進行控制依賴分析進行指令標記,確定被標記的指令,包括:
[0028]確定污染源格式,為所述污染源賦予第一標簽;
[0029]在所述目標程序的執(zhí)行過程中,確定與所述污染源有關(guān)的指令,基于所述第一標簽確定與所述指令對應(yīng)的第二標簽,結(jié)合所述指令類型確定所述污染源的傳播情況,根據(jù)所述傳播情況對所述第二標簽的標簽值進行修改,得到修改后的標簽值;
[0030]基于所述修改后的標簽值,對所述指令進行污點標記;
[0031]確定所述帶有污點標記的指令序列對應(yīng)的基本塊,結(jié)合所述傳播情況,獲取所述基本塊的后必經(jīng)點集合,根據(jù)所述后必經(jīng)點結(jié)合進行控制依賴分析;
[0032]根據(jù)所述控制依賴分析結(jié)果進行指令標記,確定被標記的指令。
[0033]可選的,所述在所述目標程序的執(zhí)行過程中,確定與所述污染源有關(guān)的指令,基于所述第一標簽確定與所述指令對應(yīng)的第二標簽,結(jié)合所述指令類型確定所述污染源的傳播情況,根據(jù)所述傳播情況對所述第二標簽的標簽值進行修改,得到修改后的標簽值,包括:
[0034]在80X86系統(tǒng)的指令集中,所述指令分為以下三個類型,
[0035]數(shù)據(jù)轉(zhuǎn)移指令即data movement-based(例如MOV,PUSH,POP等),在該類型的指令中,源操作數(shù)的第二標簽的標簽值傳遞到目的操作數(shù)的第二標簽的標簽值;
[0036]算術(shù)指令(ADD,OR等),在該類型的指令中,目的操作數(shù)的第二標簽的標簽值來源于兩個源操作數(shù)的第二標簽的標簽值;
[0037]只包含一個操作數(shù)的