公務(wù)員期刊網(wǎng) 論文中心 正文

計(jì)算機(jī)漏洞檢測(cè)思考

前言:想要寫(xiě)出一篇引人入勝的文章?我們特意為您整理了計(jì)算機(jī)漏洞檢測(cè)思考范文,希望能給你帶來(lái)靈感和參考,敬請(qǐng)閱讀。

計(jì)算機(jī)漏洞檢測(cè)思考

一、計(jì)算機(jī)安全動(dòng)態(tài)檢測(cè)方法概述

程序在設(shè)計(jì)以及執(zhí)行期內(nèi)有很多共性的東西,比如有控制流(ControlFlow)和數(shù)據(jù)流(DataFlow)。一個(gè)進(jìn)程的內(nèi)存映射會(huì)被分為代碼段(textsection)、只讀數(shù)據(jù)段(rdatasection)、數(shù)據(jù)段(datasection)、資源段(rsrcsection)、堆(heap)、棧(stack)等多個(gè)部分。當(dāng)然在不同的操作系統(tǒng)下它們的多少會(huì)有所不同,比如在UNIX下通常還會(huì)有未初始化的數(shù)據(jù)段(BSS)等等。動(dòng)態(tài)檢測(cè)方法就是在不改變?cè)创a甚至是二進(jìn)制代碼的情況下,對(duì)程序的弱點(diǎn)進(jìn)行檢測(cè)的方法,這類(lèi)檢測(cè)主要通過(guò)修改進(jìn)程運(yùn)行環(huán)境來(lái)實(shí)現(xiàn)。動(dòng)態(tài)檢測(cè)方法主要有:非執(zhí)行棧(Non-ExecutableStack)、非執(zhí)行堆與數(shù)據(jù)(Non-ExecutableHeap/data)、內(nèi)存映射(MemoryMapping)、安全共享庫(kù)(SafeSharedLibraries)、沙箱(Sandbox)和程序解釋(ProgramInterpretation)等。

二、計(jì)算機(jī)安全動(dòng)態(tài)檢測(cè)技術(shù)探討

1、非執(zhí)行棧技術(shù)

基于棧進(jìn)行軟件攻擊的事件最近幾年經(jīng)常發(fā)生,原因就是很多操作系統(tǒng)的棧是可以寫(xiě)與執(zhí)行的,而且內(nèi)部變量尤其是數(shù)組變量都保存在棧中,攻擊者向棧中注入惡意代碼,然后想方設(shè)法來(lái)執(zhí)行這段代碼。棧攻擊技術(shù)的文檔也比較全面,這從某種程度上加速了基于棧的攻擊。一個(gè)最直接的防范棧攻擊的方法就是使得棧不能執(zhí)行代碼。該技術(shù)的檢測(cè)不夠全面,它僅能檢測(cè)并阻止摧毀棧攻擊。一個(gè)攻擊者可以通過(guò)把惡意代碼注入到數(shù)據(jù)段來(lái)繞過(guò)該技術(shù)的檢測(cè),他只需要把棧中返回地址覆蓋掉,使得這個(gè)返回地址指向數(shù)據(jù)段中的惡意代碼就可以了。該技術(shù)可能會(huì)造成小量的兼容性問(wèn)題,因?yàn)橛袀€(gè)別的應(yīng)用程序就是依靠棧執(zhí)行來(lái)正確運(yùn)行的。該技術(shù)對(duì)性能的消耗可以被忽略,有報(bào)告稱這項(xiàng)技術(shù)僅僅在上下文切換時(shí)增加了2到3個(gè)CPU的指令周期。

2、非執(zhí)行堆與數(shù)據(jù)技術(shù)

由于堆是程序運(yùn)行時(shí)動(dòng)態(tài)分配內(nèi)存的區(qū)域,而數(shù)據(jù)段則是程序編譯時(shí)就初始化好了的。很長(zhǎng)時(shí)期以來(lái),由于擔(dān)心非執(zhí)行的堆與數(shù)據(jù)段會(huì)破壞軟件的正常運(yùn)行,所以該方法進(jìn)展緩慢,最近幾年才有些進(jìn)展和文章。如果堆和數(shù)據(jù)段都不能執(zhí)行代碼,攻擊者注入其中的惡意代碼將不能被執(zhí)行。這項(xiàng)技術(shù)和前面的非執(zhí)行棧技術(shù)結(jié)合能起到更全面的作用,使得惡意代碼徹底失去執(zhí)行機(jī)會(huì)。使用該技術(shù)所付出的代價(jià)要比非執(zhí)行棧技術(shù)大一些,因?yàn)樗鼘?duì)內(nèi)核的修改要多一些?,F(xiàn)在已經(jīng)有了大量的實(shí)例可以使用,這個(gè)技術(shù)還是可以接受的。

