專利名稱:基于安全缺陷知識庫的可信軟件開發(fā)方法
技術(shù)領(lǐng)域:
本發(fā)明屬于軟件安全領(lǐng)域,涉及一種可信軟件的開發(fā)方法。
背景技術(shù):
在信息化席巻全球的現(xiàn)代社會,軟件已滲透到現(xiàn)代生活的方方面面,這就使得軟件安全 問題成為廣大用戶極為關(guān)注的問題。從軟件開發(fā)的角度講,使用經(jīng)實踐驗證的、相對可靠的 、可重用流程,有利于實現(xiàn)軟件可靠程度的提升。因此,軟件開發(fā)人員必須采用一種更嚴格 的、更關(guān)注安全性的軟件開發(fā)流程,這種流程旨在盡量減少設(shè)計、編碼和文檔編寫過程中出 現(xiàn)的漏洞,并在開發(fā)生命周期中盡可能早地檢測到并消除這些漏洞。如今,有關(guān)軟件安全的 相關(guān)問題已經(jīng)成為軟件工程領(lǐng)域的熱點。以構(gòu)建安全可靠的應用程序和系統(tǒng)為出發(fā)點,微軟 公司在傳統(tǒng)軟件工程流程的基礎(chǔ)上提出了安全軟件開發(fā)生命周期,在軟件開發(fā)的需求、設(shè)計 、編碼和測試發(fā)布等各個階段都加入了有關(guān)安全的討論。這使得軟件在開發(fā)過程中就把安全 作為其重要組成部分,而不是把安全作為軟件功能以外的附加屬性。
軟件缺陷是指系統(tǒng)或系統(tǒng)成分中,那些可能導致其整體或局部無法實現(xiàn)預期功能的不足 點。從這個角度講,軟件缺陷與軟件產(chǎn)品本身的功能需求直接相關(guān),系統(tǒng)對特定功能的需求 導致了潛在的安全隱患。但大部分的軟件缺陷是通過設(shè)計的改良、實現(xiàn)的優(yōu)化來減緩、甚至 避免的。2009年CWE/SANS發(fā)布了25個最危險的編程錯誤。這些錯誤之所以是危險的,是因為 他們可能導致攻擊者完全接管軟件、竊取數(shù)據(jù),甚至導致軟件系統(tǒng)崩潰。CWE秧〈畢萘斜 恚-ommon Weakness Enumeration)是美國的MITRE公司(一個非盈利機構(gòu))繼CVE (Common Vulnerabilities and Exposures)之后的又一個安全漏洞詞典。它們收集了到目前為止, 已經(jīng)發(fā)現(xiàn)的在整個軟件開發(fā)生命周期的所有安全漏洞。除此以外,CWE網(wǎng)站還包含了700多個 額外的編程錯誤、設(shè)計錯誤和導致開發(fā)漏洞的結(jié)構(gòu)錯誤等數(shù)據(jù)。
為了更有針對性的研究攻擊者的攻擊行為,安全分析專家提出攻擊模式的概念,以此來了解并預測可能的攻擊行為。簡單的講,攻擊模式是一種抽象機制,用來描述一種觀察到的 攻擊是如何被執(zhí)行的。它所針對的問題即為軟件產(chǎn)品攻擊者的目標對象,描述的是攻擊者用 來破壞軟件產(chǎn)品的技術(shù)。依據(jù)攻擊范式,攻擊模式還提供了本身的適用范圍的上下文描述以 及緩和攻擊的方案。使用攻擊模式的動機為軟件開發(fā)者通過將自己想象為攻擊者,參與到威 脅中去,從而有效提高軟件的安全性。
軟件缺陷是軟件工作產(chǎn)品中不滿足指定要求的成分,其產(chǎn)生過程貫穿于整個軟件項目開 發(fā)生命周期。而攻擊模式是安全專家針對網(wǎng)絡中發(fā)生的大量攻擊行為案例進行抽象和總結(jié)出 的一套攻擊某類軟件缺陷的模式化方法,也可以說是攻擊者利用軟件系統(tǒng)中的漏洞展開的一 次攻擊行為來達到自己的某種不可告人的目的。軟件缺陷和攻擊模式的關(guān)系可以很好的描述 為因果聯(lián)系,前者的多樣性決定了后者的復雜性。目前,在軟件安全研究領(lǐng)域,國內(nèi)外專家 對兩者關(guān)系的研究缺乏針對性和全面性,沒有一個從工程角度宏觀把握安全問題的規(guī)范化思 路。在工程實踐中,軟件開發(fā)人員對軟件缺陷及軟件產(chǎn)品面對的各種潛在威脅缺乏充分了解 ,這也正是導致許多軟件產(chǎn)品安全性能嚴重不足的重要原因。
發(fā)明內(nèi)容
本發(fā)明針對這種現(xiàn)狀,克服現(xiàn)有技術(shù)的缺陷,提出一種基于軟件缺陷庫、貫穿軟件開發(fā) 生命周期的、面向軟件安全性能的整體軟件開發(fā)方案,用以及時發(fā)現(xiàn)在軟件開發(fā)過程各階段 當中可能出現(xiàn)的安全漏洞,依據(jù)本發(fā)明提出的方法開發(fā)的軟件系統(tǒng),可以幫助軟件開發(fā)人員 修正設(shè)計內(nèi)容、完善實現(xiàn)方法,對軟件開發(fā)過程提供一種全局性的技術(shù)支持并提出帶有定量 、可行性及代價分析的緩和建議。提高軟件的可信度,有效提高軟件產(chǎn)品的質(zhì)量和開發(fā)效率
為此,本發(fā)明給出如下的技術(shù)方案
一種基于安全缺陷知識庫的可信軟件開發(fā)方法,包括
(1) 建立基于安全缺陷知識庫,該知識庫包含缺陷用例、誤用例、緩和用例以及它 們之間的關(guān)聯(lián)關(guān)系,滿足對活動圖、順序圖進行檢測及完善的需要的自動機形式的攻擊模式 及軟件缺陷,常用代碼檢測工具的接口,與軟件缺陷及攻擊模式相關(guān)的各項信息及測試用例 生成器等,并在該庫的基礎(chǔ)上,實施以下各個步驟;
(2) 將設(shè)計人員的用例圖及需求說明文檔作為信息收集的載體,找到設(shè)計中相關(guān)的誤
4用例,并提供可度量效果及代價分析的緩和方案;
(3) 針對用例圖中的每一個用例,分析其自身功能需求及使用邊界,繪制活動圖,通過 對活動圖的結(jié)構(gòu)分析,得到設(shè)計階段即會顯現(xiàn)出的軟件缺陷;
(4) 將順序圖作為對象實體間交互信息的主要載體,通過對順序圖的分析給出軟件中 的脆弱點及潛在的攻擊模式;
(5) 針對具體的編程語言及環(huán)境選擇合適的工具檢測代碼的編寫缺陷;
(6) 通過對軟件成品的安全性評估,得出軟件的可靠程度,以此作為成品軟件的安全 性指標,生成針對具體情況的安全性能測試用例;
(7) 對所述知識庫中的內(nèi)容進行及時更新。 本發(fā)明提出的一種基于安全缺陷知識庫的軟件開發(fā)方法,有益效果包括 通過對用戶用例圖的分析檢測,找出需求分析階段顯現(xiàn)出的安全漏洞,并將改進方案分
層次提供給用戶,讓用戶綜合自身的實際情況酌情修改。由于需求階段是整個開發(fā)活動的源 頭,這一階段的正確性是后面一切工作可以順利開展的基本保證。同時,從軟件開發(fā)者的角 度講,在與其客戶交流需求設(shè)計時,將待開發(fā)軟件面對的各種潛在威脅發(fā)現(xiàn)出來、陳其利弊 ,從根本上也有利于保護軟件開發(fā)者的權(quán)益。
通過對活動圖的檢測,找到用例功能流程上或用例邊界中可能出現(xiàn)的安全漏洞,這些漏 洞是由軟件設(shè)計本身的缺陷導致的。針對檢測出的問題,將可行建議提供給用戶,為用戶的 不同安全需求提供不同的緩和意見。
通過對順序圖的檢測,找到軟件實現(xiàn)設(shè)計中的缺陷。這些缺陷往往是通過順序圖的結(jié)構(gòu) 反應出來。將檢測出的缺陷告知給用戶,并建議用戶結(jié)合其本身的安全性需求及開發(fā)預算, 來決定采用何種緩和辦法。由于順序圖中包含的信息非常豐富,對其的檢測往往可以發(fā)現(xiàn)一 些在前階段無法發(fā)現(xiàn)的安全問題。同時,順序圖也是編碼實現(xiàn)的重要指導,對順序圖的完善 對于后續(xù)編碼階段有非常重要的意義。
前期的全部設(shè)計都是通過具體編碼來實現(xiàn)的,對代碼的檢測就顯得尤為重要。通過代碼 檢測,可以找到編碼中的語法錯誤、易出錯函數(shù)的不當使用及不可靠調(diào)用關(guān)系等安全問題, 這些問題的及時修改對軟件產(chǎn)品最終的安全性能實現(xiàn)起到?jīng)Q定性作用。
針對前期檢測中檢測出的各種安全問題,為用戶生成用于安全性能測試的用例。這些測 試用例可以帶有針對性的檢測用戶前期曾出現(xiàn)過的安全漏洞,更有針對性的進行測試。同 時也讓用戶對安全性能的表現(xiàn)有一個直觀的認識,從而更全面的考慮其產(chǎn)品的安全性能。
圖l:本發(fā)明的可信軟件開發(fā)方法整體流程框圖。
圖2:網(wǎng)上銀行的用例圖(基本功能)。
圖3:用戶修改后的用例圖。
圖4:用例"訪問在線銀行"的對應活動圖。
圖5:ArgoUML繪制的"訪問在線銀行"動作的順序圖。
圖6:安全性能測試過程。
圖7:最終用例圖。
圖8:"訪問網(wǎng)上銀行"的最終活動圖。
具體實施例方式
本發(fā)明提出一種基于安全缺陷知識庫的軟件開發(fā)方法,主要包括下列步驟
(1) 針對需求分析階段,將設(shè)計人員的用例圖及需求說明文檔作為信息收集的載體。 通過針對這些信息的分析,找到設(shè)計中相關(guān)的誤用例,并根據(jù)實際情況,提供可度量效果及 代價分析的緩和方案。
(2) 針對用例圖中的每一個用例,分析其自身功能需求及使用邊界。以這些信息為基 礎(chǔ),繪制活動圖?;顒訄D中包含有用例所描述功能的基本工作流程,帶有較豐富的結(jié)構(gòu)信息 。通過對活動圖的結(jié)構(gòu)分析,可以得到一些設(shè)計階段即會顯現(xiàn)出的軟件缺陷。
(3) 針對設(shè)計階段,將順序圖作為對象實體間交互信息的主要載體,通過對順序圖的 分析給出軟件中的脆弱點及潛在的攻擊模式。順序圖中含有較為豐富的結(jié)構(gòu)信息和邏輯信息 ,通過對這些信息的分析,可以預見性的發(fā)現(xiàn)一些在前期設(shè)計階段中無法發(fā)現(xiàn)的軟件缺陷。 這與前面活動圖部分的工作相互補充,達到更理想的效果。
(4) 在代碼的具體的實現(xiàn)過程中,仍有可能引入與實現(xiàn)語言相關(guān)的、不確定的代碼編
寫錯誤。所以這一階段要對代碼進行檢査,并反饋給用戶相關(guān)的代碼漏洞。代碼檢測技術(shù)相 對成熟,可用工具也容易得到。針對具體的編程語言及環(huán)境選擇合適的工具,即可得到比較 理想的效果。
(5) 在測試階段,將軟件成品的安全性能列為軟件檢測的重要內(nèi)容,通過對軟件成品 的安全性評估,得出軟件的可靠程度,以此作為成品軟件的安全性指標。這種針對安全性的測試是需要特定測試用例做支持的,本部分的主要目的就是利用前期各階段測試的結(jié)果,為 軟件測試人員生成針對其具體情況的安全性能測試用例。
(6) 所有這些工作都要在安全缺陷知識庫的基礎(chǔ)上完成。知識庫為各階段不同工作提 供不同的信息。具體的講,在需求分析階段,提供缺陷用例、誤用例、緩和用例,以及它們 之間的關(guān)聯(lián)關(guān)系;在設(shè)計階段,提供自動機形式的攻擊模式及軟件缺陷,以滿足對活動圖
、順序圖進行檢測及完善的需要;在代碼檢測階段,要提供常用代碼檢測工具的接口;在測 試階段,要提供與軟件缺陷及攻擊模式相關(guān)的各項信息,及測試用例生成器。
(7) 為保證安全缺陷知識庫的可用性和可靠性,要對知識庫中的內(nèi)容進行及時更新。 對于新發(fā)現(xiàn)的軟件缺陷或攻擊模式,要進行適當?shù)奶幚?,并及時添加。知識的獲得可以通過 網(wǎng)絡爬取及主動訪問分析來完成。
由于本發(fā)明是以安全缺陷知識庫為基礎(chǔ)的,所以知識庫的構(gòu)建和完善是其有效工作的必 要保障。為達到前文敘述中列舉的各項功能、性能要求,安全缺陷知識庫應具備如下特征
1、 內(nèi)容上為軟件開發(fā)周期中的不同階段提供有針對性的相應信息。具體的講,就是
:在需求分析階段,提供缺陷用例、誤用例、緩和用例及三者之間的相互關(guān)系;在需求及設(shè) 計分析階段,提供需求及設(shè)計分析階段常見軟件缺陷及攻擊模式的相關(guān)信息,這些信息應以 形式化的方式存在;在設(shè)計階段,提供架構(gòu)與設(shè)計階段常見的軟件缺陷及攻擊模式相關(guān)信息 。同樣也是形式化的,但在內(nèi)容上,與之前階段的可能不同,因為不同的缺陷可能會在不同 的開發(fā)階段出現(xiàn);還有一點要注意,就是這些關(guān)于缺陷及緩和方案的信息都是定量化的。即 是說缺陷之間不是完全相同的,其可能造成的威脅及后果嚴重程度不同、修復或規(guī)避它所 要付出的代價也不同,這些信息在庫中都是有所體現(xiàn)的。在代碼階段,由于可以利用已有的 代碼檢測工具,只需要提供相關(guān)工具的接口,或安裝、調(diào)用鏈接即可;在測試階段,要結(jié)合 之前的檢測結(jié)果,為用戶提供針對安全性能測試的測試用例。
2、 形式上為了方便程序訪問以實現(xiàn)客戶功能,將相關(guān)信息存為程序易解析的形式; 對于軟件缺陷及攻擊模式等的本征信息,則綜合使用語義描述、形式化結(jié)構(gòu)表達式等方式, 以滿足使用中的具體需求。為了對庫的內(nèi)容進行更新及有效信息提取,將相關(guān)內(nèi)容表述成形 式化形式(如本體等),以進行嚴密的表述及邏輯推理,提高庫的自我完善能力及使用價值
3、 安全缺陷知識庫的有效性與其內(nèi)容的豐富性密切相關(guān),所以庫的自我更新能力是非 常重要的一部分。新的軟件缺陷及攻擊方法層出不窮,這就要求知識庫有成長和學習的能力
7。可以通過網(wǎng)絡信息爬取及主動知識獲得的方式來收集原始信息。具體的講,就是通過網(wǎng)絡 爬蟲來搜集網(wǎng)絡中的資源,或通過與廣大網(wǎng)絡使用者的有效交互及信息反饋,來搜羅已出現(xiàn) 攻擊行為的相關(guān)信息。得到這些原始信息后,再經(jīng)過相應的加工和處理,就能得到可以入庫 并繼續(xù)使用的內(nèi)容,從而達到更新知識庫內(nèi)容的目的。
本發(fā)明提出的軟件工程方法以安全缺陷知識庫為基礎(chǔ),如何對庫中提供的內(nèi)容進行恰當 的使用,是關(guān)系到最終成果和效用的重要問題。在需求分析階段,讀取用戶的用例圖,掃描 出當中可能產(chǎn)生誤用例的用例(風險用例)。在誤用例/攻擊模式庫的支持下,可以檢測得 到用例中表現(xiàn)出的軟件脆弱點及誤用例,并給出可行的緩和方案建議。接下來,以用例圖為 基礎(chǔ),分析用例行為及系統(tǒng)邊界,得到針對用例行為或功能的活動圖。分析活動圖的結(jié)構(gòu)及 一定量的語義信息,找到當中是否存在設(shè)計缺陷或安全隱患。在設(shè)計階段,以用戶的順序圖 為信息依托,通過資產(chǎn)信息提取、分析和檢測,找到相關(guān)軟件脆弱點、攻擊模式及不可靠的 類關(guān)系等。
這些階段的工作結(jié)果,都是以修改意見的形式提供給用戶的,為用戶清楚表述其設(shè)計中 存在的不安全因素,及這些威脅可能帶來的后果是什么、嚴重程度有多少,以及規(guī)避這些安 全隱患所有付出的代價又是多少。最終是否采用及采用何種緩和辦法,由用戶結(jié)合其自身的 實際情況做以綜合考慮后定奪。
在代碼分析階段,由于代碼檢測技術(shù)相對成熟,用戶只需鏈接到其相應編程環(huán)境及編程 語言的檢測工具即可。在最終的測試階段,要根據(jù)對用戶前期信息的分析結(jié)果(即對其用例 圖、活動圖、順序圖的分析結(jié)果),帶有針對性的為用戶提供安全性能測試用例,通過這樣 的用例,可以讓用戶對其軟件產(chǎn)品的安全性能表現(xiàn)有一個直觀的感受,有利于最終產(chǎn)品質(zhì)量 的提高。
下面通過一個在線銀行應用程序的設(shè)計及實現(xiàn)過程來展示本發(fā)明的作用和效果。通過 對在線網(wǎng)上銀行應用程序進行用例建模,繪制用例圖作為描述整個應用程序的概圖,獲得的 在線網(wǎng)上銀行應用程序的用例圖如圖2所示(在本例中,使用ArgoUML工具完成對下列各階段 視圖的繪制)。
通過對用例圖的分析檢測,發(fā)現(xiàn)"訪問在線銀行"用例可能會引入登錄及密碼破解相關(guān) 的誤用例"密碼暴力破解"。為了避免這種誤用例發(fā)生,可以采用多種方法,"限制同名用 戶登錄次數(shù)"和"限制密碼長度"是其中比較常用的。根據(jù)以上分析得到的信息,用戶可將 其用例設(shè)計進行修改,這里假設(shè)用戶采用了 "限制密碼長度"這種緩和辦法。修改結(jié)果如圖
8將活動圖縛到在線網(wǎng)上銀行應用程序的每一個用例上,對其進行動態(tài)建模,從而完成對 在線網(wǎng)上銀行應用程序的分解,由于在線網(wǎng)上銀行應用程序的結(jié)構(gòu)和功能不復雜,根據(jù)建模 威脅和評估的需要,我們只是對其進行一層的分解。以第一個用例"訪問在線銀行"為例, 獲得的在線網(wǎng)上銀行應用程序的分解圖如圖4所示,圖中下劃線字體標識的內(nèi)容即是為根據(jù) 前階段用例部分的修改而添加的。檢測這一活動圖,并未發(fā)現(xiàn)有新的缺陷引入,可直接進行 下一階段,即順序圖繪制。而針對這一功能實現(xiàn)的順序圖如圖5所示。
通過對順序圖的檢測,發(fā)現(xiàn)即使強制限制密碼長度,仍然可能通過半自動化枚舉的方法 將用戶的密碼找出來,也就還存在著密碼泄露的潛在威脅。在這里,建議用戶將最初建議的 緩和用例"限制同名登錄次數(shù)"加進來。用戶從自身應用角度來講,認為這種情況出現(xiàn)的可 能性不大,于是選擇并不采納這一建議。繼而進行下一階段。編碼階段的漏洞與具體使用環(huán) 境及編程語言有很大關(guān)系,這里則不詳細列舉。
開發(fā)進程推進到測試階段,要為用戶提供安全性能測試用例。針對安全性能的測試過 程如圖6所示。
針對前階段檢測出的安全漏洞,提供給用戶的測試用例為一個自動登錄"裝置",它會 模擬對一個用戶名的多次登錄。通過測試,發(fā)現(xiàn)六位左右長度的密碼,是比較容易被自動登 錄裝置突破的。即是說,這樣的密碼長度并不能有效避免密碼的暴力破解。此外,系統(tǒng)的最 大負荷并不足夠,有待加強。通過這樣的測試,用戶更清楚的了解到其軟件產(chǎn)品面臨的安全 問題,并重新改進其薄弱之處,直至達到滿意的效果。最終修改后的用例圖和活動圖如圖7 、圖8所示。
權(quán)利要求
1.一種基于安全缺陷知識庫的可信軟件開發(fā)方法,包括(1)建立基于安全缺陷知識庫,該知識庫包含缺陷用例、誤用例、緩和用例以及它們之間的關(guān)聯(lián)關(guān)系,滿足對活動圖、順序圖進行檢測及完善的需要的自動機形式的攻擊模式及軟件缺陷,常用代碼檢測工具的接口,與軟件缺陷及攻擊模式相關(guān)的各項信息及測試用例生成器等,并在該庫的基礎(chǔ)上,實施以下各個步驟;(2)將設(shè)計人員的用例圖及需求說明文檔作為信息收集的載體,找到設(shè)計中相關(guān)的誤用例,并提供可度量效果及代價分析的緩和方案;(3)針對用例圖中的每一個用例,分析其自身功能需求及使用邊界,繪制活動圖,通過對活動圖的結(jié)構(gòu)分析,得到設(shè)計階段即會顯現(xiàn)出的軟件缺陷;(4)將順序圖作為對象實體間交互信息的主要載體,通過對順序圖的分析給出軟件中的脆弱點及潛在的攻擊模式;(5)針對具體的編程語言及環(huán)境選擇合適的工具檢測代碼的編寫缺陷;(6)通過對軟件成品的安全性評估,得出軟件的可靠程度,以此作為成品軟件的安全性指標,生成針對具體情況的安全性能測試用例;(7)對所述知識庫中的內(nèi)容進行及時更新。
全文摘要
本發(fā)明屬于軟件安全技術(shù)領(lǐng)域,涉及一種基于安全缺陷知識庫的可信軟件開發(fā)方法,包括(1)建立基于安全缺陷知識庫;(2)將設(shè)計人員的用例圖及需求說明文檔作為信息收集的載體,找到設(shè)計中相關(guān)的誤用例,并提供可度量效果及代價分析的緩和方案;(3)針對用例圖中的每一個用例,繪制活動圖,通過對活動圖的結(jié)構(gòu)分析,得到設(shè)計階段即會顯現(xiàn)出的軟件缺陷;(4)通過對順序圖的分析給出軟件中的脆弱點及潛在的攻擊模式;(5)針對具體的編程語言及環(huán)境選擇合適的工具檢測代碼的編寫缺陷;(6)通過對軟件成品的安全性評估,得出軟件的可靠程度;(7)對所述知識庫中的內(nèi)容進行及時更新。本發(fā)明有利于降低開發(fā)成本,提高軟件的可信度和開發(fā)效率。
文檔編號G06F9/44GK101625641SQ20091030521
公開日2010年1月13日 申請日期2009年8月5日 優(yōu)先權(quán)日2009年8月5日
發(fā)明者燕 曹, 李曉紅, 杜洪偉, 東 潘, 王翔宇 申請人:天津大學