劉偉塔 李文濤
摘 要 隨著現代化科學技術的不斷發展,電子商務當前己經成為企業市場的主要支撐點。計算機軟件的發展日趨強大,軟件中的安全缺陷與漏洞也在不斷增多,隨著使用范圍的擴大,軟件的安全性問題也越來越多,軟件的安全則試保證了計算機和軟件的安全性,降低了計算機的風險,并且對計算機軟件中的風險進行有效的避免與更正。本文就計算機軟件安全漏洞檢測方面進行了分析。
關鍵詞 計算機軟件 安全漏洞 檢測
中圖分類號:TP311.5 文獻標識碼:A
1 計算機軟件所面臨的威脅
1.1 非法復制
計算機軟件是一項知識密集的產品,需要投入大量的人力物力進行開發,所付出的開發成本通常是硬件價值的好幾倍,甚至好幾百倍。然而,計算機軟件卻是及其容易復制的產品,給產品產權造成了嚴重的威脅。近年來,全球每年非法盜用軟件版權損失超過140億美元,且損失量逐年提升,尤其是在我國這樣經濟發展迅速但是軟件管理落后的巨型市場中,非法復制所帶來的稅收、法律等諸多問題造成了嚴重的社會影響。
1.2 軟件質量問題
由于一些原因,軟件開發中都有不可避免的問題和缺陷,通常將軟件質量的缺陷稱為漏洞,這些漏洞對計算機軟件的安全系統有著嚴重的威脅。近年來,由軟件漏洞引起的安全事件逐步增加,一些致力于找各種軟件漏洞的高手通常都能發現軟件的安全漏洞問題,從而利用這些漏洞對計算機用戶進行攻擊,給用戶造成了不便。
1.3 軟件跟蹤
計算機軟件一旦開發出來,總有人對軟件進行動態破譯,利用各種程序調試工具對軟件程序進行跟蹤、竊取軟件源碼,以及取消加密功能等。當前軟件跟蹤技術通過利用系統所提供的單步中斷和斷電中斷的功能實現,可將其分為動態跟蹤和靜態跟蹤兩種。
2 計算機軟件的安全漏洞
計算機安全漏洞是系統的特性,攻擊者或攻擊程序利用這種脆弱的特性,通過己授權的方式來獲取未授權的訪問,從而對系統造成一定損害,即使現在大多人在計算機中安裝了反病毒軟件或防火墻,但是對于防止計算機軟件安全漏洞的破壞沒有多大的用處,甚至有更多的問題出現。
在目前看來,有五大安全漏洞容易被人們忽略,即Geronimo、JBOSS應用服務器、LIBTIFF開源軟件庫、NET-SNMP和ZLIB 。Geronimo2.0這個安全漏洞是讓遠程非法侵入者繞過身份識別,通過插入惡意軟件代碼來獲取訪問權限;JBOSS服務器3.2.4至4.0.5的版本中,有個目錄遍歷的安全漏洞;LIBTIFF開源軟件庫是讀寫標簽圖像文件格式的文件;NET-SNMP的安全漏洞存在于NET或SNMP中的協議文件里;ZLIB是數據壓縮軟件庫,由于庫中存在的代碼解釋一個長度大于1,從而導致安全漏洞。
3 計算機軟件安全漏洞檢測技術
對于計算機軟件安全漏洞必須采取一定的檢測技術來加以預防,主要有靜態檢測技術和動態監檢測技術兩種方法。
3.1 計算機軟件安全漏洞靜態檢測技術
靜態檢測技術主要是通過對程序的分析,通過應用程序的二進制代碼進行分析的技術方法。當然,完全檢測的方法基本上是不存在的,即時可以檢測到大量漏洞,也不會完全找到,也許從中存在許多誤報。靜態檢測技術最大的優點就是軟件不需要運行,檢測十分方便,不過需要專業人員核對、整理,并進行分析和處理。計算機軟件安全漏洞的靜態檢測方式主要有元編譯技術、變異語技術、詞法檢測技術、程序評注技術、約束解算器技術和類型推斷技術。
3.1.1 元編譯技術
元編譯技術是一種利用編譯器的簡單技術,其誤報率低,而且對于語言特性的擴展不會更新。元編譯技術是將程序的安全屬性當做輕量級編譯器擴展,根據其建立模型執行。利用這類技術可以自動對所有檢驗的代碼安全性進行推測和判斷,從而對相應擴展進行編寫。
3.1.2 變異語技術
變異語技術是通過對指針算術運算、不安全的類型轉換、goto的無規律跳轉、setjmp與longjmp等不安全的操作進行限制,一般采用C或C++的安全程序變異技術。衡量靜態檢測的標準包括漏報率及誤報率,靜態檢測對軟件的源代碼及二進制代碼進行檢測,所以利用靜態檢測的錯誤越多,編寫的程序就越可靠。
3.1.3 詞法檢測技術
詞法檢測技術較為簡單,只是對源代碼中不安全C庫函數和系統進行調用,容易產生大量誤報,其主要是對函數名進行辨別,沒有兼容性困難。
3.1.4 程序評注技術
程序評注技術在兼容性上沒有任何問題,它是以注釋的形式表現,不會給代碼增加新的語言。利用評注信息來做靜態分析,并從中找出漏洞隱患。
3.1.5 約束解算器技術
約束解算器技術對源程序無需做任何評價,但是會產生大量誤報,從而需要工作人員進行核算分析。該技術是利用約束對目標程序特定屬性直接建立模型,之后采用靜態分析進行解算約束。
3.2 動態檢測技術
動態檢測技術主要是通過對修改運行環境進行分析來提高程序的保密性,是在不修改目標程序的源代碼或二進制代碼的前提下,對執行程序進行漏洞檢測,從而達到軟件安全的目的。動態檢測技術可以分為:非執行堆與數據技術、非執行棧技術、內存映射技術、安全共享庫技術、沙箱技術和程序解釋技術。
3.2.1 非執行堆與數據技術
該技術是在軟件運行不正常的情況下采取禁止執行行為,從而檢測阻止內存中的惡意代碼,但是,對于檢測預防和修改函數指針及函數參數沒有辦法做到,其兼容性相對較低。
3.2.2 內存映射技術
該技術通過對映射代碼頁的使用,讓入侵者難以通過NULL結尾字符串到達低端內存區域,同時,由于將代碼頁映射到隨機的地址,給入侵者帶來了很大困難。此項技術需要對操作系統內核進行修改,無法檢測和阻止新代碼的攻擊。
3.2.3 安全共享庫技術
該技術是以動態鏈接技術為依據,通過對不安全函數的檢測和攔截,來達到阻止其調用的目的。安全共享庫技術不會造成兼容問題,但是對于本地變量、代碼段數據和數據段溢出的攻擊無法實施防護。
3.2.4 沙箱技術
沙箱技術是通過對進程訪問資源的限制來達到對某種攻擊行為的預防目的,將資源訪問策略設定在應用程序中,策略的安全不需要對操作系統內核及應用程序作任何改變。沙箱技術主要在系統調用中應用,具有全而性,而且沒有兼容問題。
4 計算機軟件安全漏洞的防治方法
4.1 防止競爭條件漏洞
對于競爭條件漏洞的防治方式要將產生競爭的代碼實行原子化操作。代碼是執行的最小單位,在執行程序操作的時候,不會有任何干擾來阻止其執行。原子化的體現就是采用鎖定的方式,通過防范TOCTOU問題,做到避免直接對使用的文件名系統進行調用,從而需要將使用文件句柄或者文件進行描述。
4.2 防止緩沖區溢出漏洞
通過對程序中危險函數的嚴格檢查來防止緩沖區溢出,使用安全版本來替換不安全版本,比如使用strncat來對strcat進行替換等等。
4.3 防止隨機數漏洞
對隨機數漏洞的防范必須要使用較好的隨機數發生器,好的隨機數發生器自身就帶有密碼算法,從而為隨機數流提供了安全,即使受到攻擊,對全部算法的細節有所了解,也無法得到生成的數據流。
4.4 格式化字符串的漏洞防范
通過嚴密的防范,在代碼中直接使用格式常量,不給攻擊者留下任何構造格式串的機會。通常不定參數個數函數會產生格式化字符串漏洞函數,必須在使用這些函數之前,確保其參數及個數是均衡對應的。此外,通過在Windows下使用窗口輸入輸出數據也可以降低該漏洞所造成的安全威脅。
5 結束語
綜上所述,計算機安全漏洞是計算機信息系統遭到破壞的根本源頭,通過采取計算機軟件動態檢測技術和靜態檢測技術來檢測并防止攻擊者入侵,從而有效保障電子信息的安全。