3、內(nèi)存映射技術(shù)

有些攻擊者通過(guò)使用NULL結(jié)尾的字符串來(lái)覆蓋內(nèi)存,以達(dá)到攻擊的目的。通過(guò)使用映射代碼頁(yè)方法,將使得攻擊者很難通過(guò)NULL結(jié)尾的字符串來(lái)跳轉(zhuǎn)到較低的內(nèi)存區(qū),而且這些代碼本身又可能含有NULL字符。再者,把代碼頁(yè)隨機(jī)地映射到不同的內(nèi)存地址,在某種程度上防止了那些靠猜地址來(lái)進(jìn)行攻擊的攻擊方法。比如對(duì)于緩沖區(qū)溢出的漏洞,攻擊者就是要尋找目標(biāo)進(jìn)程在內(nèi)存中的某些地址,然后構(gòu)造自己的數(shù)據(jù)來(lái)覆蓋這些地址。這些地址在很多操作系統(tǒng)上都是有規(guī)律可以計(jì)算出的。如果使用內(nèi)存映射技術(shù),把代碼頁(yè)映射到隨機(jī)的地址,將給攻擊者增加很大的困難,不做大量的嘗試是不可能查出所需地址的。使用內(nèi)存映射技術(shù)所付出的最大的代價(jià)就是要修改操作系統(tǒng)內(nèi)核、使得操作系統(tǒng)可以把代碼頁(yè)映射到較低的內(nèi)存空間。雖然這個(gè)技術(shù)不需要對(duì)代碼進(jìn)行修改,但要重新鏈接,因?yàn)槎M(jìn)制的地址在程序鏈接階段就確定了。

4、安全共享庫(kù)技術(shù)

很多軟件的安全漏洞來(lái)源于使用了不安全的共享庫(kù),尤其是C&C++,當(dāng)中有很多的函數(shù)都不夠“安全”,比如:strcpy、strcat、gets等等。這些函數(shù)使用不好就會(huì)帶來(lái)災(zāi)難性的后果。用安全共享庫(kù)技術(shù),能在一定程度上阻止攻擊者的攻擊[5,6]。安全共享庫(kù)技術(shù)就是依靠動(dòng)態(tài)鏈接技術(shù),能在程序運(yùn)行期間攔截對(duì)不安全的函數(shù)的調(diào)用,并對(duì)函數(shù)參數(shù)等進(jìn)行檢測(cè),這在Windows和UNIX上都被廣泛應(yīng)用。特別的是,這個(gè)技術(shù)能對(duì)當(dāng)前內(nèi)存大小的上限給出一個(gè)評(píng)估值,這在一定程度上阻止了把數(shù)據(jù)寫(xiě)到評(píng)估邊界的外面。安全共享庫(kù)技術(shù)從技術(shù)的角度很容易開(kāi)發(fā)和配置,而且不需要對(duì)已有的應(yīng)用程序作任何的修改和再編譯。

三、計(jì)算機(jī)安全動(dòng)態(tài)檢測(cè)技術(shù)注意事項(xiàng)

計(jì)算機(jī)軟件設(shè)計(jì)中的安全漏洞動(dòng)態(tài)檢測(cè)技術(shù)就是在程序執(zhí)行的情況下,通過(guò)對(duì)程序的運(yùn)行環(huán)境(環(huán)境變量、內(nèi)存、堆和棧等)進(jìn)行分析,來(lái)檢測(cè)程序是否存在漏洞的技術(shù)。動(dòng)態(tài)檢測(cè)技術(shù)的優(yōu)點(diǎn)就是不需要修改目標(biāo)程序源碼或其二進(jìn)制代碼,這在一定程度上提高程序的保密性?;趧?dòng)態(tài)檢測(cè)技術(shù)的軟件安全漏洞檢測(cè)過(guò)程,需要綜合考慮對(duì)性能的影響、檢測(cè)全面性、誤報(bào)率、使用全面性、便于管理等多方面的因素,以便決定選擇最合適的動(dòng)態(tài)檢測(cè)技術(shù)。