漏洞檢測的幾種方法


  系統安全漏洞,也可以稱為系統脆弱性,是指計算機系統在硬件、軟件、協議的設計、具體實現以及系統安全策略上存在的缺陷和不足。系統脆弱性是相對系統安全而言的,從廣義的角度來看,一切可能導致系統安全性受影響或破壞的因素都可以視為系統安全漏洞。安全漏洞的存在,使得非法用戶可以利用這些漏洞獲得某些系統權限,進而對系統執行非法操作,導致安全事件的發生。漏洞檢測就是希望能夠防患於未然,在漏洞被利用之前發現漏洞並修補漏洞。本文作者通過自己的實踐,介紹了檢測漏洞的幾種方法。

  漏洞檢測可以分為對已知漏洞的檢測和對未知漏洞的檢測。已知漏洞的檢測主要是通過安全掃描技術,檢測系統是否存在已公布的安全漏洞;而未知漏洞檢測的目的在於發現軟件系統中可能存在但尚未發現的漏洞。現有的未知漏洞檢測技術有源代碼掃描、反匯編掃描、環境錯誤注入等。源代碼掃描和反匯編掃描都是一種靜態的漏洞檢測技術,不需要運行軟件程序就可分析程序中可能存在的漏洞;而環境錯誤注入是一種動態的漏洞檢測技術,利用可執行程序測試軟件存在的漏洞,是一種比較成熟的軟件漏洞檢測技術。

  安全掃描

  安全掃描也稱為脆弱性評估(Vulnerability Assessment),其基本原理是采用模擬黑客攻擊的方式對目標可能存在的已知安全漏洞進行逐項檢測,可以對工作站、服務器、交換機、數據庫等各種對象進行安全漏洞檢測。

  到目前為止,安全掃描技術已經達到很成熟的地步。安全掃描技術主要分為兩類:基於主機的安全掃描技術和基於網絡的安全掃描技術。按照掃描過程來分,掃描技術又可以分為四大類:Ping掃描技術、端口掃描技術、操作系統探測掃描技術以及已知漏洞的掃描技術。

  安全掃描技術在保障網絡安全方面起到越來越重要的作用。借助於掃描技術,人們可以發現網絡和主機存在的對外開放的端口、提供的服務、某些系統信息、錯誤的配置、已知的安全漏洞等。系統管理員利用安全掃描技術,可以發現網絡和主機中可能會被黑客利用的薄弱點,從而想方設法對這些薄弱點進行修復以加強網絡和主機的安全性。同時,黑客也可以利用安全掃描技術,目的是為了探查網絡和主機系統的入侵點。但是黑客的行為同樣有利於加強網絡和主機的安全性,因為漏洞是客觀存在的,只是未被發現而已,而只要一個漏洞被黑客所發現並加以利用,那么人們最終也會發現該漏洞。

  安全掃描器,是一種通過收集系統的信息來自動檢測遠程或本地主機安全性脆弱點的程序。安全掃描器采用模擬攻擊的形式對目標可能存在的已知安全漏洞進行逐項檢查。目標可以是工作站、服務器、交換機、數據庫等各種對象。並且,一般情況下,安全掃描器會根據掃描結果向系統管理員提供周密可靠的安全性分析報告,為提高網絡安全整體水平提供了重要依據。

  安全掃描器的性質決定了它不是一個直接的攻擊安全漏洞的程序,它是一個幫助我們發現目標主機存在着弱點的程序。一個優秀的安全掃描器能對檢測到的數據進行分析,幫助我們查找目標主機的安全漏洞並給出相應的建議。

  一般情況下,安全掃描器具備三項功能:

  ● 發現Internet上的一個網絡或者一台主機;

  ● 一旦發現一台主機,能發現其上所運行的服務類型;

  ● 通過對這些服務的測試,可以發現存在的已知漏洞,並給出修補建議。

  源代碼掃描

  源代碼掃描主要針對開放源代碼的程序,通過檢查程序中不符合安全規則的文件結構、命名規則、函數、堆棧指針等,進而發現程序中可能隱含的安全缺陷。這種漏洞分析技術需要熟練掌握編程語言,並預先定義出不安全代碼的審查規則,通過表達式匹配的方法檢查源程序代碼。

  由於程序運行時是動態變化的,如果不考慮函數調用的參數和調用環境,不對源代碼進行詞法分析和語法分析,就沒有辦法准確地把握程序的語義,因此這種方法不能發現程序動態運行過程中的安全漏洞。

  反匯編掃描

  反匯編掃描對於不公開源代碼的程序來說往往是最有效的發現安全漏洞的辦法。分析反匯編代碼需要有豐富的經驗,也可以使用輔助工具來幫助簡化這個過程,但不可能有一種完全自動的工具來完成這個過程。例如,利用一種優秀的反匯編程序IDA(www.datarescue.com)就可以得到目標程序的匯編腳本語言,再對匯編出來的腳本語言進行掃描,進而識別一些可疑的匯編代碼序列。

  通過反匯編來尋找系統漏洞的好處是,從理論上講,不論多么復雜的問題總是可以通過反匯編來解決。它的缺點也是顯然的,這種方法費時費力,對人員的技術水平要求很高,同樣不能檢測到程序動態運行過程中產生的安全漏洞。

  環境錯誤注入

  由程序執行是一個動態過程這個特點,不難看出靜態的代碼掃描是不完備的。環境錯誤注入是一種比較成熟的軟件測試方法,這種方法在協議安全測試等領域中都已經得到了廣泛的應用。

  系統通常由“應用程序”和“運行環境”組成。由於各種原因,程序員總是假定認為他們的程序會在正常環境中正常地運行。當這些假設成立時,他們的程序當然是正確運行的。但是,由於作為共享資源的環境,常常被其他主體所影響,尤其是惡意的用戶,這樣,程序員的假設就可能是不正確的。程序是否能夠容忍環境中的錯誤是影響程序健壯性的一個關鍵問題。

  錯誤注入,即在軟件運行的環境中故意注入人為的錯誤,並驗證反應——這是驗證計算機和軟件系統的容錯性、可靠性的一種有效方法。在測試過程中,錯誤被注入到環境中,所以產生了干擾。換句話,在測試過程中干擾軟件運行的環境,觀察在這種干擾情況下程序如何反應,是否會產生安全事件,如果沒有,就可以認為系統是安全的。概言之,錯誤注入方法就是通過選擇一個適當的錯誤模型試圖觸發程序中包含的安全漏洞。

  在真實情況下,觸發某些不正常的環境是很困難的,知道如何觸發依賴於測試者的有關“環境”方面的知識。所以,在異常的環境下測試軟件安全變得困難。錯誤注入技術提供了一種模仿異常環境的方法,而不必關心實際中這些錯誤如何發生。

  軟件環境錯誤注入分析還依賴於操作系統中已知的安全缺陷,也就是說,對一個軟件進行錯誤注入分析時,要充分考慮到操作系統本身所存在的漏洞,這些操作系統中的安全缺陷可能會影響到軟件本身的安全。所以選擇一個適當的錯誤模型來觸發程序中所隱含的安全漏洞是非常重要的。我們需要選擇一個適當的錯誤模型,能夠高水平地模擬真實的軟件系統,然后分析漏洞數據庫記錄的攻擊者利用漏洞的方法,把這些利用變為環境錯誤注入,從而縮小在測試過程中錯誤注入和真實發生的錯誤之間的差異。

  總結

  這里介紹的幾種漏洞檢測的方法,其中安全掃描技術主要是針對已知漏洞的檢測,后面三種主要是針對未知漏洞的檢測。對於未知漏洞的檢測,源代碼掃描(包括反匯編掃描)屬於靜態檢測技術,而環境錯誤注入法屬於動態檢測技術。

  另外,換個視角來看,源代碼掃描(包括反匯編掃描)類似於白盒測試,它檢測軟件系統源碼中可能存在的問題;環境錯誤注入方法類似於黑盒測試,它不關注代碼的問題,而是通過對程序運行環境的干擾,關注運行程序對於注入錯誤的反應,以便從程序外圍發現問題。

  漏洞檢測的目的在於發現漏洞,修補漏洞,進而從根本上提高信息系統的安全性,以致從根本上減少安全事件的發生(內容轉載)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM