賀俊
摘要:如今信息系統(tǒng)已經(jīng)被廣泛應(yīng)用于國家的各個領(lǐng)域,因此信息系統(tǒng)的安全就顯得十分重要。計算機軟件中的安全漏洞已成為信息系統(tǒng)中最主要的威脅,因此,計算機軟件中的安全漏洞檢測技術(shù)也成為了當(dāng)前的研究熱點。該文詳細分析了計算機安全軟件中動態(tài)檢測技術(shù)與靜態(tài)檢測技術(shù),以提高軟件的安全性。
關(guān)鍵詞:軟件;安全漏洞;檢測技術(shù);應(yīng)用
中圖分類號:TP393 文獻標(biāo)識碼:A 文章編號:1009-3044(2013)09-2051-02
伴隨著高科技信息技術(shù)的不斷發(fā)展,軟件的功能也逐漸變得強大起來,與之相伴的是數(shù)量不斷擴大的源代碼。然而,不少黑客便可以利用代碼的一些漏洞對我們的計算機系統(tǒng)入侵并進行破壞。因此,信息的安全已經(jīng)成為當(dāng)今信息系統(tǒng)安全中的一項重要問題,據(jù)不完全統(tǒng)計數(shù)據(jù)顯示,當(dāng)前計算機系統(tǒng)運行張的漏洞正已逐年上升,而黑客攻擊行為也正在朝著經(jīng)濟利益方向發(fā)展,攻擊手段多種多樣,基于此,技術(shù)人員只有不斷的加強對一些漏洞檢測技術(shù)的分析與研究,方可確保信息資料的安全可靠性。
1 漏洞概述
所謂漏洞,實際上就是系統(tǒng)中存在著的缺陷與弱點,而這些缺陷與弱點可能會導(dǎo)致計算機系統(tǒng)對一些特定的威脅或危險有較高的敏感性,或著存在著攻擊、威脅系統(tǒng)的一種可能性。產(chǎn)生軟件漏洞的主要原因在于計算機軟件研發(fā)過程當(dāng)中,因開發(fā)人員的失誤而造成的。一般而言,該種漏洞主要有兩種形式,功能性漏洞與安全性漏洞。能性邏輯漏洞即可能對計算機軟件系統(tǒng)運行產(chǎn)生影視,比如如行結(jié)果錯誤、流程錯誤等;安全性漏洞則是指在通常情況下不會對計算機軟件的正常運行產(chǎn)生影響,但是一旦漏洞被黑客成功運用以后,它就可能會造成軟件實施錯誤的運行有時甚至可能會執(zhí)行一些惡意的代碼。
漏洞的特點主要體現(xiàn)在以下幾點:首先,在編制程序的時候出現(xiàn)一些邏輯性的錯誤是非常普遍的現(xiàn)象,而此類錯誤絕大多是因為疏忽造成的;其次,數(shù)據(jù)處理與數(shù)值的計算相比會更有可能出現(xiàn)一些邏輯性的錯誤,而過小的或是過大的程序模塊與那些中等的程序模塊相比會更有可能產(chǎn)生邏輯上的錯誤;再次,漏洞和具體的系統(tǒng)環(huán)境是存在著密不可分的聯(lián)系。在不相同的軟件和硬件當(dāng)中,同一種設(shè)備的各個版本,因為各個設(shè)備所構(gòu)成的系統(tǒng)與同一種系統(tǒng)在不相同的設(shè)置之下,都有可能存在著一些不確定性的安全性漏洞問題。最后,時間與系統(tǒng)漏洞之間存在著緊密的關(guān)聯(lián)性,即隨著時間的不斷推移,部分傳統(tǒng)的漏洞問題就會不斷地得到修補或者糾正,而新產(chǎn)生的漏洞問題也會隨之呈現(xiàn)出來,所以說漏洞問題是一個長期性的問題。
針對計算機系統(tǒng)存在的這些安全性的漏洞,我們可以采用兩種檢查方法,即靜態(tài)檢測技術(shù)和動態(tài)檢測技術(shù)。
2 安全靜態(tài)檢測技術(shù)的研究
早期的靜態(tài)檢測實際上行就是指靜態(tài)分析,然因驗證方法多流于形式,所以最近開始有所創(chuàng)新,即靜態(tài)檢測逐漸擴展成兩種,靜態(tài)分析和程序驗證。其中前者是指對被檢測系統(tǒng)中的程序源代碼進行掃描,從語法、語義等方面對其進行全面的理解,并對被測程序自身的特征進行直接的分析,通過此操作找出漏洞。而后者指的就是抽象系統(tǒng)中的程序源代碼,它主要是利用驗證技術(shù),檢驗系統(tǒng)程序是否滿足計算機系統(tǒng)的要求,尤其是安全方面的要求,進而對該程序是否存在著一定的安全漏洞進行檢測。
第一,漏洞分類檢測。對于靜態(tài)檢測而言,其比較關(guān)注的是系統(tǒng)程序內(nèi)部具體特征,其技術(shù)特點和檢測的漏洞特征存在著緊密的聯(lián)系。安全漏洞的分類方法是多種多樣的。按照已有的方法分類,則漏洞就會分為幾個非常細致的部分,絕大多數(shù)的檢測技術(shù)可以覆蓋的漏洞相對零散、分散,因此難以在漏洞類型上找到它們所共有的特點。因此,為了方便比較,可將漏洞進行分類,安全方面的漏洞與內(nèi)存方面的漏洞。前者重點在于數(shù)據(jù)流是否存在著錯誤和偏差,經(jīng)常因錯誤內(nèi)存狀態(tài)、應(yīng)當(dāng)情況而產(chǎn)生;而后者主要關(guān)注的就是數(shù)據(jù)及其類型正確與否,因此,對該種漏洞進行有效檢測的重點在于如何對存儲空間進行有效的建模。同時,因靜態(tài)檢測方式所表現(xiàn)出來的技術(shù)特征存在著一定的差異性,對漏洞理解和處理也不盡相同,所以有的方法只能對具體某一類的漏洞進行檢測,而其他方式可有效檢測上述兩類漏洞問題。
第二,靜態(tài)檢測技術(shù)。靜態(tài)分析:該方法主要是對程序代碼進行直接掃面,并提取其中的關(guān)鍵語法和句式,通過解釋其語義來理解程序行為,然后在嚴格按照事先預(yù)設(shè)的漏洞特征及計算機系統(tǒng)安全標(biāo)準(zhǔn),對系統(tǒng)漏洞進行全面檢查。首先,詞法分析。它是出現(xiàn)最早的一項靜態(tài)分析技術(shù),但是它的詞法分析只停留于語法上的檢查。它是把系統(tǒng)程序分成了一個個小的片斷,然后將每個小片斷與“嫌疑數(shù)據(jù)庫”實施細致對比,若其中存在著一些漏洞嫌疑和問題,則應(yīng)當(dāng)對其進行啟發(fā)式的評估和判斷。由此可見,詞法分析雖然可以有效地檢查出漏洞,但是數(shù)量依然有限,常常都是已知的,且漏報率非常的高。其次,嚴格按照相關(guān)規(guī)則進行檢查。一般而言,安全規(guī)則是用來描述計算機系統(tǒng)程序運行的安全與否,程序自身就是編程規(guī)則和標(biāo)準(zhǔn),也就是那些通用性的安全規(guī)則,即漏洞模式。采用規(guī)則檢查方法,主要是將上述規(guī)則通過特定語法形式加以描述,然后在利用規(guī)則處理器對其進行有效的接收,并將其轉(zhuǎn)換成分析器可以接受的相關(guān)內(nèi)部表達,然后在對系統(tǒng)程序行為檢測、對比。
程序驗證:該方法主要是利用抽象的系統(tǒng)程序獲得形式化模型與程序,再利用形式化驗證手段對其加以驗證,然后在通過其正確性驗證檢測計算機系統(tǒng)是否存在著漏洞問題。首先是模型檢測。該檢測方法是通過對有限狀態(tài)下的計算機系統(tǒng)程序狀態(tài)機、有向圖等實施抽象模型,并以此來實現(xiàn)隨系統(tǒng)特性的驗證。通常情況下,主要有兩種類型的驗證方法:符號化方法主要是將抽象模型狀態(tài)有效地轉(zhuǎn)化成語法樹描述公式,判定公式能否有效地滿足要求;模型轉(zhuǎn)成自動機,然后將需要進一步檢查的時序?qū)傩杂行У剞D(zhuǎn)換成等價自動機,對兩個自動機進行相互取補,從而構(gòu)成新的自動機,最終判定問題即成為檢查該新自動機可以有效接受的語言形式。模型檢測通常要先列舉出實踐中可能出現(xiàn)的各種狀態(tài),因系統(tǒng)軟件自身相對比較復(fù)雜,對全部程序點建模則模型的規(guī)模就會非常的龐大,所以通常只是針對其中的部分程序和屬性進行抽象模型構(gòu)造。然近段時間又出現(xiàn)了新的模型檢測方法,它主要是通過內(nèi)存建模使原來的檢測時序漏洞進行有效的檢測。
其次,通過定理進行證明。該方法較之于模型檢測而言更為嚴格一些,其主要是通過多種判定對程序進行判定,尤其是對抽象公式的真?zhèn)芜M行判斷。判斷方式主要取決于該抽象公式自身的形式,其中不等式合取即為其中一項重要影響因素。先通過合取式構(gòu)造成圖,其中的每個條件均對應(yīng)圖中的一個相應(yīng)節(jié)點,然后再利用已經(jīng)做出的給等式將對應(yīng)頂點進行有效的合并。在此過程中,要檢查合取式里的每一個不等式,一旦發(fā)現(xiàn)存在不成立的等式,那么這個合取式就是不可滿足的。在程序驗證過程中,模型檢測自身的實用性可得到實踐驗證,但其余的相關(guān)時序特性卻決定著系統(tǒng)漏洞的類型及其局限性。實踐中,定理證明要求應(yīng)用者必須要有較高的綜合素質(zhì),這是由該方法的強專業(yè)性要求的,因此目前為止應(yīng)當(dāng)并不廣泛。
對于靜態(tài)檢測而言,它只能檢測出目前已知的相關(guān)漏洞類型,因缺乏通用的漏洞描述制度,對于實踐未知的一些漏洞,則沒辦法用此來進行有效的描述。對于當(dāng)前已知的相關(guān)漏洞而言,并未有有效的檢測技術(shù)來實現(xiàn)全面覆蓋。靜態(tài)檢測的最大缺點在于其性能不足,因靜態(tài)檢測精度、時間以及空間消耗等因素之間所存在著和的正比例關(guān)系,若想提高其檢測質(zhì)量,必然會大幅度增加其實際運行投資。
3 安全動態(tài)檢測技術(shù)研究
第一,非執(zhí)行棧技術(shù)。最近幾年來基于棧進行攻擊軟件的事件較常發(fā)生,其原因多為操作系統(tǒng)上的棧是能寫和執(zhí)行的,由于內(nèi)部變量特別是數(shù)組的變量都存在于棧中的,所以攻擊者可以向棧中寫入惡性代碼,之后找辦法來執(zhí)行此段代碼。防范棧被攻擊最直接的就是讓棧不可以執(zhí)行代碼。只有這樣才能使攻擊者寫在棧中的惡意代碼,不能被執(zhí)行,從一定程度看它防止了攻擊者。
第二,非執(zhí)行堆和數(shù)據(jù)技術(shù)。鑒于堆主要是在程序運行的時候動態(tài)分配內(nèi)存的一個區(qū)域,數(shù)據(jù)段卻是在程序編譯的時候就應(yīng)經(jīng)初始化了。堆與數(shù)據(jù)段如果都不可以執(zhí)行代碼,那么攻擊者寫入它們當(dāng)中的惡性代碼就不能執(zhí)行。如果這項技術(shù)能非執(zhí)行棧技術(shù)加以結(jié)合就可以起到更為全面的作用,惡性代碼就會徹底失去被執(zhí)行的機會。
第三,內(nèi)存映射技術(shù)。利用以NULL結(jié)尾的一些字符串來覆蓋內(nèi)存,是有些攻擊者常用的方式。利用映射代碼頁的方法,便可以使攻擊者較為困難的使用以NULL結(jié)尾的那些字符串順利的跳轉(zhuǎn)到比較低的內(nèi)存區(qū)當(dāng)中。從里一個角度上看,將代碼頁隨機映射到不相同的內(nèi)存地址上,也能一定程度之上防止靠猜地址進行攻擊頁面的方法。
第四,安全共享庫技術(shù)。有些安全漏洞主要是源于利用了一些不安全性的共享庫。安全共享庫技術(shù)可以在一定的程度之上防止攻擊者所展開的攻擊。所謂的安全共享庫技術(shù)其實就是利用動態(tài)鏈接技術(shù),在程序運行的時候攔截對于具有不安全性的函數(shù)的使用,同時對函數(shù)的參數(shù)進行檢測,這種方式在Windows以及UNIX上廣為應(yīng)用。
第五,沙箱技術(shù)。沙箱技術(shù)其實就是通過對一個進程訪問的資源加以限制來預(yù)防一些惡性的攻擊。比如在C語言當(dāng)中存在像execv、system等一些列的系統(tǒng)性調(diào)用函數(shù),一個軟件其實根本沒有這些系統(tǒng)性的調(diào)用函數(shù),一旦發(fā)現(xiàn)某個正運行的軟件存在這些系統(tǒng)性的調(diào)用函數(shù),說明它被攻擊了。假設(shè)在被攻擊之前,使用了沙箱技術(shù)加以限制就不會被攻擊得逞。
第六,程序解釋技術(shù)。從實踐來看,當(dāng)前技術(shù)效果最為顯著的一種方法是在程序完成后,對該程序行為進行監(jiān)視,并強制對其進行安全檢測,此時需要解釋程序的一些執(zhí)行。由于程序解釋的技術(shù)方法,可能會消耗較大的性能。近來也有一些比較多的動態(tài)優(yōu)化技術(shù)去彌補它存在的這個缺陷。利用此項技術(shù)方法的一個典型性的例子就是程序監(jiān)視器。程序監(jiān)視器會讓實施額外性的安全檢測但不會犧牲太多性能變?yōu)榱丝赡?。此項技術(shù)方法不需要對應(yīng)用性程序代碼及操作系統(tǒng)的內(nèi)核進行任何的改變,程序只需重新鏈接并產(chǎn)生一個全新的起動代碼變可以了,之后利用起動代碼來調(diào)用動態(tài)性的優(yōu)化程序解釋框架就完成了。
4 結(jié)束語
在當(dāng)前的形勢下,計算機軟件系統(tǒng)安全業(yè)已成為計算機及其通信安全的重要基礎(chǔ),計算機軟件的安全集中表現(xiàn)在安全軟件編寫、檢測以及軟件漏洞消除等方面。該文主要對計算機軟件中的相關(guān)動態(tài)、靜態(tài)檢測技術(shù)在安全漏洞檢測中的應(yīng)用進行了分析與研究,以此來提高計算機軟件安全,大大降低其風(fēng)險。
參考文獻:
[1] 蔣誠.信息安全漏洞等級定義標(biāo)準(zhǔn)及應(yīng)用[J].信息安全與通信保密,2007(6).
[2] 張林,曾慶凱.軟件安全漏洞的靜態(tài)檢測技術(shù)[J].計算機工程,2008(6).
[3] 李永華,竇春軼.談計算機安全漏洞動態(tài)檢測的原理方法與實踐[J].數(shù)字技術(shù)與應(yīng)用,2010.
[4] 沈曉斌.漏洞攻擊檢測與評價機制的研究[D].2010.
[5] 李娟. 基于故障注入的軟件安全測試技術(shù)研究[D].中國科學(xué)技術(shù)大學(xué),2009.5.
[6] 宋超臣,黃俊強,王大萌,段志鳴. 計算機安全漏洞檢測技術(shù)綜述[J].信息網(wǎng)絡(luò)安全,2012(1).
[7] 陳錦屏,邵斐,畢嬡媛.基于模型的軟件安全靜態(tài)檢測技術(shù)[J].硅谷.2008(12).