張萍 田闖 李衛(wèi)
隨著互聯(lián)網(wǎng)和大數(shù)據(jù)的不斷發(fā)展,信息化在社會(huì)各行業(yè)逐漸嶄露頭角,信息安全日漸引起人們的重視。而作為信息化實(shí)現(xiàn)的中堅(jiān)力量,如何做好軟件開發(fā)過程中的信息安全管理,從而使得開發(fā)出的信息化產(chǎn)品更有安全保障,也是信息安全管理中非常重要的一個(gè)環(huán)節(jié)。
一、軟件安全問題的產(chǎn)生
軟件安全問題產(chǎn)生的原因是什么?有的是因?yàn)殚_發(fā)者缺乏安全開發(fā)的動(dòng)機(jī),有的則是因?yàn)殚_發(fā)者缺乏相關(guān)知識(shí),還有的是因?yàn)槿狈εc安全開發(fā)的相關(guān)工具。
軟件開發(fā)的信息安全管理實(shí)現(xiàn)思路是通過在軟件開發(fā)生命周期各階段采取必要的、相適應(yīng)的安全措施來避免絕大多數(shù)的安全漏洞。
二、安全的軟件開發(fā)模型
隨著軟件安全開發(fā)的日益受到關(guān)注,多種模型被各大軟件公司和軟件專家提出和研究,例如微軟提出可信計(jì)算安全開發(fā)生命周期,Gary McGraw博士等提出的BSI系列模型,以及OWASP(Open Web Application Security Project,開放式Web應(yīng)用程序安全項(xiàng)目)組織提出的CLASP綜合輕量應(yīng)用安全過程和SAMM軟件保證成熟度模型等。
其中微軟提出的SDL(Security Development Lifecycle,安全開發(fā)生命周期)相對(duì)認(rèn)可度較高,適合大型企業(yè)大型軟件的開發(fā)。該模型將軟件生命周期劃分為5+2個(gè)階段,每個(gè)階段有相應(yīng)必需的安全活動(dòng),如圖1所示。
三、安全軟件開發(fā)過程
首先,在開始軟件開發(fā)過程之初,開發(fā)團(tuán)隊(duì)的所有成員都必須接受適當(dāng)?shù)陌踩嘤?xùn),了解相關(guān)的安全知識(shí),培訓(xùn)對(duì)象包括開發(fā)人員、測(cè)試人員、項(xiàng)目經(jīng)理、產(chǎn)品經(jīng)理等。
(一)軟件安全需求分析
在軟件需求分析階段,不僅要考慮系統(tǒng)的功能需求,還要考慮系統(tǒng)的安全,比如不應(yīng)該做什么。功能需求、安全需求、安全目標(biāo)要達(dá)到平衡,從安全的角度以風(fēng)險(xiǎn)管理為基礎(chǔ),建立“威脅”的分析計(jì)劃,不僅要從用戶的角度出發(fā)考慮系統(tǒng)的功能,還應(yīng)從攻擊者的角度出發(fā)考慮系統(tǒng)的漏洞。
所以,在軟件需求分析階段,需要加入以下的安全方面的考慮:軟件提供的安全功能、軟件如何安全地與用戶交互、安全方面的考慮對(duì)軟件開發(fā)計(jì)劃的影響、軟件的風(fēng)險(xiǎn)評(píng)估和威脅模式、 軟件的默認(rèn)功能配置等等。
(二)軟件安全設(shè)計(jì)
軟件系統(tǒng)的每一項(xiàng)需求,都應(yīng)該在軟件安全設(shè)計(jì)階段認(rèn)真考慮,根據(jù)安全需求方案確定的安全目標(biāo),對(duì)初步風(fēng)險(xiǎn)評(píng)估確定控制措施的具體技術(shù)實(shí)現(xiàn)而進(jìn)行安全設(shè)計(jì)。
安全概要設(shè)計(jì)階段,包括但不限于:安全體系結(jié)構(gòu)設(shè)計(jì)、各功能塊間的處理流程、與其他功能的關(guān)系、安全協(xié)議設(shè)計(jì)、安全接口設(shè)計(jì)等。
安全詳細(xì)設(shè)計(jì)階段,作為安全功能的程序設(shè)計(jì)階段,應(yīng)當(dāng)直接指導(dǎo)安全功能的編碼工作。包括但不限于:模塊設(shè)計(jì)、內(nèi)部處理流程、數(shù)據(jù)結(jié)構(gòu)、輸入/輸出項(xiàng)、算法、邏輯流程圖等。
軟件安全設(shè)計(jì)的核心原則參考如下:
如攻擊面最小化、基本隱私、權(quán)限最小化、默認(rèn)安全、縱深防御、威脅建模等等。其中威脅建模,微軟使用的是STRIDE威脅建模方法,STRIDE的通用步驟如圖2。
威脅建模建議越早越好,一般在設(shè)計(jì)階段進(jìn)行,流程是,用程序建模(Diagram)、枚舉威脅(Identify)、緩解威脅(Mitigate)、驗(yàn)證緩解措施(Validate)。
(三)安全編碼原則
代碼安全編譯、代碼安全審核、對(duì)所有輸入數(shù)據(jù)進(jìn)行檢查、驗(yàn)證及過濾。
(四) 安全測(cè)試
除了軟件開發(fā)系統(tǒng)的單元測(cè)試,集成測(cè)試,系統(tǒng)測(cè)試和驗(yàn)收測(cè)試外,還要有系統(tǒng)的安全測(cè)試。安全測(cè)試是進(jìn)行安全性的評(píng)估,而不是摧毀或破壞,一般常用模糊測(cè)試和滲透測(cè)試兩種。
模糊測(cè)試,也稱Fuzz測(cè)試,一種通過提供非預(yù)期的輸入并監(jiān)視異常結(jié)果來發(fā)現(xiàn)軟件故障的方法。該測(cè)試強(qiáng)制軟件程序使用惡意或破壞性的數(shù)據(jù)并進(jìn)行觀察結(jié)果的一種測(cè)試方法。不夠強(qiáng)壯的程序會(huì)崩潰,利用大量的測(cè)試用例,查找漏洞或可靠性的Bug,是一種非常有效的漏洞挖掘技術(shù),已知漏洞大部分都是通過這種技術(shù)發(fā)現(xiàn)的。
滲透測(cè)試是通過模擬惡意攻擊者進(jìn)行攻擊,來評(píng)估系統(tǒng)安全的一種評(píng)估方法。該測(cè)試是從攻擊的角度測(cè)試軟件系統(tǒng)是否安全,使用自動(dòng)化工具或者人工的方法模擬攻擊者的輸入,找出運(yùn)行時(shí)刻目標(biāo)系統(tǒng)所存在的安全漏洞。通過滲透測(cè)試找出來的問題都是真實(shí)的,也是較為嚴(yán)重的,但滲透測(cè)試一般只能到達(dá)有限的測(cè)試點(diǎn),覆蓋率較低。
兩者相比較,F(xiàn)uzz測(cè)試通過半隨機(jī)的方式進(jìn)行數(shù)據(jù)發(fā)送,來找出系統(tǒng)的漏洞,這樣極大的降低安全性測(cè)試的門檻。然而,F(xiàn)uzz測(cè)試也要求測(cè)試人員對(duì)被測(cè)的系統(tǒng)有更一定深度的了解,才能生成更準(zhǔn)確的結(jié)果。與滲透測(cè)試相比,模糊測(cè)試顯然更易于進(jìn)行。而且,借由自動(dòng)化的測(cè)試工具,模糊測(cè)試可以把安全方面的經(jīng)驗(yàn)積累集成到測(cè)試工具中,從而為組織的持續(xù)的安全性測(cè)試提供組織財(cái)富積累。
安全測(cè)試,對(duì)測(cè)試人員還有一定的特殊要求,比如技術(shù)、知識(shí)和經(jīng)驗(yàn)都很重要,像“壞人”一樣思考安全問題,在做安全測(cè)試過程中,要做好系統(tǒng)備份、恢復(fù)措施和風(fēng)險(xiǎn)規(guī)避等方面的充分準(zhǔn)備。
最后,軟件系統(tǒng)發(fā)布時(shí)必須要包含安全事件響應(yīng)計(jì)劃。該計(jì)劃即使在發(fā)布時(shí)不包含任何已知漏洞的產(chǎn)品,也要包含可能在日后面臨新出現(xiàn)的威脅。此外,還要關(guān)注的是,若是產(chǎn)品中有外包的部分,即包含第三方單位開發(fā)的源代碼,也需要留下第三方的聯(lián)系方式并加入事件響應(yīng)計(jì)劃,以便在發(fā)生問題時(shí)能夠找到相應(yīng)的責(zé)任人。
綜上所述,我們?cè)谲浖_發(fā)過程中,要在各傳統(tǒng)階段時(shí)刻不忘信息安全的管理,總結(jié)起來有如下原則和要點(diǎn):
第一、做好信息安全的培訓(xùn),要求整個(gè)團(tuán)隊(duì)樹立好信息安全的意識(shí);
第二、進(jìn)行充分溝通,包括與客戶、領(lǐng)導(dǎo)、項(xiàng)目經(jīng)理、團(tuán)隊(duì)中相關(guān)干系人等;
第三、規(guī)范整個(gè)生命周期的流程,確保所有項(xiàng)目都與安全團(tuán)隊(duì)保持良好溝通,避免遺漏;
第四、增加獨(dú)立的安全團(tuán)隊(duì),并樹立安全部門的權(quán)威性,各個(gè)項(xiàng)目需由安全部門審核通過后才可正式發(fā)布;
第五、將安全的技術(shù)方案寫到需求、設(shè)計(jì)等工作文檔中;
第六、記錄所有安全相關(guān)的缺陷,激勵(lì)開發(fā)人員編寫更安全的代碼,進(jìn)行信息安全的知識(shí)庫的積累,形成持續(xù)改進(jìn)的良性循環(huán)。
四、軟件開發(fā)過程中的信息安全管理
那么所有軟件的開發(fā)是不是都必須完整地遵循軟件“安全開發(fā)”過程呢?答案并不是。
軟件同其他產(chǎn)品不同,具有明顯的特殊性,軟件產(chǎn)品在開發(fā)過程中的信息安全管理也更具復(fù)雜性。
首先,考慮完成該軟件開發(fā)的整個(gè)過程是否達(dá)到了一定要求。我們?cè)趯?shí)踐中不斷總結(jié),以基于ISO9001標(biāo)準(zhǔn),同時(shí)吸收CMMI的原則,制定的軟件安全開發(fā)程序文件和指導(dǎo)書,擬制記錄這些流程操作的記錄表格模板。軟件安全開發(fā)過程包含合同評(píng)審、采購、項(xiàng)目管理、軟件開發(fā)、變更控制、設(shè)計(jì)評(píng)審、文檔控制、測(cè)試控制、不合格品控制、現(xiàn)場(chǎng)安裝、售后服務(wù)、技術(shù)支持、培訓(xùn)管理等等,保證軟件開發(fā)過程體系有效性的管理評(píng)審、內(nèi)審、文件/記錄控制、糾正/預(yù)防措施控制等程序文件,從而為安全開發(fā)過程的各項(xiàng)操作提供科學(xué)合理的指導(dǎo),以此構(gòu)成完整嚴(yán)密的安全開發(fā)過程保證體系。
總之,軟件的安全開發(fā),應(yīng)具體問題具體分析,結(jié)合相應(yīng)的場(chǎng)景,實(shí)際的情況,對(duì)軟件安全開發(fā)的過程進(jìn)行定制裁剪,如可以選擇:代碼審核 + 體系結(jié)構(gòu)風(fēng)險(xiǎn)評(píng)估,基于風(fēng)險(xiǎn)的安全測(cè)試 + 滲透測(cè)試,安全需求分析 +濫用案例開發(fā),代碼審核 + 滲透測(cè)試,體系結(jié)構(gòu)風(fēng)險(xiǎn)分析 + 基于風(fēng)險(xiǎn)的測(cè)試等等組合方式,有的放矢,綜合平衡考慮各影響因子,按需選用。
五、結(jié)論
隨著軟件安全開發(fā)的日益受到關(guān)注,各種安全管理模型也逐漸出現(xiàn),但各種理論模型如何和企業(yè)的需求有機(jī)結(jié)合,讓真正簡(jiǎn)單的適用的模型在組織中落地,讓組織從中獲益,需要所有相關(guān)人員從理論到實(shí)踐,從實(shí)際工作出發(fā),共同探討解決方案,盡早形成軟件組織的自主創(chuàng)新的的安全開發(fā)模式。