前言:想要寫出一篇引人入勝的文章?我們特意為您整理了計算機漏洞檢測思考范文,希望能給你帶來靈感和參考,敬請閱讀。
一、計算機安全動態檢測方法概述
程序在設計以及執行期內有很多共性的東西,比如有控制流(ControlFlow)和數據流(DataFlow)。一個進程的內存映射會被分為代碼段(textsection)、只讀數據段(rdatasection)、數據段(datasection)、資源段(rsrcsection)、堆(heap)、棧(stack)等多個部分。當然在不同的操作系統下它們的多少會有所不同,比如在UNIX下通常還會有未初始化的數據段(BSS)等等。動態檢測方法就是在不改變源代碼甚至是二進制代碼的情況下,對程序的弱點進行檢測的方法,這類檢測主要通過修改進程運行環境來實現。動態檢測方法主要有:非執行棧(Non-ExecutableStack)、非執行堆與數據(Non-ExecutableHeap/data)、內存映射(MemoryMapping)、安全共享庫(SafeSharedLibraries)、沙箱(Sandbox)和程序解釋(ProgramInterpretation)等。
二、計算機安全動態檢測技術探討
1、非執行棧技術
基于棧進行軟件攻擊的事件最近幾年經常發生,原因就是很多操作系統的棧是可以寫與執行的,而且內部變量尤其是數組變量都保存在棧中,攻擊者向棧中注入惡意代碼,然后想方設法來執行這段代碼。棧攻擊技術的文檔也比較全面,這從某種程度上加速了基于棧的攻擊。一個最直接的防范棧攻擊的方法就是使得棧不能執行代碼。該技術的檢測不夠全面,它僅能檢測并阻止摧毀棧攻擊。一個攻擊者可以通過把惡意代碼注入到數據段來繞過該技術的檢測,他只需要把棧中返回地址覆蓋掉,使得這個返回地址指向數據段中的惡意代碼就可以了。該技術可能會造成小量的兼容性問題,因為有個別的應用程序就是依靠棧執行來正確運行的。該技術對性能的消耗可以被忽略,有報告稱這項技術僅僅在上下文切換時增加了2到3個CPU的指令周期。
2、非執行堆與數據技術
由于堆是程序運行時動態分配內存的區域,而數據段則是程序編譯時就初始化好了的。很長時期以來,由于擔心非執行的堆與數據段會破壞軟件的正常運行,所以該方法進展緩慢,最近幾年才有些進展和文章。如果堆和數據段都不能執行代碼,攻擊者注入其中的惡意代碼將不能被執行。這項技術和前面的非執行棧技術結合能起到更全面的作用,使得惡意代碼徹底失去執行機會。使用該技術所付出的代價要比非執行棧技術大一些,因為它對內核的修改要多一些。現在已經有了大量的實例可以使用,這個技術還是可以接受的。
3、內存映射技術
有些攻擊者通過使用NULL結尾的字符串來覆蓋內存,以達到攻擊的目的。通過使用映射代碼頁方法,將使得攻擊者很難通過NULL結尾的字符串來跳轉到較低的內存區,而且這些代碼本身又可能含有NULL字符。再者,把代碼頁隨機地映射到不同的內存地址,在某種程度上防止了那些靠猜地址來進行攻擊的攻擊方法。比如對于緩沖區溢出的漏洞,攻擊者就是要尋找目標進程在內存中的某些地址,然后構造自己的數據來覆蓋這些地址。這些地址在很多操作系統上都是有規律可以計算出的。如果使用內存映射技術,把代碼頁映射到隨機的地址,將給攻擊者增加很大的困難,不做大量的嘗試是不可能查出所需地址的。使用內存映射技術所付出的最大的代價就是要修改操作系統內核、使得操作系統可以把代碼頁映射到較低的內存空間。雖然這個技術不需要對代碼進行修改,但要重新鏈接,因為二進制的地址在程序鏈接階段就確定了。
4、安全共享庫技術
很多軟件的安全漏洞來源于使用了不安全的共享庫,尤其是C&C++,當中有很多的函數都不夠“安全”,比如:strcpy、strcat、gets等等。這些函數使用不好就會帶來災難性的后果。用安全共享庫技術,能在一定程度上阻止攻擊者的攻擊[5,6]。安全共享庫技術就是依靠動態鏈接技術,能在程序運行期間攔截對不安全的函數的調用,并對函數參數等進行檢測,這在Windows和UNIX上都被廣泛應用。特別的是,這個技術能對當前內存大小的上限給出一個評估值,這在一定程度上阻止了把數據寫到評估邊界的外面。安全共享庫技術從技術的角度很容易開發和配置,而且不需要對已有的應用程序作任何的修改和再編譯。
三、計算機安全動態檢測技術注意事項
計算機軟件設計中的安全漏洞動態檢測技術就是在程序執行的情況下,通過對程序的運行環境(環境變量、內存、堆和棧等)進行分析,來檢測程序是否存在漏洞的技術。動態檢測技術的優點就是不需要修改目標程序源碼或其二進制代碼,這在一定程度上提高程序的保密性。基于動態檢測技術的軟件安全漏洞檢測過程,需要綜合考慮對性能的影響、檢測全面性、誤報率、使用全面性、便于管理等多方面的因素,以便決定選擇最合適的動態檢測技術。