摘要:提出軟件安全性需求通常隱含于普通軟件需求中,屬于軟件需求子集。文章探討了在一般工程領(lǐng)域中,如何基于獲取需求進(jìn)行安全分析,并挖掘軟件安全性需求,繼而進(jìn)行安全性需求積累與重用。
關(guān)鍵詞:軟件;安全性分析;需求獲取;方法
中圖分類號:TP311" " " 文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2025)16-0042-03
開放科學(xué)(資源服務(wù)) 標(biāo)識碼(OSID)
0 引言
軟件安全性需求是指軟件開發(fā)過程中,為確保系統(tǒng)能夠抵御潛在威脅、保護(hù)數(shù)據(jù)和功能免受惡意攻擊或意外損害而提出的具體要求。國外在軟件安全性方面已有較成熟標(biāo)準(zhǔn),如ISO/IEC27001和NIST SP800系列,為需求定義提供了框架。國內(nèi)近年來加強(qiáng)了軟件安全性相關(guān)立法,如《中華人民共和國數(shù)據(jù)安全法》,提升了其實(shí)施能力。本文側(cè)重探討軟件安全性需求的獲取方法,通過在設(shè)計(jì)階段運(yùn)用這些方法,可使軟件設(shè)計(jì)人員更加有針對性地保障軟件安全性,提高軟件運(yùn)行質(zhì)量。
1 軟件需求獲取
1.1 軟件需求概述
軟件需求由多個(gè)不同層次需求組成,包括業(yè)務(wù)需求、用戶需求和功能需求。業(yè)務(wù)需求描述組織或用戶對產(chǎn)品的高層次需求,用戶需求表達(dá)產(chǎn)品使用過程必須完成的任務(wù),功能需求則定義了開發(fā)人員務(wù)必實(shí)現(xiàn)的軟件功能。不同層次需求的呈現(xiàn)方式不同,業(yè)務(wù)需求用項(xiàng)目視圖和需求文檔呈現(xiàn),用戶需求以用例文檔和方案表達(dá),而更底層的功能需求則通過軟件需求規(guī)格說明書進(jìn)行描述,并包含了相關(guān)的非功能需求,三者均為軟件需求的輸出文檔。
軟件安全性需求是軟件需求的一個(gè)子集。軟件需求描述了系統(tǒng)呈現(xiàn)給用戶的關(guān)鍵行為和執(zhí)行動(dòng)作,包含產(chǎn)品遵循的標(biāo)準(zhǔn)、體系、規(guī)范和合約,以及系統(tǒng)需求、約束條件和質(zhì)量屬性。其中系統(tǒng)需求是軟件的性能要求,約束條件是軟件的架構(gòu)限制和設(shè)計(jì)約束,質(zhì)量屬性是產(chǎn)品特點(diǎn)的系統(tǒng)性描述,反映產(chǎn)品差異性功能,以上均為軟件需求的輸入要素。軟件需求關(guān)系如圖1所示。
通常圖1的輸入要素均可以從軟件研制任務(wù)書中獲得,研制任務(wù)書有時(shí)會(huì)隱藏業(yè)務(wù)需求,由其他需求層次來保證,但由于軟件研制任務(wù)書內(nèi)容描述的形式、深度各不相同,仍需從任務(wù)書中分析、提煉并獲取軟件需求,作為獲取軟件安全性需求的前置條件。為使軟件安全性需求獲取工作更具針對性,可將其分成:1) 軟件需求獲取;2) 軟件安全性需求剪裁;3) 安全性需求積累與重用。
1.2 軟件需求獲取方法
軟件需求獲取方法多種多樣,目前發(fā)展較為成熟的主要分為軟件需求獲取的傳統(tǒng)方法和現(xiàn)代方法。傳統(tǒng)方法是指通過用戶溝通、分析文檔和觀察用戶行為等方式,系統(tǒng)收集和整理用戶需求的過程,主要包括用戶訪談、問卷調(diào)查、文檔分析和觀察紀(jì)實(shí)。現(xiàn)代方法則是利用新技術(shù)、新工具,快速高效地收集和分析用戶需求的過程,主要包括原型法、頭腦風(fēng)暴、焦點(diǎn)小組、目標(biāo)分解、數(shù)據(jù)挖掘等。本文將總結(jié)兩類方法的適用場景、優(yōu)勢和局限[1]。
1.2.1 傳統(tǒng)方法
傳統(tǒng)軟件需求獲取方法適用于需求明確、用戶群體較小或須深入挖掘需求的場景,其優(yōu)勢在于可與用戶直接溝通,靈活性高,成本較低,但耗時(shí)較長,依賴于用戶參與,主觀性強(qiáng),難以應(yīng)對復(fù)雜需求。
1) 用戶訪談,通過與用戶或利益相關(guān)者進(jìn)行一對一或小組訪談,直接詢問需求、期望和問題以獲取詳細(xì)需求的方法。
2) 問卷調(diào)查,針對用戶和利益相關(guān)者設(shè)計(jì)問題并發(fā)出問卷,收集其對系統(tǒng)需求的看法和反饋,是對已知需求的再次驗(yàn)證。
3) 文檔分析,通過文檔(如業(yè)務(wù)報(bào)告、用戶手冊、流程說明等) 提取系統(tǒng)需求信息。
4) 觀察紀(jì)實(shí),現(xiàn)場觀察工作環(huán)境和過程,了解軟件實(shí)際使用場景、需求、流程和痛點(diǎn)。
1.2.2 現(xiàn)代方法
現(xiàn)代軟件需求獲取方法適合需求模糊、需快速迭代創(chuàng)新的場景,其可快速響應(yīng)需求變化,靈活性高,通過數(shù)據(jù)驅(qū)動(dòng)適合復(fù)雜項(xiàng)目,但因技術(shù)要求高需精細(xì)挖掘,可能缺乏細(xì)節(jié),資源消耗大。
1) 原型法,快速構(gòu)建可交互系統(tǒng)原型,供用戶直觀體驗(yàn)和反饋,繼而逐步明確和完善需求的方法。
2) 頭腦風(fēng)暴,組織多人參與討論,鼓勵(lì)自由提出需求,盡可能多地激發(fā)創(chuàng)意、收集需求。
3) 焦點(diǎn)小組,識別用戶和利益相關(guān)者所關(guān)注的問題,收集他們對系統(tǒng)需求的看法和意見以求解決對策的方法。
4) 目標(biāo)分解,對軟件的系統(tǒng)目標(biāo)進(jìn)行分解,根據(jù)分解后的功能性目標(biāo)和非功能質(zhì)量屬性,獲得相應(yīng)功能實(shí)現(xiàn)能力和程度的方法。
5) 數(shù)據(jù)挖掘,將軟件需求聚焦在問題解決,通過數(shù)據(jù)挖掘發(fā)現(xiàn)現(xiàn)實(shí)問題和隱含問題,并歸納成可解問題集,以尋求用戶可接受平衡方案的方法。
1.3 軟件需求獲取步驟
因軟件開發(fā)過程的項(xiàng)目和文化差異,需求獲取缺乏一組標(biāo)準(zhǔn)的、定式化途徑。結(jié)合目前國內(nèi)主流的軟件開發(fā)技術(shù)和項(xiàng)目管理方法,聯(lián)系軟件開發(fā)實(shí)際給出推薦的需求獲取步驟,用于開展需求獲取活動(dòng),以下各步驟按順序依次銜接。
1) 定義項(xiàng)目視圖,包括項(xiàng)目范圍、組織結(jié)構(gòu)、部門列表、崗位角色;
2) 確定用戶類,明確人員范圍并繪制責(zé)任矩陣;
3) 構(gòu)建工作流,包括資金流、物流和信息流,并構(gòu)建業(yè)務(wù)工作流模型;
4) 開發(fā)用例(數(shù)據(jù)流圖) ,結(jié)合需求獲取方法開發(fā)用例(數(shù)據(jù)流圖) 并設(shè)置優(yōu)先級;
5) 收集質(zhì)量特性及非功能需求,將性能、可靠性、安全性需求與業(yè)務(wù)規(guī)則相結(jié)合,形成功能需求;
6) 分類用例數(shù)據(jù),對用例、數(shù)據(jù)流圖中數(shù)據(jù)分類,關(guān)注數(shù)據(jù)組成和關(guān)系;
7) 建立功能模型,訂立用例(數(shù)據(jù)流圖) ,建立功能模型并審查,解析核心需求;
8) 開發(fā)界面原型,設(shè)計(jì)輸入輸出設(shè)備、界面風(fēng)格和輸出方式,建立接口規(guī)范和信息流傳輸規(guī)則;
9) 開發(fā)測試用例,開發(fā)概念測試用例,驗(yàn)證數(shù)據(jù)流圖、功能需求和原型。
2 軟件安全性需求剪裁
對比一般軟件執(zhí)行通用安全標(biāo)準(zhǔn)(如ISO/IEC 27001) ,機(jī)載軟件則必須符合嚴(yán)格的航空安全標(biāo)準(zhǔn)(如DO-178C/AS9100等) ,其作為航空電子系統(tǒng)的核心組成,直接關(guān)系到飛行安全,因此其安全性要求遠(yuǎn)高于一般軟件,而如何獲取準(zhǔn)確的軟件安全性需求是機(jī)載軟件開發(fā)的首要任務(wù)。目前在工業(yè)、互聯(lián)網(wǎng)、航空電子等行業(yè)均未形成統(tǒng)一的軟件安全性需求獲取標(biāo)準(zhǔn),結(jié)合航空機(jī)載設(shè)備的集成化發(fā)展趨勢,提出基于需求獲取進(jìn)行航空機(jī)載軟件安全性需求剪裁的方法路徑,有效提升機(jī)載軟件控制的有效性。為更好地執(zhí)行軟件安全性需求剪裁,下文針對軟件安全性需求進(jìn)行分類,并從軟件需求里分析出隱藏的軟件安全性需求。
2.1 軟件安全性需求分類
軟件安全性需求隱含在軟件需求的各個(gè)方面,既可能在功能需求中出現(xiàn),也可能在非功能需求中出現(xiàn),同時(shí)還可能出現(xiàn)在預(yù)防系統(tǒng)進(jìn)入不安全狀態(tài)的預(yù)防性需求。前者側(cè)重核心功能實(shí)現(xiàn),中者偏重性能指標(biāo)達(dá)成,后者關(guān)注極限故障容錯(cuò),三者共同塑造了軟件的安全性基礎(chǔ)。
功能性需求關(guān)注軟件執(zhí)行的具體功能,包括飛行控制、數(shù)據(jù)處理、通信等,這些需求通常來源于系統(tǒng)規(guī)格說明和用戶需求。軟件安全性功能需求則是指可以確保軟件系統(tǒng)安全執(zhí)行其功能,專注于防止軟件系統(tǒng)發(fā)生安全事故,確保數(shù)據(jù)的機(jī)密性、完整性和可用性,并能夠在出現(xiàn)安全威脅時(shí)進(jìn)行有效響應(yīng)。
非功能性需求涉及軟件的性能、可靠性、可用性、可維護(hù)性、可擴(kuò)展性等,這些需求直接影響用戶體驗(yàn)、系統(tǒng)穩(wěn)定和性能。尤其在極端條件下,若非功能性需求未被滿足,軟件安全性極易受威脅。實(shí)際工作中應(yīng)對非功能性需求進(jìn)行準(zhǔn)確記錄,確定其優(yōu)先級并明確度量指標(biāo),確保非功能性需求被有效獲取、管理和實(shí)現(xiàn),從而提高軟件產(chǎn)品的質(zhì)量和用戶滿意度。
預(yù)防性需求專注于軟件在故障情況下的行為,包括故障檢測、錯(cuò)誤處理、系統(tǒng)恢復(fù)等。這些需求通常基于系統(tǒng)的危害性分析,確保系統(tǒng)設(shè)計(jì)能夠抵御潛在的安全威脅,減少漏洞風(fēng)險(xiǎn),保證系統(tǒng)的完整性和可靠性。而預(yù)防系統(tǒng)進(jìn)入不安全狀態(tài)的安全性需求獲取是一個(gè)復(fù)雜的過程,它涉及識別和分析系統(tǒng)可能面臨的安全威脅,以及制定相應(yīng)的安全措施減輕威脅。具體運(yùn)行過程包括:預(yù)防性需求,即防止安全事件發(fā)生,如輸入驗(yàn)證、權(quán)限控制和冗余設(shè)計(jì);檢測性需求,主動(dòng)檢測潛在安全威脅,如日志記錄、異常監(jiān)控和數(shù)據(jù)校驗(yàn);響應(yīng)性需求,發(fā)生安全事件后的響應(yīng)效率和處理能力,如故障恢復(fù)、報(bào)警通知和應(yīng)急處理。
2.2 軟件安全性需求分析
軟件需求的安全性分析需要對系統(tǒng)級的安全性需求進(jìn)行分析,保證必要的軟件安全功能和安全完整性。通常軟件研制任務(wù)書包含了分配給軟件的安全性需求,或者由用戶對這部分需求進(jìn)行分解細(xì)化,此外還有大量與安全性相關(guān)的需求隱含在獲取的軟件需求中,需要分析提煉獲得。
參考在系統(tǒng)級所做的安全性分析工作,如功能危險(xiǎn)分析、失效模式及影響分析等,在軟件需求階段也可以對軟件安全性功能進(jìn)行類似分析。系統(tǒng)級的功能危險(xiǎn)分析旨在識別安全關(guān)鍵區(qū)域,提供初始危險(xiǎn)評估,確定必要的危險(xiǎn)控制和后續(xù)措施。軟件功能危險(xiǎn)分析也可以用以識別軟件安全關(guān)鍵功能,并分析出避免該功能失效應(yīng)采取的控制及后續(xù)措施,這些需求就是包含在功能需求中的安全性需求。軟件失效模式及影響分析方法可在軟件初步危險(xiǎn)分析中作為輔助使用。
這種基于已獲取的軟件需求進(jìn)行安全性分析,識別出安全關(guān)鍵功能,進(jìn)而分析出避免這類功能失效的控制需求的過程,稱為誤用例(Misuse Case) ,其是指在使用某個(gè)工具、系統(tǒng)、軟件或方法時(shí),由于操作不當(dāng)、理解錯(cuò)誤或設(shè)計(jì)缺陷等導(dǎo)致的錯(cuò)誤使用情況[2]。它專注于分析和描述系統(tǒng)潛在的惡意行為或非預(yù)期使用,從而幫助識別和預(yù)防安全威脅,其過程基于已描述的參與者和用例,研究誤用例和用例之間的潛在關(guān)系,進(jìn)而引入新的用例來發(fā)現(xiàn)或阻止誤用例,這可視為避免用例失效的安全性需求。誤用例分析方法的優(yōu)勢在于它提供了一種系統(tǒng)的、圖形化的方式來識別和分析潛在安全威脅,使開發(fā)團(tuán)隊(duì)能夠在設(shè)計(jì)開發(fā)階段就考慮到安全性,提高軟件系統(tǒng)的可靠性。
軟件安全性需求通常隱含在軟件需求的各個(gè)方面,要從這些需求中分析出軟件安全性需求,通常遵循以下9大步驟:
1) 識別敏感資源:明確數(shù)據(jù)、IP資產(chǎn)等核心保護(hù)對象。
2) 定義安全策略:依據(jù)系統(tǒng)的資源保護(hù)需求定義訪問控制、數(shù)據(jù)加密、用戶認(rèn)證等安全策略。
3) 識別威脅和脆弱性:識別系統(tǒng)面臨的未授權(quán)訪問、數(shù)據(jù)泄露、服務(wù)拒絕等威脅。
4) 遵循安全性原則:如最小權(quán)限原則、深度防御策略、安全默認(rèn)值等,確保系統(tǒng)設(shè)計(jì)滿足安全性要求。
5) 分析功能性需求:檢查功能性需求中隱含的安全性需求,如用戶密碼管理、數(shù)據(jù)備份和恢復(fù)等。
6) 分析非功能性需求:分析非功能性需求中隱含的安全性需求,如可靠性、可用性、保密性、完整性等。
7) 使用質(zhì)量屬性場景:通過質(zhì)量屬性場景分析驗(yàn)證安全性需求,確保特定場景下系統(tǒng)表現(xiàn)出預(yù)期的安全行為。
8) 合規(guī)性和標(biāo)準(zhǔn)遵循:確保系統(tǒng)滿足合規(guī)性要求,如ISO/IEC 27001、GDPR等。
9) 安全性測試和審計(jì):通過安全性測試和審計(jì)驗(yàn)證系統(tǒng)是否滿足已識別的安全需求。
通過上述步驟,從軟件需求中全面地分析出軟件安全性需求,確保軟件系統(tǒng)的安全性和可靠性。軟件安全性需求分析完成后,組織對已識別的需求進(jìn)行歸類存儲,形成可以復(fù)制重用的安全性經(jīng)驗(yàn),以最大限度地降低軟件安全性需求的獲取成本。
3 安全性需求積累重用
安全性需求的獲取,很大程度仍然依靠參與人員的認(rèn)知,所以安全性需求也可以作為一種經(jīng)驗(yàn)積累下來,以“軟件工件”的形式存儲在組織知識庫中,可在獲取安全性需求的過程中“重用”之前相關(guān)項(xiàng)目的安全性經(jīng)驗(yàn)。安全性需求重用過程中,通過解析知識庫中軟件工件的軟件功能、項(xiàng)目環(huán)境、運(yùn)行平臺等,針對性地進(jìn)行剪裁和適配。
文獻(xiàn)[3]針對通用威脅與安全需求如何進(jìn)行抽象化,提出了軟件雖然有不同的功能性需求,但很可能面對同類威脅,需要類似的安全性需求,因此可以將一些通用威脅、通用安全性需求、特定軟件需求做成標(biāo)準(zhǔn)化、可重用的軟件工件。文獻(xiàn)[4]針對重用方法的重用開發(fā)和開發(fā)使用重用兩個(gè)關(guān)鍵過程進(jìn)行闡述,其中重用開發(fā)重點(diǎn)是對軟件開發(fā)過程中的安全威脅和安全性需求進(jìn)行標(biāo)識,歸納進(jìn)通用威脅和需求知識庫。開發(fā)使用重用則是對知識庫的通用威脅和需求進(jìn)行充分利用,包括安全資產(chǎn)標(biāo)識、安全目標(biāo)設(shè)定、威脅指定和確定安全性需求。為了更好地對安全性需求進(jìn)行連續(xù)重用,需要關(guān)注核心要點(diǎn),即知識庫中應(yīng)存儲哪些工件以方便重用,知識庫應(yīng)如何構(gòu)建以支持高效重用[5]。
4 小結(jié)
綜上,各類軟件工程需求中都需充分關(guān)注安全性要素,識別并文檔化的安全性需求是構(gòu)建更高安全性軟件的關(guān)鍵,只有在需求階段識別出軟件安全性需求,才能有針對性地實(shí)現(xiàn),并在后續(xù)的需求管理過程中,對這些安全性需求進(jìn)行追溯、跟蹤和控制。一方面,本研究結(jié)合軟件工程過程淺顯地探討了安全性需求的獲取方法;另一方面,軟件安全性需求的重要地位日益突出,各種分析與管理技術(shù)將逐步完善,未來可對安全性需求獲取方法的數(shù)字化剪裁和重用展開進(jìn)一步研究,形成完整的需求體系框架。
參考文獻(xiàn):
[1] 符丁.軟件需求獲取方法綜述[J].科學(xué)技術(shù)創(chuàng)新,2018(22):82-83.
[2] 黃文化,黃松,惠戰(zhàn)偉,等.軟件安全性需求提取方法研究綜述[J].指揮信息系統(tǒng)與技術(shù),2011,2(1):6-10.
[3] FIRESMITH D.Engineering security requirements[J].The Journal of Object Technology,2003,2(1):53.
[4] ALEXANDER I.Misuse cases:use cases with hostile intent[J].IEEE Software,2003,20(1):58-66.
[5] 牛偉納,張小松,陳廳.新工科背景下軟件安全性分析課程改革與實(shí)踐[J].軟件導(dǎo)刊,2024,23(8):49-55.
【通聯(lián)編輯:李雅琪】