席朋朋
海南師范大學(xué),海南 海口570100
?
軟件設(shè)計(jì)中的安全漏洞動(dòng)態(tài)檢測(cè)技術(shù)探討
席朋朋
海南師范大學(xué),海南???70100
摘要:計(jì)算機(jī)軟件安全問(wèn)題直接關(guān)系到我國(guó)信息技術(shù)產(chǎn)業(yè)的快速發(fā)展,軟件安全不僅涉及到人們的財(cái)產(chǎn)安全還涉及到人們對(duì)身份信息安全,因而軟件安全是軟件產(chǎn)業(yè)中的重要內(nèi)容。而軟件設(shè)計(jì)是產(chǎn)生軟件安全漏洞的主要環(huán)節(jié),所以為了提高軟件安全的系數(shù)和促進(jìn)軟件產(chǎn)業(yè)的迅速發(fā)展,從業(yè)人員應(yīng)該重視軟件生產(chǎn)中的安全漏洞檢測(cè)技術(shù)。
關(guān)鍵詞:軟件設(shè)計(jì);安全漏洞;動(dòng)態(tài)檢測(cè)
計(jì)算機(jī)的基礎(chǔ)就是軟件,其中包括系統(tǒng)軟件和應(yīng)用軟件,而軟件的安全系數(shù)決定了軟件的性能,所以為了保證軟件的安全就應(yīng)該從根源上避免漏洞的產(chǎn)生。軟件設(shè)計(jì)是軟件開發(fā)的重要階段,同時(shí)軟件程序的編碼也是軟件產(chǎn)生漏洞的主要地方,所以重視軟件設(shè)計(jì)中的安全漏洞動(dòng)態(tài)檢測(cè)技術(shù)是社會(huì)發(fā)展的必然。就此本文與讀者對(duì)軟件設(shè)計(jì)中的安全漏洞動(dòng)態(tài)檢測(cè)技術(shù)進(jìn)行共同探討。
軟件程序在設(shè)計(jì)過(guò)程中有很多可以共用的代碼段,如控制流和數(shù)據(jù)流。一個(gè)進(jìn)程的內(nèi)存映射包括代碼段、資源段、數(shù)據(jù)段、等部分,在不同的軟件系統(tǒng)中,它們具有不同的表現(xiàn)形式。如在UNIX中,除了上述的代碼段還有未經(jīng)過(guò)初始化的數(shù)據(jù)段。動(dòng)態(tài)檢測(cè)方法就是在保持源代碼的情況下,通過(guò)對(duì)改變進(jìn)程運(yùn)行環(huán)境來(lái)對(duì)程序的異常和錯(cuò)誤進(jìn)行檢測(cè)。
其主要方法包括非執(zhí)行棧、非執(zhí)行堆與數(shù)據(jù)、內(nèi)存映射、安全共享庫(kù)、沙箱。
非執(zhí)行棧技術(shù);堆棧是計(jì)算機(jī)軟件程序中的一個(gè)重要概念,其實(shí)它就是數(shù)據(jù)結(jié)構(gòu),將數(shù)據(jù)按照序排列,在使用數(shù)據(jù)時(shí)只能從棧頂進(jìn)行數(shù)據(jù)的操作。在近幾年,基于棧的攻擊事件越來(lái)越多,其主要原因就是棧具有可寫入性和執(zhí)行性。而且數(shù)據(jù)變量都是存儲(chǔ)在棧中,如果攻擊者向其中寫入代碼就會(huì)使棧執(zhí)行這段代碼。防御這種攻擊行為的有效方法就是讓棧不執(zhí)行代碼,這樣就不會(huì)造成攻擊。但是這種方法存在一個(gè)重要的問(wèn)題就是軟件性能問(wèn)題。雖然它只需要在操作系統(tǒng)層面進(jìn)行程序修改,但是同時(shí)很容易出現(xiàn)棧溢出漏洞和堆溢出漏洞。而且這種動(dòng)態(tài)檢測(cè)技術(shù)只能檢測(cè)和摧毀棧攻擊。如果攻擊者在注入惡意代碼的時(shí)候繞過(guò)這種技術(shù)檢測(cè),把返回地址覆蓋掉,從而讓返回地址指向攻擊代碼數(shù)據(jù)段也可以實(shí)施攻擊行為。
非執(zhí)行堆與數(shù)據(jù)技術(shù);堆也是一種數(shù)據(jù)結(jié)構(gòu),堆不同于棧的是,堆是隊(duì)列優(yōu)先,先進(jìn)先出,而棧是先進(jìn)后出。并且堆是程序員分配釋放的,若程序員不釋放,程序結(jié)束時(shí)可能由OS回收,分配方式倒是類似于鏈表。這種技術(shù)主要是讓堆和數(shù)據(jù)都不執(zhí)行代碼,這樣攻擊者寫入的代碼同樣也不會(huì)執(zhí)行,從而有效避免掉攻擊的發(fā)生。這種技術(shù)和非執(zhí)行棧技術(shù)相結(jié)合會(huì)更有效果,但是使用該技術(shù)需要更多的代價(jià)。在實(shí)際的情況中也應(yīng)該依情況而定。
內(nèi)存映射技術(shù);在攻擊行為者,有的攻擊者會(huì)通過(guò)使用NULL字符串來(lái)覆蓋內(nèi)存。內(nèi)存映射就是用映射代碼頁(yè)的方法,阻止攻擊者將NULL字符串跳轉(zhuǎn)到較低的內(nèi)存中,繼而把代碼頁(yè)映射到不同的內(nèi)存地址。內(nèi)存映射技術(shù)是不需要進(jìn)行代碼修改的,但是它需要重新進(jìn)行連接。雖然它能有效避免一些代碼注入內(nèi)存地址跳轉(zhuǎn)的攻擊,但是它并不能對(duì)一些寫入新代碼執(zhí)行新代碼的攻擊進(jìn)行有效的防御。這種技術(shù)對(duì)那些具有固定地址或者使用高端地址的攻擊是有效的,它最大的好處在于對(duì)于軟件的性能沒(méi)有任何影響。
安全共享庫(kù)技術(shù);很多計(jì)算機(jī)遭到攻擊就是因?yàn)槭褂昧瞬话踩墓蚕韼?kù)。尤其是C + +語(yǔ)言,很容易造成共享的不安全,比如strcpy、strcat、gets等等,這些函數(shù)如果運(yùn)用不當(dāng),就會(huì)產(chǎn)生不安全共享,給計(jì)算機(jī)帶來(lái)一定的影響。共享庫(kù)技術(shù)就是通過(guò)動(dòng)態(tài)鏈接,在程序運(yùn)行的時(shí)候?qū)Σ话踩暮瘮?shù)進(jìn)行檢測(cè)和攔截,這種技術(shù)經(jīng)常用于WINDOWS和UNIX系統(tǒng)。它的優(yōu)點(diǎn)在于不需要對(duì)程序做任何的修改。但是它的缺點(diǎn)就是不能應(yīng)對(duì)代碼段的溢出攻擊,包括非標(biāo)準(zhǔn)的庫(kù)函數(shù)。在現(xiàn)代技術(shù)中,共享庫(kù)的特性已經(jīng)被整合到標(biāo)準(zhǔn)庫(kù)之中,如glibc。
沙箱技術(shù);沙箱是一個(gè)虛擬程序,在你這個(gè)虛擬環(huán)境中可以做文件的修改或者做軟件運(yùn)行的操作,而且不影響整個(gè)系統(tǒng)。它最早應(yīng)用于測(cè)試軟件,如測(cè)試某種病毒或或者不安全軟件。沙箱動(dòng)態(tài)檢測(cè)技術(shù)是通過(guò)程序來(lái)限制訪問(wèn)權(quán)限從而防御一些攻擊行為。比如在C語(yǔ)言中的execv、system等系統(tǒng)調(diào)用函數(shù)。當(dāng)發(fā)現(xiàn)某個(gè)軟件正在運(yùn)行這種根本不存在這些系統(tǒng)調(diào)用時(shí),就可以在攻擊前進(jìn)行防御攔截,從而達(dá)到抵抗攻擊的作用。沙箱中的任何操作行為都不給系統(tǒng)造成影響。
軟甲開發(fā)的主要目的就是服務(wù)于大眾,因而保護(hù)用戶的信息安全和財(cái)產(chǎn)安全是軟件應(yīng)該具備的功能,軟件安全直接關(guān)系到軟件行業(yè)的快速發(fā)展。所以在實(shí)際的軟件設(shè)計(jì)中可以采用軟件設(shè)計(jì)的安全漏洞動(dòng)態(tài)檢測(cè)技術(shù),它主要包括非執(zhí)行棧、非執(zhí)行堆與數(shù)據(jù)、內(nèi)存映射、安全共享庫(kù)、沙箱等技術(shù),在不同的軟件系統(tǒng)和軟件運(yùn)行環(huán)境中,技術(shù)人員也應(yīng)該根據(jù)實(shí)際情況采用不同的技術(shù)方法,從而提高軟件安全的系數(shù)。
[參考文獻(xiàn)]
[1]冉崇善,周瑩.軟件設(shè)計(jì)中的安全漏洞動(dòng)態(tài)檢測(cè)技術(shù)分析[J].微計(jì)算機(jī)信息,2010,06:78-79 +75.
[2]李舟軍,張俊賢,廖湘科,馬金鑫.軟件安全漏洞檢測(cè)技術(shù)[J].計(jì)算機(jī)學(xué)報(bào),2015,04:717-732.
[3]鐘麗芳.計(jì)算機(jī)軟件中安全漏洞檢測(cè)技術(shù)及其應(yīng)用[J].計(jì)算機(jī)光盤軟件與應(yīng)用,2013,12:59-60 +62.
中圖分類號(hào):TP311.52
文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1006-0049-(2016)04-0159-01