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