計算機漏洞檢測分析論文

才智咖 人氣:9.13K

1漏洞的定義與特點

計算機漏洞檢測分析論文

可以將漏洞定義為存在於一個系統內的弱點或缺陷,這些弱點或缺陷導致系統對某一特定的威脅攻擊或危險事件具有敏感性,或具有進行攻擊威脅的可能性[1]。軟體漏洞產生通常是由於在軟體的設計和實現中由於開發人員有意或無意的失誤造成是系統潛在的不安全性。漏洞可以劃分為功能性邏輯漏洞和安全性邏輯漏洞。功能性邏輯漏洞是指影響軟體的正常功能,例如執行結果錯誤、執行流程錯誤等。安全性邏輯漏洞是指通常情況下不影響軟體的正常功能,但如果漏洞被攻擊者成功利用後,有可能造成軟體執行錯誤甚至執行惡意程式碼,例如緩衝區溢位漏洞、網站中的跨站指令碼漏洞(XSS)、SQL注入漏洞等[2]。

漏洞具有以下特點:1)程式設計過程中出現邏輯錯誤是很普遍的現象,這些錯誤絕大多數都是由於疏忽造成的;2)資料處理(例如對變數賦值)比數值計算更容易出現邏輯錯誤,過小和過大的程式模組都比中等程式模組更容易出現錯誤;3)漏洞和具體的系統環境密切相關。在不同種類的軟、硬體裝置中,同種裝置的不同版本之間,由不同裝置構成的不同系統之間,以及同種系統在不同的設定條件下,都會存在各自不同的安全漏洞問題;4)漏洞問題與時間緊密相關。隨著時間的推移,舊的漏洞會不斷得到修補或糾正,新的漏洞會不斷出現,因而漏洞問題會長期存在[3]。

2漏洞研究技術分類

根據研究物件的不同,漏洞挖掘技術可以分為基於原始碼的漏洞挖掘技術、基於目的碼的漏洞挖掘技術和混合漏洞挖掘技術三大類。基於原始碼的漏洞挖掘又稱為靜態檢測,是通過對原始碼的分析,找到軟體中存在的漏洞。基於目的碼的漏洞挖掘又稱為動態檢測,首先將要分析的目標程式進行反彙編,得到彙編程式碼;然後對彙編程式碼進行分析,來判斷是否存在漏洞。混合漏洞挖掘技術是結合靜態檢測和動態檢測的優點,對目標程式進行漏洞挖掘。

2.1靜態檢測技術

靜態檢測技術可以通過手工或原始碼分析工具輔助完成,主要針對原始碼結構、跳轉條件、邊界條件、呼叫函式等進行分析,查詢目的碼中的不安全因素。例如,可以檢查原始碼中的Printf之類函式,檢查是否對其使用條件進行了限定,是否對邊界條件進行了檢查。由於現代軟體原始碼數量龐大,不可能完全對其進行人工審計。靜態分析技術具有以下特點[4]:首先,通過工具對原始碼進行掃描,靜態檢測技術效率高,分析速度快;其次,靜態檢測技術可以通過設定不同的測試條件實現對程式碼的全面掃描;再次,靜態檢測技術可以在一些開源專案或在專案開發階段進行挖掘,及時修復系統中存在的漏洞。但這種方法必須獲得原始碼,並且需對目的碼進行分析、編譯等。另一方面靜態檢測技術是通過對原始碼依據一定規則分析來實現,因此要建立原始碼的特徵庫和規則庫。隨著漏洞數量的增加,特徵庫也隨之不斷擴大,繼而帶來檢測效率不斷降低。由於靜態檢測技術是依據特徵庫來進行分析判斷,因此存在誤報和漏報的情況。文獻[5]中,將靜態檢測技術分為詞法分析、規則檢查和型別推導。詞法分析技術最早出現於BMAT技術中,這種方法只對語法進行檢查,判斷詞法中是否存在漏洞,如果存在則根據知識庫進行進一步判斷。規則檢查通過檢查程式編制規則來判斷程式是否存在漏洞,如C語言中是否對變數進行了初始化。規則檢查將這些規則以特定語法描述,然後再將程式行為進行比對檢測。型別推導通過推導程式中變數和函式型別,來判斷變數和函式的訪問是否符合型別規則。基於型別推導的靜態分析方法適用於控制流無關分析,但對於控制流相關的特性則需要引入型別限定詞和子型別[6]的概念來擴充套件源語言的型別系統,使得新型別系統在源語言的資料型別上加以擴充套件並表示出型別之間的關係。針對現有漏洞靜態檢測方法中存在的誤報率和漏報率較高問題,文獻[7]提出了一種基於資料安全狀態跟蹤和檢查的安全漏洞靜態檢測方法。該方法擴充套件了漏洞狀態模型的狀態空間,設定多個安全屬性,通過安全屬性描述安全狀態。同時,對漏洞狀態機中進行合法性校驗,識別誤報的可能性。通過建立非可信資料識別系統中的漏報情況。

