專利名稱:發(fā)現(xiàn)計算機程序的惡意行為的方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機防護方法和裝置,本發(fā)明尤其涉及一種根據(jù)計 算機程序的行為特征來即時準確地發(fā)現(xiàn)計算機程序的惡意行為的方 法和裝置。
背景技術(shù):
自1983年世界上第一個計算機病毒出現(xiàn)以來,在二十多年的時 間里,計算機病毒隨著計算機及網(wǎng)絡(luò)技術(shù)的發(fā)展而不斷演化更新。如 今,諸如木馬、蠕蟲和后門程序的計算機病毒己經(jīng)不僅能夠破壞計算 機系統(tǒng),還能夠盜取用戶的賬戶密碼等重要信息,從而嚴重威脅人們 對計算機的正常使用,甚至可能造成巨大的經(jīng)濟損失。由此,如何防 范病毒入侵已然成為人們最為關(guān)注的一個焦點。
防范病毒侵襲的一個重要步驟是在病毒實施侵害之前識別出病 毒,即查毒,從而及時采取相應(yīng)的措施遏制其進一步侵害計算機系統(tǒng)。 目前的殺毒軟件普遍使用的査毒方法為特征碼掃描。也就是說,利用 從病毒樣本中提取出來的特征碼對被查文件進行掃描,從而發(fā)現(xiàn)并清 除感染病毒的文件。
然而,這種傳統(tǒng)的查毒方法只有在捕獲病毒樣本之后才能提取病 毒的特征碼,這導(dǎo)致了查毒和殺毒將永遠滯后于病毒的發(fā)生。例如, 當出現(xiàn)新病毒時,即使用戶安裝了這種殺毒軟件,也會受到侵害,只 有在升級殺毒軟件、更新病毒庫之后才能得以解決,而這已經(jīng)嚴重滯 后于病毒的發(fā)生。
而今,新的未知病毒和原有病毒的新變種層出不窮,同時還出現(xiàn) 了一些針對這種傳統(tǒng)方法的反査毒技術(shù)。這些都使得這種傳統(tǒng)查毒方 法的滯后缺點越來越顯著,而且依賴于這種傳統(tǒng)方法的實時監(jiān)控程序
也同于無形。
針對傳統(tǒng)特征碼掃描的缺點,近期,反毒領(lǐng)域提出基于病毒程序 行為特征的計算機防護方法。在這種方法中,通過攔截某一個計算機 程序的動作來分析該動作是否是一個病毒程序發(fā)起的。這種計算機防 護方法能夠在一定程度上識別出原有病毒的新變種和一些相對簡單 的新病毒。但是,對于一些通過調(diào)用系統(tǒng)程序或安全程序來實現(xiàn)侵襲 行為的隱蔽性好的病毒而言,這種防護方法的成功率還是比較低的。
例如,近期比較流行的后門程序"灰鴿子"就是一種隱蔽性較好
的病毒?;银澴拥闹鞒绦騝AA.exe運行后,首先將自己復(fù)制到系統(tǒng)目 錄c:VwindowsX下,將副本重命名為wservices.exe,并且在將該副本 wservices.exe啟動后A.exe退出。wservices.exe啟動后,直接啟動系 統(tǒng)所帶的iexplore.exe (系統(tǒng)文件),然后將wservices.exe進程映像寫 入到iexplore.exe進程空間并獲得執(zhí)行權(quán)限,從而利用iexplore.exe進 行侵害。
在灰鴿子程序中,病毒程序隱藏在正常的系統(tǒng)程序iexplore.exe 中運行,病毒在實現(xiàn)侵害的過程中先后涉及三個進程A.exe、 wservices.exe和iexplore.exe,而且在真正的侵害行為執(zhí)行前病毒的主 程序A.exe己經(jīng)結(jié)束。由此,灰鴿子程序可以很好地欺騙查毒軟件對 動作的監(jiān)視,從而成功地將病毒代碼隱藏在iexplore.exe進程空間中。 在這種情況下,采用現(xiàn)有的這種簡單的行為動作分析方法,就很難識 別出這種隱蔽性好的病毒程序。
目前,隨著計算機技術(shù)的發(fā)展,如灰鴿子這樣的隱蔽性好的病毒 程序越來越多,因此需要一種新的計算機防護方法來識別出這種通過 開啟多個進程來實現(xiàn)侵襲的惡意程序。
發(fā)明內(nèi)容
本發(fā)明的一個目的在于提出一種發(fā)現(xiàn)計算機程序的惡意行為的 方法和裝置。利用本發(fā)明提出的方法和裝置可以識別出涉及多個進程
的惡意程序的行為,從而追根溯源找出哪些程序?qū)儆诓《境绦颉?br>
本發(fā)明的另一個目的在于提出一種發(fā)現(xiàn)計算機程序的惡意行為 的方法和裝置,使用該方法和裝置可以有效地搜索出釋放病毒的程 序。
為了實現(xiàn)上述目的,本發(fā)明提出的發(fā)現(xiàn)計算機程序的惡意行為的 方法包括監(jiān)視計算機程序執(zhí)行的動作;在被監(jiān)視迸程集合庫中,搜
索與所監(jiān)視的動作相關(guān)的一個進程集合,所述進程集合至少包括在創(chuàng)
建關(guān)系上相互關(guān)聯(lián)的至少一個可疑進程的信息;如果搜索到所述與所 監(jiān)視的動作相關(guān)的進程集合,則根據(jù)所述搜索出的進程集合中記載的 信息,通過關(guān)聯(lián)性分析判斷所監(jiān)視動作是否屬于惡意行為。
根據(jù)本發(fā)明提出的方法,由于使用了進程集合的概念,通過創(chuàng)建 或調(diào)用多個進程來進行病毒侵襲的惡意程序能夠被及時準確地識別 出來,從而能夠及時發(fā)現(xiàn)隱蔽性強的惡意程序,如灰鴿子后門程序。
此外,為了實現(xiàn)上述目的,本發(fā)明還提出上述方法還包括接收 殺毒引擎査到病毒的通知,并獲得查到的病毒文件的信息;以及所述 搜索步驟包括搜索進程集合的歷史記錄中是否包含所述查到的病毒 文件的信息的進程集合;如果搜到,則可找到釋放病毒的進程。
本發(fā)明提出的上述方法將查毒引擎的查毒結(jié)果與進程行為監(jiān)視 相結(jié)合,從而能夠更加準確高效地發(fā)現(xiàn)惡意行為。
此外,本發(fā)明還提出了與上述方法相對應(yīng)的計算機保護裝置。
圖1示出根據(jù)本發(fā)明一個實施例的發(fā)現(xiàn)程序惡意行為裝置的總 體框圖2示出根據(jù)本發(fā)明一個實施例的進程集合建立和維護過程; 圖3示出根據(jù)本發(fā)明一個實施例的進程過濾過程; 圖4示出根據(jù)本發(fā)明一個實施例的利用進程集合來確定釋放病 毒文件的進程的過程;
圖5示出根據(jù)本發(fā)明一個實施例的利用進程集合來確定文件操《
作中的惡意行為的過程。
圖6示出根據(jù)本發(fā)明一個實施例的利用進程集合來確定注冊表 操作中的惡意行為的過程;
圖7示出根據(jù)本發(fā)明一個實施例的利用進程集合來確定系統(tǒng)調(diào) 用中的惡意行為的過程;
圖8示出根據(jù)本發(fā)明一個實施例的利用進程集合來確定程序的 惡意行為的另一個示例性過程。
具體實施例方式
以下將結(jié)合具體實施例對本發(fā)明提出的發(fā)現(xiàn)計算機程序的惡意 行為的方法和裝置進行詳細地描述。為了便于理解,在以下實施例中, 僅以Windows操作系統(tǒng)為例進行描述。但是,本領(lǐng)域技術(shù)人員可以 理解的是本發(fā)明的思想和精神還可應(yīng)用于其它計算機系統(tǒng)中,并不局 限于Windows操作系統(tǒng)。
如前述的"灰鴿子"程序,現(xiàn)今的病毒或間諜軟件已經(jīng)不再是在 單進程中完成對計算機的侵襲,而是要在創(chuàng)建和/或結(jié)束多個進程的 過程中實施惡意動作,從而它們更容易蒙騙過殺毒軟件的監(jiān)視。
此外,通過分析現(xiàn)今的眾多計算機病毒程序、間諜軟件還可以發(fā)
現(xiàn)惡意程序可能是由一些基本的惡意行為要素構(gòu)成的,而今不僅一
個完整的惡意程序可能涉及多個進程,這些惡意行為要素本身的實現(xiàn) 也可能涉及不止一個進程。以下示例性地列出了一些通過分析抽象出 的惡意行為要素,但本發(fā)明并不限于此。
釋放病毒文件指一個進程直接創(chuàng)建了 (將正常文件修改為)一 個己經(jīng)能夠被反病毒引擎識別的計算機病毒。 一個病毒文件在本地計 算機生成時,其直接創(chuàng)建者有很高的幾率為病毒釋放者、下載者。
自我復(fù)制指一個進程直接或間接的創(chuàng)建一個副本。這個副本可 能是惡意程序A直接創(chuàng)建的,也可能是惡意程序A通過調(diào)用其它安
全程序,如SHELL程序來復(fù)制的。
自修改的自我復(fù)制指一個進程創(chuàng)建或修改了一個應(yīng)用程序,并
且修改后的應(yīng)用程序的入口點所在的代碼區(qū)域和該進程對應(yīng)程序文 件的入口點所在的代碼區(qū)域相同,例如,"熊貓燒香"病毒。
釋放程序文件;指一個進程直接釋放非當前進程副本的程序文 件,程序文件可以是可執(zhí)行文件(EXE)也可以是動態(tài)連接庫(DLL)。
啟動自釋放程序指一個進程直接或間接地運行一個程序文件, 該程序文件可以是該進程或者該進程相關(guān)進程所創(chuàng)建的。例如,惡意 程序A釋放程序B,并且調(diào)用SHELL啟動程序B。
建立自啟動關(guān)聯(lián)指一個進程直接或間接的建立或修改自啟動項 目(如注冊表中的啟動項),以使得該進程的程序文件或者相關(guān)的程 序文件能夠被系統(tǒng)自動啟動。這里,建立自啟動項的進程程序可能是 惡意程序A,也可能是系統(tǒng)中己經(jīng)存在的services.exe。
安裝自釋放服務(wù)指一個進程直接或間接安裝一個系統(tǒng)服務(wù),例 如,惡意程序A會釋放幾個可執(zhí)行文件,并且將這些可執(zhí)行文件注 冊為服務(wù)。
加載自釋放驅(qū)動指一個進程直接或間接加載驅(qū)動程序,該驅(qū)動 程序是由加載進程直接或間接創(chuàng)建的。例如惡意程序A釋放驅(qū)動 程序B,將該驅(qū)動程序B注冊為服務(wù)啟動方式,并且由系統(tǒng)中已經(jīng)存 在的進程services.exe加載該驅(qū)動程序B。
結(jié)束進程指一個進程直接或間接的結(jié)束另外一個正常進程。同
樣,結(jié)束進程的發(fā)起者可能是惡意程序A,也可能是惡意程序A調(diào) 用操作系統(tǒng)提供的結(jié)束進程工具(例如Windows系統(tǒng)中的 Taskkill.exe)。
創(chuàng)建遠程線程指一個進程直接或間接在其他進程空間內(nèi)創(chuàng)建一 個遠程線程,以此方法入侵其他進程。
模擬輸入(鍵盤鼠標等)指一個進程直接或間接對其它進程的
窗口進行模擬輸入,例如,不停發(fā)送QQ消息。
發(fā)送WINDOWS消息指一個進程為了獲得窗口內(nèi)容而直接或 間接對其它進程的窗口發(fā)送Windows消息WM—GETTEXT。
掛接自釋放程序鉤子指一個進程掛接全局的消息鉤子,該消息 鉤子對應(yīng)的動態(tài)連接庫是由該進程直接或間接創(chuàng)建的。例如惡意進
程A釋放擁有鉤子處理函數(shù)的動態(tài)連接庫B和掛接全局鉤子的程序 C,并運行程序C,程序C以動態(tài)連接庫B中的鉤子處理函數(shù)為參數(shù) 掛接全局鉤子。
基于以上總結(jié)出的幾種惡意行為要素不難看出,這些行為要素中 的每一個都有可能涉及多個先后創(chuàng)建的相關(guān)進程。在這種情況下,通
過攔截單個進程中的動作就很難準確地識別出這些惡意行為。
為此,本發(fā)明提出了被監(jiān)視進程集合的概念。簡便起見,以下將 "被監(jiān)視進程集合"簡稱為"進程集合",但在本文中提到的進程集 合均指由防護軟件監(jiān)視的進程集合。
根據(jù)本發(fā)明的實施例,每個進程集合包含在創(chuàng)建關(guān)系上相互關(guān)聯(lián) 的一個或多個可疑進程的信息。以上述"結(jié)束進程"的惡意行為為例, 假設(shè)惡意進程A.exe己經(jīng)在一個進程集合a中,進程A.exe調(diào)用了操 作系統(tǒng)提供的工具Taskkill.exe來結(jié)束另一個正常進程,即建立了一 個子進程Taskkill.exe。此時,父進程A.exe和子進程Taskkill.exe存 在直接關(guān)系,二者共同完成了 "故意結(jié)束其它進程"的行為。由此, 根據(jù)本發(fā)明的原理,子進程Taskkill.exe也會包含在進程集合a中。由 此可見,進程集合a在邏輯上體現(xiàn)了其中包含的一個或多個相關(guān)可疑 進程共同的行為。進程集合所提供的這種邏輯上的關(guān)聯(lián)性,對于識別 惡意行為非常有利。
根據(jù)本發(fā)明的實施例,本發(fā)明提出的進程集合在邏輯上劃分系統(tǒng) 中的各個相關(guān)進程。每個進程集合包括存放在其中的可疑進程的標識 符(進程ID)和該進程對應(yīng)的程序文件的信息,如程序文件(PE文 件)全路徑信息。此外,由于某些惡意行為需要通過追溯歷史數(shù)據(jù), 例如父進程釋放過的文件信息,才能被發(fā)現(xiàn),因此根據(jù)本發(fā)明的進程 集合還可以保存集合中每個進程動作的歷史記錄。例如,歷史記錄可 包括創(chuàng)建的子進程ID,創(chuàng)建的文件、修改的文件等等。但是,本發(fā) 明并不限于此,根據(jù)需要,歷史記錄還可以包含其它各種信息,例如 訪問網(wǎng)絡(luò)的動作等等。
由此,本發(fā)明提出的進程集合不僅體現(xiàn)了進程之間的關(guān)聯(lián)關(guān)系,
還包括了相關(guān)進程在歷史動作上的內(nèi)在聯(lián)系。這些信息都將有助于對 所監(jiān)視動作進行關(guān)聯(lián)性分析,從而及時準確地發(fā)現(xiàn)惡意行為。
以下將以前面列舉的幾種惡意行為為例,結(jié)合具體的惡意程序?qū)?例,詳細描述本發(fā)明提出的進程集合概念在對所監(jiān)視動作進行關(guān)聯(lián)性 分析中的應(yīng)用。
圖1示出了根據(jù)本發(fā)明實施例的發(fā)現(xiàn)計算機程序惡意行為的裝 置總體框圖。
如圖1所示,首先計算機防護軟件的監(jiān)控模塊100監(jiān)控各個程序
的動作,并對所監(jiān)視的動作發(fā)出相應(yīng)的動作通知,例如,進程創(chuàng)建/ 結(jié)束通知、查毒引擎査毒通知、文件操作通知、注冊表操作通知、系
統(tǒng)API調(diào)用通知等等。繼而,根據(jù)關(guān)于所監(jiān)視動作的通知,各個處理 子模塊分別響應(yīng)于各個通知執(zhí)行相應(yīng)的子流程。這些處理子模塊包括 進程集合維護子模塊200、查毒引擎通知處理子模塊400、文件操作 通知處理子模塊500、注冊表操作通知處理子模塊600、系統(tǒng)調(diào)用動 作通知處理子模塊700,以及進程創(chuàng)建通知處理子模塊800。
根據(jù)本發(fā)明的實施例,在每個進程創(chuàng)建/結(jié)束時,維護本發(fā)明提 出的進程集合,例如,創(chuàng)建或撤銷進程集合,添加或刪除已有集合中 的進程信息等。進程集合維護子模塊200執(zhí)行的具體過程將在下文中 參照圖2和3詳細描述。
對于在每一進程運行過程中發(fā)生的動作的通知(如文件操作、系 統(tǒng)調(diào)用通知),各個相應(yīng)的子模塊(400-800)首先會在進程集合庫中 搜索是否存在與該通知的動作相關(guān)的進程集合,例如包含動作發(fā)起者 的集合或歷史記錄中包含動作對象信息(如所操作的文件)的集合。 如果在集合庫中找到相應(yīng)的進程集合,則根據(jù)進程集合所提供的相關(guān) 信息,結(jié)合前述抽象出的惡意行為的特征,對各個動作進行關(guān)聯(lián)性的 分析,從而識別出各惡意行為。這些子模塊執(zhí)行的具體過程將在下文 中結(jié)合圖4-8詳細描述。
圖2示出了在進程創(chuàng)建/結(jié)束時,創(chuàng)建/維護根據(jù)本發(fā)明的進fe集
合的過程。這里依然以前面提到的"灰鴿子"程序為例進行描述。
參見圖2,子模塊200在接收到進程創(chuàng)建溜束通知(步驟S201) 后,首先獲得新創(chuàng)建的或結(jié)束的進程的進程ID及其父進程ID。然后, 判斷接收到的通知是否表示進程創(chuàng)建(步驟S203)。如果是則轉(zhuǎn)至步 驟S211,進行進程集合的創(chuàng)建和/或新進程的添加,否則轉(zhuǎn)至步驟 S222,刪除結(jié)束的進程或撤銷空的進程集合。
這里假設(shè)創(chuàng)建"灰鴿子"程序A.exe時,監(jiān)控模塊發(fā)送了進程創(chuàng) 建動作通知。此時,在步驟S221中根據(jù)獲得的父進程ID搜索已有的 進程集合庫,以確定是否存在父進程所對應(yīng)的進程集合。"灰鴿子" 程序A.exe是首次創(chuàng)建,其父進程是安全迸程并未被監(jiān)視,因此步驟 S221的判斷結(jié)果為否,流程進行至過濾步驟S213。
步驟S213是一個可選步驟,其目的是通過過濾確定該新創(chuàng)建的 進程是否是可疑的,即,是否需要為之建立一個進程集合。其具體的 過濾過程在圖3中示出。如圖3所示,首先,子模塊200獲得新建進 程所對應(yīng)的可執(zhí)行文件的全路徑信息(步驟S2131)。之后,判斷該 可執(zhí)行文件的全路徑是否存在于一個外部安全程序列表中(步驟 S2133)。這個安全程序列表包含了已經(jīng)由系統(tǒng)或用戶確認身份的安全 程序的文件信息,且這個安全程序列表可以根據(jù)實際情況進行編輯, 如擴充、刪減等。如果步驟S2133的判斷結(jié)果為是,則表明當前新建 進程是安全的,不需要監(jiān)視,因而將其過濾掉(步驟S2138)。否則, 繼續(xù)判斷該可執(zhí)行文件是否是系統(tǒng)文件(步驟S2135),如果是則轉(zhuǎn) 至步驟S2138。如果不是系統(tǒng)文件,繼續(xù)判斷該可執(zhí)行文件是否在默 認需要過濾掉的安全程序列表中(步驟S2137),如果是則轉(zhuǎn)至步驟 S2138,否則轉(zhuǎn)至步驟S2139確定該進程可疑,需要為之創(chuàng)建一個進 程集合。如上所述,過濾步驟S213可以通過篩掉一些安全程序,避 免創(chuàng)建不必要的進程集合,從而加快防護軟件的行為分析速度。進程 過濾步驟還可以釆用其他方式,例如,使用一些確定安全程序的規(guī)則 等等。在一些特殊情況下,該過濾步驟也可以省略。
這里,經(jīng)過過濾,"灰鴿子"程序A.exe既不在安全列表中、也 不是系統(tǒng)文件或默認安全程序,則過濾步驟確定該進程A.exe是可疑
進程,需要創(chuàng)建相應(yīng)的進程集合。因此,流程進行至步驟S215創(chuàng)建 一個新的進程集合a,并將集合a內(nèi)的第一個相關(guān)進程設(shè)為A.exe的進 程ID,相關(guān)文件設(shè)置為A.exe的PE文件全路徑信息c:VA.exe,之后 此次集合維護結(jié)束。
如果在步驟S211中找到父進程所在的進程集合,則轉(zhuǎn)至步驟 S217。例如,監(jiān)控模塊100監(jiān)視到"灰鴿子"程序A.exe啟動了復(fù)制 在系統(tǒng)目錄下的自身副本wservices.exe文件,艮卩,監(jiān)視到一個進程創(chuàng) 建動作。此時,wservices.exe的父進程A.exe己經(jīng)在進程集合a內(nèi), 流程轉(zhuǎn)至步驟S217。在步驟S217中,將wservices.exe的進程ID寫 入集合a的歷史進程列表中,作為該集合的第二個相關(guān)進程,同時在 歷史進程列表中存入該第二相關(guān)進程的文件信息 c:\windows\wservices.exe,之后,此次集合維護結(jié)束。
若在步驟S203判斷為進程結(jié)束通知,例如,監(jiān)視到"灰鴿子" 程序A.exe在啟動wservices.exe之后退出的動作,則流程轉(zhuǎn)至步驟 S222。在步驟S222中依然首先判斷是否存在一個該結(jié)束進程的父進 程所對應(yīng)的進程集合。對于"灰鴿子"程序A.exe而言,不存在父進 程所在的進程集合。于是,流程行進至步驟S224,進一步判斷是否 存在結(jié)束進程所在的進程集合,如果判斷結(jié)果為否則處理結(jié)束。這里, 通過判斷,找到A.exe所在的進程集合a。繼而,從集合ot中刪除當前 結(jié)束的進程A.exe (步驟S226)。刪除進程后,再判斷該集合a中是否 還存有可疑進程(步驟S228),如果沒有則撤銷或銷毀該集合a (步 驟S229)。在灰鵒子的例子中,在A.exe退出時,wservices.exe還在 運行,因此步驟S228的判斷結(jié)果為否,處理結(jié)束。
參見以上結(jié)合圖2和3的描述,進程集合可在可疑進程創(chuàng)建之初 建立,并隨著相關(guān)進程的創(chuàng)建和結(jié)束而不斷地更新集合內(nèi)的相關(guān)信 息。由此,進程集合可向其他動作通知的處理子模塊提供有價值的進 程間的關(guān)聯(lián)信息。同時,其他動作通知處理流程也可將其各自處理中 發(fā)生的動作或數(shù)據(jù)寫入進程集合中的歷史記錄中,以增加關(guān)聯(lián)信息
里。
下面將參照圖4-8分別描述本發(fā)明提出的進程集合在各個動作通 知子模塊中的具體應(yīng)用。
圖4示出了查毒引擎通知處理子模塊的處理過程。下面結(jié)合一個 木馬程序來描述圖4所示的過程。
假設(shè),已知的一個病毒木馬A在運行時會釋放一個已知的病毒 動態(tài)鏈接庫B。由于木馬程序A和動態(tài)鏈接庫B都是已知的病毒文 件,通過傳統(tǒng)的特征碼掃描就可以將它們準確地識別出來。但是,木 馬程序A易于變種和偽裝(例如通過加殼、加密、PEPatch、特征修 改等手段),傳統(tǒng)的特征碼掃描無法發(fā)現(xiàn)偽裝后的木馬程序A',而動 態(tài)鏈接庫B—般不進行偽裝,能夠被查毒引擎發(fā)現(xiàn)。
在以上的木馬例子中,假設(shè),偽裝后的木馬程序A'運行并釋放 了動態(tài)鏈接庫B,之后查毒引擎通過病毒特征掃描發(fā)現(xiàn)了動態(tài)鏈接庫 B,并發(fā)出查到病毒通知。此時,子模塊400收到病毒通知,并先獲 得査到的病毒文件,即動態(tài)鏈接庫B的全路徑(步驟S420),繼而在 子模塊200維護的所有進程集合中進行搜索,以找到包含有該病毒文 件的進程集合(步驟S430)。此時,由于木馬程序A'正在運行,子 模塊200已經(jīng)在A,創(chuàng)建時為其建立了一個進程集合S,且集合S的歷 史記錄中包含了 A'創(chuàng)建的文件——動態(tài)鏈接庫B。由此,在步驟S430 中可以找到包含有該病毒文件——動態(tài)鏈接庫B的進程集合S?;?這個判斷,可以確定該病毒文件是由進程集合S中的進程A'釋放的, 即,確定為釋放病毒文件行為(步驟S440),從而成功發(fā)現(xiàn)偽裝后的 木馬程序A'。
如圖4所示的査毒引擎通知處理子流程將傳統(tǒng)的基于特征碼掃 描的文件實時監(jiān)控與本發(fā)明提出的基于進程集合的惡意行為特征分 析相結(jié)合。這種處理不僅非常有效地利用了現(xiàn)有的、精確的病毒掃描 技術(shù),而且充分利用了進程集合提供的進程和文件之間的關(guān)聯(lián)聯(lián)系。 因此這種處理能夠更加快捷和準確地發(fā)現(xiàn)惡意行為,同時有助于更多 地發(fā)現(xiàn)計算機病毒的衍生物。 ,
圖5示出了文件操作通知處理子模塊500的處理過程。下面,將 以"熊貓燒香"病毒為例,描述文件操作通知處理的全過程。"熊貓 燒香"病毒是一種蠕蟲病毒,它可以感染正常的可執(zhí)行文件。具體而 言,"熊貓燒香"病毒用自身代碼取代原始可執(zhí)行程序,再將原始程 序附加于自身代碼之后,同時將原始程序的程序圖標作為自己的程序 圖標,以便迷惑用戶、隱蔽自己。這種行為可以抽象為前述的"自修 改的自我復(fù)制"。
在實際運行中,"熊貓燒香"病毒的主程序Panda.exe啟動后會對 可執(zhí)行文件E.exe進行如上所述的修改,即,進行文件修改動作,并 由監(jiān)視模塊100監(jiān)視到。如圖5所示,子模塊500在接收到創(chuàng)建或修 改文件的文件操作通知后,首先獲得當前文件操作動作的發(fā)起者的進 程ID,即Panda.exe的進程ID (步驟S510)。然后,根據(jù)所獲得的進 程ID,在所有進程集合中搜索當前進程Panda.exe所在的集合(步驟 S520)。如果找不到,則表明當前進程是安全的,其進行的文件操作 也是可信的,由此本次處理結(jié)束。在這個例子中,假設(shè)子模塊200己 經(jīng)在Panda.exe創(chuàng)建之初為其建立了一個進程集合P,于是流程轉(zhuǎn)至步 驟S530。在步驟S530中,將所創(chuàng)建/修改的文件E.exe的信息插入搜 索到的進程集合P的歷史記錄中,以便記載該被監(jiān)視進程的歷史動作。 這里,如果集合的歷史文件的存放空間已滿或者插入失敗(圖中未示 出),則直接結(jié)束處理(步驟S580)。
繼而,子模塊S500判斷該創(chuàng)建/修改的文件是否是可執(zhí)行文件(步 驟S541)或自動運行文件(步驟543 )。如果是自動運行文件 Autorun.inf,則判斷搜索到的進程集合P的歷史記錄中是否包含有記 載在Autorun.inf中的文件(步驟S545),即,判斷是否歷史文件被關(guān) 聯(lián)到自動運行程序中。如果是,則表明該進程集合實現(xiàn)了"自啟動關(guān) 聯(lián)"行為(步驟S570),否則表明文件操作是安全的,處理結(jié)束(步 驟S580)。
在"熊貓燒香"例子中,被修改的文件E.exe是可執(zhí)行文件,流 程轉(zhuǎn)至步驟S551。在步驟S551中,繼續(xù)判斷當前進程的程序文件是 否是被創(chuàng)建的。如果不是,則表明當前進程可能是被病毒調(diào)用fe系統(tǒng)
文件。這時,需要將所創(chuàng)建/修改的文件與當前進程所在的進程集合 中的每一個同類型的文件內(nèi)容進行比較,并獲得匹配結(jié)果(步驟
S552)。在"熊貓燒香"例子中,經(jīng)過步驟S551的判斷,當前進程 Panda.exe也是被創(chuàng)建出的程序文件,由此流程轉(zhuǎn)至步驟S553,將所 創(chuàng)建/修改的文件與當前進程對應(yīng)的程序文件內(nèi)容進行比較,并獲得 匹配結(jié)果。
在步驟S552和S553中進行的匹配不僅要匹配文件的全部內(nèi)容, 還要單獨匹配代碼區(qū)域。這樣,才有可能檢查出"熊貓燒香"這種病 毒。以Windows系統(tǒng)下的PE文件格式為例,在兩個程序文件之間進 行代碼區(qū)域匹配的具體步驟如下
分析PE文件的結(jié)構(gòu),獲得兩個程序文件的程序入口點;
分析PE文件的節(jié)表(Section Table),分別找到兩個程序入口點所 在的節(jié)(Section);
比較節(jié)內(nèi)的節(jié)信息(節(jié)大小);
獲得兩個程序入口點所在節(jié)的內(nèi)容,進行二進制比較,相同則認 為兩個程序擁有相同的代碼區(qū)域。
經(jīng)過步驟S552和S553的匹配,可獲得三種匹配結(jié)果,文件內(nèi)容 完全相同、僅代碼區(qū)域相同以及文件不相同。隨后,子模塊S500根 據(jù)步驟S552或S553的匹配結(jié)果進行識別。如果匹配結(jié)果為不相同, 則確定為自釋放文件行為(步驟S558)。如果匹配結(jié)果為完全相同(步 驟S554),則確定是自我復(fù)制行為(步驟S556)。在"熊貓燒香"例 子中匹配結(jié)果為只有代碼完全相同(步驟S555),則確定是自修改的 自我復(fù)制行為(步驟S557)。進而,在步驟S556-558的確定結(jié)果的 基礎(chǔ)上,還可進一步判斷創(chuàng)建/修改的文件是否在"啟動"目錄中(步 驟S560),如果在啟動目錄中,則可進一步確定為自啟動關(guān)聯(lián)行為(步 驟S570)。
在圖5所示的子流程中,將進程所執(zhí)行的文件操作記載到相應(yīng)的 進程集合的歷史記錄中,以備后續(xù)關(guān)聯(lián)性分析使用。同時,通過將當 前進程操作的文件與進程集合中記載的同類型歷史文件進行g(shù)對,可 以發(fā)現(xiàn)當前進程的行為是否是惡意行為。這里,進程集合提供5被監(jiān)
視進程間文件的相互關(guān)聯(lián)性,由此采用圖5所示的方法能夠提高惡意 行為識別的準確性和識別速度。
圖6示出了注冊表操作處理子模塊的處理流程。這里以一個病毒 A的例子來說明子模塊600的處理過程。假設(shè),病毒A啟動后,釋 放一個惡意程序文件B.exe,然后通過修改注冊表將程序B加入自啟 動項中,從而程序B可以自行啟動。按照前述進程集合維護子模塊 的處理,在病毒A的進程創(chuàng)建時,子模塊200就為病毒A建立了一 個進程集合Y。而且,按照文件操作通知子模塊的處理,病毒A所釋 放的程序B也會作為歷史文件記錄在集合Y中。繼而,當病毒A修改 注冊表時,監(jiān)控模塊可監(jiān)視到這個動作并發(fā)出注冊表操作通知。
如圖6所示,子模塊600在接收到注冊表操作通知后,首先獲得 被操作的注冊表路徑(步驟S610)。然后,根據(jù)該注冊表路徑判斷是 否是系統(tǒng)服務(wù)鍵(步驟S620)。如果不是,則可能是病毒程序自己發(fā) 起的注冊表修改動作,流程轉(zhuǎn)至步驟S632。如果是,則可能是啟動 系統(tǒng)服務(wù),這時需要進一步識別所啟動的服務(wù)是否是安全的,由此流 程轉(zhuǎn)至步驟S631。
在步驟S631中,從欲更新的注冊表值中解析出一個或多個文件 的全路徑,即,獲得將要啟動的文件。然后,在所有進程集合的歷史 記錄中進行搜索,以便判斷上一步驟中獲得的文件是否已經(jīng)包含在一 個進程集合中(步驟S633)。如果不是,則表明啟動文件是安全的, 處理結(jié)束(步驟S650)。如果判斷結(jié)果為是,則表明將要啟動的文件 是進程集合中的可疑進程釋放的,流程轉(zhuǎn)至步驟S641。在步驟S641 中進一步判斷該文件是否是上一步獲得的進程集合的第一個文件。如 果判斷結(jié)果為是,則可確定是安裝自釋放服務(wù)行為(步驟S643)。
在病毒A的例子中,注冊表路徑不是系統(tǒng)服務(wù)鍵,流程轉(zhuǎn)至步 驟S632。在步驟S632中,子流程S600獲得當前注冊表修改動作的 發(fā)起者的進程ID,即病毒A的進程ID。然后,根據(jù)所獲得的進程ID, 在所有進程集合中搜索當前進程所在的集合(步驟S634),從而找到 包含病毒A的進程集合Y。于是,流程轉(zhuǎn)至步驟S636,以獲得蔣要啟
動的一個或多個文件的全路徑。然后,經(jīng)過步驟S642的判斷,發(fā)現(xiàn) 所獲得將要啟動的文件B.exe包含在集合y中。于是,可確認當前的 注冊表操作是病毒A發(fā)起的建立自啟動關(guān)聯(lián)行為(步驟S644)。
在圖6所示的處理過程中,當某些操作的發(fā)起者為系統(tǒng)自動運行 的程序時,可能無法根據(jù)當前進程ID獲得與之相關(guān)的進程集合。但 是,由于本發(fā)明提出的進程集合包含了其中進程動作的歷史記錄,因 此可以通過在所有的進程集合的歷史文件中搜索這些操作的對象文 件而獲得相關(guān)的進程集合,然后再基于獲得的進程集合進行進一步的 分析。
圖7示出了系統(tǒng)調(diào)用通知處理子模塊700。下面,將以木馬程序 A為例描述系統(tǒng)調(diào)用通知處理的過程。假設(shè)木馬A.exe是一個通31"加 載自釋放驅(qū)動"來侵害計算機的惡意程序。木馬A.exe啟動后,子模 塊200為其創(chuàng)建了進程集合S。 A.exe運行后釋放一個驅(qū)動程序C, 驅(qū)動程序C的全路徑信息被子模塊500記載到監(jiān)視進程集合S中。 繼而,A.exe調(diào)用服務(wù)相關(guān)的API,為程序C創(chuàng)建了一個服務(wù)注冊表 項并啟動這個服務(wù)。這個注冊表創(chuàng)建、啟動服務(wù)的操作是由系統(tǒng)中早 已存在的系統(tǒng)進程services.exe發(fā)起的。這時,監(jiān)控模塊可監(jiān)視到這 個驅(qū)動加載動作,并發(fā)出相應(yīng)通知。
在獲得系統(tǒng)調(diào)用通知后,子模塊700首先判斷是否是驅(qū)動加載通 知(步驟S710)。經(jīng)過判斷,確定是加載驅(qū)動程序C的通知。于是, 從通知中獲得驅(qū)動程序C的全路徑(步驟S712),并根據(jù)驅(qū)動程序C 的全路徑,在所有進程集合的歷史記錄中搜索相同的文件(步驟 S714),從而發(fā)現(xiàn)驅(qū)動程序C包含在相應(yīng)的進程集合S中(步驟S716)。
于是,判斷出集合S中的A.exe在運行時執(zhí)行了 "加載自釋放驅(qū)動" 行為(步驟S718)。
在這個木馬程序例子中,由于加載驅(qū)動的動作發(fā)起者為早已運行 的系統(tǒng)進程,通過發(fā)起者進程ID無法判斷是否已經(jīng)存在相應(yīng)的監(jiān)視 進程集合。為此,本發(fā)明提出在監(jiān)視進程集合的歷史記錄中搜索加載 動作的對象信息,即驅(qū)動程序C的信息,從而找到相關(guān)的進程集合。
除了上述加載驅(qū)動的系統(tǒng)調(diào)用外,圖6所示的系統(tǒng)調(diào)用處理子系 統(tǒng)還可以處理其他有可能是惡意行為的系統(tǒng)調(diào)用通知。例如,如圖6 所示,當接收到的系統(tǒng)調(diào)用通知不是加載驅(qū)動動作時,獲得當前動作 發(fā)起者的進程ID (步驟S720),再根據(jù)所獲得的進程ID找到相應(yīng)的 進程集合(步驟S730)。如果找到了相應(yīng)的進程集合,則表示這些系 統(tǒng)調(diào)用是該進程集合中的可疑進程發(fā)起的。繼而,根據(jù)系統(tǒng)調(diào)用的具 體動作(步驟S741-745),確定相應(yīng)的惡意行為(S751-755)。例如, 當系統(tǒng)調(diào)用為掛接全局消息鉤子操作時(步驟S745),進一步判斷鉤 子處理函數(shù)對應(yīng)的動態(tài)鏈接庫是否在當前進程所在的監(jiān)視進程集合 中(步驟S746)。如果在就可以肯定地判斷為掛接自釋放鉤子行為(步 驟S755)。
以上結(jié)合附圖描述了子模塊400-700根據(jù)進程集合所提供的進程 之間以及進程與文件之間的相關(guān)關(guān)系發(fā)現(xiàn)惡意行為的過程。以上所描 述的終些子模塊的操作并不是孤立的,它們也可能相互交疊。換言之, 同一V惡意行為有可能在以上多個模塊中發(fā)現(xiàn)。例如,圖5中己經(jīng)提 到了 "自釋放啟動"行為的判別方法。然而,這一行為也可根據(jù)進程 創(chuàng)建通知而識別出來。比如,當防護軟件發(fā)出創(chuàng)建進程通知時,還可 在如圖2所示完成進程集合的維護之后,進一步判斷所創(chuàng)建的進程對 應(yīng)的程序文件是否在所創(chuàng)建進程的父進程所在的進程集合中。如果 在,就可確定為"自釋放啟動"行為(具體過程可參見圖8)。
有益效果
以上結(jié)合具體實施例詳細描述了本發(fā)明提出的進程集合的建立、 維護以及利用。本發(fā)明提出的進程集合,將在創(chuàng)建關(guān)系上相互關(guān)聯(lián)的 多個進程劃分在一起,并記錄集合內(nèi)各個進程的歷史數(shù)據(jù)。因而,本 發(fā)明提出的進程集合概念既體現(xiàn)了進程之間的相互關(guān)聯(lián)性,也體現(xiàn)了 進程與文件操作等動作之間的相互關(guān)聯(lián)性。這些相關(guān)的信息可以將如 進程創(chuàng)建、系統(tǒng)調(diào)用和文件操作等多個離散的動作關(guān)聯(lián)在一J^,從而 識別出其中的惡意行為。由此,進程集合實際上是在邏輯層面上的一
個惡意行為體現(xiàn)個體。因此,利用進程集合來發(fā)現(xiàn)惡意行為將會更加 準確。
此外,本發(fā)明提出的進程集合是在經(jīng)過過濾之后建立的。如此, 在經(jīng)過過濾處理后,原有的系統(tǒng)所提供的父子進程關(guān)系可能被忽略, 而直接針對可疑的子進程建立相應(yīng)的進程集合。
例如,用戶接口程序explorer.exe創(chuàng)建了 a.exe和b.exe。在系統(tǒng) 提供的進程世代關(guān)系看來,a.exe和b.exe為兄弟關(guān)系。但是,根據(jù)本 發(fā)明提出的進程集合創(chuàng)建原則,父進程explorer.exe是個安全的進程 不會被監(jiān)視,其創(chuàng)建的a.exe和b.exe可能分別涉及不同的惡意行為, 因而分別屬于兩個相互獨立的進程集合。由此,a.exe和b.exe之間 不再有任何關(guān)系。這樣,經(jīng)過進程過濾,原有的進程之間的世代關(guān)系 就轉(zhuǎn)換為邏輯功能上的關(guān)聯(lián)關(guān)系。
此外,進程集合中的多個相關(guān)進程的地位彼此平等。這種簡單的 結(jié)構(gòu)使得進程集合的維護簡便、搜索迅速。這些優(yōu)點特別適合于實時 監(jiān)控系統(tǒng)的要求,不會由于行為分析過于復(fù)雜而影響計算機的性能, 妨礙用戶的正常使用。
雖然關(guān)于優(yōu)選實施例示范和描述了本發(fā)明,本領(lǐng)域技術(shù)人員將理 解可以不脫離如下述權(quán)利要求規(guī)定的發(fā)明精神和范圍做出多種改變 和修正。
權(quán)利要求
1、一種發(fā)現(xiàn)計算機程序的惡意行為的方法,包括監(jiān)視計算機程序執(zhí)行的動作;在被監(jiān)視進程集合庫中,搜索與所監(jiān)視的動作相關(guān)的一個被監(jiān)視進程集合,所述被監(jiān)視進程集合包括在創(chuàng)建關(guān)系上相互關(guān)聯(lián)的至少一個可疑進程的信息;如果搜索到與所監(jiān)視的動作相關(guān)的所述被監(jiān)視進程集合,則根據(jù)搜索出的所述被監(jiān)視進程集合中記載的信息,通過關(guān)聯(lián)性分析判斷所監(jiān)視動作是否屬于惡意行為。
2、 如權(quán)利要求l所述的方法,其中所述被監(jiān)視進程集合包括所述至少一個可疑進程的進程標識符、 與所述至少一個可疑進程相對應(yīng)的程序文件,以及所述至少一個可疑 進程所執(zhí)行的動作和該動作產(chǎn)生的數(shù)據(jù)的歷史記錄。
3、 如權(quán)利要求l所述的方法,其中在進程創(chuàng)建時,如果新創(chuàng)建進程的父進程是一個被監(jiān)視進程集合 中的可疑進程,.則所述新創(chuàng)建進程被確定為可疑進程,并且將所述新 創(chuàng)建進程加入所述父進程所在的被監(jiān)視進程集合中。
4、 如權(quán)利要求l所述的方法,其中在進程創(chuàng)建時,如果新創(chuàng)建進程的父進程不是可疑進程,則僅在 所述新創(chuàng)建進程經(jīng)過進程過濾后被確定為可疑進程的情況下,才為所 述新創(chuàng)建進程建立相應(yīng)的被監(jiān)視進程集合。
5、 如權(quán)利要求4所述的方法,其中,所述進程過濾包括 判斷與所述新創(chuàng)建進程相對應(yīng)的程序文件是否為已知的安全程序文件,系統(tǒng)文件或默認的安全程序文件; 如果不是,則確定為可疑進程。
6、 如權(quán)利要求2所述的方法,其中,所述搜索出的與所監(jiān)視動 作相關(guān)的所述被監(jiān)視進程集合包含所監(jiān)視動作的發(fā)起者進程的信息。
7、 如權(quán)利要求6所述的方法,其中,所述判斷步驟包括 將所監(jiān)視動作的對象的信息與搜索出的所述被監(jiān)視進程集合中的所述歷史記錄進行比較;根據(jù)比較結(jié)果,判斷所監(jiān)視動作是否屬于惡意行為。
8、 如權(quán)利要求7所述的方法,其中所監(jiān)視動作的對象是所監(jiān)視 動作操作的文件,且所述比較步驟包括比較所監(jiān)視動作操作的文件與所述歷史記錄 中的歷史文件的全路徑信息。
9、 如權(quán)利要求7所述的方法,其中所監(jiān)視動作的對象是所監(jiān)視 動作操作的文件,且所述比較步驟包括比較所監(jiān)視動作操作的文件與所述歷史記錄 中的歷史文件的文件內(nèi)容。
10、 如權(quán)利要求9所述的方法,其中,所述進行比較的文件均為 可執(zhí)行文件,且所述文件內(nèi)容比較步驟還包括比較所監(jiān)視動作操作的文件與所述歷史記錄中的歷史文件的代 碼區(qū)域內(nèi)容。
11、 如權(quán)利要求10所述的方法,其中,所述比較代碼區(qū)域內(nèi)容 的步驟包括分析進行比較的兩個所述可執(zhí)行文件的結(jié)構(gòu),獲得所述可執(zhí)行文 件的程序入口點;分析可執(zhí)行文件的節(jié)表,分別找到所述可執(zhí)行文件的程序入口點 所在的節(jié);比較所找到的兩個可執(zhí)行文件的節(jié)的大??;獲得兩個可執(zhí)行文件的程序入口點所在節(jié)的內(nèi)容,進行二進制比較,如果所述節(jié)的內(nèi)容相同則認為兩個可執(zhí)行文件擁有相同的代碼 區(qū)域。
12、 如權(quán)利要求6所述的方法,其中所述判斷步驟還包括 判斷所監(jiān)視動作是否屬于可能導(dǎo)致惡意行為的系統(tǒng)調(diào)用。
13、 如權(quán)利要求2所述的方法,其中所述搜索出的與所監(jiān)視動作 相關(guān)的所述被監(jiān)視進程集合包含所監(jiān)視動作的對象的信息。
14、 如權(quán)利要求7所述的方法,其中所監(jiān)視動作的對象是所監(jiān)視 動作操作的文件,且所述搜索步驟包括-在所有被監(jiān)視進程集合的歷史記錄中搜索所監(jiān)視動作操作 的文件的信息。
15、 如權(quán)利要求2所述的方法,其中所述監(jiān)視計算機程序的動作 的步驟還包括殺毒引擎查到病毒的動作,所述搜索步驟包括根據(jù)所述查到病毒的病毒文件信息搜索歷史 記錄中包含所述查到的病毒文件的信息的被監(jiān)視進程集合。
16、 一種發(fā)現(xiàn)計算機程序的惡意行為的裝置,包括 監(jiān)視模塊,用于監(jiān)視計算機程序執(zhí)行的動作;搜索模塊,用于在被監(jiān)視進程集合庫中,搜索與所監(jiān)視的動作相 關(guān)的一個被監(jiān)視進程集合,所述被監(jiān)視進程集合至少包括在創(chuàng)建關(guān)系 上相互關(guān)聯(lián)的至少一個可疑進程的信息;判斷模塊,用于在搜索到所述與所監(jiān)視的動作相關(guān)的被監(jiān)視進程 集合時,根據(jù)所述搜索出的被監(jiān)視進程集合中記載的信息,通過關(guān)聯(lián) 性分析判斷所監(jiān)視動作是否屬于惡意行為。
17、 如權(quán)利要求16所述的裝置,其中,所述被監(jiān)視進程集合包括所述至少一個可疑進程的進程標識符、 與0 述至少一個可疑進程相對應(yīng)的程序文件,以及所述至少一個可疑 進禾呈所執(zhí)行的動作及該動作所產(chǎn)生數(shù)據(jù)的歷史記錄。
18、 如權(quán)利要求16所述的裝置,還包括進程過濾模塊,用于當 新創(chuàng)建進程的父進程是一個被監(jiān)視進程集合中的可疑進程時,確定所 述新創(chuàng)建進程為可疑進程,并允許為其創(chuàng)建被監(jiān)視進程集合;當新創(chuàng) 建進程的父進程不是可疑進程,且其對應(yīng)的程序文件為安全文件時, 過濾掉所述新創(chuàng)建進程,不允許為其創(chuàng)建被監(jiān)視進程集合。
19、 如權(quán)利要求17所述的裝置,其中,所述監(jiān)控模塊所監(jiān)視的動作還包括查毒引擎查到病毒的動作,以 及所述搜索模塊,根據(jù)所述查到病毒的病毒文件信息搜索歷史記錄中 包含所述査到的病毒文件的信息的被監(jiān)視進程集合。
20、 如權(quán)利要求16所述的裝置,其中,所述搜索模塊搜索出的 與所監(jiān)視動作相關(guān)的所述被監(jiān)視進程集合包含發(fā)起所監(jiān)視動作的進 程的信息。
21、 如權(quán)利要求16所述的裝置,其中,所述搜索模塊搜索出的 與所監(jiān)視動作相關(guān)的所述被監(jiān)視進程集合包含所監(jiān)視動作的對象的 信息。
全文摘要
本發(fā)明提出了一種發(fā)現(xiàn)計算機程序的惡意行為的方法和裝置。利用本發(fā)明提出的方法和裝置利用了被監(jiān)視進程集合的概念來分析惡意程序的行為特征。本發(fā)明提出的發(fā)現(xiàn)計算機程序的惡意行為的方法包括監(jiān)視計算機程序執(zhí)行的動作;在被監(jiān)視進程集合庫中,搜索與所監(jiān)視的動作相關(guān)的一個進程集合,所述進程集合至少包括在創(chuàng)建關(guān)系上相互關(guān)聯(lián)的至少一個可疑進程的信息;如果搜索到所述與所監(jiān)視的動作相關(guān)的進程集合,則根據(jù)所述搜索出的進程集合中記載的信息,通過關(guān)聯(lián)性分析判斷所監(jiān)視動作是否屬于惡意行為。
文檔編號G06F21/22GK101350052SQ20071016244
公開日2009年1月21日 申請日期2007年10月15日 優(yōu)先權(quán)日2007年10月15日
發(fā)明者超 葉 申請人:北京瑞星國際軟件有限公司