本發(fā)明涉及信息安全技術(shù),尤其涉及一種保護線程數(shù)據(jù)的方法、裝置及電子設(shè)備。
背景技術(shù):
隨著Windows系統(tǒng)內(nèi)核層技術(shù)細節(jié)的逐漸公開,越來越多的木馬病毒等惡意應(yīng)用程序(APP,Application),為了自身存活和非法利益,開始使用利用遠程線程修改目標(biāo)應(yīng)用程序?qū)?yīng)的目標(biāo)線程的線程數(shù)據(jù),使之能夠注入預(yù)先設(shè)置的動態(tài)鏈接庫至目標(biāo)應(yīng)用程序的進程或線程上運行,從而控制目標(biāo)應(yīng)用程序,使得惡意應(yīng)用程序的線程可以根據(jù)惡意應(yīng)用程序提供者的意圖,對用戶的線程或系統(tǒng)線程進行惡意攻擊,可能造成計算機運行不穩(wěn)定,甚至可能給用戶帶來非常大的經(jīng)濟損失。其中,進程(Process)是計算機中的應(yīng)用程序關(guān)于數(shù)據(jù)集合上的一次運行活動,應(yīng)用程序是指令、數(shù)據(jù)及其組織形式的描述,進程是應(yīng)用程序的實體,一進程包括一個或多個線程。線程數(shù)據(jù)是一個內(nèi)核結(jié)構(gòu)上表述,該內(nèi)核結(jié)構(gòu)保存有線程的各寄存器值以及CPU執(zhí)行狀態(tài)值等,如果線程數(shù)據(jù)被惡意修改,可以控制線程的執(zhí)行,從而使得被控制的線程執(zhí)行各種惡意行為,例如,注入惡意模塊等。
目前,還沒有提出一種有效的方法來防止線程數(shù)據(jù)被惡意修改。
技術(shù)實現(xiàn)要素:
有鑒于此,本發(fā)明實施例提供一種保護線程數(shù)據(jù)的方法、裝置及電子設(shè)備,能夠有效提升線程數(shù)據(jù)安全,以解決現(xiàn)有的保護線程數(shù)據(jù)的方法中,惡意應(yīng)用程序利用線程上下文內(nèi)核函數(shù)對目標(biāo)線程執(zhí)行線程數(shù)據(jù)寫入操作,從而破壞操作系統(tǒng)的問題。
第一方面,本發(fā)明實施例提供一種保護線程數(shù)據(jù)的方法,包括:
在預(yù)先注入到內(nèi)核層中的掛鉤函數(shù)監(jiān)測到設(shè)置線程上下文內(nèi)核函數(shù)被調(diào)用時,掛鉤所述設(shè)置線程上下文內(nèi)核函數(shù);
獲取調(diào)用所述設(shè)置線程上下文內(nèi)核函數(shù)的應(yīng)用程序發(fā)起的目標(biāo)線程數(shù)據(jù)寫入請求,將所述目標(biāo)線程數(shù)據(jù)寫入請求中的目標(biāo)應(yīng)用程序?qū)?yīng)的目標(biāo)線程句柄寫入所述掛鉤函數(shù)中的線程句柄參數(shù)中;
依據(jù)寫入所述掛鉤函數(shù)中的線程句柄參數(shù),獲取所述目標(biāo)應(yīng)用程序的線程路徑;
如果獲取的線程路徑與預(yù)先設(shè)置的目標(biāo)應(yīng)用程序線程目錄路徑庫中任一目標(biāo)應(yīng)用程序線程目錄路徑相匹配,向所述目標(biāo)線程數(shù)據(jù)寫入請求返回拒絕寫入信息。
結(jié)合第一方面,在第一方面的第一種實施方式中,在所述在預(yù)先注入到內(nèi)核層中的掛鉤函數(shù)監(jiān)測到設(shè)置線程上下文內(nèi)核函數(shù)被調(diào)用時之前,所述方法還包括:
調(diào)用操作系統(tǒng)的掛鉤函數(shù)窗口設(shè)置接口,設(shè)置用于監(jiān)測調(diào)用所述設(shè)置線程上下文內(nèi)核函數(shù)的掛鉤函數(shù),并獲取操作系統(tǒng)的根權(quán)限以注入所述掛鉤函數(shù)。
結(jié)合第一方面的第一種實施方式,在第一方面的第二種實施方式中,所述注入所述掛鉤函數(shù)包括:
在系統(tǒng)服務(wù)描述符表中查詢并獲取所述設(shè)置線程上下文內(nèi)核函數(shù)的函數(shù)地址,存儲所述設(shè)置線程上下文內(nèi)核函數(shù)的函數(shù)地址;
利用所述掛鉤函數(shù)替換所述設(shè)置線程上下文內(nèi)核函數(shù),設(shè)置所述掛鉤函數(shù)在所述系統(tǒng)服務(wù)描述符表中的函數(shù)地址不同于所述設(shè)置線程上下文內(nèi)核函數(shù)的函數(shù)地址;
在所述掛鉤函數(shù)中設(shè)置存儲的所述設(shè)置線程上下文內(nèi)核函數(shù)的函數(shù)地址,以用于調(diào)用所述設(shè)置線程上下文內(nèi)核函數(shù)。
結(jié)合第一方面,在第一方面的第三種實施方式中,所述依據(jù)寫入所述掛鉤函數(shù)中的線程句柄參數(shù),獲取所述目標(biāo)應(yīng)用程序的線程路徑包括:
枚舉操作系統(tǒng)的所有線程的線程句柄;
獲取與所述掛鉤函數(shù)的線程句柄參數(shù)相匹配的線程句柄;
調(diào)用線程路徑獲取內(nèi)核函數(shù),查詢獲取所述相匹配的線程句柄的線程路徑。
結(jié)合第一方面、第一方面的第一種至第三種中任一種實施方式,在第一方面的第四種實施方式中,在所述依據(jù)寫入所述掛鉤函數(shù)中的線程句柄參數(shù),獲取所述目標(biāo)應(yīng)用程序的線程路徑之前,所述方法還包括:
依據(jù)發(fā)起所述目標(biāo)線程數(shù)據(jù)寫入請求的應(yīng)用程序的線程句柄參數(shù),獲取發(fā)起所述目標(biāo)線程數(shù)據(jù)寫入請求的應(yīng)用程序的線程路徑;
提取發(fā)起所述目標(biāo)線程數(shù)據(jù)寫入請求的應(yīng)用程序的線程路徑中的最后子目錄下的字符串,如果提取的字符串與預(yù)先設(shè)置的攔截應(yīng)用程序字符串庫中任一攔截應(yīng)用程序字符串相匹配,執(zhí)行所述依據(jù)寫入所述掛鉤函數(shù)中的線程句柄參數(shù),獲取所述目標(biāo)應(yīng)用程序的線程路徑的步驟。
結(jié)合第一方面、第一方面的第一種至第三種中任一種實施方式,在第一方面的第五種實施方式中,在所述向所述目標(biāo)線程數(shù)據(jù)寫入請求返回拒絕寫入信息之前,所述方法還包括:
依據(jù)發(fā)起所述目標(biāo)線程數(shù)據(jù)寫入請求的應(yīng)用程序的線程句柄參數(shù),獲取發(fā)起所述目標(biāo)線程數(shù)據(jù)寫入請求的應(yīng)用程序的線程路徑;
提取發(fā)起所述目標(biāo)線程數(shù)據(jù)寫入請求的應(yīng)用程序的線程路徑中的最后子目錄下的字符串,如果提取的字符串與預(yù)先設(shè)置的攔截應(yīng)用程序字符串庫中任一攔截應(yīng)用程序字符串相匹配,執(zhí)行所述向所述目標(biāo)線程數(shù)據(jù)寫入請求返回拒絕寫入信息的步驟。
第二方面,本發(fā)明實施例提供一種保護線程數(shù)據(jù)的裝置,包括:掛鉤模塊、句柄寫入模塊、線程路徑獲取模塊以及匹配處理模塊,其中,
掛鉤模塊,用于在預(yù)先注入到內(nèi)核層中的掛鉤函數(shù)監(jiān)測到設(shè)置線程上下文內(nèi)核函數(shù)被調(diào)用時,掛鉤所述設(shè)置線程上下文內(nèi)核函數(shù);
句柄寫入模塊,用于獲取調(diào)用所述設(shè)置線程上下文內(nèi)核函數(shù)的應(yīng)用程序發(fā)起的目標(biāo)線程數(shù)據(jù)寫入請求,將所述目標(biāo)線程數(shù)據(jù)寫入請求中的目標(biāo)應(yīng)用程序?qū)?yīng)的目標(biāo)線程句柄寫入所述掛鉤函數(shù)中的線程句柄參數(shù)中;
線程路徑獲取模塊,用于依據(jù)寫入所述掛鉤函數(shù)中的線程句柄參數(shù),獲取所述目標(biāo)應(yīng)用程序的線程路徑;
匹配處理模塊,如果獲取的線程路徑與預(yù)先設(shè)置的目標(biāo)應(yīng)用程序線程目錄路徑庫中任一目標(biāo)應(yīng)用程序線程目錄路徑相匹配,向所述目標(biāo)線程數(shù)據(jù)寫入請求返回拒絕寫入信息。
結(jié)合第二方面,在第二方面的第一種實施方式中,所述裝置還包括:
掛鉤函數(shù)注入模塊,用于調(diào)用操作系統(tǒng)的掛鉤函數(shù)窗口設(shè)置接口,設(shè)置用于監(jiān)測調(diào)用所述設(shè)置線程上下文內(nèi)核函數(shù)的掛鉤函數(shù),并獲取操作系統(tǒng)的根權(quán)限以注入所述掛鉤函數(shù)。
結(jié)合第二方面的第一種實施方式,在第二方面的第二種實施方式中,所述掛鉤函數(shù)注入模塊包括:調(diào)用單元、設(shè)置單元、函數(shù)地址獲取單元、替換單元以及注入單元,其中,
調(diào)用單元,用于調(diào)用操作系統(tǒng)的掛鉤函數(shù)窗口設(shè)置接口;
設(shè)置單元,用于設(shè)置用于監(jiān)測調(diào)用所述設(shè)置線程上下文內(nèi)核函數(shù)的掛鉤函數(shù);
函數(shù)地址獲取單元,用于獲取操作系統(tǒng)的根權(quán)限,在系統(tǒng)服務(wù)描述符表中查詢并獲取所述設(shè)置線程上下文內(nèi)核函數(shù)的函數(shù)地址,存儲所述設(shè)置線程上下文內(nèi)核函數(shù)的函數(shù)地址;
替換單元,用于利用所述掛鉤函數(shù)替換所述設(shè)置線程上下文內(nèi)核函數(shù),設(shè)置所述掛鉤函數(shù)在所述系統(tǒng)服務(wù)描述符表中的函數(shù)地址不同于所述設(shè)置線程上下文內(nèi)核函數(shù)的函數(shù)地址;
注入單元,用于在所述掛鉤函數(shù)中設(shè)置存儲的所述設(shè)置線程上下文內(nèi)核函數(shù)的函數(shù)地址,以用于調(diào)用所述設(shè)置線程上下文內(nèi)核函數(shù)。
結(jié)合第二方面,在第二方面的第三種實施方式中,所述線程路徑獲取模塊包括:枚舉單元、線程句柄獲取單元以及線程路徑獲取單元,其中,
枚舉單元,用于枚舉操作系統(tǒng)的所有線程的線程句柄;
線程句柄獲取單元,用于獲取與所述掛鉤函數(shù)的線程句柄參數(shù)相匹配的線程句柄;
線程路徑獲取單元,用于調(diào)用線程路徑獲取內(nèi)核函數(shù),查詢獲取所述相匹配的線程句柄的線程路徑。
結(jié)合第二方面、第二方面的第一種至第三種中任一種實施方式,在第二方面的第四種實施方式中,所述裝置還包括:
應(yīng)用程序匹配模塊,用于依據(jù)發(fā)起所述目標(biāo)線程數(shù)據(jù)寫入請求的應(yīng)用程序的線程句柄參數(shù),獲取發(fā)起所述目標(biāo)線程數(shù)據(jù)寫入請求的應(yīng)用程序的線程路徑;提取發(fā)起所述目標(biāo)線程數(shù)據(jù)寫入請求的應(yīng)用程序的線程路徑中的最后子目錄下的字符串,如果提取的字符串與預(yù)先設(shè)置的攔截應(yīng)用程序字符串庫中任一攔截應(yīng)用程序字符串相匹配,通知線程路徑獲取模塊。
結(jié)合第二方面、第二方面的第一種至第三種中任一種實施方式,在第二方面的第五種實施方式中,所述匹配處理模塊包括:線程路徑匹配單元、線程路徑定位單元、提取單元以及處理單元,其中,
線程路徑匹配單元,如果獲取的線程路徑與預(yù)先設(shè)置的目標(biāo)應(yīng)用程序線程目錄路徑庫中任一目標(biāo)應(yīng)用程序線程目錄路徑相匹配,通知線程路徑定位單元;
線程路徑定位單元,用于依據(jù)發(fā)起所述目標(biāo)線程數(shù)據(jù)寫入請求的應(yīng)用程序的線程句柄參數(shù),獲取發(fā)起所述目標(biāo)線程數(shù)據(jù)寫入請求的應(yīng)用程序的線程路徑;
提取單元,用于提取發(fā)起所述目標(biāo)線程數(shù)據(jù)寫入請求的應(yīng)用程序的線程路徑中的最后子目錄下的字符串,如果提取的字符串與預(yù)先設(shè)置的攔截應(yīng)用程序字符串庫中任一攔截應(yīng)用程序字符串相匹配,通知處理單元;
處理單元,用于向所述目標(biāo)線程數(shù)據(jù)寫入請求返回拒絕寫入信息。
第三方面,本發(fā)明實施例提供一種電子設(shè)備,所述電子設(shè)備包括:殼體、處理器、存儲器、電路板和電源電路,其中,電路板安置在殼體圍成的空間內(nèi)部,處理器和存儲器設(shè)置在電路板上;電源電路,用于為上述電子設(shè)備的各個電路或器件供電;存儲器用于存儲可執(zhí)行程序代碼;處理器通過讀取存儲器中存儲的可執(zhí)行程序代碼來運行與可執(zhí)行程序代碼對應(yīng)的程序,用于執(zhí)行前述任一所述的保護線程數(shù)據(jù)的方法。
本發(fā)明實施例提供的一種保護線程數(shù)據(jù)的方法、裝置及電子設(shè)備,通過在預(yù)先注入到內(nèi)核層中的掛鉤函數(shù)監(jiān)測到設(shè)置線程上下文內(nèi)核函數(shù)被調(diào)用時,掛鉤所述設(shè)置線程上下文內(nèi)核函數(shù);獲取調(diào)用所述設(shè)置線程上下文內(nèi)核函數(shù)的應(yīng)用程序發(fā)起的目標(biāo)線程數(shù)據(jù)寫入請求,將所述目標(biāo)線程數(shù)據(jù)寫入請求中的目標(biāo)應(yīng)用程序?qū)?yīng)的目標(biāo)線程句柄寫入所述掛鉤函數(shù)中的線程句柄參數(shù)中;依據(jù)寫入所述掛鉤函數(shù)中的線程句柄參數(shù),獲取所述目標(biāo)應(yīng)用程序的線程路徑;如果獲取的線程路徑與預(yù)先設(shè)置的目標(biāo)應(yīng)用程序線程目錄路徑庫中任一目標(biāo)應(yīng)用程序線程目錄路徑相匹配,向所述目標(biāo)線程數(shù)據(jù)寫入請求返回拒絕寫入信息,能夠有效提升線程數(shù)據(jù)安全,以解決現(xiàn)有的保護線程數(shù)據(jù)的方法中,惡意應(yīng)用程序利用線程上下文內(nèi)核函數(shù)對目標(biāo)線程執(zhí)行線程數(shù)據(jù)寫入操作,從而破壞操作系統(tǒng)的問題。
附圖說明
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其它的附圖。
圖1為本發(fā)明的實施例一保護線程數(shù)據(jù)的方法流程示意圖;
圖2為本發(fā)明的實施例二保護線程數(shù)據(jù)的裝置結(jié)構(gòu)示意圖;
圖3為本發(fā)明電子設(shè)備一個實施例的結(jié)構(gòu)示意圖。
具體實施方式
下面結(jié)合附圖對本發(fā)明實施例進行詳細描述。
應(yīng)當(dāng)明確,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例。基于本發(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其它實施例,都屬于本發(fā)明保護的范圍。
圖1為本發(fā)明的實施例一保護線程數(shù)據(jù)的方法流程示意圖,如圖1所示,本實施例的方法可以包括:
步驟101,在預(yù)先注入到內(nèi)核層中的掛鉤函數(shù)監(jiān)測到設(shè)置線程上下文內(nèi)核函數(shù)被調(diào)用時,掛鉤所述設(shè)置線程上下文內(nèi)核函數(shù);
本實施例中,作為一可選實施例,設(shè)置線程上下文內(nèi)核函數(shù)為NtSetContextThread內(nèi)核函數(shù),用于執(zhí)行線程數(shù)據(jù)編輯。
本實施例中,通過分析,當(dāng)應(yīng)用程序,例如惡意應(yīng)用程序?qū)δ繕?biāo)應(yīng)用程序的目標(biāo)線程對應(yīng)的線程數(shù)據(jù)進行修改時,首先需要調(diào)用開啟線程內(nèi)核函數(shù)(NtOpenThread內(nèi)核函數(shù))打開目標(biāo)線程獲取到目標(biāo)線程對應(yīng)的線程句柄,然后,通過獲取的線程句柄調(diào)用NtSetContextThread內(nèi)核函數(shù)進行寫(編輯)線程數(shù)據(jù)的操作,以修改相應(yīng)的線程數(shù)據(jù),從而控制目標(biāo)應(yīng)用程序?qū)?yīng)的目標(biāo)線程的執(zhí)行。因而,本實施例中,通過注入掛鉤(Hook)函數(shù),掛鉤NtSetContextThread內(nèi)核函數(shù),即可實現(xiàn)惡意應(yīng)用程序?qū)δ繕?biāo)線程執(zhí)行寫線程數(shù)據(jù)的攔截。
本實施例中,注入的掛鉤(Hook)函數(shù)用于監(jiān)聽設(shè)置線程上下文內(nèi)核函數(shù)的相關(guān)操作(寫線程數(shù)據(jù)操作),并在相關(guān)操作對應(yīng)的目標(biāo)應(yīng)用程序線程(目標(biāo)線程)與預(yù)先設(shè)置的目標(biāo)應(yīng)用程序線程相匹配時,攔截該相關(guān)操作,轉(zhuǎn)由注入的掛鉤函數(shù)對該相關(guān)操作進行處理,并向調(diào)用設(shè)置線程上下文內(nèi)核函數(shù)的調(diào)用者(例如,一些惡意應(yīng)用程序)返回相應(yīng)處理結(jié)果。
本實施例中,掛鉤函數(shù)可以采用能夠?qū)崿F(xiàn)本實施例后續(xù)步驟相應(yīng)功能的任意語言進行編程得到,例如,可以采用超級文本預(yù)處理語言(PHP,Hypertext Preprocessor)、C、C++、Linux等語言進行編程得到。
作為一可選實施例,可在安全防護軟件在加載防護驅(qū)動時注入掛鉤函數(shù),例如,在金山毒霸防御驅(qū)動加載時注入掛鉤函數(shù)。
本實施例中,作為一可選實施例,在所述在預(yù)先注入到內(nèi)核層中的掛鉤函數(shù)監(jiān)測到設(shè)置線程上下文內(nèi)核函數(shù)被調(diào)用時之前,該方法還可以包括:
調(diào)用操作系統(tǒng)的掛鉤函數(shù)窗口設(shè)置(SetWindowsHookEx)接口,設(shè)置用于監(jiān)測調(diào)用所述設(shè)置線程上下文內(nèi)核函數(shù)的掛鉤函數(shù),并獲取操作系統(tǒng)的根權(quán)限以注入所述掛鉤函數(shù)。
本實施例中,作為一可選實施例,所述注入所述掛鉤函數(shù)包括:
A11,在系統(tǒng)服務(wù)描述符表(SSDT,System Services Descriptor Table)中查詢并獲取所述設(shè)置線程上下文內(nèi)核函數(shù)的函數(shù)地址,存儲所述設(shè)置線程上下文內(nèi)核函數(shù)的函數(shù)地址;
本實施例中,SSDT是一將ring3,即應(yīng)用層的Win32API和ring0,即內(nèi)核層的內(nèi)核API聯(lián)系起來的描述符表,SSDT并不僅僅只包含一個龐大的函數(shù)地址索引表,還包含著一些其它有用的信息,例如,地址索引的基地址、服務(wù)函數(shù)個數(shù)等。通過修改SSDT的函數(shù)地址,可以對常用Windows函數(shù)及API進行鉤子處理,從而有效防控惡意線程對安全防護線程或進程的惡意攻擊。
A12,利用所述掛鉤函數(shù)替換所述設(shè)置線程上下文內(nèi)核函數(shù),設(shè)置所述掛鉤函數(shù)在所述系統(tǒng)服務(wù)描述符表中的函數(shù)地址不同于所述設(shè)置線程上下文內(nèi)核函數(shù)的函數(shù)地址;
A13,在所述掛鉤函數(shù)中設(shè)置存儲的所述設(shè)置線程上下文內(nèi)核函數(shù)的函數(shù)地址,以用于調(diào)用所述設(shè)置線程上下文內(nèi)核函數(shù)。
本實施例中,通過存儲設(shè)置線程上下文內(nèi)核函數(shù)的函數(shù)地址,可以在掛鉤函數(shù)確認可以允許進行線程數(shù)據(jù)寫操作時,可以調(diào)用設(shè)置線程上下文內(nèi)核函數(shù)以執(zhí)行真實的線程數(shù)據(jù)寫入操作。
步驟102,獲取調(diào)用所述設(shè)置線程上下文內(nèi)核函數(shù)的應(yīng)用程序發(fā)起的目標(biāo)線程數(shù)據(jù)寫入請求,將所述目標(biāo)線程數(shù)據(jù)寫入請求中的目標(biāo)應(yīng)用程序?qū)?yīng)的目標(biāo)線程句柄寫入所述掛鉤函數(shù)中的線程句柄參數(shù)中;
本實施例中,當(dāng)惡意應(yīng)用程序通過調(diào)用NtOpenThread內(nèi)核函數(shù)發(fā)起目標(biāo)線程數(shù)據(jù)寫入請求時,在目標(biāo)線程數(shù)據(jù)寫入請求中攜帶有目標(biāo)應(yīng)用程序?qū)?yīng)的目標(biāo)線程句柄。
本實施例中,作為一可選實施例,在掛鉤函數(shù)中,包含有線程句柄參數(shù),線程句柄參數(shù)為一指針或線程標(biāo)識,指向一塊包含具體信息數(shù)據(jù)的內(nèi)存,是線程路徑的索引,本實施例中,通過將目標(biāo)線程數(shù)據(jù)寫入請求中攜帶的目標(biāo)線程句柄寫入到線程句柄參數(shù)中,可以在后續(xù)中依據(jù)該寫入有目標(biāo)線程句柄的線程句柄參數(shù),獲取對應(yīng)的線程路徑。
步驟103,依據(jù)寫入所述掛鉤函數(shù)中的線程句柄參數(shù),獲取所述目標(biāo)應(yīng)用程序的線程路徑;
本實施例中,作為一可選實施例,所述依據(jù)寫入所述掛鉤函數(shù)中的線程句柄參數(shù),獲取所述目標(biāo)應(yīng)用程序的線程路徑包括:
B11,枚舉操作系統(tǒng)的所有線程的線程句柄;
本實施例中,作為一可選實施例,枚舉操作系統(tǒng)的所有線程的線程句柄包括:
調(diào)用線程句柄獲取內(nèi)核函數(shù),獲取操作系統(tǒng)的所有線程的線程句柄。
本實施例中,作為一可選實施例,線程句柄獲取內(nèi)核函數(shù)包括:ObReferenceObjectByHandle內(nèi)核函數(shù)以及IoThreadToProcess內(nèi)核函數(shù)。
B12,獲取與所述掛鉤函數(shù)的線程句柄參數(shù)相匹配的線程句柄;
B13,調(diào)用線程路徑獲取內(nèi)核函數(shù),查詢獲取所述相匹配的線程句柄的線程路徑。
本實施例中,作為一可選實施例,線程路徑獲取內(nèi)核函數(shù)為ZwQueryInformationProcess內(nèi)核函數(shù)或PsGetCurrentProcess內(nèi)核函數(shù)。例如,如果與所述掛鉤函數(shù)的線程句柄參數(shù)相匹配的線程句柄為金山毒霸的安全防護線程句柄,調(diào)用ZwQueryInformationProcess內(nèi)核函數(shù)或PsGetCurrentProcess內(nèi)核函數(shù),查詢得到的線程路徑格式可以為:C:\Program Files\kingsoft\kingsoft antivirus\kxetray.exe、kxescore.exe等。
步驟104,如果獲取的線程路徑與預(yù)先設(shè)置的目標(biāo)應(yīng)用程序線程目錄路徑庫中任一目標(biāo)應(yīng)用程序線程目錄路徑相匹配,向所述目標(biāo)線程數(shù)據(jù)寫入請求返回拒絕寫入信息。
本實施例中,預(yù)先設(shè)置需要保護的目標(biāo)應(yīng)用程序線程目錄路徑庫,當(dāng)獲取的線程路徑與目標(biāo)應(yīng)用程序線程目錄路徑庫中任一目標(biāo)應(yīng)用程序線程目錄路徑相匹配時,需要對該目標(biāo)應(yīng)用程序線程進行保護。
本實施例中,作為一可選實施例,在所述依據(jù)寫入所述掛鉤函數(shù)中的線程句柄參數(shù),獲取所述目標(biāo)應(yīng)用程序的線程路徑之前,該方法還包括:
C11,依據(jù)發(fā)起所述目標(biāo)線程數(shù)據(jù)寫入請求的應(yīng)用程序的線程句柄參數(shù),獲取發(fā)起所述目標(biāo)線程數(shù)據(jù)寫入請求的應(yīng)用程序的線程路徑;
本實施例中,通過調(diào)用PsGetCurrentProcess內(nèi)核函數(shù)或ZwQueryInformationProcess內(nèi)核函數(shù),可查詢到發(fā)起所述目標(biāo)線程數(shù)據(jù)寫入請求的應(yīng)用程序的線程路徑,例如,C:\windows\system32\ab22.exe。
C12,提取發(fā)起所述目標(biāo)線程數(shù)據(jù)寫入請求的應(yīng)用程序的線程路徑中的最后子目錄下的字符串,如果提取的字符串與預(yù)先設(shè)置的攔截應(yīng)用程序字符串庫中任一攔截應(yīng)用程序字符串相匹配,執(zhí)行所述依據(jù)寫入所述掛鉤函數(shù)中的線程句柄參數(shù),獲取所述目標(biāo)應(yīng)用程序的線程路徑的步驟。
本實施例中,以前述為例,線程路徑中的最后子目錄下的字符串為ab22.exe,通過匹配線程中的字符串,以判斷發(fā)起所述目標(biāo)線程數(shù)據(jù)寫入請求的應(yīng)用程序是否為惡意應(yīng)用程序,如果不是,則無需處理,如果是,則在該應(yīng)用程序向預(yù)先設(shè)置的目標(biāo)應(yīng)用程序?qū)懭刖€程數(shù)據(jù)時,需要進行阻止。例如,線程路徑中的最后子目錄下的字符串包括:ab22.exe、ac22.exe、av22.exe等時,確認提取的字符串與預(yù)先設(shè)置的攔截應(yīng)用程序字符串庫中任一攔截應(yīng)用程序字符串相匹配。
本實施例中,作為一可選實施例,該方法還包括:
如果提取的字符串與預(yù)先設(shè)置的攔截應(yīng)用程序字符串庫中所有攔截應(yīng)用程序字符串均不相匹配,通知所述設(shè)置線程上下文內(nèi)核函數(shù)對所述目標(biāo)線程執(zhí)行線程數(shù)據(jù)寫操作。
作為另一可選實施例,在所述向所述目標(biāo)線程數(shù)據(jù)寫入請求返回拒絕寫入信息之前,該方法還包括:
D11,依據(jù)發(fā)起所述目標(biāo)線程數(shù)據(jù)寫入請求的應(yīng)用程序的線程句柄參數(shù),獲取發(fā)起所述目標(biāo)線程數(shù)據(jù)寫入請求的應(yīng)用程序的線程路徑;
D12,提取發(fā)起所述目標(biāo)線程數(shù)據(jù)寫入請求的應(yīng)用程序的線程路徑中的最后子目錄下的字符串,如果提取的字符串與預(yù)先設(shè)置的攔截應(yīng)用程序字符串庫中任一攔截應(yīng)用程序字符串相匹配,執(zhí)行所述向所述目標(biāo)線程數(shù)據(jù)寫入請求返回拒絕寫入信息的步驟。
本實施例中,可以是在判斷寫入線程數(shù)據(jù)是針對目標(biāo)線程后,判斷發(fā)起寫入線程數(shù)據(jù)的應(yīng)用程序是否為惡意應(yīng)用程序,如果是,則進行阻止,如果不是,則通知所述設(shè)置線程上下文內(nèi)核函數(shù)對所述目標(biāo)線程執(zhí)行線程數(shù)據(jù)寫操作。
本實施例中,在掛鉤函數(shù)中,直接返回一拒絕寫入信息,退出執(zhí)行線程數(shù)據(jù)寫入的操作,使得NtSetContextThread內(nèi)核函數(shù)不會執(zhí)行到寫入線程數(shù)據(jù)的流程,從而達到攔截應(yīng)用程序惡意修改線程數(shù)據(jù)的目的。
本本實施例一保護線程數(shù)據(jù)的方法,通過在預(yù)先注入到內(nèi)核層中的掛鉤函數(shù)監(jiān)測到設(shè)置線程上下文內(nèi)核函數(shù)被調(diào)用時,掛鉤所述設(shè)置線程上下文內(nèi)核函數(shù);獲取調(diào)用所述設(shè)置線程上下文內(nèi)核函數(shù)的應(yīng)用程序發(fā)起的目標(biāo)線程數(shù)據(jù)寫入請求,將所述目標(biāo)線程數(shù)據(jù)寫入請求中的目標(biāo)應(yīng)用程序?qū)?yīng)的目標(biāo)線程句柄寫入所述掛鉤函數(shù)中的線程句柄參數(shù)中;依據(jù)寫入所述掛鉤函數(shù)中的線程句柄參數(shù),獲取所述目標(biāo)應(yīng)用程序的線程路徑;如果獲取的線程路徑與預(yù)先設(shè)置的目標(biāo)應(yīng)用程序線程目錄路徑庫中任一目標(biāo)應(yīng)用程序線程目錄路徑相匹配,向所述目標(biāo)線程數(shù)據(jù)寫入請求返回拒絕寫入信息。這樣,通過掛鉤設(shè)置線程上下文內(nèi)核函數(shù),在掛鉤函數(shù)里,判斷目標(biāo)應(yīng)用程序?qū)?yīng)的目標(biāo)線程路徑是否在預(yù)設(shè)的目標(biāo)應(yīng)用程序線程目錄路徑庫內(nèi),從而杜絕惡意應(yīng)用程序利用線程上下文內(nèi)核函數(shù)對目標(biāo)線程執(zhí)行線程數(shù)據(jù)寫入操作以破壞操作系統(tǒng),有利于提高安全線程自我保護能力以及線程數(shù)據(jù)安全,對維護操作系統(tǒng)安全有積極意義。
圖2為本發(fā)明的實施例二保護線程數(shù)據(jù)的裝置結(jié)構(gòu)示意圖,如圖2所示,本實施例的裝置可以包括:掛鉤模塊21、句柄寫入模塊22、線程路徑獲取模塊23以及匹配處理模塊24,其中,
掛鉤模塊21,用于在預(yù)先注入到內(nèi)核層中的掛鉤函數(shù)監(jiān)測到設(shè)置線程上下文內(nèi)核函數(shù)被調(diào)用時,掛鉤所述設(shè)置線程上下文內(nèi)核函數(shù);
本實施例中,作為一可選實施例,設(shè)置線程上下文內(nèi)核函數(shù)為NtSetContextThread內(nèi)核函數(shù)。
本實施例中,掛鉤函數(shù)可以采用能夠?qū)崿F(xiàn)本實施例后續(xù)步驟相應(yīng)功能的任意語言進行編程得到,例如,可以采用超級文本預(yù)處理語言(PHP,Hypertext Preprocessor)、C、C++、Linux等語言進行編程得到。
作為一可選實施例,可在安全防護軟件在加載防護驅(qū)動時注入掛鉤函數(shù),例如,在金山毒霸防御驅(qū)動加載時注入掛鉤函數(shù)。
句柄寫入模塊22,用于獲取調(diào)用所述設(shè)置線程上下文內(nèi)核函數(shù)的應(yīng)用程序發(fā)起的目標(biāo)線程數(shù)據(jù)寫入請求,將所述目標(biāo)線程數(shù)據(jù)寫入請求中的目標(biāo)應(yīng)用程序?qū)?yīng)的目標(biāo)線程句柄寫入所述掛鉤函數(shù)中的線程句柄參數(shù)中;
本實施例中,作為一可選實施例,在掛鉤函數(shù)中,包含有線程句柄參數(shù),線程句柄參數(shù)為一指針或線程標(biāo)識,指向一塊包含具體信息數(shù)據(jù)的內(nèi)存,是線程路徑的索引,本實施例中,通過將目標(biāo)線程數(shù)據(jù)寫入請求中攜帶的目標(biāo)線程句柄寫入到線程句柄參數(shù)中,可以在后續(xù)中依據(jù)該寫入有目標(biāo)線程句柄的線程句柄參數(shù),獲取對應(yīng)的線程路徑。
線程路徑獲取模塊23,用于依據(jù)寫入所述掛鉤函數(shù)中的線程句柄參數(shù),獲取所述目標(biāo)應(yīng)用程序的線程路徑;
本實施例中,作為一可選實施例,線程路徑獲取模塊23包括:枚舉單元、線程句柄獲取單元以及線程路徑獲取單元(圖中未示出),其中,
枚舉單元,用于枚舉操作系統(tǒng)的所有線程的線程句柄;
本實施例中,作為一可選實施例,枚舉操作系統(tǒng)的所有線程的線程句柄包括:
調(diào)用線程句柄獲取內(nèi)核函數(shù),獲取操作系統(tǒng)的所有線程的線程句柄。
本實施例中,作為一可選實施例,線程句柄獲取內(nèi)核函數(shù)包括:ObReferenceObjectByHandle內(nèi)核函數(shù)以及IoThreadToProcess內(nèi)核函數(shù)。
線程句柄獲取單元,用于獲取與所述掛鉤函數(shù)的線程句柄參數(shù)相匹配的線程句柄;
線程路徑獲取單元,用于調(diào)用線程路徑獲取內(nèi)核函數(shù),查詢獲取所述相匹配的線程句柄的線程路徑。
本實施例中,作為一可選實施例,線程路徑獲取內(nèi)核函數(shù)為ZwQueryInformationProcess內(nèi)核函數(shù)或PsGetCurrentProcess內(nèi)核函數(shù)。
匹配處理模塊24,如果獲取的線程路徑與預(yù)先設(shè)置的目標(biāo)應(yīng)用程序線程目錄路徑庫中任一目標(biāo)應(yīng)用程序線程目錄路徑相匹配,向所述目標(biāo)線程數(shù)據(jù)寫入請求返回拒絕寫入信息。
本實施例中,在掛鉤函數(shù)中,直接返回一拒絕寫入信息,退出執(zhí)行線程數(shù)據(jù)寫入的操作,使得NtSetContextThread內(nèi)核函數(shù)不會執(zhí)行到寫入線程數(shù)據(jù)的流程,從而達到攔截應(yīng)用程序惡意修改線程數(shù)據(jù)的目的。
本實施例中,作為一可選實施例,匹配處理模塊24包括:線程路徑匹配單元、線程路徑定位單元、提取單元以及處理單元(圖中未示出),其中,
線程路徑匹配單元,如果獲取的線程路徑與預(yù)先設(shè)置的目標(biāo)應(yīng)用程序線程目錄路徑庫中任一目標(biāo)應(yīng)用程序線程目錄路徑相匹配,通知線程路徑定位單元;
線程路徑定位單元,用于依據(jù)發(fā)起所述目標(biāo)線程數(shù)據(jù)寫入請求的應(yīng)用程序的線程句柄參數(shù),獲取發(fā)起所述目標(biāo)線程數(shù)據(jù)寫入請求的應(yīng)用程序的線程路徑;
提取單元,用于提取發(fā)起所述目標(biāo)線程數(shù)據(jù)寫入請求的應(yīng)用程序的線程路徑中的最后子目錄下的字符串,如果提取的字符串與預(yù)先設(shè)置的攔截應(yīng)用程序字符串庫中任一攔截應(yīng)用程序字符串相匹配,通知處理單元;
處理單元,用于向所述目標(biāo)線程數(shù)據(jù)寫入請求返回拒絕寫入信息。
本實施例中,作為一可選實施例,匹配處理模塊24還用于如果提取的字符串與預(yù)先設(shè)置的攔截應(yīng)用程序字符串庫中所有攔截應(yīng)用程序字符串均不相匹配,通知所述設(shè)置線程上下文內(nèi)核函數(shù)對所述目標(biāo)線程執(zhí)行線程數(shù)據(jù)寫操作。
本實施例中,作為一可選實施例,該裝置還包括:
應(yīng)用程序匹配模塊25,用于依據(jù)發(fā)起所述目標(biāo)線程數(shù)據(jù)寫入請求的應(yīng)用程序的線程句柄參數(shù),獲取發(fā)起所述目標(biāo)線程數(shù)據(jù)寫入請求的應(yīng)用程序的線程路徑;提取發(fā)起所述目標(biāo)線程數(shù)據(jù)寫入請求的應(yīng)用程序的線程路徑中的最后子目錄下的字符串,如果提取的字符串與預(yù)先設(shè)置的攔截應(yīng)用程序字符串庫中任一攔截應(yīng)用程序字符串相匹配,通知線程路徑獲取模塊23。
本實施例中,作為一可選實施例,應(yīng)用程序匹配模塊25包括:路徑獲取單元以及字符串匹配單元(圖中未示出),其中,
路徑獲取單元,用于依據(jù)發(fā)起所述目標(biāo)線程數(shù)據(jù)寫入請求的應(yīng)用程序的線程句柄參數(shù),獲取發(fā)起所述目標(biāo)線程數(shù)據(jù)寫入請求的應(yīng)用程序的線程路徑;
字符串匹配單元,用于提取發(fā)起所述目標(biāo)線程數(shù)據(jù)寫入請求的應(yīng)用程序的線程路徑中的最后子目錄下的字符串,如果提取的字符串與預(yù)先設(shè)置的攔截應(yīng)用程序字符串庫中任一攔截應(yīng)用程序字符串相匹配,通知線程路徑獲取模塊23。
本實施例中,作為一可選實施例,該裝置還包括:
掛鉤函數(shù)注入模塊26,用于調(diào)用操作系統(tǒng)的掛鉤函數(shù)窗口設(shè)置接口,設(shè)置用于監(jiān)測調(diào)用所述設(shè)置線程上下文內(nèi)核函數(shù)的掛鉤函數(shù),并獲取操作系統(tǒng)的根權(quán)限以注入所述掛鉤函數(shù)。
本實施例中,作為一可選實施例,掛鉤函數(shù)注入模塊26包括:調(diào)用單元、設(shè)置單元、函數(shù)地址獲取單元、替換單元以及注入單元(圖中未示出),其中,
調(diào)用單元,用于調(diào)用操作系統(tǒng)的掛鉤函數(shù)窗口設(shè)置接口;
設(shè)置單元,用于設(shè)置用于監(jiān)測調(diào)用所述設(shè)置線程上下文內(nèi)核函數(shù)的掛鉤函數(shù);
函數(shù)地址獲取單元,用于獲取操作系統(tǒng)的根權(quán)限,在系統(tǒng)服務(wù)描述符表中查詢并獲取所述設(shè)置線程上下文內(nèi)核函數(shù)的函數(shù)地址,存儲所述設(shè)置線程上下文內(nèi)核函數(shù)的函數(shù)地址;
替換單元,用于利用所述掛鉤函數(shù)替換所述設(shè)置線程上下文內(nèi)核函數(shù),設(shè)置所述掛鉤函數(shù)在所述系統(tǒng)服務(wù)描述符表中的函數(shù)地址不同于所述設(shè)置線程上下文內(nèi)核函數(shù)的函數(shù)地址;
注入單元,用于在所述掛鉤函數(shù)中設(shè)置存儲的所述設(shè)置線程上下文內(nèi)核函數(shù)的函數(shù)地址,以用于調(diào)用所述設(shè)置線程上下文內(nèi)核函數(shù)。
本實施例的裝置,可以用于執(zhí)行圖1所示方法實施例的技術(shù)方案,其實現(xiàn)原理和技術(shù)效果類似,此處不再贅述。
需要說明的是,在本文中,諸如第一和第二等之類的關(guān)系術(shù)語僅僅用來將一個實體或者操作與另一個實體或操作區(qū)分開來,而不一定要求或者暗示這些實體或操作之間存在任何這種實際的關(guān)系或者順序。而且,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設(shè)備中還存在另外的相同要素。
本說明書中的各個實施例均采用相關(guān)的方式描述,各個實施例之間相同相似的部分互相參見即可,每個實施例重點說明的都是與其他實施例的不同之處。
尤其,對于裝置實施例而言,由于其基本相似于方法實施例,所以描述的比較簡單,相關(guān)之處參見方法實施例的部分說明即可。
在流程圖中表示或在此以其他方式描述的邏輯和/或步驟,例如,可以被認為是用于實現(xiàn)邏輯功能的可執(zhí)行指令的定序列表,可以具體實現(xiàn)在任何計算機可讀介質(zhì)中,以供指令執(zhí)行系統(tǒng)、裝置或設(shè)備(如基于計算機的系統(tǒng)、包括處理器的系統(tǒng)或其他可以從指令執(zhí)行系統(tǒng)、裝置或設(shè)備取指令并執(zhí)行指令的系統(tǒng))使用,或結(jié)合這些指令執(zhí)行系統(tǒng)、裝置或設(shè)備而使用。就本說明書而言,″計算機可讀介質(zhì)″可以是任何可以包含、存儲、通信、傳播或傳輸程序以供指令執(zhí)行系統(tǒng)、裝置或設(shè)備或結(jié)合這些指令執(zhí)行系統(tǒng)、裝置或設(shè)備而使用的裝置。計算機可讀介質(zhì)的更具體的示例(非窮盡性列表)包括以下:具有一個或多個布線的電連接部(電子裝置),便攜式計算機盤盒(磁裝置),隨機存取存儲器(RAM),只讀存儲器(ROM),可擦除可編輯只讀存儲器(EPROM或閃速存儲器),光纖裝置,以及便攜式光盤只讀存儲器(CDROM)。另外,計算機可讀介質(zhì)甚至可以是可在其上打印所述程序的紙或其他合適的介質(zhì),因為可以例如通過對紙或其他介質(zhì)進行光學(xué)掃描,接著進行編輯、解譯或必要時以其他合適方式進行處理來以電子方式獲得所述程序,然后將其存儲在計算機存儲器中。
應(yīng)當(dāng)理解,本發(fā)明的各部分可以用硬件、軟件、固件或它們的組合來實現(xiàn)。
在上述實施方式中,多個步驟或方法可以用存儲在存儲器中且由合適的指令執(zhí)行系統(tǒng)執(zhí)行的軟件或固件來實現(xiàn)。例如,如果用硬件來實現(xiàn),和在另一實施方式中一樣,可用本領(lǐng)域公知的下列技術(shù)中的任一項或他們的組合來實現(xiàn):具有用于對數(shù)據(jù)信號實現(xiàn)邏輯功能的邏輯門電路的離散邏輯電路,具有合適的組合邏輯門電路的專用集成電路,可編程門陣列(PGA),現(xiàn)場可編程門陣列(FPGA)等。
本發(fā)明實施例還提供一種電子設(shè)備,所述電子設(shè)備包含前述任一實施例所述的裝置。
圖3為本發(fā)明電子設(shè)備一個實施例的結(jié)構(gòu)示意圖,可以實現(xiàn)本發(fā)明圖1-2所示實施例的流程,如圖3所示,上述電子設(shè)備可以包括:殼體31、處理器32、存儲器33、電路板34和電源電路35,其中,電路板34安置在殼體31圍成的空間內(nèi)部,處理器32和存儲器33設(shè)置在電路板34上;電源電路35,用于為上述電子設(shè)備的各個電路或器件供電;存儲器33用于存儲可執(zhí)行程序代碼;處理器32通過讀取存儲器33中存儲的可執(zhí)行程序代碼來運行與可執(zhí)行程序代碼對應(yīng)的程序,用于執(zhí)行前述任一實施例所述的保護線程數(shù)據(jù)的方法。
處理器32對上述步驟的具體執(zhí)行過程以及處理器32通過運行可執(zhí)行程序代碼來進一步執(zhí)行的步驟,可以參見本發(fā)明圖1-2所示實施例的描述,在此不再贅述。
該電子設(shè)備以多種形式存在,包括但不限于:
(1)移動通信設(shè)備:這類設(shè)備的特點是具備移動通信功能,并且以提供話音、數(shù)據(jù)通信為主要目標(biāo)。這類終端包括:智能手機(例如iPhone)、多媒體手機、功能性手機,以及低端手機等。
(2)超移動個人計算機設(shè)備:這類設(shè)備屬于個人計算機的范疇,有計算和處理功能,一般也具備移動上網(wǎng)特性。這類終端包括:PDA、MID和UMPC設(shè)備等,例如iPad。
(3)便攜式娛樂設(shè)備:這類設(shè)備可以顯示和播放多媒體內(nèi)容。該類設(shè)備包括:音頻、視頻播放器(例如iPod),掌上游戲機,電子書,以及智能玩具和便攜式車載導(dǎo)航設(shè)備。
(4)服務(wù)器:提供計算服務(wù)的設(shè)備,服務(wù)器的構(gòu)成包括處理器、硬盤、內(nèi)存、系統(tǒng)總線等,服務(wù)器和通用的計算機架構(gòu)類似,但是由于需要提供高可靠的服務(wù),因此在處理能力、穩(wěn)定性、可靠性、安全性、可擴展性、可管理性等方面要求較高。
(5)其他具有數(shù)據(jù)交互功能的電子設(shè)備。
本技術(shù)領(lǐng)域的普通技術(shù)人員可以理解實現(xiàn)上述實施例方法攜帶的全部或部分步驟是可以通過程序來指令相關(guān)的硬件完成,所述的程序可以存儲于一種計算機可讀存儲介質(zhì)中,該程序在執(zhí)行時,包括方法實施例的步驟之一或其組合。
為了描述的方便,描述以上裝置是以功能分為各種單元/模塊分別描述。當(dāng)然,在實施本發(fā)明時可以把各單元/模塊的功能在同一個或多個軟件和/或硬件中實現(xiàn)。
通過以上的實施方式的描述可知,本領(lǐng)域的技術(shù)人員可以清楚地了解到本
發(fā)明可借助軟件加必需的通用硬件平臺的方式來實現(xiàn)。基于這樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品可以存儲在存儲介質(zhì)中,如ROM/RAM、磁碟、光盤等,包括若干指令用以使得一臺計算機設(shè)備(可以是個人計算機,服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實施例或者實施例的某些部分所述的方法。
以上所述,僅為本發(fā)明的具體實施方式,但本發(fā)明的保護范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護范圍之內(nèi)。因此,本發(fā)明的保護范圍應(yīng)以權(quán)利要求的保護范圍為準。