專利名稱:一種基于ActiveX組件模擬的網(wǎng)頁木馬檢測方法
技術(shù)領(lǐng)域:
本發(fā)明屬于計(jì)算機(jī)安全技術(shù)領(lǐng)域,涉及一種網(wǎng)頁木馬的檢測方法,尤其是一種利用特殊構(gòu)造的ActiveX組件模擬網(wǎng)頁瀏覽過程中試圖訪問的ActiveX組件,由此檢測出網(wǎng) 頁是否存在木馬的方法。
背景技術(shù):
網(wǎng)頁木馬是特殊構(gòu)造的網(wǎng)頁,當(dāng)用戶的瀏覽器解析執(zhí)行這些網(wǎng)頁時(shí),操作系統(tǒng)、瀏 覽器及第三方組件中存在的漏洞將被利用,用戶的計(jì)算機(jī)被植入木馬、間諜軟件、網(wǎng)絡(luò)游戲 盜號器等惡意可執(zhí)行程序。近年來,以網(wǎng)頁木馬為主的針對客戶端的攻擊逐漸增多,并在所有攻擊案例中占 據(jù)了很大的比重。因此,如何有效檢測和防范網(wǎng)頁木馬已經(jīng)成為學(xué)術(shù)界和工業(yè)界共同關(guān)注 和研究的重要問題。網(wǎng)頁木馬具有更新頻繁、變化快的特點(diǎn),因此傳統(tǒng)殺毒軟件基于特征碼 匹配的檢測方法對網(wǎng)頁木馬難以湊效。網(wǎng)頁木馬與正常網(wǎng)頁的區(qū)別在于,網(wǎng)頁木馬執(zhí)行期 間會(huì)產(chǎn)生危害用戶系統(tǒng)的惡意行為。因此,網(wǎng)頁木馬檢測的關(guān)鍵在于確認(rèn)網(wǎng)頁被瀏覽時(shí)是 否會(huì)對用戶的系統(tǒng)造成損害。網(wǎng)頁木馬的檢測方法根據(jù)網(wǎng)頁是否被執(zhí)行可以劃分為兩類靜態(tài)檢測與動(dòng)態(tài)檢 測。靜態(tài)檢測方法往往使用某種方式對目標(biāo)網(wǎng)頁進(jìn)行語法分析,由此得到瀏覽器執(zhí)行目標(biāo) 網(wǎng)頁時(shí)可能發(fā)生的行為。動(dòng)態(tài)檢測方法的基本思想是讓目標(biāo)網(wǎng)頁在某個(gè)受控的環(huán)境中運(yùn) 行,由此得到瀏覽器執(zhí)行目標(biāo)網(wǎng)頁時(shí)實(shí)際發(fā)生的行為。靜態(tài)檢測方法具有資源消耗少、分析時(shí)間短等優(yōu)點(diǎn)。入侵者為了保證網(wǎng)頁木馬的 存活率,往往會(huì)采用加密、插入干擾代碼等手段對檢測造成阻礙。這些對抗手段對靜態(tài)檢測 方法的干擾比較嚴(yán)重。動(dòng)態(tài)檢測方法的優(yōu)勢在于能夠得到實(shí)際運(yùn)行時(shí)刻的行為,檢測的準(zhǔn)確率很高。動(dòng) 態(tài)檢測可以忽視網(wǎng)頁木馬中的加密等手段,直接得到網(wǎng)頁木馬實(shí)際產(chǎn)生的行為。動(dòng)態(tài)檢測 方法最大的問題在于,難以構(gòu)造全面的運(yùn)行環(huán)境,為了使網(wǎng)頁木馬的行為充分展現(xiàn)出來,需 要盡量滿足網(wǎng)頁木馬執(zhí)行的各種條件。例如,某個(gè)網(wǎng)頁木馬利用了暴風(fēng)影音的某個(gè)漏洞進(jìn) 行攻擊,為了使該網(wǎng)頁木馬展現(xiàn)出攻擊行為,必須在運(yùn)行環(huán)境中安裝相應(yīng)版本的暴風(fēng)影音; 如圖1所示,為現(xiàn)有技術(shù)中網(wǎng)頁創(chuàng)建ActiveX組件的情況,瀏覽器訪問目標(biāo)網(wǎng)頁,當(dāng)目標(biāo)網(wǎng) 頁請求創(chuàng)建組件N的對象,如果該組件N確實(shí)存在,直接創(chuàng)建組件N的對象n,并返回對象η 的入口地址,而當(dāng)系統(tǒng)中不存在該組件N時(shí)就會(huì)產(chǎn)生錯(cuò)誤信息?,F(xiàn)有技術(shù)中的缺陷在于在運(yùn)行環(huán)境中安裝大量的第三方瀏覽器組件對于構(gòu)建動(dòng) 態(tài)檢測環(huán)境來說是一個(gè)沉重的負(fù)擔(dān),而且組件之間的不兼容也會(huì)使檢測環(huán)境變得不穩(wěn)定, 對檢測結(jié)果造成影響,因此需要一種高效、準(zhǔn)確的檢測手段來檢測出網(wǎng)頁中存在的木馬。
發(fā)明內(nèi)容
由于網(wǎng)頁木馬主要通過利用AcitveX組件中的漏洞來進(jìn)行攻擊,其主要表現(xiàn)是將超長參數(shù)傳遞給ActiveX組件某個(gè)函數(shù)進(jìn)行溢出攻擊、將特殊構(gòu)造的參數(shù)傳遞給組件的某 個(gè)函數(shù)引發(fā)異常行為或者以某種特殊的順序調(diào)用組件中的函數(shù),因此本發(fā)明克服了現(xiàn)有技 術(shù)中的缺點(diǎn),提供了一種基于ActiveX組件模擬的網(wǎng)頁木馬檢測方法,使用一個(gè)組件模擬 網(wǎng)頁木馬試圖創(chuàng)建的ActiveX組件,獲取網(wǎng)頁木馬執(zhí)行過程中訪問的函數(shù)及參數(shù),為網(wǎng)頁 木馬檢測提供依據(jù),解決了動(dòng)態(tài)檢測運(yùn)行環(huán)境需要安裝大量第三方瀏覽器組件的問題。本發(fā)明的技術(shù)方案概述如下一種基于ActiveX組件模擬的網(wǎng)頁木馬檢測方法,其步驟包括1)構(gòu)造一個(gè)ActiveX組件M,其對象實(shí)例m用于模擬目標(biāo)網(wǎng)頁中缺失的組件N;2)編寫一個(gè)動(dòng)態(tài)鏈接庫鉤掛WINDOWS系統(tǒng)中負(fù)責(zé)ActiveX組件M創(chuàng)建的API (應(yīng) 用程序編程接口),記錄組件M的對象實(shí)例m的入口地址與組件N的組件名之間的對應(yīng)關(guān) 系;3)調(diào)用瀏覽器訪問目標(biāo)網(wǎng)頁,當(dāng)目標(biāo)網(wǎng)頁請求創(chuàng)建缺失的組件N時(shí),由對象實(shí)例m 將目標(biāo)網(wǎng)頁訪問的組件名、組件中的函數(shù)以及參數(shù)信息記錄到日志文件;4)解析日志文件,判定目標(biāo)網(wǎng)頁是否為網(wǎng)頁木馬。所述步驟1)組件M的對象實(shí)例m的IDispatch接口能夠模擬出組件N所有的成 員函數(shù)和成員變量;組件M的對象實(shí)例m的IDispatch接口能夠響應(yīng)并記錄外部程序?qū)M件N任何成 員的訪問請求。所述步驟2)動(dòng)態(tài)鏈接庫鉤掛的負(fù)責(zé)組件M創(chuàng)建的API包括CoGetClassOb ject (創(chuàng) 建指定CLSID組件的類場)、CoCreateInstanceEx (創(chuàng)建指定CLSID組件的對象)和 CLSIDFromProgID (為指定ProgID的組件查找對應(yīng)的CLSID)。動(dòng)態(tài)鏈接庫鉤掛CLSIDFromProgID的方法為1)鉤掛程序調(diào)用原始的CLSIDFromProgID函數(shù)查詢網(wǎng)頁提供的ProgID (字符串形 式的組件標(biāo)識)所對應(yīng)的CLSID (唯一標(biāo)識符),如果查詢成功,直接返回CLSID,否則進(jìn)入 第2)步;2)以當(dāng)前系統(tǒng)時(shí)間為參數(shù)生成一個(gè)偽造的CLSID ;3)在動(dòng)態(tài)鏈接庫中記錄第2)步偽造的CLSID與網(wǎng)頁提供的ProgID之間的對應(yīng)關(guān) 系,將偽造的CLSID返回。動(dòng)態(tài)鏈接庫鉤掛CoGetClassObject的方法為1)鉤掛程序調(diào)用原始的CoGetClassObject函數(shù)創(chuàng)建CLSID參數(shù)所代表組件的類 場,如果創(chuàng)建成功,直接將創(chuàng)建成功的組件類場返回;否則進(jìn)入第2)步;2)使用組件M的CLSID作為參數(shù)調(diào)用原始的CoGetClassObject函數(shù)創(chuàng)建缺失組 件N的類場;3)記錄組件M類場入口地址與當(dāng)前請求創(chuàng)建組件的CLSID之間的對應(yīng)關(guān)系,返回 組件M類場。動(dòng)態(tài)鏈接庫鉤掛CoCreateInstanceEx的方法為1)調(diào)用原始的CoCreatelnstanceEx函數(shù)創(chuàng)建CLSID參數(shù)所代表的組件的對象,如 果創(chuàng)建成功,直接將創(chuàng)建成功的組件對象返回,否則進(jìn)入第2)步;2)使用組件M的CLSID作為參數(shù)調(diào)用原始的CoCreatelnstanceEx函數(shù)創(chuàng)建組件N的對象。3)記錄組件M對象實(shí)例m的入口地址與當(dāng)前請求創(chuàng)建組件N的CLSID之間的對應(yīng)關(guān)系,返回對象實(shí)例m的入口地址。所述步驟3)對象實(shí)例m通過IUNKN0WN接口得到入口地址,將入口地址通過IPC 消息發(fā)送到負(fù)責(zé)鉤掛系統(tǒng)API的動(dòng)態(tài)鏈接庫中,查詢得到當(dāng)前對象所模擬組件N的名稱。所述步驟3)對象實(shí)例m通過GetIDsOfNames函數(shù)的參數(shù)得到成員函數(shù)名。所述步驟3)對象實(shí)例m通過的Invoke函數(shù)的參數(shù)得到組件成員函數(shù)的調(diào)用參數(shù) 列表。所述步驟4)按照如下方法進(jìn)行網(wǎng)頁木馬判定1)以組件名檢索漏洞庫,如果有結(jié)果,進(jìn)入下一步,否則跳到4)步;2)以函數(shù)名檢索上一步的結(jié)果,如果有結(jié)果,進(jìn)入下一步,否則跳到4)步;3)參數(shù)列表中的參數(shù)如果符合漏洞庫的規(guī)則,目標(biāo)網(wǎng)頁被判定為網(wǎng)頁木馬;4)漏洞庫中不包含該組件或者函數(shù)的漏洞描述,檢查每一個(gè)參數(shù)的長度,如果參 數(shù)過長則發(fā)出警報(bào)。與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果是1.本發(fā)明的方法解決了動(dòng)態(tài)檢測運(yùn)行環(huán)境需要安裝大量第三方瀏覽器組件的問 題,通過模擬可能存在漏洞的組件,能夠觸發(fā)網(wǎng)頁木馬更多的攻擊行為;2.能夠得到網(wǎng)頁木馬在ActiveX組件調(diào)用這一層的攻擊行為。
圖1現(xiàn)有技術(shù)中網(wǎng)頁創(chuàng)建ActiveX組件的示意圖;圖2本發(fā)明方法網(wǎng)頁創(chuàng)建ActiveX組件的示意圖;圖3本發(fā)明方法中ActiveX模擬組件內(nèi)部的工作流程圖;圖4鉤掛ActiveX組件創(chuàng)建API的工作流程圖。
具體實(shí)施例方式下面結(jié)合附圖和具體實(shí)施方式
對本發(fā)明作進(jìn)一步詳細(xì)描述任何支持ActiveX組件開發(fā)的軟件開發(fā)平臺都能以類似的方式實(shí)現(xiàn)基于ActiveX 組件模擬的網(wǎng)頁木馬檢測系統(tǒng)。下面以Delphi開發(fā)平臺為例進(jìn)行具體說明(使用其他開 發(fā)工具也可以按照類似的步驟完成)首先,構(gòu)造ActiveX模擬組件M。ActiveX模擬組件M的特點(diǎn)為當(dāng)組件M的具體對象實(shí)例m模擬組件N時(shí),表現(xiàn)出 如下功能1、對象實(shí)例m通過IPC (進(jìn)程間通信)消息查詢到自己正在模擬的組件是N ;2、外部程序通過實(shí)例m的IDispatch接口查詢組件N的任意成員時(shí),都能夠得到 一個(gè)成員id ;3、外部程序通過實(shí)例m的IDispatch接口調(diào)用組件N的任意成員時(shí),調(diào)用行為都 記錄到日志中。根據(jù)以上ActiveX模擬組件M的特點(diǎn),具體構(gòu)造ActiveX模擬組件M的過程如下
1、新建一個(gè) ActiveX Library,保存時(shí)將其命名為 Simulate, dpr。2、在上一步創(chuàng)建的ActiveX Library中新建一個(gè)COM Object,可以將其命名為 CSimulate,這里將自動(dòng)生成的文件保存為CSimulate. pas。3、在 TCSimulate 的類定義中將 IDispatch 接口的 GetIDsOfNames 和 Invoke 兩個(gè) 函數(shù)定義為TCSimulate的成員函數(shù)。4、定義一個(gè)全局使用的字符串列表,這里記*t_list。設(shè)置一個(gè)全局計(jì)數(shù)器,這里
記為Co5、實(shí)現(xiàn) IDispatch接口的 GetIDsOfNames 函數(shù)。GetIDsOfNames 函數(shù)的參數(shù)中,有 一個(gè)是字符串形式表示的成員名字,把這個(gè)表示成員名字的字符串復(fù)制到t_list[c]中, 然后把c作為成員的id返回,同時(shí)c變量增大1。6、實(shí)現(xiàn)IDispatch接口的Invoke函數(shù)。查詢一下當(dāng)前對象實(shí)例m的IUNKN0WN接 口得到當(dāng)前對象的入口地址,將這個(gè)入口地址通過IPC(進(jìn)程間通信)消息發(fā)送到負(fù)責(zé)鉤掛 系統(tǒng)API的dll中,查詢得到當(dāng)前對象所模擬組件N的名稱。Invoke函數(shù)的參數(shù)中,有一個(gè) 是當(dāng)前請求調(diào)用成員的id,t_list[id]中存儲的字符串就是這個(gè)成員的名字。Invoke函 數(shù)還有一個(gè)參數(shù)存儲了調(diào)用t_list[id]成員所提供的參數(shù)列表。把前面得到的組件名、成 員名以及參數(shù)列表組合在一起寫入到日志文件中。最后返回乙11計(jì)[1(1]成員調(diào)用失敗的 fn息ο經(jīng)過以上步驟構(gòu)造出ActiveX模擬組件,其具體的工作流程如圖3所示調(diào)用瀏覽器訪問目標(biāo)網(wǎng)頁,當(dāng)目標(biāo)網(wǎng)頁請求缺失的組件N時(shí),ActiveX組件M的對 象實(shí)例m通過IUNKN0WN接口得到自身入口地址,通過入口地址查到缺失的組件N的組件 名;ActiveX組件M的GetIDsOfNames函數(shù)被調(diào)用,通過GetIDsOfNames函數(shù)的參數(shù)得到成 員函數(shù)名;ActiveX組件M的Invoke函數(shù)被調(diào)用,通過的Invoke函數(shù)的參數(shù)得到組件成員 函數(shù)的調(diào)用參數(shù);將得到的組件名、函數(shù)名、參數(shù)等關(guān)鍵信息寫入日志文件,用于木馬檢測 分析。其中,鉤掛Windows系統(tǒng)API的方法流程如圖4所示。當(dāng)目標(biāo)網(wǎng)頁請求某一組件時(shí),操作系統(tǒng)會(huì)調(diào)用原始的API創(chuàng)建組件對象;如果組 件可以創(chuàng)建成功,則不需要進(jìn)行模擬;如果創(chuàng)建不成功,即請求創(chuàng)建的組件為缺失的組件 N,調(diào)用原始API創(chuàng)建ActiveX組件M,在dll中記錄ActiveX組件M對象實(shí)例m的入口地址 與組件N的組件名之間的對應(yīng)關(guān)系,將這一對應(yīng)關(guān)系寫入入口地址/組件名對應(yīng)表,并提供 通過IPC消息進(jìn)行查詢的功能。編寫一個(gè)dl 1 (動(dòng)態(tài)鏈接庫)負(fù)責(zé)鉤掛操作系統(tǒng)中CLSIDFromProgID (為指定 ProgID的組件查找對應(yīng)的CLSID)、CoGetClassObject (創(chuàng)建指定CLSID組件的類場)、 CoCreateInstanceEx (創(chuàng)建指定CLSID組件的對象)等負(fù)責(zé)ActiveX組件創(chuàng)建的API,具體 實(shí)現(xiàn)如下1)、CLSIDFromProgID 鉤掛處理方法1. 1)調(diào)用原始的CLSIDFromProgID函數(shù)查詢ProgID參數(shù)所對應(yīng)的CLSID。如果 查詢成功,說明系統(tǒng)中存在網(wǎng)頁請求的組件,不需要進(jìn)行組件模擬,直接返回CLSID即可; 否則進(jìn)入第1.2)步。1. 2)進(jìn)入到這一步,說明系統(tǒng)中不存在網(wǎng)頁所請求的組件,無法在系統(tǒng)中查詢到ProgID所對應(yīng)的CLSID,為了使組件模擬能夠順利進(jìn)行,需要偽造一個(gè)CLSID。這里以當(dāng)前 系統(tǒng)時(shí)間為自變量產(chǎn)生一個(gè)偽造的CLSID。1. 3)記錄第1. 2)步偽造的CLSID與傳入的ProgID之間的對應(yīng)關(guān)系。1. 4)將偽造的CLSID返回。2)、CoGetClassObject 鉤掛處理邏輯2. 1)如果通過參數(shù)傳入的CLSID具有偽造的特征, 說明這是一個(gè)需要模擬的組 件,直接進(jìn)入第2. 3)步開始模擬;否則進(jìn)入第2. 2)步。2. 2)調(diào)用原始的CoGetClassObject函數(shù)創(chuàng)建網(wǎng)頁當(dāng)前通過CLSID參數(shù)所指定組 件的類場。如果創(chuàng)建成功,說明系統(tǒng)中存在該CLSID所代表的組件,不需要進(jìn)行組件模擬, 直接將創(chuàng)建成功的組件類場返回;否則進(jìn)入第2. 3)步。2. 3)使用Simulate組件自身的CLSID作為參數(shù)調(diào)用原始的CoGetClassObject函 數(shù)創(chuàng)建模擬組件的類場。2. 4)記錄Simulate類場入口地址與傳入的CLSID之間的對應(yīng)關(guān)系。2. 5 返回 Simulate 類場。3)、CoCreateInstanceEx 鉤掛處理邏輯3. 1)如果通過參數(shù)傳入的CLSID具有偽造的特征,說明這是一個(gè)需要模擬的組 件,直接進(jìn)入第3. 3)步開始模擬;否則進(jìn)入第3. 2)步。3. 2)調(diào)用原始的CoCreatelnstanceEx函數(shù)創(chuàng)建網(wǎng)頁當(dāng)前通過CLSID參數(shù)所指定 組件的對象。如果創(chuàng)建成功,說明系統(tǒng)中存在該CLSID所代表的組件,不需要進(jìn)行組件模 擬,直接將創(chuàng)建成功的組件對象返回;否則進(jìn)入第3. 3)步。3. 3)使用Simulate組件自身的CLSID作為參數(shù)調(diào)用原始的CoCreatelnstanceEx 函數(shù)創(chuàng)建模擬組件的對象。3. 4)記錄Simulate對象的入口地址與傳入的CLSID之間的對應(yīng)關(guān)系。3. 5)返回Simulate對象的入口地址。4)、日志解析及網(wǎng)頁木馬判定。日志文件中一行記錄了一次組件訪問,其中包括目標(biāo)網(wǎng)頁訪問的組件名、組件中 的函數(shù)以及參數(shù)。每行的第一個(gè)分隔符之前的是組件名,后面跟著的是函數(shù)名,再往后是參 數(shù)列表。完成一行的解析之后可以按照如下步驟進(jìn)行網(wǎng)頁木馬判定4. 1)以組件名檢索漏洞庫,如果有結(jié)果,進(jìn)入下一步,否則跳到4. 4)步;4. 2)以函數(shù)名檢索上一步的結(jié)果,如果有結(jié)果,進(jìn)入下一步,否則跳到4. 4)步;4. 3)參數(shù)列表中的參數(shù)如果符合漏洞庫的規(guī)則,表示此次組件訪問是一次攻擊, 目標(biāo)網(wǎng)頁被判定為網(wǎng)頁木馬。4.4)漏洞庫中不包含該組件或者函數(shù)的漏洞描述,可能是正常訪問,也可能是未 知漏洞,檢查每一個(gè)參數(shù)的長度,如果參數(shù)過長則發(fā)出警報(bào)。盡管為說明目的公開了本發(fā)明的具體實(shí)施例和附圖,其目的在于幫助理解本發(fā)明 的內(nèi)容并據(jù)以實(shí)施,但是本領(lǐng)域的技術(shù)人員可以理解在不脫離本發(fā)明及所附的權(quán)利要求 的精神和范圍內(nèi),各種替換、變化和修改都是可能的。本發(fā)明不應(yīng)局限于本說明書最佳實(shí)施 例和附圖所公開的內(nèi)容,本發(fā)明要求保護(hù)的范圍以權(quán)利要求書界定的范圍為準(zhǔn)。
權(quán)利要求
一種基于ActiveX組件模擬的網(wǎng)頁木馬檢測方法,其步驟包括1)構(gòu)造一個(gè)ActiveX組件M,其對象實(shí)例m用于模擬目標(biāo)網(wǎng)頁中缺失的組件N;2)編寫一個(gè)動(dòng)態(tài)鏈接庫鉤掛WINDOWS系統(tǒng)中負(fù)責(zé)ActiveX組件M創(chuàng)建的API,記錄組件M的對象實(shí)例m的入口地址與組件N的組件名之間的對應(yīng)關(guān)系;3)調(diào)用瀏覽器訪問目標(biāo)網(wǎng)頁,當(dāng)目標(biāo)網(wǎng)頁請求創(chuàng)建缺失的組件N時(shí),由對象實(shí)例m將目標(biāo)網(wǎng)頁訪問的組件名、組件中的函數(shù)以及參數(shù)信息記錄到日志文件;4)解析日志文件,判定目標(biāo)網(wǎng)頁是否為網(wǎng)頁木馬。
2.如權(quán)利要求1所述的方法,其特征在于,所述步驟1)組件M的對象實(shí)例m的 IDispatch接口能夠模擬出組件N所有的成員函數(shù)和成員變量;組件M的對象實(shí)例m的IDispatch接口能夠響應(yīng)并記錄外部程序?qū)M件N任何成員的 訪問請求。
3.如權(quán)利要求1所述的方法,其特征在于,所述步驟2)動(dòng)態(tài)鏈接庫鉤掛的負(fù)責(zé)組件M 創(chuàng)建的 API 包括 CoGetClassObject、CoCreateInstanceEx 禾口 CLSIDFromProgID。
4.如權(quán)利要求3所述的方法,其特征在于,動(dòng)態(tài)鏈接庫鉤掛CLSIDFromProgID的方法為1)鉤掛程序調(diào)用原始的CLSIDFromProgID函數(shù)查詢網(wǎng)頁提供的字符串形式的組件標(biāo) 識所對應(yīng)的唯一標(biāo)識符,如果查詢成功,直接返回唯一標(biāo)識符,否則進(jìn)入第2)步;2)以當(dāng)前系統(tǒng)時(shí)間為參數(shù)生成一個(gè)偽造的唯一標(biāo)識符;3)在動(dòng)態(tài)鏈接庫中記錄第2)步偽造的唯一標(biāo)識符與網(wǎng)頁提供的字符串形式的組件標(biāo) 識之間的對應(yīng)關(guān)系,將偽造的唯一標(biāo)識符返回。
5.如權(quán)利要求3所述的方法,其特征在于,動(dòng)態(tài)鏈接庫鉤掛CoGetClassObject的方法為1)鉤掛程序調(diào)用原始的CoGetClassObject函數(shù)創(chuàng)建唯一標(biāo)識符參數(shù)所代表組件的類 場,如果創(chuàng)建成功,直接將創(chuàng)建成功的組件類場返回;否則進(jìn)入第2)步;2)使用組件M的唯一標(biāo)識符作為參數(shù)調(diào)用原始的CoGetClassObject函數(shù)創(chuàng)建缺失組 件N的類場;3)記錄組件M類場入口地址與當(dāng)前請求創(chuàng)建組件N的唯一標(biāo)識符之間的對應(yīng)關(guān)系,返 回組件M類場。
6.如權(quán)利要求3所述的方法,其特征在于,動(dòng)態(tài)鏈接庫鉤掛CoCreatelnstanceEx的方 法為1)調(diào)用原始的CoCreatelnstanceEx函數(shù)創(chuàng)建唯一標(biāo)識符參數(shù)所代表的組件的對象, 如果創(chuàng)建成功,直接將創(chuàng)建成功的組件對象返回,否則進(jìn)入第2)步;2)使用組件M的唯一標(biāo)識符作為參數(shù)調(diào)用原始的CoCreatelnstanceEx函數(shù)創(chuàng)建組件 N的對象;3)記錄組件M對象實(shí)例m的入口地址與當(dāng)前請求創(chuàng)建組件N的唯一標(biāo)識符之間的對應(yīng) 關(guān)系,返回對象實(shí)例m的入口地址。
7.如權(quán)利要求1所述的方法,其特征在于,所述步驟3)對象實(shí)例m通過IUNKN0WN接 口得到入口地址,將入口地址通過進(jìn)程間通信消息發(fā)送到負(fù)責(zé)鉤掛系統(tǒng)API的動(dòng)態(tài)鏈接庫 中,查詢得到當(dāng)前對象所模擬組件N的名稱。
8.如權(quán)利要求1所述的方法,其特征在于,所述步驟3)對象實(shí)例m通過GetIDsOfNames 函數(shù)的參數(shù)得到組件N的成員函數(shù)名。
9.如權(quán)利要求1所述的方法,其特征在于,所述步驟3)對象實(shí)例m通過的Invoke函數(shù) 的參數(shù)得到組件N成員函數(shù)的調(diào)用參數(shù)列表。
10.如權(quán)利要求1所述的方法,其特征在于,所述步驟4)按照如下方法進(jìn)行網(wǎng)頁木馬判定1)以組件名檢索漏洞庫,如果有結(jié)果,進(jìn)入下一步,否則跳到4)步;2)以函數(shù)名檢索上一步的結(jié)果,如果有結(jié)果,進(jìn)入下一步,否則跳到4)步;3)參數(shù)列表中的參數(shù)如果符合漏洞庫的規(guī)則,目標(biāo)網(wǎng)頁被判定為網(wǎng)頁木馬;4)漏洞庫中不包含該組件或者函數(shù)的漏洞描述,檢查每一個(gè)參數(shù)的長度,如果參數(shù)過 長則發(fā)出警報(bào)。
全文摘要
本發(fā)明公開了一種基于ActiveX組件模擬的網(wǎng)頁木馬檢測方法,其步驟包括1)構(gòu)造一個(gè)ActiveX組件M,其對象實(shí)例m用于模擬目標(biāo)網(wǎng)頁中缺失的組件N;2)編寫一個(gè)動(dòng)態(tài)鏈接庫鉤掛WINDOWS系統(tǒng)中負(fù)責(zé)組件M創(chuàng)建的API,記錄組件M的對象實(shí)例m的入口地址與組件N的組件名之間的對應(yīng)關(guān)系;3)調(diào)用瀏覽器訪問目標(biāo)網(wǎng)頁,當(dāng)目標(biāo)網(wǎng)頁請求創(chuàng)建缺失的組件N時(shí),由對象實(shí)例m將目標(biāo)網(wǎng)頁訪問的組件名、組件中的函數(shù)以及參數(shù)信息記錄到日志文件;4)解析日志文件,判定目標(biāo)網(wǎng)頁是否為網(wǎng)頁木馬。本發(fā)明的方法能夠模擬可能存在漏洞的插件,可以觸發(fā)網(wǎng)頁木馬更多的攻擊行為;能夠得到網(wǎng)頁木馬在ActiveX組件調(diào)用這一層的攻擊行為。
文檔編號G06F17/30GK101799855SQ20101012467
公開日2010年8月11日 申請日期2010年3月12日 優(yōu)先權(quán)日2010年3月12日
發(fā)明者宋程昱, 諸葛建偉, 郭晉鵬, 鐘金輝, 韓心慧, 龔曉銳 申請人:北京大學(xué)