專利名稱:一種軟件系統(tǒng)安全缺陷檢測方法
技術領域:
本發(fā)明以軟件的可信性質(zhì)為主要研究對象,致力于量化度量軟件的可信性質(zhì)及可 信程度,屬于軟件安全領域。
背景技術:
當今社會,隨著計算機的不斷普及,軟件已經(jīng)深入到了我們生活的方方面面。正因為如此,人們對于軟件安全性的要求也變的越來越高。軟件之所以面臨著各種各樣的安全 性問題,是因為軟件自身存在著安全缺陷。因此,如何能夠發(fā)現(xiàn)進而緩和這些軟件中存在的 安全缺陷對于軟件安全來說就顯得尤為重要。目前主要有兩種方式來發(fā)現(xiàn)軟件中的安全缺 陷一是在開發(fā)過程中,開發(fā)人員通過對各種軟件制品的人工分析和測試來找出可能存在 的安全缺陷;二是在部署之后,當系統(tǒng)遭遇攻擊時,安全人員逆向分析系統(tǒng)可能存在的安全 缺陷。然而,這些方法有以下共同缺點一、安全缺陷的發(fā)現(xiàn)都是通過人工來完成的,因而對 相關人員的要求比較高;二、安全缺陷一般都是在軟件生命周期的晚期才發(fā)現(xiàn)的,所以緩和 的成本也比較高。所有的這些問題導致的一個直接結果就是,極大地提高了可信軟件的開 發(fā)門檻。為了解決這些問題,進而降低可信軟件的開發(fā)門檻,如何能夠在軟件開發(fā)的早期自 動地對軟件系統(tǒng)中可能存在的安全缺陷進行檢測就成為了軟件安全領域研究的重點之一。 然而,由于現(xiàn)有軟件開發(fā)過程中軟件本身具有的非形式化的特點以及業(yè)界對安全缺陷研究 的不夠深入的現(xiàn)狀,導致在軟件開發(fā)過程的早期對安全缺陷進行自動檢測成為一項非常困 難的任務。軟件開發(fā)無論采用何種方法學基本都要經(jīng)歷需求分析、設計、編碼、測試、部署、維 護這樣一個生命周期。在這個過程中(尤其是在需求分析和設計階段),軟件往往是以文檔 的方式存在的。具體地說,這一過程中的軟件是采用非形式化的自然語言和半形式化的建 模語言進行描述的。然而非形式化的信息是計算機所不能接受和處理的,所以計算機也就 無法對以這種方式存在的軟件進行安全缺陷的自動檢測。軟件安全缺陷,就是指系統(tǒng)或系統(tǒng)成分中,那些可能導致其整體或局部無法實現(xiàn) 預期安全目標的不足點。業(yè)界當前對于安全缺陷的研究,主要就是考慮如何對形形色色的 安全缺陷進行分類和管理,以便以缺陷庫的形式來為廣大的軟件開發(fā)人員、安全咨詢?nèi)藛T 甚至是安全軟件相關的工具提供服務。目前國內(nèi)外相關的機構對安全缺陷按照分類的目 的、觀察角度、復雜度等不同進行了多種分類,并形成了幾個比較著名的安全缺陷數(shù)據(jù)庫, 如 CVE(Common VulnerabilityEnumeration)禾口 CWE (Common Weakness Enumeration)。然 而,這些數(shù)據(jù)庫都有一個共同的特征,那就是安全缺陷都是采用非形式化的自然語言表示 的。這就意味著只有那些安全專家才能讀懂理解這些安全缺陷,而計算機則無法對安全缺 陷進行自動驗證(即不可通過計算機自動的對軟件系統(tǒng)中可能存在的安全缺陷進行識別、 檢測以及緩和)。綜上所述,在軟件開發(fā)過程的早期對安全缺陷進行自動檢測,就目前來看主要面 臨以下兩個方面的問題一、在開發(fā)過程中,軟件往往是采用非形式化的自然語言以及半形式化的建模語言(如UML)來進行描述的,這就意味著計算機本身無法對開發(fā)過程中的軟件進行有效的“理解”;二、目前,業(yè)界對安全缺陷的研究還不夠深入,且在安全缺陷的描述上 也是采用的非形式化的自然語言,這就意味著計算機無法對安全缺陷進行自動驗證。
發(fā)明內(nèi)容
本發(fā)明針對現(xiàn)有技術的上述問題,提出一種可在軟件開發(fā)過程的早期對安全缺陷 進行自動檢測的方法。為此,本發(fā)明采用如下的技術方案一種軟件系統(tǒng)安全缺陷檢測方法,包括下列步驟1)軟件安全缺陷基本結構的抽象及形式化首先,定義三個可枚舉有限集合①DataType 是數(shù)據(jù)類型的可枚舉有限集合;②Operation 是對數(shù)據(jù)進行操作即系統(tǒng)行為的可枚舉有限集合;③Violation 是系統(tǒng)行為違反的安全約束的可枚舉有限集合;其次,定義三個關系①DT(x,y)是一個二元關系,表示數(shù)據(jù)χ具有類型y,其中,y e DataType ;②INTENT(x,y):是一個二元關系,表示在數(shù)據(jù)χ上進行操作y,其中 y e Violation ;③VI0LATE(x,y)是一個二元關系,表示對數(shù)據(jù)χ沒有實施安全約束y,其中,y e 安全約束Violation ;基于上述定義,采用以下公式來對安全缺陷進行形式化 3x3y3z3w[DT{x,y)AlNTENT{x,z)aVIOLATE(x,w)],其中,y e DataType, ζ e Operation, w e Violation2)基于上述的安全缺陷基本結構及形式化方法,構建可用于驗證的安全缺陷數(shù)據(jù) 庫;3)用擴展的Z語言形式化描述軟件系統(tǒng)并形成Z規(guī)格說明對Z語言進行擴充,在Z原來的基礎上,以庫的形式增加了對以下的類型和操作模 式的定義將DataType集合中的每個元素定義為一個類型,將Operation和Violation集 合中每個元素定義為一個操作模式,使得采用擴展之后的Z語言書寫的規(guī)格說明具有足夠 的檢測安全缺陷的信息,由軟件開發(fā)人員利用使用擴展之后的Z對軟件開發(fā)過程中的各種 軟件制品進行形式化描述,形成規(guī)格說明文檔;4)基于安全缺陷數(shù)據(jù)庫對Z規(guī)格說明進行安全缺陷的檢測根據(jù)軟件系統(tǒng)的Z規(guī)格說明文檔,在可驗證安全缺陷數(shù)據(jù)庫的支持下,對Z規(guī)格中 是否存在安全缺陷進行如下的檢測首先需要針對軟件系統(tǒng)的Z規(guī)格生成一個AST樹;然 后遍歷AST樹查看是否出現(xiàn)了安全缺陷數(shù)據(jù)庫中某一安全缺陷的關鍵字序列,如果是則說 明系統(tǒng)存在該安全缺陷;最后生成檢測報告。本發(fā)明以提高軟件系統(tǒng)的安全性為目的,提出了一種在軟件開發(fā)過程中對安全缺 陷進行自動檢測的方法,以期盡早的發(fā)現(xiàn)軟件系統(tǒng)中可能存在的安全漏洞,降低修補成本, 提高軟件的安全性。有益效果有1)能夠檢測出軟件系統(tǒng)中的安全缺陷從而提高了軟件系統(tǒng)的安全性。本發(fā)明提供了一種可行的方法用以檢測軟件開發(fā)過程中可能引入的安全缺陷,以指導軟件開發(fā)人員開發(fā)出安全、健壯的軟件系統(tǒng),極大的提高軟件系統(tǒng)的安全性。2)能夠在開發(fā)的早期發(fā)現(xiàn)系統(tǒng)中的安全缺陷,降低了缺陷修復的成本??偹苤?, 軟件中安全缺陷發(fā)現(xiàn)的越晚,修復安全缺陷所付出的代價就越高。本發(fā)明能夠在軟件系統(tǒng) 開發(fā)的早期(需求分析和設計階段)就檢測到安全缺陷的存在,使得開發(fā)人員可以盡早的 以較低的成本對其進行修復。3)檢測過程可以使用計算機實現(xiàn)自動化,提高了安全軟件的開發(fā)效率。在開發(fā)人 員為軟件系統(tǒng)編寫好Z規(guī)格后,安全缺陷檢測的工作完全可以交給計算機自動完成。這樣 一方面提高了安全缺陷的查準率和查全率,另一方面提高了軟件開發(fā)的效率、縮短了軟件 開發(fā)的周期。4)可驗證安全缺陷數(shù)據(jù)庫的構建可以為其他工具提供服務。安全缺陷數(shù)據(jù)庫對于 軟件安全來說是一筆寶貴的資產(chǎn),可以為軟件安全相關的諸多工具提供數(shù)據(jù)支持。
附圖1 安全缺陷結構圖;附圖2 可驗證安全缺陷數(shù)據(jù)庫E-R圖;附圖3 用戶登錄的UML順序圖;附圖4 用戶登錄順序圖的Z規(guī)格(1);附圖5 用戶登錄順序圖的Z規(guī)格(2);附圖6 對Z規(guī)格生產(chǎn)的AST樹片段。
具體實施例方式對軟件開發(fā)過程中的安全缺陷進行檢測之所以困難,主要是因為一方面軟件在開 發(fā)過程中的存在形式是非形式化的,另一方面現(xiàn)有對安全缺陷的研究無法滿足缺陷檢測的 要求。為了解決這些問題,本發(fā)明首先通過對大量安全缺陷的研究抽象出安全缺陷的基本 結構并對其進行形式化,從而以形式化的方式從深層次刻畫了安全缺陷的本質(zhì);然后構建 一個可驗證的安全缺陷數(shù)據(jù)庫為接下來的安全缺陷檢測提供數(shù)據(jù)支持;接著用擴展了的Z 語言對軟件開發(fā)中的各種制品進行形式化,形成一份描述軟件系統(tǒng)的形式化規(guī)格說明;最 后基于安全缺陷數(shù)據(jù)庫對Z規(guī)格進行安全缺陷的檢測,包括下面的步驟1)軟件安全缺陷基本結構的抽象及形式化使得計算機無法對軟件系統(tǒng)中的安全缺陷進行自動驗證的一個方面的原因是現(xiàn) 有對安全缺陷的研究不夠深入。本發(fā)明通過對大量安全缺陷的產(chǎn)生、危害及緩和方案等屬 性的深入研究,抽象出能夠準確刻畫大部分安全缺陷的基本結構。然后基于安全缺陷的基 本結構對安全缺陷進行形式化。這樣,一方面可以解決用自然語言描述時可能產(chǎn)生的二義 性的問題,另一方面可以使計算機能夠達到對軟件系統(tǒng)中安全缺陷的自動處理。通過對大量安全缺陷的研究發(fā)現(xiàn),安全缺陷完全可以用如圖1的方式來刻畫其結 構。如圖所示,安全缺陷包含兩個基本元素系統(tǒng)行為與安全約束。當某一系統(tǒng)行為違反 了某一安全約束,其相對應的安全缺陷存在。系統(tǒng)行為,顧名思義就是指軟件系統(tǒng)的一種行 為。安全約束,就是一系列涉及到安全問題的約束。這些約束都是與安全問題息息相關的,系統(tǒng)行為如果違反了其中某條約束,就有可能導致缺陷的產(chǎn)生?;谏鲜霭踩毕莸幕窘Y構,本發(fā)明提出了一種安全缺陷的形式化方法。
首先,定義三個可枚舉有限集合①DataType 是數(shù)據(jù)類型的可枚舉有限集合。②Operation 是對數(shù)據(jù)進行操作(系統(tǒng)行為)的可枚舉有限集合。③Violation 是系統(tǒng)行為違反的安全約束的可枚舉有限集合。其次,定義三個關系①DT(x,y):是一個二元關系,表示數(shù)據(jù)χ具有類型y。其中y e DataType0②INTENT(x,y):是一個二元關系,表示在數(shù)據(jù)χ上進行操作y。其中 y ^ Operation。③VI0LATE(x,y)是一個二元關系,表示對數(shù)據(jù)χ沒有實施安全約束y。其中 y ^ Violation?;谏鲜龆x,采用以下公式來對安全缺陷進行形式化 3x3y3z3w[DT(x, y) λ INTENT(x, z)aVIOLATE(x, w)]其中 y e DataType, ζ ^ Operation, w ^ Violation基于對大量安全缺陷的分析研究,然后不斷地豐富以上三個集合(DataType、 Operation、Violation),就可以通過上述公式來對的安全缺陷進行形式化。2)構建可驗證的安全缺陷數(shù)據(jù)庫基于安全缺陷基本結構及形式化方法,構建一個可用于驗證的安全缺陷數(shù)據(jù)庫, 為接下來的安全缺陷自動檢測提供數(shù)據(jù)支持。從上述對安全缺陷基本結構和形式化方法的 介紹中可知,大部分安全缺陷都可以通過三部分內(nèi)容來反映出其本質(zhì)特征①DataType, 表示缺陷所涉及的數(shù)據(jù)的類型;②Operation,表示缺陷所具有的系統(tǒng)行為;③Violation, 表示缺陷所違反的安全約束。根據(jù)對大量安全缺陷的研究,可以采用形式化的方式對上述 三部分內(nèi)容進行定義(即以形式化的方式明確這三個集合中所包含的元素)。因此,只要在 數(shù)據(jù)庫的設計中加入這些信息就可以以形式化的方式從本質(zhì)上描述這些安全缺陷,進而達 到可驗證的目的。在該數(shù)據(jù)庫中,主要定義了四個實體=Weakness (安全缺陷)、Operation (系統(tǒng)行 為)、DataType (數(shù)據(jù)類型)和Violation (安全約束),以及三個能夠反映安全缺陷本質(zhì)特 征的聯(lián)系Weakness 與 DataType、Operation、Violation 的聯(lián)系 DT、INTENT、VIOLATE。安 全缺陷具有的這三個聯(lián)系形成了一個能夠唯一標識一個安全缺陷的關鍵字序列。此外,為 了能夠更全面的描述Weakness、Operation、DataType以及Violation,還為這四個實體定 義了一些相關的屬性Weakness_ID(缺陷的ID)、Weakness_name (缺陷的名稱)、Weakness_ description (缺陷的描述)、Applicable_Platform(缺陷的適用平臺)、Consequence (缺陷 導致的后果)、Mitigati0n (缺陷的緩和方案)、Time_0f_Intr0duCti0n (缺陷引入的時間)、 D_ID (數(shù)據(jù)類型的ID)、D_name (數(shù)據(jù)類型的名稱)、D_deScripti0n (數(shù)據(jù)類型的描述)、0_ ID (系統(tǒng)行為的ID)、0_name (系統(tǒng)行為的名稱)、(^description (系統(tǒng)行為的描述)、V_ ID (安全約束的ID) ,V_name (安全約束的名稱)、V_deSCripti0n (安全約束的描述)。數(shù)據(jù) 庫具體的E-R圖如圖2所示。該數(shù)據(jù)庫之所以能夠用于驗證,關鍵在于在對數(shù)據(jù)庫進行設計時,從安全缺陷的基本結構出發(fā),并結合安全缺陷的形式化方法,對相關的實體和關系進行了設計,使之能夠 從本質(zhì)上刻畫安全缺陷。3)用擴展的Z語言形式化描述軟件系統(tǒng)并形成Z規(guī)格說明使得計算機無法對軟件系統(tǒng)中的安全缺陷進行自動驗證的另一個方面的原因就是軟件開發(fā)過程中描述軟件系統(tǒng)的所有制品都是以非形式化的方式存在的。為了解決這一 問題,本發(fā)明首先根據(jù)安全缺陷的形式化方法對Z語言進行了擴展,然后使用擴展了的Z語 言對軟件開發(fā)過程中的各種制品(尤其是UML圖)進行形式化描述,進而形成一份描述軟 件系統(tǒng)的形式化的Z規(guī)格說明文檔。Z語言是一種非常著名的書寫規(guī)格說明的語言,它能夠 將軟件系統(tǒng)的功能和需求以形式化的方式描述出來。本發(fā)明對Z語言進行了擴充。所謂的 擴充其實就是在Z原來的基礎上,以庫的形式增加了一些類型、操作模式的定義。庫中的類 型主要是基于安全缺陷形式化方法中DataType集合定義的,將該集合中的每個元素定義 為一個類型,這樣開發(fā)人員在書寫ζ規(guī)格的時候就可以將相關的數(shù)據(jù)定義為庫中給定的相 應類型。庫中的操作模式主要是基于安全缺陷形式化方法中Operation和Violation集合 定義的,將集合中每個元素定義為一個操作模式,開發(fā)人員在書寫ζ規(guī)格時,以模式包含的 方式將庫中相應的操作模式包含到用戶自己的操作模式中,用以標識該模式是何種系統(tǒng)行 為或是滿足了何種安全約束。這樣,采用擴展之后的Z語言書寫的規(guī)格說明就具有了足夠 的檢測安全缺陷的信息。開發(fā)人員可以使用擴展之后的Z對軟件開發(fā)過程中的各種軟件制 品(尤其是UML圖)進行形式化描述,形成規(guī)格說明文檔,為下一步進行安全缺陷的檢測做 好準備。4)基于安全缺陷數(shù)據(jù)庫對Z規(guī)格說明進行安全缺陷的檢測得到軟件系統(tǒng)的Z規(guī)格說明之后,在可驗證安全缺陷數(shù)據(jù)庫的支持下,就可以對Z 規(guī)格中是否存在安全缺陷進行檢測了。首先需要針對軟件系統(tǒng)的Z規(guī)格生成一個AST樹 (Annotated Syntax Tree,標記語法樹);然后遍歷AST樹查看是否出現(xiàn)了安全缺陷數(shù)據(jù)庫 中某一安全缺陷的關鍵字序列,如果是則說明系統(tǒng)存在該安全缺陷;最后生成檢測報告,供 開發(fā)人員參考。下面通過一個示例來展示安全缺陷的檢測方法。示例中以一個假想的軟件系統(tǒng)中 的用戶登錄模塊作為檢測的對象,設計中故意引入CffE網(wǎng)站公布的CWE-319安全缺陷(即 關鍵信息明文傳輸)。通過對該安全缺陷的檢測來說明本方法的使用。DCWE-319安全缺陷的形式化描述如下
3x[DT{x, SENSITIVE ) λ INTENT (χ, TRANSMIT )aVIOLATE (χ, ΕΛΟ ΤΓΙΟΝ)]其中,SENSITIVEe DataType,表示敏感數(shù)據(jù);TRANSMIT e Operation,表示傳 輸數(shù)據(jù)的行為;ENCRYPTION e Violation,表示應該對敏感數(shù)據(jù)進行加密這樣一項安全約 束。該表達式的完整含義就是如果系統(tǒng)傳輸了未經(jīng)加密的敏感數(shù)據(jù),那么系統(tǒng)中就存在 該缺陷。顯然,該缺陷的關鍵字序列為SENSITIVE、TRANSMIT、,ENCRYPTION(即不出現(xiàn) ENCRYPTION)。這些信息都可以從安全缺陷數(shù)據(jù)庫中獲取。2)設計用戶登錄模塊。本例采用UML順序圖來對用戶登錄的場景進行建模。如圖3所示用戶在登錄頁 面輸入用戶名和密碼提交之后,系統(tǒng)對用戶的身份進行驗證,并將驗證結果返回給用戶。
3)使用擴展的Z語言描述該順序圖。在描述順序圖之前需要先對Z語言進行擴展定義基本類型CHAR、SENSITIVE分別 表示字符和敏感數(shù)據(jù),定義模式TRANSMIT、ENCRYPTION用來分別對傳輸數(shù)據(jù)的操作模式和 加密數(shù)據(jù)的操作模式加以標識。之后就可以采用擴展之后的Z語言來對上述順序圖進行描 述了,描述形成的Z規(guī)格如圖4和圖5所示。4)在Z規(guī)格中進行安全缺陷的檢測。對Z規(guī)格進行掃描生成AST樹。圖6顯示了 Z規(guī)格中Submit段落對應的AST子 樹。通過對該樹的遍歷,很容易發(fā)現(xiàn)系統(tǒng)中存在SENSITIVE和TRANSMIT關鍵字。當遍歷完 整個樹時,我們?nèi)匀粵]有找到關鍵字ENCRYPTION,因此我們可以從另一個角度說系統(tǒng)存在 1 ENCRYPTION 關鍵字。即在系統(tǒng)中發(fā)現(xiàn)了 SENSITIVE、TRANSMIT、^ ENCRYPTION 關鍵字序 列,在可驗證安全缺陷數(shù)據(jù)庫的支持下,很容易知道這一序列對應著CWE-319缺陷。至此, 我們就檢測到了該系統(tǒng)中存在CWE-319安全缺陷。
8
權利要求
一種軟件系統(tǒng)安全缺陷檢測方法,包括下列步驟1)軟件安全缺陷基本結構的抽象及形式化首先,定義三個可枚舉有限集合①DataType是數(shù)據(jù)類型的可枚舉有限集合;②Operation是對數(shù)據(jù)進行操作即系統(tǒng)行為的可枚舉有限集合;③Violation是系統(tǒng)行為違反的安全約束的可枚舉有限集合;其次,定義三個關系①DT(x,y)是一個二元關系,表示數(shù)據(jù)x具有類型y,其中,y∈DataType;②INTENT(x,y)是一個二元關系,表示在數(shù)據(jù)x上進行操作y,其中y∈Violation;③VIOLATE(x,y)是一個二元關系,表示對數(shù)據(jù)x沒有實施安全約束y,其中,y∈安全約束Violation;基于上述定義,采用以下公式來對安全缺陷進行形式化,其中,y∈DataType,z∈Operation,w∈Violation2)基于上述的安全缺陷基本結構及形式化方法,構建可用于驗證的安全缺陷數(shù)據(jù)庫;3)用擴展的Z語言形式化描述軟件系統(tǒng)并形成Z規(guī)格說明對Z語言進行擴充,在Z原來的基礎上,以庫的形式增加了對以下的類型和操作模式的定義將DataType集合中的每個元素定義為一個類型,將Operation和Violation集合中每個元素定義為一個操作模式,使得采用擴展之后的Z語言書寫的規(guī)格說明具有足夠的檢測安全缺陷的信息,由軟件開發(fā)人員利用使用擴展之后的Z對軟件開發(fā)過程中的各種軟件制品進行形式化描述,形成規(guī)格說明文檔;4)基于安全缺陷數(shù)據(jù)庫對Z規(guī)格說明進行安全缺陷的檢測根據(jù)軟件系統(tǒng)的Z規(guī)格說明文檔,在可驗證安全缺陷數(shù)據(jù)庫的支持下,對Z規(guī)格中是否存在安全缺陷進行如下的檢測首先需要針對軟件系統(tǒng)的Z規(guī)格生成一個AST樹;然后遍歷AST樹查看是否出現(xiàn)了安全缺陷數(shù)據(jù)庫中某一安全缺陷的關鍵字序列,如果是則說明系統(tǒng)存在該安全缺陷;最后生成檢測報告。FDA0000021063150000011.tif
全文摘要
本發(fā)明屬于軟件安全領域,涉及一種軟件系統(tǒng)安全缺陷檢測方法,通過對大量安全缺陷的研究,抽象出安全缺陷的基本結構并對其進行形式化;然后,基于形式化之后的安全缺陷構建了一個可用于驗證的安全缺陷數(shù)據(jù)庫;接著,用擴展了的Z語言對軟件開發(fā)過程中的各種制品進行形式化,形成一份Z規(guī)格;最后,基于可驗證的安全缺陷數(shù)據(jù)庫對Z規(guī)格進行安全缺陷的自動檢測。本發(fā)明能夠?qū)崿F(xiàn)在軟件開發(fā)過程中對安全缺陷進行自動檢測,進而提高軟件的安全性。
文檔編號G06F11/36GK101833505SQ20101016094
公開日2010年9月15日 申請日期2010年4月30日 優(yōu)先權日2010年4月30日
發(fā)明者曹燕, 李曉紅, 杜洪偉, 王建剛, 邢金亮 申請人:天津大學