閱讀屋>計算機軟體> 簡要分析計算機軟體中安全漏洞檢測技術及其應用論文

簡要分析計算機軟體中安全漏洞檢測技術及其應用論文

簡要分析計算機軟體中安全漏洞檢測技術及其應用論文

  1 前言

  隨著科學技術的不斷髮展,計算機軟體發揮著強大的作用,數量越來越多的計算機原始碼也使得們更容易侵襲計算機軟體系統,出現安全漏洞影響系統的穩定性。如今們入侵系統產生的安全漏洞的形式正趨向多樣化,而計算機軟體中的安全漏洞檢測技術則顯得尤為重要。

  2 計算機軟體中存在的漏洞簡述

  2. 1 計算機軟體中存在的漏洞概述和型別

  就計算機軟體而言,安全漏洞又稱為計算機的脆弱性,是指能夠對計算機系統的執行造成安全問題的一些弱點或缺點,也可以說是計算機系統中能夠被利用來攻擊計算機系統從而影響計算機正常執行的問題。計算機設計人員在研製和開發計算機軟體時,如果在操作過程中產生技術失誤也可以稱之為計算機安全漏洞。很多計算機在安裝主體時往往會安裝防火牆和反防毒軟體等避免計算機安全漏洞造成的損失和危害。一般而言,在良好的執行環境下,透過對防火牆與反防毒軟體的應用,可以使安全漏洞得到有效防止。但是在實際生活中,反防毒軟體和防火牆並不能完全避免安全漏洞的發生,真正有能力的在入侵計算機系統時會自動進行攻擊,這樣不僅會損失重要的系統資訊,也會對計算機造成損害甚至無法開機。安全漏洞可以根據性質將其分為兩類:安全性漏洞和功能性漏洞。安全性漏洞是指一般情況下不會對計算機軟體的正常執行造成影響,但是漏洞一旦被利用發起攻擊就會造成計算機軟體執行發生錯誤,從而對計算機軟體的正常執行造成嚴重的影響。功能性漏洞是指會對計算機的正常執行造成影響的計算機軟體的漏洞,例如執行流程發生錯誤,執行結果發生錯誤。

  2. 2 計算機軟體中存在的漏洞的主要特點

  2. 2. 1 由人為素質造成

  計算機軟體的安全漏洞很多都是在研製和開發過程中因為設計人員的疏忽大意造成的。比如常見的程式設計的邏輯錯誤,計算機軟體在程式設計過程中,邏輯錯誤是一個比較普遍的問題,開發人員的一個小失誤很可能就會造成安全漏洞。

  2. 2. 2 比數值計算邏輯錯誤

  在處理計算機軟體資料時,最常發生的就是比數值計算的邏輯錯誤,一般會發生在過小或者過大等不合理的模組,中等程度的模組會發生錯誤的機率是比較小的。

  2. 2. 3 長時間存在的安全漏洞

  計算機軟體一旦出現安全漏洞,就會使得病毒和侵入計算機系統,嚴重影響計算機的安全,而在計算機軟體系統當中,一箇舊的安全漏洞被修復的同時,可能還會產生新的安全漏洞,總而言之,安全漏洞是長時間存在於計算機軟體系統當中的。因此,對安全漏洞進行有效地監測和預防,及時對安全漏洞進行修復,能夠有效地保證計算機資訊系統的安全性和穩定性。

  2. 2. 4 與系統環境密切相關

  在計算機軟體當中,安全漏洞的發生與系統環境密切相關,執行系統的不同也會對安全漏洞產生影響,此外軟體裝置和版本的差別也會使得出現的安全漏洞的型別有所區別。

  3 常用的安全漏洞檢測技術

  3. 1 靜態檢測技術

  靜態分析檢測技術是最初的計算機軟體安全漏洞靜態監測技術,這種檢測方法偏向於表面,近年來,隨著計算機技術的創新與發展,靜態監測逐漸演變為兩種檢測方法: 即靜態分析和程式檢驗。靜態監測指的是在檢測計算機軟體系統程式過程中進行原始碼的掃描,先直接分析被檢測的計算機軟體系統的程式本身的特點,再全面分析原始碼的語法和語義,這樣就可以檢測出計算機存在的安全漏洞。程式監測是指計算機軟體系統內抽象化的程式原始碼,檢測其是否符合計算機所需要完成的工作要求,尤其是安全要求,然後判斷並檢驗計算機軟體系統是否存在安全漏洞。

  就計算機軟體安全漏洞檢測技術中的靜態監測技術而言,計算機軟體系統內部的特點會更受關注,安全漏洞本身特點的檢測和靜態方法的特點的監測之間密切相關。我們可以根據不同的方法劃分漏洞的種類,根據最常用的方法,可以將漏洞劃分為很多小的部分,而一般的檢測方法也只能處理比較分散的漏洞。因此,從漏洞的種類下手尋找共同點是比較困難的。所以,在進行檢測時,可以對比性地將漏洞分為記憶體性的漏洞和安全性的漏洞。記憶體性的'漏洞比較關注類別和自身的資料是否更具有準確性; 而安全性的漏洞則更關注資料流是否存在錯誤以及誤差的大小等方面,這種情況往往是由於記憶體的形態存在錯誤而形成的。因此,對於這種漏洞而言,在進行靜態檢測時,最有效的方法就是將模型建立在漏洞的儲存空間內。此外,在解讀和處理漏洞時也要根據靜態檢測技術的不同特點對其進行區分,因此,個別技術只能檢測特定的漏洞,而要處理兩方面的漏洞還要藉助其他的方法。

  3. 1. 1 靜態分析

  靜態分析主要是直接、全面地計算機軟體系統中的程式的原始碼進行掃描,對程式程式碼中的語法和關鍵詞、句進行提煉,根據解讀的具體含義對程式的行為進行分析,之後再根據事先設定的漏洞的特點結合計算機軟體系統自身的安全標準進行檢測,對系統整體進行判斷和處理。在進行檢測的過程中,有以下幾點需要特別注意: 第一,分析語法和關鍵詞、句,這也是最早的靜態分析的方法。但是,僅僅對語法和詞句進行分析是透過檢查語法和計算機軟體系統中的程式分為語句片段來實現的,之後再將一個個語句片段比標準的“疑問資料庫”,自動對存在的漏洞和問題進行判定和評估。這樣的情況下檢測出的有效漏洞的數量十分有限,而且只能檢測出“疑問資料庫”中已知的漏洞,而不能檢測出未知的漏洞。第二,在進行檢測時要嚴格遵循相關的標準條件。一般而言,安全標準是用來描述計算機軟體系統中的程式執行的基本情況的,然而,程式本身也是一種標準化的程式設計,即我們研究的漏洞模式也是一般的安全標準。在進行檢測時,要嚴格依照程式應用的規則進行,結合相應的語法模式描述這些所謂的標準,再利用規則處理器接收這些標準化的語法,處理器在進行轉變後會自動接收到內部表述的程式,最後在系統執行的過程中進行最終的整體檢測。

  相較於動態分析檢測技術而言,靜態分析檢測技術在進行檢測時,計算機處於停止執行的狀態,操作更加方便和快捷,雖然能夠對計算機軟體系統的相關程式的狀況最初最真實的反饋,但是不能確定這些程式本身以及執行過程中的重要屬性。一般而言,靜態分析檢測技術可以分為以下幾種: 詞法檢測、推斷檢測和評註計算機軟體程式等三種。詞法檢測在執行時要先分析和識別計算機軟體介面的預言,定義相應的語法,再生成並檢測形成的語法例子,這個過程主要的工作是分析C 語言函式和程式中的原始碼是否有危險性,也是我們所說的最基本也最原始的靜態分析檢測技術。推斷檢測是指自動對程式中存在的函式、變數等進行分析,再結合他們規範化的型別和方式進行分析來判斷是否存在安全漏洞的方法。評註計算機軟體程式是指利用“tainted”標記計算機軟體的外部資料,技術人員再根據排查和分析的結果進行評註。

  3. 1. 2 程式檢驗

  程式檢測是根據抽象化的計算機軟體系統來建立一個具體形式的程式或者模型,再結合形式化和正確性的檢驗方式來檢測計算機軟體的安全漏洞問題。在進行程式檢驗時,主要是透過建立模型來進行檢測,具體是指計算機軟體程式在有限狀態下建立一個合適的模型,建立的模型往往是抽象化的片段或者執行點,再和計算機軟體本身的特點進行對比和驗證。在檢測時建立合適的模型也會起到檢測的作用,建立的模型也會和軟體的用途相關,因此,一個模型也可以運用到許多相似的軟體當中來檢測安全漏洞。一般而言,模型檢驗有兩種檢驗方式,分別是模型自動轉化法和符號化檢驗法。模型自動轉化法是指將檢測軟體程式進一步轉化成等價的自動檢測機,兩個自動機相互結合可以實現替換和補充的作用,從而達到新的自動機的效果,同時透過軟體系統轉變成能夠識別的語言模式。符號化檢驗是指透過公式描述的形式將抽象化模型以語法樹的形式表達出來,根據公式來判斷是否符合檢驗的要求。模型檢驗應該先列舉出可能會發生的各種狀況,結合軟體系統本身的複雜性對所有的程式都建立不同形式的模型,這也是一項規模龐大的任務。因此,在實際操作中,可能會選擇一部分程式和相關屬性來建立抽象的模型。但是,近年來,隨著模型檢測技術的改革和創新,現在主要是運用記憶體來建立模型的方式檢驗往常的時序漏洞,在結合定理和證明的形式來檢測安全漏洞。與模型檢驗相比,這種方式更加嚴密,具體的檢驗過程是對程式進行多重判定,尤其是判定抽象化的公式的真假性,當然,公式本身的形式也會決定判斷的方式。例如,不等式的合取作為一個關鍵因素就是一個典型的例子,先根據合取式製作圖表,在圖中要真實地反映每個提到的條件,再利用公式合併各個條件。同時,對其中的不等式進行檢測,等式如果不成立的話,也就無法滿足合取式。在程式檢驗過程中,可以透過實踐來證明模式檢驗是否可靠以及是否具有實用性。軟體系統的種類業餘時序性密切相關,證明定理也是一項比較複雜的任務,因此,這種方法並沒有廣泛地應用於實際操作當中。

  對於計算機軟體而言,靜態檢測技術只能檢測出當前存在的安全漏洞的種類,而無法判斷那些未知的漏洞。由於靜態檢測空間、精確度和時間等因素限制了其效能的改進,在一定程度上降低了靜態檢測的質量,因此,必須在後期加大資金投入。

  3. 2 動態分析檢測技術

  3. 2. 1 非執行棧

  近幾年來,計算機軟體系統常常會發生被棧攻擊的事件,主要是因為軟體作業系統中的棧本身的讀寫能力不足、執行力不夠的問題。棧之中包含了陣列變數等內部變數,因此,個別不懷好意的人員能夠在棧中隨意篡改一些重要的程式碼,再利用特殊的方式執行程式碼。而只有將棧轉變為不能夠隨意進行程式碼執行的模式才能有效地防止棧被攻擊和侵略。這樣,軟體系統無法執行攻擊軟體的人員隨意篡改寫在棧上的程式碼,從而降低了計算機軟體被侵入的機率,減少了安全漏洞的發生率。實現非執行棧的具體過程是透過修改計算機作業系統的核心,將棧的頁標標記為不可執行,藉助棧溢位將程式跳轉想攻擊的程式碼,因為執行程式碼是位於堆生而非正在執行的棧上,因此非執行棧並不具有完整性,存在一定的侷限性,當棧中出現攻擊程式碼時檢測就無法發揮效用。

  3. 2. 2 安全性的共享庫

  很多計算機軟體會在無意中是用來一些不安全的共享庫從而導致了安全漏洞,在一定程度上,安全的共享庫可以避免攻擊人員的侵入行為。安全共享庫是指運用動態連結攔截非安全性的函式應用程式的實際執行,檢測其操作的過程。與此同時,安全共享庫也會評估記憶體的上限來防止記憶體中出現惡意破壞的資料,保證計算機軟體系統的安全性,windows 的作業系統一般會運用這種方式。雖然安全共享庫不會修改計算機的核心,相容性較好,但是其侷限性也是十分明顯的,即安全共享庫檢測不到本地變數是否存在安全漏洞,當代碼資料溢位受到攻擊時也無法起到很好的防護作用,也無法保護標準化的函式庫。

  3. 2. 3 沙箱

  沙箱是指限定一個程式的訪問量來防止惡意的入侵。例如,對於計算機軟體而言,如果C 語言中含有一類調動函式,但是軟體在執行過程中又出現了相似但不同的調動函式,就說明有漏洞在攻擊計算機軟體。而使用沙箱就會限定被攻擊前的軟體,保證其不會受到惡意軟體的影響。

  3. 2. 4 對映記憶體

  個別惡意攻擊的人員可能常常利用以“NULL”結尾的字串來覆蓋記憶體,利用記憶體對映技術可以使得攻擊人員難以實現把複雜的記憶體覆蓋字串轉變為簡單的記憶體操作。就這個角度而言,隨機地將內碼表對映到各類記憶體地址上也可以在一定程度上降低隨意篡改頁面的可能性。

  3. 2. 5 非執行堆和資料

  在檢測非執行堆和資料時,需要大量修改計算機核心的資料,同時將資料段的程式碼和堆的動態聲場全部進行修改才可以實現,在此過程中可能會出現不相容的情況發生。一般而言,在進行非執行堆檢測時往往需要藉助非執行棧的配合使用

  4 計算機軟體中安全漏洞檢測技術的具體應用

  4. 1 檢測並避免出現競爭性的安全漏洞

  很多安全漏洞往往是因為競爭條件的存在而產生的,解決的辦法就是將競爭性的編碼進行原子化實現操作。編碼作為最小的執行單位不會受到正在執行的軟體程式的惡意干擾,將編碼進行原子化就是透過鎖定編碼的方式再改變特定狀態下的程式間接性地調動各個軟體系統,最後描述執行的檔案或者控制代碼來檢測TOCTOU 等問題來預防安全漏洞的發生。

  4. 2 檢測並避免緩衝區出現安全漏洞

  檢測並避免緩衝區出現安全漏洞就是透過判斷和分析計算機軟體程式中不安全的函式來避免緩衝區出現安全漏洞,例如不安全的strcat 版本可以全部替換為安全的strncat 版本。

  4. 3 檢測並避免格式化字串的安全漏洞出現

  格式化字串的出現很容易造成安全漏洞的發生,唯一的解決措施就是從根本上進行預防,在資料程式碼中直接使用格式化的常量,防止惡意攻擊人員可能會建立格式化字串的機會。一般而言,格式化字串往往會出現在引數不確定的個數函式當中。因此,在運用這種函式時,應該控制每個引數的個數、平衡引數的效能。此外,在進行輸出資料時,運用Windows 作業系統下的視窗或者運用串列埠輸入系統資料可以預防格式化的安全漏洞的危害。

  4. 4 檢測並避免出現的隨機安全漏洞

  在檢查和預防隨機出現的安全漏洞時,使用的隨機發生裝置一定要保證良好的效能,因此在選擇隨機發生裝置時一定要慎重考慮。為了確保隨機數流的安全性,隨機發生裝置需要自身設定密碼演算法,這樣在軟體遭到攻擊時,就可以根據掌握的演算法的整體細節來獲得完整的資料流,提高隨機資料在遭遇入侵時執行的穩定性和安全性。

  5 結語

  隨著社會的進步和科學技術的發展,計算機軟體在設計和開發時也無法避免地會出現安全漏洞的問題,因此,為了保證計算機軟體的安全執行,安全漏洞檢測技術是十分重要的。在不斷的發展和創新中,計算機軟體安全漏洞檢測技術也需要與時俱進,透過改善靜態檢測和動態檢測技術來預防安全漏洞的發生。

【簡要分析計算機軟體中安全漏洞檢測技術及其應用論文】相關文章: