漏洞一般可以理解為脆弱性(Vulnerability),是計算機系統在硬件、軟件、協議上的體現或系統安全策略上存在的缺陷和不足。漏洞一旦被發現,就可使用這個漏洞獲得計算機系統的額外權限,使攻擊者能夠在未授權的情況下訪問或破壞系統,從而導致危害計算機系統安全。
研究成果:
1975年,美國啟動的PA(Protection Analysis Project工程分析)和RISOS(Research in Secured Operating Systems 操作系統安全研究)計劃被公認為是計算機安全研究工作的起點。1980年,美國密執安大學的B.Hebbard小組使用“滲透分析”的方法成功地發現了系統程序中的部分漏洞。1990年,美國伊利諾斯大學的Marick發表了關於軟件漏洞的調查報告。對軟件漏洞的形成特點做了統計分析。1993年,美國海軍研究實驗室的Landwher等人收集了不同操作系統的安全缺陷,按照漏洞的來源、形成時間和分布位置建立了3種分類模型。普渡大學COAST實驗室 的Aslam和Krsul在前人成果的基礎上,提出了更為完整的漏洞分類模型,並建立了專用漏洞數據庫。MTTRE公司從事的“公共漏洞列表”(Common Vulnerability Enumeration,CVE)項目,為每個漏洞建立了統一標識,方便了漏洞研究的信息共享及數據交換。
漏洞描述
丹寧在《Cryptograph and Data Security》一文中從訪問控制的角度給出了漏洞的定義,他認為,系統中主體對對象的訪問是通過訪問控制矩陣實現的,這個訪問控制矩陣就是安全策略的具體實現,當操作系統的操作和安全策略之間相沖突時,就產生了安全漏洞。
畢夏普和貝利在《A Critical Analysis of Vulnerability Taxonomies》中認為,計算機系統是由若干描述實體配置的當前狀態所組成的,這些狀態可分為授權狀態,非授權狀態以及易受攻擊狀態、不易受攻擊狀態。其中容易受攻擊的狀態是指通過授權的狀態轉變從非授權狀態可以到達的授權狀態。受損狀態是指已完成這種轉變的狀態,攻擊是非受損狀態到受損狀態的狀態轉變過程。漏洞就是指區別於所有非受損狀態的容易受攻擊的狀態特征。
漏洞具有以下特點:
(1) 編譯過程中出現邏輯錯誤是很普通的現象,這些絕大多數都是由於疏忽造成的。
(2) 數據處理(例如變量賦值)比數據計算更容易出現邏輯錯誤,過小和過大的程序模塊都比中等程序模塊更容易出現錯誤。
(3) 漏洞和具體的系統環境密切相關。在不同各類的軟、硬件設備中,同種設備的不同版本之間,由不同設備構成的不同系統之間,以及同種系統在不同的設置條件下,都會存在各自不同的安全漏洞問題。
(.
▲ 對計算機漏洞的描述
底層分析
由於對程序內部操作的不了解,或者是沒有足夠的重視,程序員總是假定他們的程序會在任何環境中正常地運行。當程序員的假設得不到滿足,程序內部的相互作用和安全策略產生沖突時,便形成了安全漏洞。因此,研究漏洞的形成機制需要深入分析程序內部的相互作用和安全策略的關系。下圖是漏洞分析的基本模型。
▲ 程序內部的相互作用
在這個分析模型中,我們將軟件的運行抽象成程序的內部對象、運行環境和外部輸入之間的相互作用。它包括環境、受影響的對象、對象所受的影響、影響對象的方式以及外部輸入5個部門。通過分析每個作用是否和安全策略(或者是程序員的假設)相違背,就可以找到產生漏洞的深層原因。
(1) 環境 我們認為“系統”是由“應用程序”和“運行環境”組成的,這樣,所有的被認為不屬於運行程序的代碼和部件就屬於環境。環境是相對的,當針對運行程序中的某個操作時,該運行程序就被看成是內部環境,其它程序則認為是外部環境。內部對象以及外部輸入之間的相互作用使環境具有動態特征和共享特征,這使程序的安全策略實行起來更加困難並容易發生錯誤。從安全策略的角度出發,執行每個操作時都需要考慮以下環境實體:環境名稱、程序運行的目錄、創建的臨時項目、內存空間、輸入的數據、存儲的文件、對象的屬性、對象性質、網絡標志等。
(2) 對象 程序代碼和數據空間中的任何一個元素都被認為是一個內部對象。對於一個特定的操作而言,這些對象又構成了內部環境,每個對象就是一個環境實體。這些內部對象有:命令提示、用戶文件、系統相關文件、公共文件、系統目錄、系統分區、堆中的數據和可執行代碼、棧中的數據和可執行代碼、棧中的返回地址、系統程序、用戶程序、系統信息、系統函數或服務程序庫、網絡聯接、用戶名、域名、CPU時間、電子郵件、網絡端口、網絡數據包、內部系統名稱、系統設備、地址映射等。
(.
分類模型
漏洞研究的抽象層次不同,會對同一個漏洞作出不同的分類。例如我們常說的“緩沖區溢出”漏洞,從最低層次上來說可能是訪問校驗錯誤;從高一些的層次看,是一個同步錯誤或同步校驗錯誤;從更高的層次看,這是一個邏輯錯誤,至今為止還沒有一個比較完美的漏洞分類方案,包括權威的漏洞信息發布網站www.securityfocus.com上的分類也不能讓人滿意。
美國海軍研究實驗室於1993年收集了當時主流操作系統的安全漏洞,並按照漏洞的來源,形成時間和漏洞代碼的分布位置等條件進行了分類。盡管這些分類還不夠准確,概念上存在交叉和模糊現象,但這種分類方法每一次引入了時間和空間的概念,有助於系統設計人員對安全漏洞的理解,有助於建立更加安全的軟件系統。下圖是美國海軍研究實驗室的分類模型。
▲ 漏洞分類
普渡大學COAST實驗室則從漏洞的形成原因角度對Unix操作系統的漏洞進行了深入研究,並建立了較為詳細的分類模型。後來,該實驗室的Krsul對此分類做了進一步的修改完善。美國南科羅拉多州大學的Knight在前人成果的基礎上,增加考慮了社會和人的因素對於計算機安全的影響。使計算機漏洞的研究更加科學、全面。
下圖是目前較為廣泛接受的漏洞分類模型。計算機系統的漏洞被劃分為兩個方面的因素和4個基本類別。從漏洞的利用時效上講,社會工程和邏輯錯誤形成的漏洞可以很快地產生作用,而管理策略失誤和系統弱點的影響過一段時間才能顯現出來;從漏洞的利用需求來看,利用計算機本身的漏洞比和利用社會工程和策略失誤的漏洞需要更多的專業技術知識。
(.
▲ 計算機漏洞的基本類型
計算機因素的漏洞分類如下圖所示:
▲ 計算機因素的漏洞分類
邏輯錯誤
邏輯錯誤對計算機系統的安全有直接的影響,通常是軟件程序或硬件設計上的“Bug”,也是漏洞研究的主要內容。這種類型的