2.2動態檢測技術

由於在實際檢測過程中,除開源軟體以外,很難獲得被測系統的原始碼資訊,因此限制了靜態檢測技術的應用。動態檢測技術是通過構造非標準輸入資料,除錯執行軟體系統,根據系統功能或資料流向,檢查執行結果的異常,以判斷被測軟體系統是否存在漏洞。動態檢測技術通常以輸入介面或者執行環境為入手點,檢測系統中存在的漏洞。雖然動態檢測技術具有準確率高的優點,但是其效率卻十分低下,因為各種軟體系統本身的功能和流程有所不同,所以不能像靜態檢測技術那樣進行統一的掃描,而應該針對軟體系統的功能進行動態檢測,這樣就勢必造成了效率的降低[4]。並且動態檢測只能確定漏洞可能存在的範圍,需進行進一步的跟蹤和分析,通過經驗才能確定安全漏洞的型別和利用,因此難以應用到大型軟體當中。文獻[8]提出了一種動態與靜態技術相結合的二進位制漏洞挖掘方法。該方法通過對二進位制檔案反編譯,得到偽原始碼,然後設計了虛擬執行環境VM。然後,通過VM,考察指令執行狀態,跟蹤暫存器的變化,解決了指標別名的問題。通過記錄VM中虛擬記憶體每條指令訪存地址,最後統計計算出每條訪存指令實際訪問的變數地址,解決了變數精確識別的問題。文獻[9]提出利用全系統模擬器作為動態執行環境,通過追蹤輸入資料處理路徑檢測溢位漏洞。該方面面向可執行程式碼,通過構建全系統模擬器來進行漏洞檢測,將可執行程式碼動態轉換成形式統一、便於分析追蹤的元指令表示形式。為解決動態檢測程式碼覆蓋率的'問題,該方法制定了溢位漏洞的判定規則,歸納溢位形成條件,並結合系統狀態回退完成多路徑漏洞搜尋,提高了檢測的覆蓋率。

2.3混合檢測技術

由於靜態檢測技術需要目標程式原始碼,並具有檢測規模大、誤報率高的缺陷,而動態檢測技術又存在覆蓋率低、效率低的缺陷。因此,近幾年,混合檢測技術發展迅速,它有效的結合了靜態檢測和動態檢測的優點,避免了靜態檢測和動態檢測的缺點,有效地提高了檢測效率和準確率。混合檢測技術表現為與動態檢測技術相似的形式,然而測試者根據程式的先驗知識,在測試過程中有針對性的設計測試用例。這種測試可以直接針對資料流中感興趣的邊界情況進行測試,從而比動態檢測更高效。目前,混合檢測技術主要通過自動化的漏洞挖掘器即Fuzzing檢測技術實現。漏洞挖掘器首先分析目標軟體的執行環境、功能和介面等,構造畸形資料,生成測試用例。然後,通過介面傳遞測試用例,執行程式。最後,使用監控程式監視程式執行,如果程式執行出現異常則記錄程式執行環境和輸入資料進一步對異常資訊進行分析。不同漏洞挖掘器由於挖掘物件的不同,其結構、挖掘方法都有很大的不同。目前主要有檔案型別漏洞挖掘器、FTP漏洞挖掘器、Web漏洞挖掘器、作業系統漏洞挖掘器等。根據挖掘器構造測試用例方式的不同,Fuzzing技術可以分為兩類[4],DumbFuzzing和IntelligentFuzzing。DumbFuzzing檢測技術類似於黑盒測試完全根據隨機的輸入去發現問題。這種方法實現簡單,容易快速的觸發漏洞的錯誤位置。由於沒有針對性,因此其效率低下。IntelligentFuzzing檢測技術通過研究目標軟體的協議、輸入、檔案格式等方面內容,有針對性的構造測試用例,能夠提高自動化檢測的效率,因此這種方法能夠更加有效的進行軟體安全漏洞挖掘。

3結束語

因為不同漏洞研究技術針對的研究目標不同,所以具有不同的優缺點。靜態檢測技術具有分析速度快,覆蓋全面的特點,但其誤報率卻很高;而動態檢測技術準確率高,但其不能覆蓋程式的各個流程,具有較大的隨機性;混合檢測技術避免了上述兩種方法的缺點,但由於目前檢測技術的侷限性,仍有很多工作需要完成:

1)後門及訪問控制缺陷檢測困難。由於後門及訪問控制缺陷不會引起程式異常,並在邏輯上很難區分,所以常規漏洞檢測方法難以發現後門及邏輯上的缺陷;

2)檢測過程難以全部自動化。目前,Fuzzing技術需要根據經驗建立測試用例,並且自動化的檢測結果需要根據經驗進行進一步分析,以確定漏洞是否存在以及如何利用。