午夜毛片免费看,老师老少妇黄色网站,久久本道综合久久伊人,伊人黄片子

用于檢測混淆惡意軟件的系統(tǒng)和方法

文檔序號(hào):6604332閱讀:197來源:國知局
專利名稱:用于檢測混淆惡意軟件的系統(tǒng)和方法
技術(shù)領(lǐng)域
本發(fā)明總體上涉及惡意軟件檢測領(lǐng)域,更具體地,涉及用于分析、優(yōu)化及檢測混淆 惡意軟件的系統(tǒng)和方法。
背景技術(shù)
惡意的軟件(即惡意軟件,malware)的日益復(fù)雜和快速繁殖呈現(xiàn)出對(duì)世界范圍的 個(gè)人計(jì)算機(jī)和企業(yè)計(jì)算機(jī)系統(tǒng)的越來越多的安全威脅。為了防止諸如病毒、蠕蟲、木馬等惡 意軟件的傳播,反惡意軟件業(yè)已經(jīng)開發(fā)了各種惡意軟件檢測技術(shù)。這些技術(shù)通?;诤灻?匹配或啟發(fā)式分析的原理,所述簽名匹配即是將軟件代碼和已知的病毒代碼詞典相比較, 所述啟發(fā)式分析即是根據(jù)惡意行為的模式仿真和分析軟件。然而,這些技術(shù)在其應(yīng)用于混 淆惡意軟件時(shí)經(jīng)常失效,在這些混淆惡意軟件中,軟件代碼被修改(或混淆)而使得難以分 析。結(jié)果,由于反惡意軟件程序無法檢測混淆惡意軟件,或花費(fèi)大量的時(shí)間和系統(tǒng)資源來分 析混淆軟件,所以檢測過程變得極其低效。因此,需要有效且高效的機(jī)制用于分析混淆軟件代碼以及在其中檢測惡意代碼。

發(fā)明內(nèi)容
這里披露了用于有效和可靠地分析、優(yōu)化及檢測混淆惡意軟件的系統(tǒng)、方法和計(jì) 算機(jī)程序產(chǎn)品。在一個(gè)示例性實(shí)施例中,用于惡意軟件檢測的方法包括在計(jì)算機(jī)系統(tǒng)中裝載可執(zhí) 行軟件代碼。然后,將軟件代碼分為多個(gè)碼組,每個(gè)碼組被順序(或并行)地裝載到一個(gè)或 多個(gè)存儲(chǔ)器緩沖區(qū)中。該方法進(jìn)一步包括將存儲(chǔ)器緩沖區(qū)中的軟件代碼反匯編為匯編語言 或本領(lǐng)域技術(shù)人員已知的其它低級(jí)程序設(shè)計(jì)語言。然后,將任何復(fù)雜的匯編語言指令都簡 化為基本指令。該方法進(jìn)而可以繼續(xù)構(gòu)建簡化的軟件代碼的數(shù)據(jù)流模型以及分析數(shù)據(jù)流模 型的代碼元間的依賴關(guān)系和相互關(guān)系,以在其中識(shí)別混淆軟件代碼。然后可以進(jìn)一步優(yōu)化 識(shí)別的混淆代碼。最后,基于代碼優(yōu)化的結(jié)果,對(duì)于軟件代碼是否為惡意和/或是否有必要 使用例如簽名匹配和/或試探分析法對(duì)軟件代碼進(jìn)一步分析優(yōu)化,做出判定。在另一個(gè)示例性實(shí)施例中,用于惡意軟件檢測的方法包括將至少一部分軟件代碼 加載到系統(tǒng)存儲(chǔ)器中。軟件代碼繼而被轉(zhuǎn)化為低級(jí)程序設(shè)計(jì)語言。然后,簡化軟件代碼。分 析簡化的軟件代碼中的指令之間的依賴關(guān)系和相互關(guān)系,在其中識(shí)別混淆軟件代碼。然后 可以優(yōu)化識(shí)別的混淆軟件代碼。優(yōu)化包括去除死代碼和優(yōu)化分布式計(jì)算、逆向操作、常量計(jì) 算、轉(zhuǎn)移指令、存儲(chǔ)器調(diào)用、標(biāo)志符操作、分支和循環(huán)指令。最后,使用簽名匹配和/或啟發(fā) 式分析惡意軟件檢測技術(shù),重新編譯和分析優(yōu)化的軟件代碼,來確定軟件代碼是否是惡意 的。


附圖提供對(duì)本發(fā)明進(jìn)一步的理解,并且并入此說明書中構(gòu)成其中的一部分,這些
5附圖有助于理解本發(fā)明的原理。附圖中圖1示出了根據(jù)一個(gè)示例性實(shí)施例的計(jì)算機(jī)系統(tǒng)的示意圖。圖2示出了根據(jù)一個(gè)示例性實(shí)施例的混淆軟件代碼的示例。圖3a示出了根據(jù)一個(gè)示例性實(shí)施例的代碼優(yōu)化過程的高級(jí)示意圖。圖3b示出了根據(jù)一個(gè)示例性實(shí)施例的代碼優(yōu)化過程的詳細(xì)流程圖。圖4示出了根據(jù)一個(gè)示例性實(shí)施例的可以被優(yōu)化的各種類型的混淆代碼。圖5示出了根據(jù)一個(gè)示例性實(shí)施例的混淆軟件代碼的數(shù)據(jù)流模型的示例。圖6示出了根據(jù)一個(gè)示例性實(shí)施例的分布式計(jì)算操作的示例。圖7示出了根據(jù)一個(gè)示例性實(shí)施例的變量的逆向計(jì)算的示例。圖8示出了根據(jù)一個(gè)示例性實(shí)施例的常量計(jì)算的示例。圖9示出了根據(jù)一個(gè)示例性實(shí)施例的轉(zhuǎn)移指令的示例。圖10示出了根據(jù)另一個(gè)示例性實(shí)施例的優(yōu)化存儲(chǔ)器調(diào)用指令的示例。圖11示出了根據(jù)一個(gè)示例性實(shí)施例的優(yōu)化標(biāo)識(shí)符指令的示例。圖12示出了根據(jù)一個(gè)示例性實(shí)施例的優(yōu)化分支和循環(huán)指令的示例。圖13示出了根據(jù)一個(gè)示例性實(shí)施例的混淆代碼的優(yōu)化結(jié)果。圖14以圖形形式示出了代碼混淆的程度和一般的反惡意軟件程序花費(fèi)的時(shí)間之 間的關(guān)系。
具體實(shí)施例方式本文在用于分析、優(yōu)化及檢測混淆的惡意的軟件(也被稱為惡意軟件)的系統(tǒng)和 方法的上下文環(huán)境中描述了示例性實(shí)施例。本領(lǐng)域的普通技術(shù)人員能認(rèn)識(shí)到下列描述僅是 說明例證性的而并非意圖以任何方式限制。從本發(fā)明受益的技術(shù)人員將容易地想到其它的 實(shí)施例?,F(xiàn)在將對(duì)在附圖中示出的示例性實(shí)施例的實(shí)施方式詳細(xì)地做出說明。貫穿附圖和 下面的描述盡可能使用相同的附圖標(biāo)記指代相同或相似的項(xiàng)目。為了清楚起見,這里所描述的實(shí)施方式的常規(guī)特征沒有全部被示出和描述。應(yīng)該 認(rèn)識(shí)到,在任一這類實(shí)際實(shí)施方式的開發(fā)中,為了實(shí)現(xiàn)開發(fā)者的特定目標(biāo),例如符合與應(yīng)用 程序相關(guān)的約束,必須做出大量特定于實(shí)施方式的決定,而且這些特定目標(biāo)從一種實(shí)施方 式到另一種實(shí)施方式、從一個(gè)開發(fā)者到另一個(gè)開發(fā)者將是不同的。此外,應(yīng)該認(rèn)識(shí)到,雖然 這樣的開發(fā)工作會(huì)是復(fù)雜和耗費(fèi)時(shí)間的,但對(duì)受益于本發(fā)明的本領(lǐng)域普通技術(shù)人員而言仍 然是常規(guī)的工程工作。本文披露的用于分析、優(yōu)化及檢測混淆惡意軟件的算法的各種實(shí)施例,可以使用 硬件、軟件、固件或其組合來實(shí)施,并且可以在各種計(jì)算機(jī)系統(tǒng)例如通用個(gè)人計(jì)算機(jī)(PC)、 膝上型計(jì)算機(jī)、應(yīng)用服務(wù)器、網(wǎng)絡(luò)防火墻、路由器或無線訪問點(diǎn)中實(shí)施。此外,為了檢測惡 意軟件,披露的算法可以在包括多個(gè)并行操作的網(wǎng)絡(luò)服務(wù)器計(jì)算機(jī)的分布式計(jì)算系統(tǒng)上實(shí) 施。此外,披露的算法可以在運(yùn)行在用戶電子設(shè)備的軟件上實(shí)施,所述用戶電子設(shè)備例如為 游戲控制臺(tái)、移動(dòng)電話、個(gè)人數(shù)字助理或其它會(huì)暴露于惡意軟件的設(shè)備。圖1示出了示例性計(jì)算機(jī)系統(tǒng)的示意圖,該示例性計(jì)算機(jī)系統(tǒng)適合實(shí)施用于分 析、優(yōu)化及檢測混淆惡意軟件的算法的各種實(shí)施例。一般說來,計(jì)算機(jī)系統(tǒng)100包括至少一個(gè)中央處理單元(CPU) 150、內(nèi)部系統(tǒng)存儲(chǔ)器110、各種網(wǎng)絡(luò)通信接口 185以及各種內(nèi)部或外 部用戶分別的輸入和輸出設(shè)備190和195。計(jì)算機(jī)系統(tǒng)100的組件可以通過系統(tǒng)總線(未 示出)相互連接。計(jì)算機(jī)系統(tǒng)100也可以包括反惡意軟件130,所述反惡意軟件130實(shí)施此 處披露的用于分析、優(yōu)化及檢測混淆惡意軟件的算法。本領(lǐng)域的普通技術(shù)人員應(yīng)該認(rèn)識(shí)到, 此處計(jì)算機(jī)系統(tǒng)100的描繪被簡化了,并且系統(tǒng)100可以包括在其上進(jìn)行操作所必需的其 它組件。在一個(gè)示例性實(shí)施例中,處理器150可以包括運(yùn)算邏輯單元(ALU) 160、多個(gè)寄存 器170和控制單元180。ALU 160 —般用于執(zhí)行諸如加法、減法和比較這類基本算術(shù)運(yùn)算 以及依靠處理器150的特定體系結(jié)構(gòu)的各種復(fù)雜運(yùn)算。寄存器170是用于臨時(shí)存儲(chǔ)內(nèi)部 處理器操作的值的存儲(chǔ)器位置,所述內(nèi)部處理器操作的值例如為正在執(zhí)行的指令的地址以 及正在被CPU 150處理的數(shù)據(jù)。寄存器170—般用ΕΑΧ、^Χ、ECX、EDX、ESI和EDI來標(biāo) 示。寄存器170通常是32位或64位長,但可以根據(jù)特定的計(jì)算機(jī)體系結(jié)構(gòu)更短或更長, 如本領(lǐng)域技術(shù)人員已知的??刂茊卧?80通過分析和執(zhí)行軟件指令來控制處理器150的 操作。CPU 150的指令集體系結(jié)構(gòu)可以是通用RISC體系結(jié)構(gòu)(例如,MIPS、PowerPC 、 Precision Architecture 或 SPARK)、嵌入式 RISC 體系結(jié)構(gòu)(例如,ARM、Hitachi SH,MIPS 16和Thumb)、CISC體系結(jié)構(gòu)(例如,Intel 80x86、IBM 360/370和VAX)或本領(lǐng)域普通技 術(shù)人員所已知的其它類型的處理器體系結(jié)構(gòu)。在一個(gè)示例性實(shí)施例中,系統(tǒng)存儲(chǔ)器110可以包括非易失性存儲(chǔ)器(NVM) 120、 隨機(jī)存取存儲(chǔ)器(RAM) 140和各種其它類型的次級(jí)內(nèi)部或外部存儲(chǔ)設(shè)備,例如CD-ROM、 DVD-ROM、磁帶機(jī)等。NVM 120可以包括固態(tài)、磁性或光學(xué)設(shè)備、EPROM、EEPROM和快閃式存 儲(chǔ)器。NVM 120可以被用于存儲(chǔ)操作系統(tǒng)(OS) 125和各種軟件程序,包括反惡意軟件程序 130,所述反惡意軟件程序130用于根據(jù)此處披露的原理來分析及檢測系統(tǒng)100上的惡意軟 件。OS 125可以包括DOS 、Windows 、Mac 0S、Unix 、Linux 或其它類型的操作系統(tǒng), 包括多任務(wù)操作系統(tǒng)等。RAM 140可以包括靜態(tài)RAM(SRAM)、動(dòng)態(tài)RAM(DRAM)和本領(lǐng)域普通 技術(shù)人員所知道的用于存儲(chǔ)常駐程序(rimtimeprogram)和應(yīng)用數(shù)據(jù)的其它類型的易失性 存儲(chǔ)器。在一個(gè)示例性實(shí)施例中,通信接口 185可以包括各種串行或并行端口,例如USB、 FireffirePCMCIA等;有線網(wǎng)絡(luò)接口,例如電話或線纜調(diào)制解調(diào)器、以太網(wǎng)卡等;無線接 口,例如蜂窩的、Wi-Fi、Bluet00th ;或者其它無線電或光學(xué)接口。用戶輸入設(shè)備190可以 包括鼠標(biāo)、鍵盤、麥克風(fēng)、遠(yuǎn)程控制器或其它類型的控制器。用戶輸出設(shè)備195可以包括顯 示器、打印機(jī)、揚(yáng)聲器或其它類型的外部或內(nèi)部設(shè)備。通信接口 185和輸入/輸出接口 190、 195可以被用于將各種計(jì)算機(jī)程序即軟件加載到系統(tǒng)100的RAM 140中,用于對(duì)其進(jìn)行惡意 軟件分析。接口 185也能夠使計(jì)算機(jī)系統(tǒng)100和其它計(jì)算機(jī)系統(tǒng)或聯(lián)網(wǎng)的數(shù)據(jù)庫通信,其 可以提供附加的處理能力或用于惡意軟件分析的惡意軟件知識(shí)數(shù)據(jù)庫。為了利于加載到計(jì)算機(jī)系統(tǒng)100上的軟件的惡意軟件分析,根據(jù)一個(gè)示例性實(shí) 施例,系統(tǒng)可以包括反匯編程序135。反匯編程序135可以是反惡意軟件程序130的組件 (component)。反匯編程序135將加載到系統(tǒng)100上的可執(zhí)行程序轉(zhuǎn)譯為匯編語言代碼,用 于通過反惡意軟件130進(jìn)一步分析程序代碼。匯編語言是用于對(duì)計(jì)算機(jī)進(jìn)行程序設(shè)計(jì)的低 級(jí)語言。其實(shí)現(xiàn)了對(duì)特定CPU體系結(jié)構(gòu)進(jìn)行程序設(shè)計(jì)所需要的數(shù)字機(jī)器碼和其它常量的符號(hào)表示。替代地,可以使用本領(lǐng)域普通技術(shù)人員知道的其它技術(shù)將可執(zhí)行程序轉(zhuǎn)換為適合 于根據(jù)本文披露的原理對(duì)其進(jìn)行分析和優(yōu)化的其它格式或低級(jí)程序設(shè)計(jì)語言。如上所述,值得注意的是,混淆軟件使得利用諸如簽名匹配、啟發(fā)式分析以及其它 等已知的反惡意軟件技術(shù)來分析及檢測惡意軟件代碼的過程極大復(fù)雜化。圖14示出了代 碼混淆的程度和運(yùn)行在系統(tǒng)100上的一般反惡意軟件程序用以分析這類混淆代碼所花費(fèi) 的時(shí)間之間的關(guān)系的曲線圖。如圖所證,隨著代碼混淆程度的增長,分析混淆代碼的時(shí)間幾 乎呈指數(shù)增長,很快地從最小程度移動(dòng)到極大的程度,這樣無論對(duì)一般的基于PC的反惡意 軟件程序還是對(duì)于在實(shí)驗(yàn)室中使用的復(fù)雜而強(qiáng)大的反惡意軟件應(yīng)用都是反病毒軟件開發(fā) 者和其它惡意軟件專家無法接受的。圖2提供了用C++程序設(shè)計(jì)語言編寫的混淆軟件代碼的示例。具體地,函數(shù)DWORD 包含下面的混淆代碼。M[i] =D;T+ = M[i];M[i] =D;T- = M[i];在圖2的右側(cè)再現(xiàn)了 DWORD函數(shù)的編譯版本??梢杂糜?jì)算機(jī)系統(tǒng)100上任一已知 的編譯器例如Microsoft Visual C/C++編譯器或其它等來編譯該代碼。上述混淆代碼以 如下匯編語言指令表示ADD EAX,ECXSUB EAX,ECX因?yàn)樵谔幚砥?50執(zhí)行加法(ADD)和減法(SUB)操作之后,寄存器EAX的值沒有變 化,所以這段代碼被認(rèn)為是混淆的,這表示這些指令是冗余的并且它們的運(yùn)行是不必要的。 雖然這個(gè)混淆示例相對(duì)簡單,但惡意軟件中的這種和其它混淆技術(shù)的廣泛使用會(huì)極大地妨 礙反惡意軟件程序?qū)阂廛浖奶幚砗头治?。因此,為提高檢測過程的性能和效率,會(huì)期望 對(duì)混淆軟件代碼的優(yōu)化。為了實(shí)現(xiàn)這些目標(biāo),根據(jù)一個(gè)示例性實(shí)施例,計(jì)算機(jī)系統(tǒng)100包括代碼優(yōu)化器 145。代碼優(yōu)化器145可以是反惡意軟件程序130的組件。圖3a是根據(jù)一個(gè)示例性實(shí)施例 的描繪代碼優(yōu)化過程的高級(jí)示意圖。在步驟301中,由反惡意軟件程序130加載未優(yōu)化的可 執(zhí)行或?qū)ο筌浖a。在步驟301中,軟件代碼可以被分為碼組(code block) 302,303,304 等。每個(gè)碼組的大小可以在一定范圍內(nèi)變化,例如,從400字節(jié)到1000字節(jié),但是依賴于系 統(tǒng)和應(yīng)用程序需求或本領(lǐng)域技術(shù)人員知道的其它參數(shù)而變化。根據(jù)步驟301b-301c所示, 碼組被代碼優(yōu)化器145串行(或并行)優(yōu)化。因?yàn)閮?yōu)化后的模塊包含較少的指令,所以其 一般較小,并且因而比原始未優(yōu)化的代碼要容易通過反惡意軟件程序130來分析。在一個(gè) 示例性實(shí)施例中,可以在正在生成優(yōu)化碼組時(shí)以實(shí)時(shí)的方式針對(duì)惡意軟件來分析碼組,從 而在整個(gè)軟件代碼被優(yōu)化之前,一旦反惡意軟件程序130確定代碼是惡意的(或良性的), 它就可以終止軟件代碼的分析,這節(jié)省了系統(tǒng)資源和時(shí)間。圖3b示出了根據(jù)一個(gè)示例性實(shí)施例的代碼優(yōu)化過程的更詳細(xì)的流程圖。在步驟 310中,可執(zhí)行程序文件130被加載到計(jì)算機(jī)系統(tǒng)100上,以由反惡意軟件程序來分析。在 步驟320中,反惡意軟件程序?qū)⒓虞d的可執(zhí)行軟件代碼分成若干碼組,并且在步驟330中,
8將碼組加載到系統(tǒng)100的RAM 140中的一個(gè)或多個(gè)存儲(chǔ)器緩沖區(qū)。在步驟340中,反匯編 程序135將每個(gè)碼組反匯編為匯編語言指令或本領(lǐng)域普通技術(shù)人員已知的其它低級(jí)程序 設(shè)計(jì)語言。在步驟350中,代碼優(yōu)化器145基本上以實(shí)時(shí)的方式分析每個(gè)碼組并且用簡單 (或基本的)指令替換復(fù)雜的匯編指令,簡單(或基本的)指令例如為ADD、SUB、M0V、0R和 其它基本的匯編指令。例如,復(fù)雜的PUSH EAX指令可以被拆分成如下所示的基本指令集SUB ESP, 4M0V[ESP], EAX在步驟360中,代碼優(yōu)化器145可以為一個(gè)或多個(gè)碼組構(gòu)造簡化的軟件代碼的數(shù) 據(jù)流模型。數(shù)據(jù)流模型確定簡化的軟件代碼的代碼元之間的依賴關(guān)系和相互關(guān)系。圖5示 出了數(shù)據(jù)流模型的示例。在步驟365和370中,代碼優(yōu)化器145可以分析數(shù)據(jù)流模型,在其 中識(shí)別混淆代碼并且優(yōu)化數(shù)據(jù)流模型中的混淆代碼。一般而言,優(yōu)化過程包括分析數(shù)據(jù)流 模型中的代碼元(codeelement)之間的依賴關(guān)系和相互關(guān)系。分析的代碼元包括在一個(gè)或 多個(gè)碼組中一個(gè)或多個(gè)匯編指令的例如X0R、ADD、INC等操作和操作數(shù),S卩,被操作的值。數(shù) 據(jù)流模型幫助優(yōu)化器145執(zhí)行這類軟件代碼的分析。在一個(gè)示例性實(shí)施例中,優(yōu)化器145 可以為每個(gè)碼組構(gòu)造單獨(dú)的數(shù)據(jù)流模型。在另一個(gè)實(shí)施例中,可以構(gòu)造合并了來自若干碼 組的指令的公共數(shù)據(jù)流模型。然而在另一個(gè)實(shí)施例中,代碼優(yōu)化器145可以不使用任何數(shù) 據(jù)流模型而直接地分析并優(yōu)化簡化的軟件代碼。在步驟380中,反惡意軟件程序?qū)⒂蓛?yōu)化器145提供的優(yōu)化的軟件代碼和原始的 未被優(yōu)化的代碼相比較,來度量代碼混淆的程度。例如,反惡意軟件程序可以比較原始反匯 編的軟件代碼中的指令數(shù)目和優(yōu)化的軟件代碼中的指令數(shù)目。基于代碼混淆的程度,反惡 意軟件程序可以判定分析的軟件是否為惡意的。舉例來說,如果軟件代碼嚴(yán)重地被混淆,例 如,超過50%的代碼是混淆的,那么,反惡意軟件程序由于該軟件明顯試圖使用代碼混淆來 隱藏它的功能性而宣布該軟件是惡意的。另外一方面,如果代碼不是混淆的或僅僅輕度地 混淆,例如,低于10%,則反惡意軟件程序可以宣布軟件是非惡意的。在步驟385中,根據(jù)一個(gè)示例性實(shí)施例,反惡意軟件程序可以基于代碼混淆的程 度來決定是否需要對(duì)軟件代碼進(jìn)行附加的惡意分析。在步驟390中,反惡意軟件程序可以 進(jìn)一步使用常規(guī)的惡意軟件檢測技術(shù),例如簽名匹配、啟發(fā)式分析或其它技術(shù),來分析具有 極大百分比的混淆代碼的軟件代碼。為了這樣的目的,反惡意軟件程序可以使用C++、Java 或其它類型的編譯程序重新編譯優(yōu)化的軟件代碼,并且提交重新編譯的結(jié)果,用于進(jìn)一步 的分析。如果使用簽名匹配,則將優(yōu)化的軟件代碼和由惡意軟件數(shù)據(jù)庫中的反惡意軟件程 序維護(hù)的已知病毒代碼詞典相比較。如果使用啟發(fā)式分析,則可以針對(duì)惡意行為的模式 來仿真和分析優(yōu)化的軟件。在于2007年10月2日提交的題為“SYSTEM AND METHOD FOR DETECTING MULTI-COMPONENTMALWARE”的第11/866,302號(hào)共同所有的美國專利申請(qǐng)中披露 了啟發(fā)式分析的示例性技術(shù),在此通過援引的方式將其并入本申請(qǐng)中。替代地或附加地,優(yōu) 化的軟件代碼可以被發(fā)送給一位惡意軟件專家或?qū)<医M來復(fù)查。在于2008年11月26日 提交的題為 “SYSTEM AND METHOD FOR COMPUTERMALffARE DETECTION” 的第 10/323,835 號(hào) 共同所有的美國專利申請(qǐng)中披露了專家分析的示例性技術(shù),在此通過援引的方式將其并入 本申請(qǐng)中。如果在優(yōu)化的軟件代碼中找到惡意軟件,則原始軟件程序可以被分類為病毒、蠕 蟲、特洛伊木馬等,并且在步驟395中將其從系統(tǒng)中隔離或除去。應(yīng)當(dāng)認(rèn)識(shí)到,不論使用哪種惡意軟件檢測技術(shù),優(yōu)化的軟件代碼都較易于分析。圖4示出了根據(jù)各種示例性實(shí)施例的可以由優(yōu)化器145優(yōu)化的若干類型的混淆代 碼。如圖所示,優(yōu)化器145可以執(zhí)行下列的優(yōu)化過程除去死代碼(dead Code)410,優(yōu)化分 布式計(jì)算420,逆向操作430,常量計(jì)算440和轉(zhuǎn)移指令450。它還可以優(yōu)化存儲(chǔ)器調(diào)用460、 標(biāo)志符操作470以及分支和循環(huán)指令480。由優(yōu)化器145來優(yōu)化這些指令的順序僅僅是說 明性的,并且可以以不同的順序來執(zhí)行優(yōu)化。同樣地,依據(jù)系統(tǒng)的應(yīng)用程序的需要,優(yōu)化器 145可以選擇不執(zhí)行某些描述的優(yōu)化過程并且用其它已知的優(yōu)化技術(shù)來替代執(zhí)行。上述優(yōu)化過程的示例將在下面的圖5-13和下列未優(yōu)化的、簡化的軟件代碼中更 詳細(xì)地描述。XOR EAX, EAXADD ECX,2500hOR EAX, 250hADD EAX,80hINC ECXMOV ECX,EAXADD ECX,EDXADD ECX,30hSUB ECX,EDXMOV EAX, IOOhSUB ECX,EAX圖5示出了上述軟件代碼的數(shù)據(jù)流模型500的示例,該數(shù)據(jù)流模型500的示例可 以由代碼優(yōu)化器145來構(gòu)造。模型500的指令間的依賴關(guān)系和相互關(guān)系的分析指出軟件代 碼包括死代碼510,該死代碼510并不參與軟件的執(zhí)行而僅僅浪費(fèi)系統(tǒng)的資源。死代碼510 對(duì)應(yīng)于如下的指令A(yù)DD ECX,2500hINC ECX優(yōu)化器145會(huì)識(shí)別這些指令是死代碼,這是因?yàn)樗鼈兒竺娓S著如下的MOVE操 作,該MOVE操作清除ADD和INC指令的結(jié)果MOV ECX,EAX因此,優(yōu)化器145可以從數(shù)據(jù)流模型500中除去ADD和INC指令。圖6示出了模型500中的分布式計(jì)算的示例,其包括常量(在圖中圈出)的加法 (ADD)和減法(SUB),并且按如下所示被復(fù)制ADD EAX,80hMOV ECX,EAXADD ECX,30hSUB ECX, IOOh這些對(duì)常量的分布式計(jì)算可以預(yù)先由優(yōu)化器145計(jì)算,從而進(jìn)一步優(yōu)化軟件代碼 500。圖7示出了模型500中變量(在圖中圈出)的逆向計(jì)算的示例。逆向計(jì)算包括如下類型的指令A(yù) = A+BA = A-B換句話說,逆向計(jì)算是不改變變量A的值的計(jì)算。在圖7中,這樣的計(jì)算被圈出并 且包括如下的ADD和SUB指令A(yù)DD ECX,EDXSUB ECX,EDX代碼優(yōu)化器145可以從軟件代碼500中完全除去這些指令。圖8示出了常量的計(jì)算的示例,其可以由優(yōu)化器145預(yù)先計(jì)算以便進(jìn)一步簡化軟 件代碼。這些操作可以包括,但不限于如下描述的MOV、ADD和SUB操作MOV EAX,15hADD EAX,IOOhSUB EAX, 80h圖9示出了移動(dòng)操作的示例,其包括可以將A = B和C = A這類指令優(yōu)化為C = B的指令的優(yōu)化。在圖9中提供了這些指令的示例MOV EAX,EDXMOV ECX,EAX通過分析上述指令間的依賴關(guān)系和相互關(guān)系,優(yōu)化器145可以將它們替換為如下 指令MOV ECX,EDX應(yīng)當(dāng)認(rèn)識(shí)到,僅當(dāng)寄存器EAX的值將不在程序中的任何其它地方后繼使用時(shí),才 執(zhí)行優(yōu)化。然而,如果它被用于其它別的地方,則優(yōu)化的結(jié)果將如下所示MOV EAX,EDXMOV ECX,EDX圖10示出了將= B和C = 這類存儲(chǔ)器調(diào)用指令優(yōu)化為C = B的存儲(chǔ)器調(diào) 用指令的優(yōu)化。這些指令的優(yōu)化所基于的原理是,如果發(fā)生訪問存儲(chǔ)器的數(shù)據(jù)流模型中的 節(jié)點(diǎn)訪問相同的存儲(chǔ)器位置,則在這些節(jié)點(diǎn)之間創(chuàng)建新的連接來訪問存儲(chǔ)器。在圖10中, 這樣的存儲(chǔ)器調(diào)用操作按如下指令描述PUSH EAXPOP EAX這些指令盡管被順次執(zhí)行,但并不影響寄存器EAX的值。圖11示出了標(biāo)志符指令集的優(yōu)化的示例,例如如下指令STCADC EAX, 0其可以被描述為如下優(yōu)化操作ADD EAX, 1圖12示出了分支和循環(huán)指令的優(yōu)化的示例。一個(gè)這樣的示例可以包括,如果已知 始終執(zhí)行一條件,則將JZ(Jump-If-Zero)轉(zhuǎn)移指令轉(zhuǎn)換為一個(gè)無條件轉(zhuǎn)移JMP。因此,JZ 指令if⑴{···}可以被優(yōu)化成{···}指令。在圖12中,該優(yōu)化以如下的方式描述
CMP 0,0JZ [token]其可以被優(yōu)化成單一跳轉(zhuǎn)(Jump)指令JMP [token]其中[token]是計(jì)算機(jī)程序代碼中的指針的地址。應(yīng)當(dāng)認(rèn)識(shí)到,上述所有的代碼優(yōu)化的示例僅僅是說明性的,整個(gè)優(yōu)化算法可以基 于如下的規(guī)則A+0 = AA"A = 0圖13示出了代碼500中上面描述的優(yōu)化算法的結(jié)果。如上所示,原始的未優(yōu)化的 代碼如下XOR EAX,EAXADD ECX,2500hOR EAX,250hADD EAX,80hINC ECXMOV ECX, EAXADD ECX,EDXADD ECX,30hSUB ECX,EDXMOV EAX, IOOhSUB ECX,EAX其數(shù)據(jù)流模型1301可以在圖13中確定。優(yōu)化過程的結(jié)果被確定為優(yōu)化的數(shù)據(jù)流 模型1302,對(duì)應(yīng)于如下代碼MOV ECX,200hMOV EAX,IOOh作為優(yōu)化的結(jié)果,軟件代碼的大小可以被減少多達(dá)85%。依照本文披露的,其中描述的組件、處理步驟和/或數(shù)據(jù)結(jié)構(gòu)可以使用各種類型 的操作系統(tǒng)、計(jì)算平臺(tái)、計(jì)算機(jī)程序和程序設(shè)計(jì)語言來實(shí)現(xiàn)。此外,本領(lǐng)域的普通技術(shù)人員 應(yīng)該認(rèn)識(shí)到也可以使用較少的通用類型的設(shè)備,例如硬件、現(xiàn)場可編程門陣列(FPGA)、專 用集成電路(ASIC)等,并且可以在不脫離本發(fā)明披露的精神和范圍的情況下使用。其中 計(jì)算機(jī)或機(jī)器實(shí)現(xiàn)包含一連串處理步驟的方法并且那些處理步驟可以作為一連串機(jī)器可 讀的指令存儲(chǔ),它們可以存儲(chǔ)在有形的媒體上,例如計(jì)算機(jī)存儲(chǔ)器設(shè)備(例如,ROM、PROM、 EEPR0M、閃存儲(chǔ)器等等)、磁存儲(chǔ)器媒介(例如,磁帶、磁盤驅(qū)動(dòng)器等等)、光存儲(chǔ)器媒介(例 如,CD-ROM、DVD-ROM等等)和其它程序存儲(chǔ)器類型。雖然本文已經(jīng)結(jié)合各種惡意軟件檢測技術(shù)描述了軟件去除混淆(deobfuscation) 系統(tǒng)和方法的示例性實(shí)施例,但本文闡明的軟件解混淆的原理并不限于惡意軟件檢測范 例,并且由受益于本發(fā)明的本領(lǐng)域技術(shù)人員容易地通過恰當(dāng)?shù)膶?shí)驗(yàn)來實(shí)施和應(yīng)用在其它應(yīng) 用程序和技術(shù)領(lǐng)域。
12
此外,應(yīng)當(dāng)理解,本文使用的措詞或術(shù)語是為描述說明的目的而并非限制,從而本 說明書的措詞或術(shù)語由本領(lǐng)域技術(shù)人員根據(jù)本文提出的示教和指導(dǎo)結(jié)合相關(guān)領(lǐng)域的已知 技術(shù)來解釋。此外,說明書或權(quán)利要求中的任一術(shù)語并非意圖歸于非尋常的或特定的意義, 除非明確這樣闡明。本文所披露的各種實(shí)施例包含本文所例示說明的已知組件的當(dāng)前和未 來獲知的等同物。而且,雖然已經(jīng)示出和描述了實(shí)施例和應(yīng)用,但明顯地,從本發(fā)明受益的 本領(lǐng)域技術(shù)人員在不脫離本發(fā)明的保護(hù)范圍的情況下可以做出比以上所描述的更多的修 改。
權(quán)利要求
一種用于惡意軟件檢測的由計(jì)算機(jī)執(zhí)行的方法,包括將至少一部分軟件代碼加載到系統(tǒng)存儲(chǔ)器中;將加載的軟件代碼轉(zhuǎn)換為低級(jí)程序設(shè)計(jì)語言;將轉(zhuǎn)換的代碼中的復(fù)雜指令簡化為基本指令;構(gòu)造簡化的軟件代碼的數(shù)據(jù)流模型;分析所述數(shù)據(jù)流模型中代碼元的依賴關(guān)系和相互關(guān)系來識(shí)別其中的混淆軟件代碼;優(yōu)化所述數(shù)據(jù)流模型中的一個(gè)或多個(gè)識(shí)別的混淆代碼;和基于優(yōu)化的結(jié)果確定軟件代碼是否為惡意的。
2.如權(quán)利要求1所述的方法,其中,軟件代碼包括可執(zhí)行軟件代碼。
3.如權(quán)利要求1所述的方法,其中,將至少一部分軟件代碼加載到系統(tǒng)存儲(chǔ)器中的步 驟包括將軟件代碼劃分為多個(gè)碼組;和將一個(gè)或多個(gè)碼組加載到一個(gè)或多個(gè)存儲(chǔ)器緩沖區(qū)中。
4.如權(quán)利要求3所述的方法,其中對(duì)兩個(gè)或更多碼組并行執(zhí)行所述轉(zhuǎn)換、簡化、構(gòu)造、 分析和優(yōu)化的步驟。
5.如權(quán)利要求1所述的方法,其中,將加載的軟件代碼轉(zhuǎn)換為低級(jí)程序設(shè)計(jì)語言的步 驟包括將所述軟件代碼反匯編為匯編語言指令。
6.如權(quán)利要求1所述的方法,其中,優(yōu)化一個(gè)或多個(gè)混淆代碼的步驟包括一個(gè)或多個(gè) 下述操作除去死代碼、優(yōu)化分布式計(jì)算、優(yōu)化逆向操作、優(yōu)化常量計(jì)算、優(yōu)化轉(zhuǎn)移指令、優(yōu) 化存儲(chǔ)器調(diào)用、優(yōu)化標(biāo)志符操作以及優(yōu)化分支和循環(huán)指令。
7.如權(quán)利要求1所述的方法,其中,基于優(yōu)化的結(jié)果確定軟件代碼是否為惡意的步驟 包括將優(yōu)化的軟件代碼和原始未優(yōu)化的軟件代碼相比較;和 基于比較的結(jié)果確定代碼混淆的程度。
8.如權(quán)利要求7所述的方法,其中,基于優(yōu)化的結(jié)果確定軟件代碼是否為惡意的步驟 進(jìn)一步包括基于代碼混淆的程度執(zhí)行一個(gè)或多個(gè)下列步驟使用簽名匹配來分析優(yōu)化的軟件代碼; 使用啟發(fā)式分析來分析優(yōu)化的軟件代碼;和 使用軟件代碼的人類專家復(fù)查來分析優(yōu)化的軟件代碼。
9.一種用于惡意軟件檢測的系統(tǒng),該系統(tǒng)包括 用于存儲(chǔ)計(jì)算機(jī)可執(zhí)行軟件代碼的系統(tǒng)存儲(chǔ)器;和 處理器,其被配置為將至少一部分所述可執(zhí)行軟件代碼加載到所述系統(tǒng)存儲(chǔ)器中; 將加載的軟件代碼轉(zhuǎn)換為低級(jí)程序設(shè)計(jì)語言; 將轉(zhuǎn)換的代碼中的復(fù)雜指令簡化為基本指令; 構(gòu)造簡化的軟件代碼的數(shù)據(jù)流模型;分析所述數(shù)據(jù)流模型中代碼元的依賴關(guān)系和相互關(guān)系來識(shí)別其中的混淆軟件代碼; 優(yōu)化所述數(shù)據(jù)流模型中一個(gè)或多個(gè)識(shí)別的混淆代碼;和 基于優(yōu)化的結(jié)果確定軟件代碼是否為惡意的。
10.如權(quán)利要求9所述的系統(tǒng),其中,為了將至少一部分所述軟件代碼加載到所述系統(tǒng) 存儲(chǔ)器中,所述處理器被進(jìn)一步配置為將軟件代碼劃分為多個(gè)碼組;和將一個(gè)或多個(gè)碼組加載到一個(gè)或多個(gè)存儲(chǔ)器緩沖區(qū)中。
11.如權(quán)利要求10所述的系統(tǒng),其中,所述處理器被進(jìn)一步配置為并行地轉(zhuǎn)換、簡化、 構(gòu)造、分析和優(yōu)化兩個(gè)或更多的碼組。
12.如權(quán)利要求9所述的系統(tǒng),其中,為了將加載的軟件代碼轉(zhuǎn)換為低級(jí)程序設(shè)計(jì)語 言,所述處理器被進(jìn)一步配置為將所述軟件代碼反匯編為匯編語言指令。
13.如權(quán)利要求9所述的系統(tǒng),其中,所述混淆軟件代碼包括一個(gè)或多個(gè)下述項(xiàng)目死 代碼、分布式計(jì)算、逆向操作、常量計(jì)算、轉(zhuǎn)移指令、存儲(chǔ)器調(diào)用、標(biāo)志符操作以及分支和循 環(huán)指令。
14.如權(quán)利要求9所述的系統(tǒng),其中,為了確定所述軟件代碼是否為惡意的,所述處理 器被進(jìn)一步配置為將優(yōu)化的軟件代碼和原始未優(yōu)化的軟件代碼相比較;和 基于比較結(jié)果確定代碼混淆的程度。
15.如權(quán)利要求14所述的系統(tǒng),其中,所述處理器被進(jìn)一步配置為基于代碼混淆的程 度執(zhí)行一個(gè)或多個(gè)下列步驟使用簽名匹配來分析優(yōu)化的軟件代碼; 使用啟發(fā)式分析來分析優(yōu)化的軟件代碼;和 將優(yōu)化的軟件代碼提供給人類專家來復(fù)查。
16.一種用于惡意軟件檢測的由計(jì)算機(jī)執(zhí)行的方法,該方法包括 將至少一部分軟件代碼加載到系統(tǒng)存儲(chǔ)器中;將加載的軟件代碼轉(zhuǎn)換為低級(jí)程序設(shè)計(jì)語言; 將轉(zhuǎn)換的代碼中的復(fù)雜指令簡化為基本指令;分析簡化的軟件代碼中的指令間的依賴關(guān)系和相互關(guān)系來識(shí)別其中的混淆軟件代碼;優(yōu)化簡化的軟件代碼中一個(gè)或多個(gè)識(shí)別的混淆代碼;和使用簽名匹配或啟發(fā)式分析惡意軟件檢測技術(shù)來分析優(yōu)化的軟件代碼,以確定軟件代 碼是否為惡意的。
17.如權(quán)利要求16所述的方法,其中,將至少一部分軟件代碼加載到系統(tǒng)存儲(chǔ)器中的 步驟包括將軟件代碼劃分為多個(gè)碼組;和將一個(gè)或多個(gè)碼組加載到一個(gè)或多個(gè)存儲(chǔ)器緩沖區(qū)中。
18.如權(quán)利要求16所述的方法,其中,將加載的軟件代碼轉(zhuǎn)換為低級(jí)程序設(shè)計(jì)語言的 步驟包括將所述軟件代碼反匯編為匯編語言指令。
19.如權(quán)利要求16所述的方法,其中,優(yōu)化一個(gè)或多個(gè)混淆代碼的步驟包括一個(gè)或多 個(gè)下述操作除去死代碼、優(yōu)化分布式計(jì)算、優(yōu)化逆向操作、優(yōu)化常量計(jì)算、優(yōu)化轉(zhuǎn)移指令、 優(yōu)化存儲(chǔ)器調(diào)用、優(yōu)化標(biāo)志符操作以及優(yōu)化分支和循環(huán)指令。
20.如權(quán)利要求16所述的方法,其中,分析優(yōu)化的軟件代碼的步驟包括重新編譯所述優(yōu)化的軟件代碼、以及使用簽名匹配或啟發(fā)式分析惡意軟件檢測技術(shù)來分析重新編譯的優(yōu) 化的軟件代碼。
全文摘要
本發(fā)明披露了一種用于有效且可靠地分析、優(yōu)化及檢測混淆惡意軟件的系統(tǒng)、方法和計(jì)算機(jī)程序產(chǎn)品。一個(gè)披露的用于惡意軟件檢測的示例性方法包括將可執(zhí)行軟件代碼加載到計(jì)算機(jī)系統(tǒng)中并且將軟件代碼反匯編為匯編語言或其它低級(jí)程序設(shè)計(jì)語言。然后,該方法進(jìn)行簡化復(fù)雜的匯編指令并構(gòu)造簡化的軟件代碼的數(shù)據(jù)流模型。分析數(shù)據(jù)流模型的代碼元的依賴關(guān)系和相互關(guān)系來識(shí)別其中的混淆軟件代碼。然后優(yōu)化識(shí)別的混淆代碼。基于優(yōu)化的結(jié)果,對(duì)于軟件代碼是否為惡意的和/或是否有必要對(duì)優(yōu)化的軟件代碼進(jìn)行進(jìn)一步反惡意軟件分析做出判定。
文檔編號(hào)G06F21/22GK101901322SQ201010203038
公開日2010年12月1日 申請(qǐng)日期2010年6月18日 優(yōu)先權(quán)日2009年7月10日
發(fā)明者Y·戈洛夫金 馬克西姆 申請(qǐng)人:卡巴斯基實(shí)驗(yàn)室封閉式股份公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1