黃英麗
(廣西南寧浩越軟件科技有限公司 廣西 530022)
在當(dāng)前這個(gè)高度信息化的時(shí)代,信息安全越來(lái)越成為人們的關(guān)注焦點(diǎn)。軟件是計(jì)算機(jī)系統(tǒng)的靈魂,網(wǎng)絡(luò)通信、操作系統(tǒng)以及安全算法等都是以軟件的形式存在的,這些軟件在一定程度上都存在著各自一些弱點(diǎn),即軟件漏洞,這給計(jì)算機(jī)網(wǎng)絡(luò)信息安全帶來(lái)了巨大的威脅。這就需要一個(gè)可靠的軟件檢測(cè)系統(tǒng),實(shí)時(shí)檢測(cè)計(jì)算機(jī)內(nèi)部的漏洞,提前找出安全隱患,并及時(shí)對(duì)軟件漏洞進(jìn)行有效的修復(fù)。目前,計(jì)算機(jī)內(nèi)部的防火墻也具有對(duì)攻擊性程序進(jìn)行檢測(cè)和攔截的功能,當(dāng)然,這并不能清除所有的安全隱患。除此之外,編寫安全代碼也是能解決軟件安全問題的有效途徑,但它耗時(shí)較長(zhǎng),不能起到立竿見影的效果。因此,筆者在這里引入一些目前針計(jì)算機(jī)軟件安全檢測(cè)的重要技術(shù)。
所謂的計(jì)算機(jī)軟件安全漏洞,就是指計(jì)算機(jī)軟件內(nèi)部會(huì)帶來(lái)安全問題的代碼。安全漏洞常常會(huì)引起來(lái)自其它代碼和程序的攻擊,造成嚴(yán)重的安全問題。軟件安全漏洞可以根據(jù)不同的角度進(jìn)行分類,本文以C語(yǔ)言特點(diǎn)為基礎(chǔ),將計(jì)算機(jī)軟件安全漏洞分為以下幾種:
第一,緩沖區(qū)溢出漏洞。緩沖溢出區(qū)是近二十多年來(lái)引起安全問題的比例最大的軟件安全漏洞,據(jù)統(tǒng)計(jì),在1999年,緩沖溢出區(qū)的漏洞占有率為50%以上,2002年占57%。之所以會(huì)引起緩沖區(qū)溢出漏洞,主要是因?yàn)橛?jì)算機(jī)內(nèi)部使用了不安全的編程語(yǔ)言。另外,程序員在進(jìn)行編程時(shí)的技術(shù)不到位也是產(chǎn)生緩沖溢出區(qū)漏洞的另一個(gè)原因。通常情況下,緩沖區(qū)都有自己的固定大小,程序員在編寫程序時(shí)要留意不超過容量。例如,gets()函數(shù)在遇到EOF字符或者換行字符之前,是不會(huì)停止文本讀入的,它不會(huì)進(jìn)行邊界檢查,以以下代碼為例:
char buffer[1024];
gets(buffer);
最初字符數(shù)組的長(zhǎng)度是1024,而當(dāng)使用gets函數(shù)讀取數(shù)據(jù)并將其放入定義的buffer中時(shí),若受到一個(gè)惡意攻擊,則原本通常情況下都小于1024的數(shù)據(jù)就會(huì)被攻擊者重新構(gòu)造,變成一個(gè)大于1024的數(shù)據(jù),這時(shí),buffer將會(huì)放不下所有數(shù)據(jù),并使程序在執(zhí)行的時(shí)候產(chǎn)生溢出。
第二,競(jìng)爭(zhēng)條件漏洞(race condition)。這是一種常見的軟件漏洞,尤其是當(dāng)計(jì)算機(jī)處于多任務(wù)、多程序的時(shí)候,這種漏洞就會(huì)更加頻繁。因?yàn)樵诙嗳蝿?wù)的網(wǎng)絡(luò)環(huán)境下,每時(shí)每刻都會(huì)有不同的多個(gè)用戶進(jìn)行不同的程序,而在這之間,就會(huì)產(chǎn)生先后順序而帶來(lái)的執(zhí)行權(quán)的競(jìng)爭(zhēng)問題。當(dāng)前,并行計(jì)算和分布式系統(tǒng)的深入開展更使這一漏洞愈演愈烈,對(duì)計(jì)算機(jī)的信息安全構(gòu)成了巨大的威脅。
第三,格式化字符串漏洞(Format string)。格式化字符串漏洞是早在幾年前就已經(jīng)被發(fā)布的另一類較為微妙的程序代碼缺陷,例如在[29]:printf(“%s”,buffer)這一代碼中,printf的第一個(gè)參數(shù)就是一個(gè)格式化字符串,它主要用于指定后邊參數(shù)的類型以及個(gè)數(shù)等一些特征。但是,printf函數(shù)對(duì)其后邊參數(shù)的特征是不做檢查的,也就是說,上述無(wú)漏洞的代碼,即使被寫成printf(buffer)也是可以被編譯的,這樣就產(chǎn)生了格式化字符串漏洞。這一漏洞一旦產(chǎn)生,就可以被用于任意讀寫進(jìn)程的內(nèi)存空間,并且還很難被控制。
針對(duì)以上一些常見的計(jì)算機(jī)軟件安全漏洞及其特征,為了做好計(jì)算機(jī)的安全保護(hù)工作,降低安全漏洞帶來(lái)的危險(xiǎn)指數(shù),我們運(yùn)用一些有效的計(jì)算機(jī)軟件安全檢測(cè)系統(tǒng)和技術(shù),以起到未雨綢繆的效果。在這里,筆者引入以下幾種檢測(cè)技術(shù)。
所謂的動(dòng)態(tài)檢測(cè)技術(shù),就是指在計(jì)算機(jī)進(jìn)行程序運(yùn)行的時(shí)候,通過內(nèi)存、堆和棧等與環(huán)境變量相關(guān)的運(yùn)行因素進(jìn)行檢測(cè)和分析,以此來(lái)檢測(cè)正在運(yùn)行的程序是否存在漏洞的技術(shù)。這一技術(shù)在進(jìn)行程序檢測(cè)的時(shí)候并不會(huì)涉及到修改目標(biāo)程序源碼等問題,因此具有較高的程序保密性。當(dāng)然,這一檢測(cè)系統(tǒng)中涉及著很多的檢測(cè)方法。
第一,非執(zhí)行棧技術(shù)?;跅_M(jìn)行的攻擊是近幾年較為常見的,究其原因,大部分是因?yàn)楹芏嗖僮飨到y(tǒng)的棧是可以寫也可以執(zhí)行的,而且很多內(nèi)部變量都是保存在棧中的,攻擊者只要在棧中注入一些惡意代碼,然后就可以找到一些方法來(lái)執(zhí)行這段代碼。因此,對(duì)于如何防范棧攻擊,最有效且最直接的方法,便就是使棧不能執(zhí)行代碼。這樣,即使攻擊者在棧內(nèi)注入惡意代碼,這個(gè)代碼也不會(huì)得以執(zhí)行。非棧執(zhí)行技術(shù)在一定程度上防范了一些惡意入侵者,只是,這一技術(shù)需要在操作系統(tǒng)層進(jìn)行一系列的修改,另外,該技術(shù)的檢測(cè)還不夠全面,在性能上也還存在有些不足。
第二,非執(zhí)行堆與數(shù)據(jù)技術(shù)。堆在計(jì)算機(jī)內(nèi)主要是對(duì)正在運(yùn)行的程序進(jìn)行動(dòng)態(tài)的內(nèi)存區(qū)域分配,而數(shù)據(jù)是程序被編寫之初就初始化好的。如果堆和數(shù)據(jù)都不能執(zhí)行代碼,則惡意代碼就不會(huì)被執(zhí)行。這一技術(shù)使得傳統(tǒng)程序在堆或數(shù)據(jù)段中生成代碼的方式得以改變,當(dāng)然,也帶來(lái)了很多程序之間的不兼容性。
第三,內(nèi)存映射技術(shù)。很多攻擊者會(huì)通過NULL結(jié)尾的字符串去覆蓋內(nèi)存,以達(dá)到對(duì)計(jì)算機(jī)軟件的攻擊,內(nèi)存映射技術(shù)使用映射代碼頁(yè)將企圖跳轉(zhuǎn)到較低內(nèi)存區(qū)的攻擊者有效地?cái)r截下來(lái),并把代碼頁(yè)隨機(jī)地映射到不同的內(nèi)存區(qū)域。
第四,安全的共享庫(kù)技術(shù)。不安全的共享庫(kù)是很多安全漏洞的來(lái)源,例如,在C&C++中就有很多不安全的函數(shù),如strcpy、strcat、gets等。安全共享庫(kù)技術(shù)在動(dòng)態(tài)鏈接的基礎(chǔ)上,在程序運(yùn)行期間對(duì)不安全的函數(shù)進(jìn)行攔截和調(diào)節(jié),同時(shí)對(duì)參數(shù)進(jìn)行檢測(cè)。
所謂的靜態(tài)檢測(cè)技術(shù),就是在程序分析技術(shù)的基礎(chǔ)上,對(duì)應(yīng)用程序的二進(jìn)制代碼或者代碼源進(jìn)行分析的技術(shù)。這一技術(shù)可以在短時(shí)間內(nèi)找出程序內(nèi)部的大量弱點(diǎn),運(yùn)用起來(lái)十分快捷方便。靜態(tài)檢測(cè)技術(shù)也涉及很多的方法:
第一,詞法檢測(cè)技術(shù)。詞法分析是對(duì)程序源代碼中有危險(xiǎn)的函數(shù)和系統(tǒng)進(jìn)行分析和調(diào)用,對(duì)于具有潛在危險(xiǎn)的源代碼,詞法分析并不會(huì)進(jìn)行深入分析,因此,這一技術(shù)又存在很多的誤報(bào)。
第二,程序評(píng)注技術(shù)。動(dòng)態(tài)檢測(cè)技術(shù)并不能對(duì)從程序源代碼中靜態(tài)生成的信息進(jìn)行檢測(cè),這就需要在程序源代碼中加入一些人為的評(píng)注信息,以便靜態(tài)檢測(cè)技術(shù)能夠進(jìn)行得更順利和精確。通常,程序評(píng)注是以注釋的形式存在的,因此它不會(huì)改變?cè)械暮戏ùa的語(yǔ)言特性,與此同時(shí),檢測(cè)工具還可以利用這些評(píng)注信息對(duì)程序進(jìn)行更深入的靜態(tài)分析。
第一,開放源代碼。開放源代碼是一種軟件發(fā)布的方法,它通過將源代碼廣泛發(fā)布,讓更多人對(duì)這一軟件進(jìn)行觀察閱讀,并找出盡可能多的安全漏洞,以起到“眼睛足夠,漏洞自現(xiàn)”的效果。
第二,測(cè)試庫(kù)技術(shù)。這一技術(shù)主要通過審查所有的內(nèi)存操作函數(shù)來(lái)檢測(cè)軟件中的動(dòng)態(tài)性內(nèi)存錯(cuò)誤,并對(duì)正在運(yùn)行中的每一個(gè)內(nèi)存塊都做了大量的額外標(biāo)記,以這些標(biāo)記信息作為檢測(cè)內(nèi)存操作是否正確的有效指標(biāo)。
第三,棧保護(hù)的編譯器擴(kuò)展技術(shù)。這一技術(shù)的核心是通過對(duì)編譯器進(jìn)行擴(kuò)展從而保護(hù)棧中的地址。當(dāng)然,在這一過程中,需要對(duì)原有的程序進(jìn)行重新編譯,因此,其所涉及的代價(jià)也是較大的。
當(dāng)前,計(jì)算機(jī)已經(jīng)滲入到社會(huì)生活的方方面面,在計(jì)算機(jī)安全備受關(guān)注的時(shí)代,我們更應(yīng)該積極引入和研發(fā)多樣化和全面化的安全檢測(cè)技術(shù),做好計(jì)算機(jī)安全的預(yù)防工作,及時(shí)發(fā)現(xiàn)惡意代碼和潛在危險(xiǎn),進(jìn)一步提高計(jì)算機(jī)的抗風(fēng)險(xiǎn)能力和安全性能,保證計(jì)算機(jī)網(wǎng)絡(luò)的安全運(yùn)行。
[1]徐巖柏.計(jì)算機(jī)軟件中安全漏洞檢測(cè)研究[J].工程技術(shù)(計(jì)算機(jī)光盤軟件與運(yùn)用).2007年;
[2]馬曉銀.計(jì)算機(jī)軟件安全漏洞檢測(cè)技術(shù)之我見[J].工程技術(shù)(計(jì)算機(jī)光盤軟件與運(yùn)用).2010年第16期;
[3]牛潔,王滈.淺談?dòng)?jì)算機(jī)軟件安全檢測(cè)技術(shù)[J].工程技術(shù)(計(jì)算機(jī)光盤軟件與運(yùn)用).2012年第13期;
[4]李新遠(yuǎn),吳字紅.基于數(shù)據(jù)挖掘的入侵檢測(cè)建模叨[J].計(jì)算機(jī)工程與應(yīng)用.2013年.
網(wǎng)絡(luò)安全技術(shù)與應(yīng)用2013年8期