Windows操作環(huán)境下基于插樁工具的漏洞檢測(cè)方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于計(jì)算機(jī)領(lǐng)域,具體涉及一種在Windows操作環(huán)境下的基于插粧工具的漏洞檢測(cè)。
【背景技術(shù)】
[0002]軟件漏洞是造成蠕蟲(chóng)、木馬等各類(lèi)攻擊逐漸猖獗的重要原因。近幾年來(lái),重大安全事件屢見(jiàn)不鮮,如2010年I月Google受Microsoft的極光漏洞影響,被黑客攻擊,導(dǎo)致系統(tǒng)故障;2011年12月全球最大的中文IT社區(qū)CSDN被脫庫(kù),造成600萬(wàn)注冊(cè)用戶(hù)的個(gè)人信息被泄露。國(guó)家信息安全漏洞共享平臺(tái)(China Nat1nal Vulnerability Database)從2004年到2014收集的漏洞數(shù)據(jù)顯示,只有在06年到08年間漏洞數(shù)量有所下降,從08年起,漏洞數(shù)量開(kāi)始反彈,被曝光的漏洞不僅在數(shù)量上越來(lái)越多,其危害程度也在急速增長(zhǎng),由此帶來(lái)的安全問(wèn)題也會(huì)日益增多。
[0003]漏洞驗(yàn)證是歸類(lèi)于軟件系統(tǒng)安全領(lǐng)域的黑盒測(cè)試,目標(biāo)文件二進(jìn)制級(jí)的測(cè)試通過(guò)對(duì)大量的漏洞樣本文件的獲取來(lái)完成,在測(cè)試過(guò)程中,將探針插入目標(biāo)代碼中來(lái)監(jiān)控運(yùn)行過(guò)程中是否有異常行為出現(xiàn)。Pin是目前國(guó)內(nèi)外廣泛采用的二進(jìn)制動(dòng)態(tài)插粧工具,其采用JIT(Just-1n-Time)編譯,通過(guò)在進(jìn)程中插入探針實(shí)現(xiàn)對(duì)目標(biāo)進(jìn)程進(jìn)行監(jiān)控的目的。另一方面,動(dòng)態(tài)污點(diǎn)分析技術(shù)(Dynamic Taint Analysis)被外界普遍采納,其在代碼動(dòng)態(tài)運(yùn)行過(guò)程中對(duì)利用軟件漏洞的攻擊行為進(jìn)行探測(cè),從而實(shí)現(xiàn)對(duì)漏洞文件樣本的驗(yàn)證。
[0004]緩沖區(qū)溢出、本地提權(quán)和ROP這三類(lèi)漏洞,是非常普遍、非常危險(xiǎn)的漏洞,在各種操作系統(tǒng)、應(yīng)用軟件廣泛存在,但是當(dāng)前研究?jī)H僅對(duì)一種漏洞進(jìn)行分析處理,比較單一。同時(shí),為保護(hù)互聯(lián)網(wǎng)中用戶(hù)的信息安全,國(guó)家安全部門(mén)以及企業(yè)隨時(shí)都會(huì)捕獲到大量的文件樣本,僅僅依靠靜態(tài)掃描或者人工分析文件樣本會(huì)導(dǎo)致分析進(jìn)度遲緩,特別是在當(dāng)今如此復(fù)雜的網(wǎng)絡(luò)環(huán)境下,海量的文件數(shù)據(jù)有分析需求,而單純的手工分析只能處理有限的樣本。另一方面,多數(shù)樣本文件中的惡意代碼隱藏極深,手工分析等方法無(wú)法準(zhǔn)確地判斷出文件中是否存在對(duì)軟件漏洞的利用等惡意行為。因此,有必要提供一個(gè)穩(wěn)定的自動(dòng)化平臺(tái),用于動(dòng)態(tài)執(zhí)行過(guò)程中,快速且精確地驗(yàn)證文件中是否存在對(duì)漏洞的觸發(fā)等惡意行為。
【發(fā)明內(nèi)容】
[0005]本發(fā)明的發(fā)明目的在于:針對(duì)上述存在的問(wèn)題,提供一種能檢查多種類(lèi)型的漏洞檢測(cè)方法。
[0006]本發(fā)明的Windows操作環(huán)境下基于插粧工具的漏洞檢測(cè)方法,能實(shí)現(xiàn)對(duì)緩沖區(qū)溢出漏洞、本地提權(quán)漏洞和ROP漏洞的檢測(cè)。即對(duì)給定的漏洞樣本文件,采用插粧工具(例如Inter公司的Pin技術(shù))對(duì)樣本動(dòng)態(tài)運(yùn)行過(guò)程中的指令進(jìn)行實(shí)時(shí)反匯編,對(duì)目標(biāo)指令(如call函數(shù)調(diào)用、ret函數(shù)返回等)執(zhí)行前后插入相應(yīng)處理函數(shù)來(lái)獲得進(jìn)程運(yùn)行過(guò)程中的相應(yīng)信息(如寄存器、內(nèi)存分配狀態(tài)、棧幀等),從而可以監(jiān)控進(jìn)程運(yùn)行狀態(tài)。其具體包括下列步驟:
[0007]當(dāng)檢測(cè)到目標(biāo)進(jìn)程執(zhí)行函數(shù)調(diào)用指令時(shí)(例如通過(guò)檢測(cè)目標(biāo)進(jìn)程調(diào)用call指令來(lái)判斷是否執(zhí)行函數(shù)調(diào)用指令),將下一指令的地址存入第一預(yù)設(shè)存儲(chǔ)單元中(例如采用堆棧的方式進(jìn)行存儲(chǔ)),并且將當(dāng)前被調(diào)用函數(shù)的返回地址存入第二預(yù)設(shè)存儲(chǔ)單元中;
[0008]檢查目標(biāo)進(jìn)程的跳轉(zhuǎn)目的地址,若所述目的地址對(duì)應(yīng)的指令不是被調(diào)用函數(shù)的起始指令,則判定目標(biāo)進(jìn)程存在ROP漏洞;
[0009]當(dāng)檢測(cè)到目標(biāo)進(jìn)程執(zhí)行函數(shù)返回指令時(shí)(例如通過(guò)檢測(cè)目標(biāo)進(jìn)程調(diào)用ret指令來(lái)判斷是否執(zhí)行函數(shù)返回指令),檢測(cè)當(dāng)前線(xiàn)程棧中的返回地址是否在第一預(yù)設(shè)存儲(chǔ)單元中存在,若是,則判定目標(biāo)進(jìn)程存在緩沖區(qū)溢出漏洞;判斷所述函數(shù)返回指令的地址與第二預(yù)設(shè)存儲(chǔ)單元中的當(dāng)前被調(diào)用函數(shù)的返回地址是否相同,若否,則保存所述函數(shù)返回指令的地址,當(dāng)檢測(cè)到該地址的函數(shù)返回指令被執(zhí)行K(K ^ 2)次時(shí),則判定目標(biāo)進(jìn)程存在ROP漏洞;針對(duì)緩沖區(qū)溢出漏洞,還可以通過(guò)檢測(cè)是否存在未匹配到函數(shù)調(diào)用指令的函數(shù)返回指令來(lái)判定,例如,系統(tǒng)運(yùn)行的指令存在未匹配到call指令的ret指令,則對(duì)應(yīng)于該ret指令的目標(biāo)進(jìn)程存在緩沖區(qū)溢出漏洞。另外,針對(duì)ROP漏洞,還可以通過(guò)判斷目標(biāo)進(jìn)程的提權(quán)指令地址和跳轉(zhuǎn)目的地址是否在一個(gè)庫(kù)來(lái)判定,即若兩者不在同一個(gè)庫(kù)(操作系統(tǒng)本身所構(gòu)建的對(duì)應(yīng)庫(kù)),則認(rèn)為目標(biāo)進(jìn)程存在ROP漏洞。
[0010]基于函數(shù)調(diào)用接口(API)打開(kāi)預(yù)設(shè)被調(diào)試進(jìn)程(例如可獲取的已有漏洞樣本),再判斷所述預(yù)設(shè)被調(diào)試進(jìn)程能否打開(kāi)目標(biāo)進(jìn)程,若否,則目標(biāo)進(jìn)程存在本地提權(quán)漏洞。
[0011]綜上所述,由于采用了上述技術(shù)方案,本發(fā)明的有益效果是:能夠并發(fā)地對(duì)多個(gè)樣本進(jìn)行處理,對(duì)于滿(mǎn)足緩沖區(qū)溢出,本地提權(quán)和ROP這三類(lèi)漏洞的樣本,能夠自動(dòng)進(jìn)行識(shí)別和檢測(cè)。
【具體實(shí)施方式】
[0012]為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面結(jié)合實(shí)施方式,對(duì)本發(fā)明作進(jìn)一步地詳細(xì)描述。
[0013]實(shí)施例1
[0014]本發(fā)明所述的基于插粧工具的漏洞檢測(cè)的具體實(shí)施為:
[0015]a)以?huà)炱鸱绞絼?chuàng)建目標(biāo)進(jìn)程;
[0016]b)以調(diào)試模式附加到目標(biāo)進(jìn)程;
[0017]c)恢復(fù)目標(biāo)進(jìn)程運(yùn)行直到內(nèi)存管理動(dòng)態(tài)鏈接庫(kù)加載到進(jìn)程空間并完成初始化再次掛起;
[0018]d)將內(nèi)存管理動(dòng)態(tài)鏈接庫(kù)從進(jìn)程空間中分離;
[0019]e)拷貝插粧啟動(dòng)例程到目標(biāo)進(jìn)程空間并將進(jìn)程計(jì)數(shù)器指向該例程;
[0020]f)恢復(fù)目標(biāo)進(jìn)程運(yùn)行;
[0021]g)加載插粧工具模塊枚舉(Pinvm.dll);
[0022]h)加載漏洞觸發(fā)判定模塊;
[0023]i)對(duì)目標(biāo)進(jìn)程進(jìn)行插粧,并執(zhí)行進(jìn)程指令,生成漏洞檢測(cè)報(bào)告。
[0024]上述步驟除步驟h外,均可采用任一慣用方式具體實(shí)現(xiàn),步驟h中所涉及的漏洞出發(fā)判定模塊是用來(lái)判定目標(biāo)進(jìn)程運(yùn)行中是否觸發(fā)了漏洞,漏洞所在位置以及漏洞類(lèi)型。漏洞觸發(fā)判定模塊利用漏洞先驗(yàn)知識(shí)來(lái)判定目標(biāo)進(jìn)程在執(zhí)行過(guò)程中是否存在漏洞,即遭受到漏洞攻擊,其具體執(zhí)行步驟如下:
[0025]1.緩沖區(qū)溢出漏洞觸發(fā)判定:
[0026]緩沖區(qū)溢出型漏洞的判定原理可利用影子棧技術(shù)(Shadow Stack),即當(dāng)目標(biāo)進(jìn)程利用call指令調(diào)用函數(shù)時(shí),將下一條指令地址存入第一影子棧中,當(dāng)執(zhí)行ret指令從當(dāng)前被調(diào)用函數(shù)返回時(shí)檢測(cè)當(dāng)前線(xiàn)程棧中的返回地址是否與該影子棧中的返回地址相同,如不相同則可以判定目標(biāo)程序存在緩沖區(qū)溢出漏洞;
[0027]例如:目標(biāo)進(jìn)程執(zhí)行call MyPrintf (4010B0h)指令,將下一條指令地址(0x401023)存入當(dāng)前線(xiàn)程棧中;漏洞觸發(fā)判定模塊檢測(cè)到call指令時(shí),將下一條指令地址(0x401023)存入第一影子桟中;當(dāng)目標(biāo)進(jìn)程執(zhí)行ret指令,S卩從MyPrintf函數(shù)中返回時(shí),跳轉(zhuǎn)到0x401023處;漏洞觸發(fā)判定模塊檢測(cè)到ret指令時(shí),從第一影子棧中取出對(duì)應(yīng)返回地址與當(dāng)前線(xiàn)程棧中的返回地址比對(duì),當(dāng)比對(duì)結(jié)果不一樣時(shí),可以判定當(dāng)前目標(biāo)進(jìn)程存在緩沖區(qū)溢出漏洞。
[0028]2.ROP漏洞觸發(fā)判定:
[0029]ROP是一種新型的基于代碼復(fù)用技術(shù)的攻擊,攻擊者從已有的庫(kù)或可執(zhí)行文件中提取指令片段,構(gòu)建惡意代碼。本發(fā)明利用插粧工具對(duì)call,ret, jmp指令的完整性檢測(cè)(動(dòng)態(tài)監(jiān)控)進(jìn)行判定:
[0030]call:當(dāng)識(shí)別到目標(biāo)進(jìn)程執(zhí)行call指令時(shí),將被執(zhí)行函數(shù)的返回地址壓入第二影子棧,然后檢查目標(biāo)進(jìn)程的跳轉(zhuǎn)目的地址。如果該目的地址所對(duì)應(yīng)指令不是其所在的函數(shù)的起始指令,則判定目標(biāo)進(jìn)程存在ROP漏洞;例如,執(zhí)行call MyPrintf (4010B0h)指令時(shí),將被執(zhí)行函數(shù)(MyPrintf)的返回地址壓入第二影子棧,再判斷目標(biāo)進(jìn)程的調(diào)準(zhǔn)目的地址所對(duì)應(yīng)的指令是否為MyPrintf的起始指令,若否,則判定當(dāng)前目標(biāo)進(jìn)程存在ROP漏洞。
[0031]ret:當(dāng)識(shí)別到目標(biāo)進(jìn)程執(zhí)行ret指令時(shí),從第二影子棧取出壓入的返回地址,比較兩者是否一致,若否,則記錄該ret指令的內(nèi)存地址,若該內(nèi)存地址的ret指令被執(zhí)行多次(大于或等于2次),則判定當(dāng)前目標(biāo)進(jìn)程存在ROP漏洞;
[0032]jmp:提權(quán)目標(biāo)進(jìn)程的jmp指令地址和跳轉(zhuǎn)目的地址,如果不在一個(gè)庫(kù),則判定當(dāng)前目標(biāo)進(jìn)程存在ROP漏洞。
[0033]3.本地提權(quán)漏洞觸發(fā)判定:
[0034]利用API openprocessstoken去打開(kāi)預(yù)設(shè)被調(diào)試進(jìn)程,由于低權(quán)限進(jìn)程不能打開(kāi)高權(quán)限進(jìn)程的限制,若預(yù)設(shè)被調(diào)試進(jìn)程打開(kāi)目標(biāo)進(jìn)程失敗,那么就可以判定當(dāng)前目標(biāo)進(jìn)程存在漏洞樣本提權(quán)。
[0035]以上所述,僅為本發(fā)明的【具體實(shí)施方式】,本說(shuō)明書(shū)中所公開(kāi)的任一特征,除非特別敘述,均可被其他等效或具有類(lèi)似目的的替代特征加以替換;所公開(kāi)的所有特征、或所有方法或過(guò)程中的步驟,除了互相排斥的特征和/或步驟以外,均可以任何方式組合。
【主權(quán)項(xiàng)】
1.Windows操作環(huán)境下基于插粧工具的漏洞檢測(cè)方法,其特征在于,包括下列步驟: 當(dāng)檢測(cè)到目標(biāo)進(jìn)程執(zhí)行函數(shù)調(diào)用指令時(shí),將下一指令的地址存入第一預(yù)設(shè)存儲(chǔ)單元中,并且將當(dāng)前被調(diào)用函數(shù)的返回地址存入第二預(yù)設(shè)存儲(chǔ)單元中; 檢查目標(biāo)進(jìn)程的跳轉(zhuǎn)目的地址,若所述目的地址對(duì)應(yīng)的指令不是被調(diào)用函數(shù)的起始指令,則判定目標(biāo)進(jìn)程存在ROP漏洞; 當(dāng)檢測(cè)到目標(biāo)進(jìn)程執(zhí)行函數(shù)返回指令時(shí),檢測(cè)當(dāng)前線(xiàn)程棧中的返回地址是否在第一預(yù)設(shè)存儲(chǔ)單元中存在,若是,則判定目標(biāo)進(jìn)程存在緩沖區(qū)溢出漏洞;判斷所述函數(shù)返回指令的地址與第二預(yù)設(shè)存儲(chǔ)單元中的當(dāng)前被調(diào)用函數(shù)的返回地址是否相同,若否,則保存所述函數(shù)返回指令的地址,當(dāng)檢測(cè)到該地址的函數(shù)返回指令被執(zhí)行K次時(shí),則判定目標(biāo)進(jìn)程存在ROP漏洞,其中K彡2 ; 基于函數(shù)調(diào)用接口打開(kāi)預(yù)設(shè)被調(diào)試進(jìn)程,再判斷所述預(yù)設(shè)被調(diào)試進(jìn)程能否打開(kāi)目標(biāo)進(jìn)程,若否,則目標(biāo)進(jìn)程存在本地提權(quán)漏洞。2.如權(quán)利要求1所述的方法,其特征在于,針對(duì)緩沖區(qū)溢出漏洞,還包括:檢測(cè)系統(tǒng)運(yùn)行的指令是否存在未匹配到函數(shù)調(diào)用指令的函數(shù)返回指令若是,則判定目標(biāo)進(jìn)程存在緩沖區(qū)溢出漏洞。3.如權(quán)利要求1或2所述的方法,其特征在于,針對(duì)ROP漏洞,還包括:檢測(cè)目標(biāo)進(jìn)程的提權(quán)指令地址和跳轉(zhuǎn)目的地址是否在一個(gè)庫(kù),若否,則判定目標(biāo)進(jìn)程存在ROP漏洞。
【專(zhuān)利摘要】本發(fā)明公開(kāi)了一種Windows操作環(huán)境下基于插樁工具的漏洞檢測(cè)方法。本發(fā)明為:當(dāng)檢測(cè)到目標(biāo)進(jìn)程執(zhí)行函數(shù)調(diào)用指令時(shí),保存下一指令地址,以及函數(shù)的返回地址;若目標(biāo)進(jìn)程的跳轉(zhuǎn)目的地址對(duì)應(yīng)的指令不是該函數(shù)的起始指令,則判定存在ROP漏洞;當(dāng)檢測(cè)到目標(biāo)進(jìn)程執(zhí)行函數(shù)返回指令時(shí),檢測(cè)當(dāng)前線(xiàn)程棧中的返回地址是否被存儲(chǔ)過(guò),若是,則判定存在緩沖區(qū)溢出漏洞;判斷函數(shù)返回指令地址與所存儲(chǔ)是否相同,若否,則保存該函數(shù)返回指令的地址,當(dāng)檢測(cè)到其被執(zhí)行多次時(shí),則判定目標(biāo)進(jìn)程存在ROP漏洞;基于函數(shù)調(diào)用接口打開(kāi)預(yù)設(shè)被調(diào)試進(jìn)程,再判斷所述預(yù)設(shè)被調(diào)試進(jìn)程能否打開(kāi)目標(biāo)進(jìn)程,若否,則存在本地提權(quán)漏洞。本發(fā)明能夠并發(fā)地對(duì)多個(gè)樣本進(jìn)行自動(dòng)識(shí)別和檢測(cè)。
【IPC分類(lèi)】G06F21/57
【公開(kāi)號(hào)】CN105184169
【申請(qǐng)?zhí)枴緾N201510585330
【發(fā)明人】張小松, 向琦, 牛偉納, 鮑凱, 唐海洋, 曹思宇, 岳豪
【申請(qǐng)人】電子科技大學(xué)
【公開(kāi)日】2015年12月23日
【申請(qǐng)日】2015年9月14日