黃海濱1王艷芳2
(1.增城市東方職業(yè)技術(shù)學(xué)校,廣東 廣州 511300;2.增城市職業(yè)技術(shù)學(xué)校,廣東 廣州 511300)
當(dāng)今時(shí)代,我國(guó)的電子商務(wù)發(fā)展飛速,如何實(shí)現(xiàn)安全的網(wǎng)絡(luò)交易是各大交易網(wǎng)站和商家以及消費(fèi)者都極為關(guān)心的問(wèn)題。而大多數(shù)網(wǎng)絡(luò)安全事件的根源在于計(jì)算機(jī)軟件系統(tǒng)中存在有安全漏洞(Vulnerability)。要杜絕這類(lèi)安全事件,最根本的辦法在于在軟件發(fā)布前檢測(cè)出安全漏洞并修正。
計(jì)算機(jī)軟件安全漏洞也稱(chēng)之為計(jì)算機(jī)脆弱性,漏洞是軟件系統(tǒng)存在的某些缺陷,黑客能夠利用這些缺陷,采取未授權(quán)的方式或手段對(duì)資源進(jìn)行非法訪問(wèn),惡意損害計(jì)算機(jī)軟硬件而造成不必要的損失。為了預(yù)防這些惡意黑客,許多電腦使用者會(huì)為自己的計(jì)算機(jī)安裝上防火墻、殺毒軟件。比如瑞星防火墻、360安全衛(wèi)士、金山毒霸等等這些軟件根本無(wú)法阻擋技術(shù)高明的黑客,對(duì)計(jì)算機(jī)的硬件和軟件安全以及通信網(wǎng)絡(luò)安全的保護(hù)能起到的作用并不大;相反這些軟件如果運(yùn)用得不好反而有可能帶來(lái)新的安全問(wèn)題。
為了提高漏洞檢測(cè)的效率,軟件安全界對(duì)自動(dòng)化的漏洞檢測(cè)技術(shù)進(jìn)行了研究,主要有動(dòng)態(tài)檢測(cè)和靜態(tài)檢測(cè)兩類(lèi)。動(dòng)態(tài)檢測(cè)工具使用較容易,且確實(shí)能夠發(fā)現(xiàn)一些安全漏洞,但程序邏輯的覆蓋率問(wèn)題限制了動(dòng)態(tài)檢測(cè)工具的發(fā)掘能力,難于發(fā)現(xiàn)隱藏較深的安全漏洞。靜態(tài)漏洞分析技術(shù)主要通過(guò)對(duì)系統(tǒng)代碼進(jìn)行程序分析以發(fā)現(xiàn)各種安全漏洞,例如緩沖區(qū)溢出、非法指針引用、競(jìng)爭(zhēng)條件等等。與動(dòng)態(tài)分析相比,靜態(tài)分析技術(shù)能夠支持更為有效的深度漏洞檢測(cè)。
動(dòng)態(tài)檢測(cè)方法就是在不改變?cè)创a甚至是二進(jìn)制代碼的情況下對(duì)程序進(jìn)行檢測(cè)。這種檢測(cè)主要通過(guò)修改進(jìn)程的運(yùn)行環(huán)境來(lái)完成。動(dòng)態(tài)監(jiān)測(cè)技術(shù)對(duì)于被檢測(cè)軟件在某種程度上會(huì)帶來(lái)一些新的安全隱患。這些被檢測(cè)未安全的軟件在實(shí)際運(yùn)行的過(guò)程中有可能影響計(jì)算機(jī)的運(yùn)行性能。同時(shí),動(dòng)態(tài)檢測(cè)技術(shù)本身在某種程度上說(shuō)都是帶有安全隱患的。
3.1.1 非執(zhí)行棧(Non-Executable Stack)
基于棧攻擊的事件時(shí)有發(fā)生。那么阻止棧攻擊的一個(gè)最直接的方法就是讓棧不能工作。這樣即使黑客在棧中寫(xiě)入了惡意代碼,如果棧不工作,這樣也可以攔截一些黑客。非執(zhí)行棧的缺點(diǎn)在于需要在操作層進(jìn)行設(shè)置修改,這項(xiàng)技術(shù)使用的不得當(dāng)還有可能影響計(jì)算機(jī)系統(tǒng)的性能。另外,如果一個(gè)程序既有棧溢出漏洞又有堆溢出漏洞,則很容易出現(xiàn)問(wèn)題。使用此項(xiàng)技術(shù)所付出的代價(jià)就是在操作系統(tǒng)內(nèi)核中引入了一個(gè)比較大的改變就是把棧頁(yè)標(biāo)記為不可執(zhí)行。
3.1.2 非執(zhí)行堆與數(shù)據(jù)(Non-Executable Heap/data)
堆是程序運(yùn)行時(shí)動(dòng)態(tài)分配內(nèi)存的區(qū)域。但是程序編譯時(shí),數(shù)據(jù)段就初始化好了。如果一段代碼不能被堆和數(shù)據(jù)段執(zhí)行,那么黑客注入其中的惡意代碼亦無(wú)法執(zhí)行。這項(xiàng)技術(shù)如果結(jié)合非執(zhí)行棧技術(shù)則能起到更全面的作用,使得惡意攻擊無(wú)法完成。由于這項(xiàng)技術(shù)對(duì)計(jì)算機(jī)內(nèi)核的修改更多,它所付出的代價(jià)要比非執(zhí)行棧技術(shù)更多一些。不過(guò)目前有很多的實(shí)例可以借鑒,這就說(shuō)明此項(xiàng)技術(shù)還是可行的。
3.1.3 內(nèi)存映射(Memory Mapping)
有些黑客通過(guò)使用NULL結(jié)尾的字符串覆蓋內(nèi)存來(lái)達(dá)到攻擊目的。使用內(nèi)存映射技術(shù),可以把代碼頁(yè)映射到隨機(jī)的地址,那么黑客在進(jìn)行攻擊時(shí)將會(huì)遇到很大的困難,即使做出了大量的計(jì)算也未必能夠查到所需地址。使用內(nèi)存映射技術(shù)也是要修改操作系統(tǒng)內(nèi)核的,使得操作系統(tǒng)可以把代碼頁(yè)映射到較低的內(nèi)存空間。由于二進(jìn)制地址在程序鏈接階段就已確定,因此,雖然這個(gè)技術(shù)不需要對(duì)代碼進(jìn)行修改,但需要重新鏈接。
3.1.4 安全共享庫(kù)(Safe Shared Libraries)
C和C++在設(shè)計(jì)當(dāng)初就有很多函數(shù)都不夠“安全”,所以很多程序在使用C和C++時(shí)就會(huì)產(chǎn)生軟件安全漏洞。安全共享庫(kù)技術(shù)就是依靠動(dòng)態(tài)鏈接技術(shù)在程序運(yùn)行期間阻止調(diào)用不安全函數(shù),并對(duì)所有函數(shù)的參數(shù)進(jìn)行檢測(cè)。這項(xiàng)技術(shù)在Windows操作系統(tǒng)和UNIX操作系統(tǒng)上被廣泛應(yīng)用。
3.1.5 沙箱(Sandbox)
沙箱檢測(cè)技術(shù)是通過(guò)限制訪問(wèn)來(lái)防止攻擊的。這項(xiàng)技術(shù)的關(guān)鍵是看定義策略的全面性。一個(gè)定義嚴(yán)格的策略可以更好地保護(hù)程序不受攻擊。如果黑客通過(guò)更改本地變量進(jìn)行攻擊,那么沙箱技術(shù)對(duì)于這種攻擊就束手無(wú)策了。過(guò)于嚴(yán)格的策略可能會(huì)限制程序的一些合法行為而可能導(dǎo)致程序不能使用。系統(tǒng)調(diào)用函數(shù)的審查也可能會(huì)衍生其它一些問(wèn)題的出現(xiàn)。
3.1.6 程序解釋(Program Interpretation)
程序解釋技術(shù)是程序運(yùn)行后對(duì)程序進(jìn)行檢查。它無(wú)需對(duì)操作系統(tǒng)內(nèi)核和程序代碼作修改。首先設(shè)置一個(gè)新的啟動(dòng)代碼重新鏈接到應(yīng)用程序,再由這個(gè)新的起動(dòng)代碼來(lái)調(diào)用動(dòng)態(tài)優(yōu)化的程序解釋框架。一旦設(shè)置了比較嚴(yán)格的安全策略,幾乎所有已知的改變程序控制流程或修改危險(xiǎn)函數(shù)的參數(shù)的攻擊都可以被檢測(cè)到并可以進(jìn)行防范。
使用程序分析技術(shù)來(lái)分析應(yīng)用程序的二進(jìn)制代碼或源代碼的方法就是靜態(tài)檢測(cè)。靜態(tài)檢測(cè)的好處就是計(jì)算機(jī)不需要運(yùn)行軟件,檢測(cè)起來(lái)會(huì)比較方便。對(duì)軟件不會(huì)帶來(lái)額外的安全漏洞。
3.2.1 詞法分析(lexical analysis)
最早出現(xiàn)的靜態(tài)分析技術(shù)是詞法分析,它只能對(duì)多程序進(jìn)行語(yǔ)法上的檢查。這項(xiàng)技術(shù)的方法是把程序分為一個(gè)個(gè)片斷,通過(guò)把每一個(gè)片段與“嫌疑數(shù)據(jù)庫(kù)”中的數(shù)據(jù)進(jìn)行比較進(jìn)行判斷。詞法分析僅能檢測(cè)一些已知的固定漏洞代碼,漏報(bào)率相當(dāng)高。所以這種方法目前一般不采用。
3.2.2 類(lèi)型推導(dǎo)(type inference)
這種方法的原理是自動(dòng)推導(dǎo)程序中變量和函數(shù)的類(lèi)型來(lái)判斷對(duì)變量和函數(shù)的訪問(wèn)是否符合正常規(guī)則?;陬?lèi)型推導(dǎo)的軟件漏洞靜態(tài)分析方法適用于控制流無(wú)關(guān)的分析。
3.2.3 規(guī)則檢測(cè)(rule Check)
安全規(guī)則描述程序本身的安全性。程序本身存在一些編程規(guī)則即一些通用的安全規(guī)則也稱(chēng)為漏洞模式,比如程序在root權(quán)限下要避免exec調(diào)用。軟件的規(guī)則檢測(cè)則是將這些規(guī)則以特定語(yǔ)法描述,由規(guī)則處理器接收后并將其轉(zhuǎn)換為分析器能夠接受的內(nèi)部表示,然后再將程序行為進(jìn)行比對(duì)、檢測(cè)。
3.2.4 模型檢測(cè)(model checking)
模型檢測(cè)最早在1981年被提出,主要通過(guò)顯式狀態(tài)搜索或隱式不動(dòng)點(diǎn)計(jì)算來(lái)驗(yàn)證有窮狀態(tài)并發(fā)系統(tǒng)的模態(tài)/命題性質(zhì)。在計(jì)算機(jī)軟件檢測(cè)中采用模型檢測(cè)主要是對(duì)有限狀態(tài)的程序構(gòu)造或抽象模型進(jìn)行建模,通過(guò)模型比較來(lái)驗(yàn)證軟件特性。我們通過(guò)對(duì)軟件的某個(gè)片段或者某些執(zhí)行點(diǎn)進(jìn)行建模來(lái)進(jìn)行比較。這是因?yàn)榭梢员苊廛浖膹?fù)雜性。通過(guò)建模比較,我們可以將一些功能和用途相近的軟件進(jìn)行安全監(jiān)測(cè),從而使軟件的安全性能達(dá)到一個(gè)比較高的水平。
3.2.5 定理證明(theorem proving)
定理證明比以上介紹的監(jiān)測(cè)方法更加嚴(yán)格,采用多種形式來(lái)驗(yàn)證被檢測(cè)程序抽象公式是否為真。判別的方法取決于公式的形式,如不等式的舍?。菏紫扔缮崛∈綐?gòu)造成一個(gè)圖,舍取式中每個(gè)條件對(duì)應(yīng)于圖中的一個(gè)節(jié)點(diǎn),然后利用給出的等式將對(duì)應(yīng)的頂點(diǎn)合并,在頂點(diǎn)合并的過(guò)程中對(duì)舍取式中的不等式進(jìn)行檢查,如發(fā)現(xiàn)存在不成立,則該舍取式不可滿足。
電子商務(wù)應(yīng)用越來(lái)越廣泛,信息安全也受到越來(lái)越多的重視。我們?cè)谌粘5墓ぷ鳌W(xué)習(xí)和生活中遇到的計(jì)算機(jī)安全問(wèn)題主要來(lái)自以下兩個(gè)方面:一是來(lái)自軟件自身的錯(cuò)誤;二是遭受到一些惡意的攻擊而造成的錯(cuò)誤。因此,對(duì)計(jì)算機(jī)軟件漏洞進(jìn)行檢測(cè)是從源頭上發(fā)現(xiàn)問(wèn)題的好方法,從計(jì)算機(jī)安全的源頭研究如何提高軟件的安全性,從而能夠提升網(wǎng)絡(luò)的安全性。而對(duì)于計(jì)算機(jī)軟件漏洞的檢測(cè)技術(shù)的研究,我們只能不斷探索,只有不斷提高軟件的安全監(jiān)測(cè)技術(shù)和安全防范技術(shù),才能有效阻止惡意黑客的非法入侵,保障電子商務(wù)交易的安全。
[1]單谷云,黃成軍,江秀臣.電纜排管機(jī)器人的圖像監(jiān)控傳輸系統(tǒng)設(shè)計(jì)[J].微計(jì)算機(jī)信息,2008,(29).
[2]蔣誠(chéng).信息安全漏洞等級(jí)定義標(biāo)準(zhǔn)及應(yīng)用[J].信息安全與通信保密,2007,(6).
[3]彭煒.計(jì)算機(jī)安全漏洞動(dòng)態(tài)檢測(cè)研究[J].光盤(pán)技術(shù),2009,(4).
[4]梁彬,侯看看,石文昌,梁朝暉.一種基于安全狀態(tài)跟蹤檢查的漏洞靜態(tài)檢測(cè)方法研究與實(shí)施[J].計(jì)算機(jī)學(xué)報(bào),2009,(6).
[5]Johnson R,Wagner D.Finding user/kernel pointer bugswith type inference//Proceedings of 2004 USEN IX Security Symposium,San Diego,CA,USA,2004:119-134.
[6]Ashcraft K,Engler D.Using programmer-written compiler extensions to catch security holes//Proceedingsof 2002 IEEE Symposium on Security and Privacy,Oakland,CA,USA,2002:143-159.