專利名稱:緩沖區(qū)溢出攻擊的檢測(cè)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)緩沖區(qū)溢出攻擊的檢測(cè)方法,更具體的說(shuō),是通過(guò)勾掛系統(tǒng)API函數(shù)調(diào)用,對(duì)壓入堆棧后返回地址的判斷,實(shí)現(xiàn)對(duì)計(jì)算機(jī)緩沖區(qū)攻擊的檢測(cè)。
背景技術(shù):
一直以來(lái),對(duì)計(jì)算機(jī)的入侵和反入侵的斗爭(zhēng)都在激烈地進(jìn)行著,隨著計(jì)算機(jī)越來(lái)越廣泛地使用,這種斗爭(zhēng)的激烈程度也上升到一個(gè)新的高度。緩沖區(qū)溢出是近期呈上升趨勢(shì)的一種攻擊方法,攻擊者在系統(tǒng)當(dāng)中發(fā)現(xiàn)可產(chǎn)生緩沖區(qū)溢的缺陷程序,并針對(duì)該缺陷編寫代碼,使其運(yùn)行攻擊者的指定代碼,攻擊者可借助此種方法獲得系統(tǒng)特權(quán),指示計(jì)算機(jī)破壞文件,改變數(shù)據(jù),泄露敏感信息,產(chǎn)生后門訪問(wèn)點(diǎn),感染或者攻擊其他計(jì)算機(jī)。
目前并沒(méi)有有效避免緩沖區(qū)溢出的方法,而主要的方法就是通過(guò)給系統(tǒng)打補(bǔ)丁,對(duì)已發(fā)現(xiàn)的存在緩沖區(qū)漏洞的程序進(jìn)行修補(bǔ)。但是,對(duì)于更多的尚未被發(fā)現(xiàn)的系統(tǒng)漏洞仍然存在著受到緩沖區(qū)溢出攻擊的危險(xiǎn)。例如,著名的“沖擊波”、“震蕩波”蠕蟲(chóng)病毒,就是利用系統(tǒng)漏洞,進(jìn)行緩沖區(qū)溢出攻擊的最好實(shí)例。
并且,現(xiàn)有的殺毒軟件也對(duì)于新生的利用緩沖區(qū)溢出進(jìn)行攻擊的病毒、木馬的有害程序無(wú)可奈何,因?yàn)槠渲荒芡ㄟ^(guò)對(duì)病毒特征代碼進(jìn)行比較來(lái)做出判斷,因而存在著嚴(yán)重的滯后性。
而且,對(duì)于現(xiàn)有的系統(tǒng)防護(hù)工具來(lái)說(shuō),并沒(méi)有能夠有效檢測(cè)緩沖區(qū)溢出攻擊的方法,即使是技術(shù)領(lǐng)先的防火墻系統(tǒng),也需要用戶可能是緩沖區(qū)溢出后所執(zhí)行的網(wǎng)絡(luò)操作進(jìn)行判斷。然而,對(duì)于眾多計(jì)算機(jī)知識(shí)較少的用戶來(lái)說(shuō),這種判斷不但繁瑣,在不知情的情況下沒(méi)有辦法做出有效且準(zhǔn)確的判斷,因此,在實(shí)用性的方面存在著很大的不足。
發(fā)明內(nèi)容
本發(fā)明就是為了解決上述種種現(xiàn)有技術(shù)的不足而產(chǎn)生的。其目的在于提供一種針對(duì)于緩沖區(qū)溢出攻擊的有效、簡(jiǎn)便且準(zhǔn)確的檢測(cè)方法。
本發(fā)明根據(jù)緩沖區(qū)溢出的一般原理,勾掛系統(tǒng)關(guān)鍵API函數(shù),以檢查程序活動(dòng)期間的動(dòng)作是否在溢出狀態(tài)執(zhí)行,實(shí)時(shí)檢測(cè)溢出行為并阻止該行為的發(fā)生,進(jìn)而從根本上避免了利用緩沖區(qū)溢出方法的攻擊行為發(fā)生。
通過(guò)建立勾掛函數(shù),檢查線程所建立的堆棧幀的返回地址,并根據(jù)該返回地址判斷是否發(fā)生緩沖區(qū)溢出,并在發(fā)現(xiàn)緩沖區(qū)溢出后,將引起該緩沖區(qū)溢出的線程結(jié)束。
本發(fā)明的緩沖區(qū)溢出攻擊的檢測(cè)方法,包括如下步驟2.1)通過(guò)所述勾掛系統(tǒng)API函數(shù)調(diào)用;2.2)檢查返回地址;2.3)判斷返回地址的位置;返回地址的位置如果是在堆棧范圍以內(nèi),則判斷為發(fā)生了棧溢出;2.4)判斷返回地址的屬性;返回地址的屬性如果是可寫,則判斷為發(fā)生了堆溢出;
如上所述緩沖區(qū)溢出攻擊的檢測(cè)方法,其原理是,當(dāng)某一段寫緩沖區(qū)指令執(zhí)行完畢后,需要返回到返回地址處繼續(xù)執(zhí)行,但當(dāng)緩沖區(qū)溢出后,不但寫入了緩沖區(qū),而且改寫了該段緩沖區(qū)的返回地址,如果是惡意攻擊的程序,將把返回地址改寫為剛剛寫入的緩沖區(qū)地址,從而執(zhí)行剛剛寫入的惡意代碼。并且,該惡意代碼執(zhí)行時(shí),一定出現(xiàn)特定的系統(tǒng)API函數(shù)調(diào)用。由于本發(fā)明的方法勾掛(Hook)了該系統(tǒng)API函數(shù)(步驟2.1);因此,可以在其執(zhí)行該函數(shù)調(diào)用之前,檢查其返回地址(步驟2.2);如果不是惡意攻擊的程序,其返回地址將返回到程序區(qū)繼續(xù)執(zhí)行,但是對(duì)于惡意攻擊的程序,卻將返回地址返回到了其剛剛寫入的緩沖區(qū),因此通過(guò)對(duì)該返回地址進(jìn)行判斷,就可以實(shí)現(xiàn)有效的檢測(cè)緩沖區(qū)溢出攻擊的目的。
如上所述,如果返回地址的位置是在堆棧范圍內(nèi),就可以判斷發(fā)生了棧溢出;如果返回地址的屬性是可寫,則判斷為發(fā)生了堆溢出。
因此,通過(guò)本發(fā)明的緩沖區(qū)溢出攻擊的檢測(cè)方法,不但可以準(zhǔn)確、高效的檢測(cè)出緩沖區(qū)溢出的發(fā)生,而且不需要用戶對(duì)其進(jìn)行判斷,對(duì)于眾多的計(jì)算機(jī)知識(shí)很少的用戶來(lái)說(shuō),免去了繁瑣的判斷,使用起來(lái)更加方便,具有更高的實(shí)用價(jià)值。
在本發(fā)明的緩沖區(qū)溢出攻擊的檢測(cè)方法中,如果所述步驟2.3)判斷結(jié)果為發(fā)生棧溢出,或所述步驟2.4)判斷結(jié)果為發(fā)生堆溢出,則通過(guò)調(diào)用系統(tǒng)API函數(shù),將引起該緩沖區(qū)溢出的線程結(jié)束。
因此,可以在緩沖區(qū)溢出發(fā)生后,還沒(méi)有造成嚴(yán)重的后果之前,將該惡意程序結(jié)束,有效的保護(hù)了系統(tǒng)的安全。
本發(fā)明的緩沖區(qū)溢出攻擊的檢測(cè)方法中,所述勾掛的API函數(shù),包括創(chuàng)建進(jìn)程、加載動(dòng)態(tài)庫(kù)、分配內(nèi)存空間、查找關(guān)鍵API函數(shù)地址等。前述這些API函數(shù)是進(jìn)行緩沖區(qū)溢出攻擊的惡意代碼開(kāi)始執(zhí)行時(shí)必須調(diào)用的API函數(shù),因此,只需對(duì)于這些關(guān)鍵的API函數(shù)調(diào)用進(jìn)行勾掛,就能準(zhǔn)確的識(shí)別出緩沖區(qū)溢出攻擊。
另外,可以將本發(fā)明的緩沖區(qū)溢出攻擊的檢測(cè)方法內(nèi)置于病毒防護(hù)系統(tǒng)中,對(duì)于計(jì)算機(jī)防護(hù)系統(tǒng)來(lái)說(shuō),實(shí)現(xiàn)了根本性的改變,具有很高的實(shí)用價(jià)值。
圖1為本發(fā)明的緩沖區(qū)溢出攻擊檢測(cè)方法流程圖。
具體實(shí)施例方式
下面參照附圖,并普遍使用的微軟Windows操作系統(tǒng),對(duì)本發(fā)明的具體實(shí)施例進(jìn)行詳細(xì)說(shuō)明。
通過(guò)建立勾掛函數(shù),檢查線程所建立的堆棧幀的返回地址,并根據(jù)該返回地址判斷是否發(fā)生緩沖區(qū)溢出,并在發(fā)現(xiàn)緩沖區(qū)溢出后,將引起該緩沖區(qū)溢出的線程結(jié)束。
如圖1所示,本發(fā)明的緩沖區(qū)溢出攻擊的檢測(cè)方法,包括如下步驟2.1)通過(guò)所述勾掛系統(tǒng)API函數(shù)調(diào)用;2.2)檢查返回地址;2.3)判斷返回地址的位置;返回地址的位置如果是在堆棧范圍以內(nèi),則判斷為發(fā)生了棧溢出;
2.4)判斷返回地址的屬性;返回地址的屬性如果是可寫,則判斷為發(fā)生了堆溢出;如上所述緩沖區(qū)溢出攻擊的檢測(cè)方法,其原理是,當(dāng)某一段寫緩沖區(qū)指令執(zhí)行完畢后,需要返回到返回地址處繼續(xù)執(zhí)行。但當(dāng)緩沖區(qū)溢出后,不但寫入了緩沖區(qū),而且改寫了該段緩沖區(qū)的返回地址,如果是惡意攻擊的程序,則將返回地址改寫為剛剛寫入的緩沖區(qū)地址,從而在返回后,執(zhí)行剛剛寫入的惡意代碼。并且,該惡意代碼執(zhí)行時(shí),一定出現(xiàn)特定的系統(tǒng)API函數(shù)調(diào)用。由于本發(fā)明的方法勾掛(Hook)了該系統(tǒng)API函數(shù)(步驟2.1);因此,可以在其執(zhí)行該函數(shù)調(diào)用之前,檢查其返回地址(步驟2.2);如果不是惡意攻擊的程序,其返回地址將返回到程序區(qū)繼續(xù)執(zhí)行,但是對(duì)于惡意攻擊的程序,確將返回地址返回到了其剛剛寫入的緩沖區(qū),因此通過(guò)對(duì)該返回地址進(jìn)行判斷,就可以實(shí)現(xiàn)有效的檢測(cè)緩沖區(qū)溢出攻擊的目的。
如上所述,如果返回地址的位置是在堆棧范圍內(nèi),就可以判斷發(fā)生了棧溢出;如果返回地址的屬性是可寫,則判斷為發(fā)生了堆溢出。
因此,通過(guò)本發(fā)明的緩沖區(qū)溢出攻擊的檢測(cè)方法,不但可以準(zhǔn)確、高效的檢測(cè)出緩沖區(qū)溢出的發(fā)生,而且不需要用戶對(duì)其進(jìn)行判斷,對(duì)于眾多的計(jì)算機(jī)知識(shí)很少的用戶來(lái)說(shuō),免去了繁瑣的判斷,使用起來(lái)更加方便,具有更高的實(shí)用價(jià)值。
在本發(fā)明的緩沖區(qū)溢出攻擊的檢測(cè)方法中,如果所述步驟2.3)判斷結(jié)果為發(fā)生棧溢出,或所述步驟2.4)判斷結(jié)果為發(fā)生堆溢出,則通過(guò)調(diào)用系統(tǒng)API函數(shù),將引起該緩沖區(qū)溢出的線程結(jié)束。
因此,可以在緩沖區(qū)溢出發(fā)生后,還沒(méi)有造成嚴(yán)重的后果之前,將該惡意程序結(jié)束,有效的保護(hù)了系統(tǒng)的安全。
下面結(jié)合利用微軟Windows操作系統(tǒng)中LSASS服務(wù)漏洞進(jìn)行攻擊的“震蕩波”病毒,對(duì)本發(fā)明的具體實(shí)施例作詳細(xì)說(shuō)明。
LSASS服務(wù)是微軟Windows操作系統(tǒng)中本地安全驗(yàn)證子系統(tǒng)服務(wù),提供了一個(gè)用于管理本地安全、域身份驗(yàn)證和Active Directory進(jìn)程的接口,用于處理客戶端和服務(wù)器的身份驗(yàn)證。它還包含一些用于支持Active Directory實(shí)用程序的功能。振蕩波病毒利用LSASS服務(wù)中漏洞,構(gòu)造畸形認(rèn)證包,利用Lsass.exe在將消息傳遞到緩沖區(qū)之前并不驗(yàn)證消息長(zhǎng)度的缺陷,使緩沖區(qū)溢出,并改寫返回地址,使該線程跳轉(zhuǎn)至畸形包內(nèi)所攜帶的ShellCode入口處執(zhí)行。
執(zhí)行ShellCode代碼時(shí),當(dāng)首先調(diào)用GetProcAddress來(lái)找winsock.dll的引出函數(shù)的時(shí)候,會(huì)被我們的勾掛函數(shù)截獲,經(jīng)過(guò)判斷,發(fā)現(xiàn)返回地址,是在堆棧中,據(jù)此判斷發(fā)生了棧溢出。然后,通過(guò)調(diào)用ExitThread函數(shù)來(lái)結(jié)束該線程,從而中止了其下載主體代碼的動(dòng)作,從而導(dǎo)致這次攻擊失敗。
如果將本發(fā)明的緩沖區(qū)溢出攻擊的檢測(cè)方法應(yīng)用于微軟Windows操作系統(tǒng)中,其勾掛的API函數(shù),包括創(chuàng)建進(jìn)程CreateProcessA、CreateProcessW及WinExec;加載動(dòng)態(tài)庫(kù)LoadLibraryA、LoadLibraryW;分配內(nèi)存空間HeapAllocate;查找關(guān)鍵API函數(shù)地址GetProcAddress等。
前述這些API函數(shù)是進(jìn)行緩沖區(qū)溢出攻擊的惡意代碼開(kāi)始執(zhí)行時(shí)必須調(diào)用的API函數(shù),因此,只需對(duì)于這些關(guān)鍵的API函數(shù)調(diào)用進(jìn)行勾掛,就能準(zhǔn)確的識(shí)別出緩沖區(qū)溢出攻擊。
另外,可以將本發(fā)明的緩沖區(qū)溢出攻擊的檢測(cè)方法內(nèi)置于病毒防護(hù)系統(tǒng)中,對(duì)于計(jì)算機(jī)防護(hù)系統(tǒng)來(lái)說(shuō),實(shí)現(xiàn)了根本性的改變,具有很高的實(shí)用價(jià)值。
綜上所述,利用本發(fā)明的緩沖區(qū)溢出攻擊的檢測(cè)方法,不但可以高效、準(zhǔn)確的檢查出惡意程序的緩沖區(qū)溢出攻擊,而且避免了現(xiàn)有技術(shù)中的殺毒軟件對(duì)新生病毒特征代碼獲取的滯后性,和防火墻系統(tǒng)使用時(shí)的繁瑣以及給計(jì)算機(jī)知識(shí)很少的用戶帶來(lái)的麻煩。因此,本發(fā)明給計(jì)算機(jī)防護(hù)系統(tǒng)帶來(lái)了革命性的進(jìn)步,即使對(duì)于未知的惡意程序的緩沖區(qū)溢出攻擊,也可以準(zhǔn)確、及時(shí)的發(fā)現(xiàn),并在其還沒(méi)有對(duì)系統(tǒng)造成危害的時(shí)候,將其終止。
通過(guò)上述的說(shuō)明內(nèi)容,本領(lǐng)域相關(guān)工作人員完全可以在不偏離本項(xiàng)發(fā)明技術(shù)思想的范圍內(nèi),進(jìn)行多樣的變更以及修改。因此,本項(xiàng)發(fā)明的技術(shù)性范圍并不局限于說(shuō)明書上的內(nèi)容,必須要根據(jù)權(quán)利范圍來(lái)確定其技術(shù)性范圍。
權(quán)利要求
1.一種緩沖區(qū)溢出攻擊的檢測(cè)方法,其特征在于通過(guò)建立勾掛函數(shù),檢查線程所建立的堆棧幀的返回地址,并根據(jù)該返回地址判斷是否發(fā)生緩沖區(qū)溢出,并在發(fā)現(xiàn)緩沖區(qū)溢出后,將引起該緩沖區(qū)溢出的線程結(jié)束。
2.按照權(quán)利要求1所述攔緩沖區(qū)溢出攻擊的檢測(cè)方法,其特征在于,包括如下步驟2.1)通過(guò)所述勾掛系統(tǒng)API函數(shù)調(diào)用;2.2)檢查返回地址;2.3)判斷返回地址的位置;返回地址的位置如果是在堆棧范圍以內(nèi),則判斷為發(fā)生了棧溢出;2.4)判斷返回地址的屬性;返回地址的屬性如果是可寫,則判斷為發(fā)生了堆溢出。
3.按照權(quán)利要求1或2所述緩沖區(qū)溢出攻擊的檢測(cè)方法,其特征在于,還包括如下步驟如果所述步驟2.3)判斷結(jié)果為發(fā)生棧溢出,或所述步驟2.4)判斷結(jié)果為發(fā)生堆溢出,則通過(guò)調(diào)用系統(tǒng)API函數(shù),將引起該緩沖區(qū)溢出的線程結(jié)束。
4.按照權(quán)利要求2所述緩沖區(qū)溢出攻擊的檢測(cè)方法,其特征在于,所述勾掛的API函數(shù),包括創(chuàng)建進(jìn)程、加載動(dòng)態(tài)庫(kù)、分配內(nèi)存空間、查找關(guān)鍵API函數(shù)地址。
5.按照權(quán)利要求1或2所述緩沖區(qū)溢出攻擊的檢測(cè)方法,其特征在于可以將本發(fā)明的緩沖區(qū)溢出攔截方法內(nèi)置于病毒防護(hù)系統(tǒng)中。
全文摘要
本發(fā)明涉及計(jì)算機(jī)緩沖區(qū)溢出攻擊的檢測(cè)方法,即,通過(guò)建立勾掛函數(shù),檢查線程所建立的堆棧幀的返回地址,并根據(jù)該返回地址判斷是否發(fā)生緩沖區(qū)溢出,并在發(fā)現(xiàn)緩沖區(qū)溢出后,將引起該緩沖區(qū)溢出的線程結(jié)束。利用本發(fā)明的緩沖區(qū)溢出攻擊的檢測(cè)方法,不但可以高效、準(zhǔn)確的檢查出惡意程序的緩沖區(qū)溢出攻擊,而且避免了現(xiàn)有技術(shù)中的殺毒軟件對(duì)新生病毒特征代碼獲取的滯后性,和防火墻系統(tǒng)使用時(shí)的繁瑣以及給計(jì)算機(jī)知識(shí)很少的用戶帶來(lái)的麻煩。即使對(duì)于新生的緩沖區(qū)溢出攻擊的病毒、木馬也可以準(zhǔn)確、高效的進(jìn)行攔截。
文檔編號(hào)G06F9/44GK1818822SQ20051000768
公開(kāi)日2006年8月16日 申請(qǐng)日期2005年2月7日 優(yōu)先權(quán)日2005年2月7日
發(fā)明者劉旭 申請(qǐng)人:福建東方微點(diǎn)信息安全有限責(zé)任公司