楊 穎,徐 超,鄧君華,李葉飛,姜麗麗
?
敏捷開發(fā)模式下的SDL實踐淺析
楊 穎1,徐 超2,鄧君華2,李葉飛1,姜麗麗1
(1. 江蘇方天電力技術(shù)有限公司,江蘇 南京 210000; 2. 國網(wǎng)江蘇省電力有限公司電力科學研究院,江蘇 南京 210000 )
DevOps理念旨在將Ops(運維)融入到敏捷開發(fā)模式之中,經(jīng)過多年的探索與磨合,形成了一些企業(yè)特色的融合模式,但未形成通用方案。隨著2017年DevSecOps理念相繼出現(xiàn),促使Sec(安全)也要融入到敏捷開發(fā)模式。當前安全融入傳統(tǒng)開發(fā)模式的典型理論是安全開發(fā)生命周期管控(Security Development Lifecycle,下文簡稱:SDL)。
信息安全;計算機;敏捷開發(fā)
敏捷模式下SDL的生根發(fā)芽是如何進行的呢?傳統(tǒng)的SDL開發(fā)流程包括了從可行性分析、需求分析到軟件設(shè)計,再到編碼實現(xiàn)、黑盒測試和白盒測試,最后上線試運行、正式上線,然后移交維護[1]。而對于安全的軟件開發(fā),最重要的是在軟件開發(fā)周期中增加了與軟件安全相關(guān)的需求說明、確認計劃、軟件確認[2],在開發(fā)周期的每個階段都需要評估風險、驗證措施有效性、確認整改到位。安全的軟件開發(fā)階段主要包括:
(1)編寫軟件安全需求說明書。描述軟件系統(tǒng)的安全功能,以及完整的軟件安全的總體要求。
(2)編寫軟件安全確認計劃書。根據(jù)軟件安全需求說明書編寫軟件安全確認計劃。
(3)軟件設(shè)計和開發(fā)。包括軟件架構(gòu)設(shè)計、概要設(shè)計及詳細設(shè)計、測試案例、測試計劃編寫,并根據(jù)設(shè)計文檔進行代碼編程。
(4)軟件系統(tǒng)與硬件設(shè)備集成。
(5)軟件與硬件集成測試和修改。保證軟件系統(tǒng)與硬件設(shè)備兼容并能夠滿足軟件安全需求。
(6)軟件安全確認。
下面我們列舉四個企業(yè)SDL的建設(shè)案例,說明這些企業(yè)建設(shè)的重點和存在的問題:
企業(yè)甲:偏重“安全需求”管控,梳理關(guān)鍵應(yīng)用典型業(yè)務(wù)場景,通過威脅建模及威脅資源庫相結(jié)合方式,構(gòu)建安全需求庫、安全設(shè)計庫等一系列資源庫。在使用過程中,通過快速索引安全需求,導(dǎo)出安全需求及安全設(shè)計方案[3]。但是,安全管控流程終止在安全編碼階段,安全測試由不同角色負責,無法與安全設(shè)計形成統(tǒng)一的測試用例,并且缺乏測試經(jīng)驗的積累,采用傳統(tǒng)的滲透測試或眾測進行“雙盲”測試。流程不完整,技術(shù)措施覆蓋度不夠,無有效的考量指標。
企業(yè)乙:偏重“安全設(shè)計”管控,依據(jù)行業(yè)標準、國際標準以及內(nèi)部標準,導(dǎo)出安全需求,針對全量安全需求進行詳細安全設(shè)計[4]。如:業(yè)務(wù)流程安全設(shè)計、系統(tǒng)技術(shù)架構(gòu)安全設(shè)計、承載環(huán)境安全架構(gòu)設(shè)計及網(wǎng)絡(luò)安全架構(gòu)設(shè)計。但是,無整體管控流程控制,安全需求一次性導(dǎo)出,技術(shù)措施不具備靈活性,人員技能不足無法較好地使用安全設(shè)計。
企業(yè)丙:偏重“安全編碼”管控,針對具體威脅場景程撰寫安全設(shè)計規(guī)范、安全編碼規(guī)范,并根據(jù)規(guī)范定制安全組件(JAR包,SDK,代碼參考等),減少安全人員與開發(fā)人員的溝通成本,直接調(diào)用安全組件相應(yīng)接口滿足安全規(guī)范設(shè)計要求[6]。但是,無整體管控流程控制,威脅場景及安全組件缺少評價機制和閉環(huán)優(yōu)化機制,導(dǎo)致安全設(shè)計“管得了一時管不了一世”。
企業(yè)丁:偏重“安全測試”管控,采用業(yè)務(wù)流程安全分析方法盡量識別出可能存在的威脅,針對識別出的威脅構(gòu)建安全測試用例,嚴格把控測試過程并形成大量測試指南及測試工具集。但是無全局管控流程,無安全需求及安全設(shè)計技術(shù)措施,安全測試發(fā)現(xiàn)問題反復(fù)出現(xiàn),消耗大量安全測試成本,治標不治本。
(1)應(yīng)用開發(fā)整體安全管控流程復(fù)雜,缺少流程自動化平臺支撐且與現(xiàn)有流程的不兼容導(dǎo)致很難有效管控;
(2)企業(yè)缺少安全管控所需的知識庫,如:安全威脅庫,安全需求庫、安全設(shè)計庫、安全組件庫、安全用例庫及安全加固知識庫等必要的積累,效率和落地性成為阻力;
(3)企業(yè)缺少專業(yè)的安全開發(fā)管控專業(yè)人才,無法與業(yè)務(wù)人員、開發(fā)人員、運維人員及管理層進行有效溝通,內(nèi)部協(xié)作模式無法形成;
(4)企業(yè)缺少對安全活動評價及審計能力,導(dǎo)致針對開展的安全活動無法確定實施效果及進行有效改進,最終演變成走形式[7]。
我們還沒搞定傳統(tǒng)開發(fā)模式下的SDL,DevOps理念已經(jīng)融入到敏捷開發(fā)模式中,持續(xù)交付與集成部署給SDL實踐帶來了新的挑戰(zhàn)。
從傳統(tǒng)的瀑布開發(fā)模式到敏捷開發(fā)模式,其實是預(yù)設(shè)性到適應(yīng)性的轉(zhuǎn)變,瀑布式開發(fā)的特點是:文檔驅(qū)動,線性開發(fā),開發(fā)前期準備時間長,那么安全團隊有充分的時間將安全活動提前介入,進行有效管控。而在敏捷式開發(fā)中一切都“快”了起來,多角色在持續(xù)集成的環(huán)境下,基于可靠的工具鏈,快速地迭代著。那么,SDL只能快起來才能融入敏捷開發(fā)模式[8]。開篇提及的四個失敗原因其實就是成功的關(guān)鍵要素:
(1)流程自動化平臺支撐且與現(xiàn)有流程具有良好的兼容性;
(2)借助瀑布開發(fā)模式下的SDL各階段成果,作為安全管控過程中的技術(shù)措施,如:安全威脅庫,安全需求庫、安全設(shè)計庫、安全組件庫、安全用例庫及安全加固知識庫。在需求階段利用安全威脅庫及安全需求庫進行場景化的安全需求推導(dǎo),在設(shè)計階段利用每一類功能場景的安全設(shè)計解決方案進行安全需求實施,在開發(fā)階段利用安全組件庫推進安全編碼規(guī)范的落地,在測試階段利用安全用例庫進行安全策略的驗證和安全威脅控制點的檢查。
(3)具備安全開發(fā)管控專業(yè)人才,與敏捷開發(fā)模式中的其他角色進行有效溝通;
(4)具有安全活動評價及審計能力,確保開展的安全活動效果及進行有效改進。
除了這些通用的關(guān)鍵要素保證SDL基本運轉(zhuǎn),更需要針對不同的企業(yè)現(xiàn)狀,因地制宜的進行特有要素的識別和設(shè)計,才是真正落地的關(guān)鍵。
(5)遵守安全編碼規(guī)范的要求
在項目啟動階段以及新項目組人員進場,應(yīng)對項目組的開發(fā)人員進行與軟件安全相關(guān)的知識培訓,使其在之后的開發(fā)工作中盡可能的遵守安全編碼規(guī)范,避免軟件系統(tǒng)出現(xiàn)安全漏洞。
(6)配備安全專家
項目組在有條件的情況下應(yīng)根據(jù)項目對安全的需求,配備一個在軟件安全領(lǐng)域有多年專業(yè)經(jīng)驗和深刻理解的資深程序員[9]。安全專家的主要職責包括:
在開發(fā)安全敏感度非常高的用戶故事時和工程師們結(jié)對編程
對工程師的代碼進行安全評審,確保代碼在提交到代碼庫前沒有安全問題
在選擇使用哪些商業(yè)代碼,開源庫,公共API等第三方庫時進行安全分析和決定
幫助QA人員測試安全敏感度高的用戶故事,確保程序安全。
除了這些以外,安全專家還應(yīng)該幫助程序員熟悉安全編碼,將安全知識分享給每個程序員,提高程序員的安全意識。
(7)識別高危用戶操作場景
安全專家要根據(jù)軟件需求、軟件設(shè)計等文檔,識別出高危用戶操作場景,將精力放在這些高危用戶操作場景里[10]。讓相關(guān)模塊的開發(fā)人員對這些高危用戶操作場景在安全方面加以重視。舉幾個應(yīng)該標為高危用戶操作場景的例子:
包含用戶輸入選項(比如輸入框,選擇框等等)
存儲數(shù)據(jù)到數(shù)據(jù)庫
數(shù)據(jù)傳輸?shù)酵獠肯到y(tǒng)
處理外部系統(tǒng)傳入的數(shù)據(jù)
輸出信息到外部系統(tǒng)和文件等。
處理驗證和認證流程
(8)應(yīng)對每個高危用戶操作場景進行惡意測試
安全專家應(yīng)從破壞或惡意的角度編寫一些測試用例,來防止高危用戶操作場景不產(chǎn)生安全漏洞。督促程序員對代碼進行安全加固。
(9)在每個用戶操作場景代碼編寫完成后要進行安全測試
在SDL模式下,每個用戶操作場景在代碼實現(xiàn)完成后都應(yīng)該進行安全測試,安全專家可以指導(dǎo)QA人員根據(jù)測試案例進行功能測試和惡意測試,或利用漏洞掃描工具對代碼進行漏洞掃描,測試或掃描出的代碼問題將會退回給開發(fā)人員進行修復(fù),修復(fù)完畢后再進行測試,這種循環(huán)可以進行多次直到?jīng)]有問題發(fā)現(xiàn)。
場景1:敏捷模式下快速交付
實踐:敏捷開發(fā)的價值在于及時響應(yīng)需求變化,高效地組織進行軟件開發(fā),快速交付可以工作的軟件。那么也就是說一個產(chǎn)品必須在一次兩周左右的迭代中完成需求到可視化產(chǎn)品的過程,在這個過程中通常由PO(Product Owner)制定Product Backlog,將Product Backlog拆分成N個Sprint Backlog,那么Product Backlog的導(dǎo)出就是安全需求導(dǎo)出的最佳時機,(這里建議不要先對整體Product Backlog進行安全需求分析,因為在多次迭代之后Product-Backlog會有變動,對當前迭代的Sprint Backlog進行安全需求分析即可),之后在每個迭代Sprint backlog和User story導(dǎo)出時利用SDL平臺快速推導(dǎo)出本次迭代所需的安全需求及需求對應(yīng)的安全設(shè)計、安全組件和安全測試用例即可。
場景2:敏捷模式下不同的開發(fā)管控平臺
實踐:如果企業(yè)具有SDL平臺,可以快速導(dǎo)出安全設(shè)計及安全組件,但大部分企業(yè)開發(fā)團隊都具有自己開發(fā)管控平臺,如Jira,Redmine,Bugzilla 等工具,本次實踐是基于Confluence平臺進行安全開發(fā)流程管控,平臺知識庫積累程度較高,以標簽化的漏洞基線為核心支持快速安全需求與設(shè)計方案的索引,將導(dǎo)出的安全需求與Confluence平臺上User story進行融合,做到無縫銜接。
場景3:敏捷模式下持續(xù)集成
實踐:敏捷模式下都是自動部署和自動測試,安全如何與之契合,此實踐中的敏捷開發(fā)環(huán)境下的持續(xù)集成引擎是Jenkins,可以做到通過SVN代碼的版本更新情況進行源代碼的自動編譯、掃描、部署、發(fā)布。如果安全活動依舊是人工去實施,那么安全只會游離在開發(fā)流程之外。借助DevSecOps工具鏈,實現(xiàn)安全自動化,減少安全人員參與,避免影響敏捷開發(fā)的靈活性。在開發(fā)編碼階段利用Jenkins+FortifySCA+JIRA功能聯(lián)動進行FortifySCA自動化源代碼安全掃描及JIRA缺陷問題自動化跟蹤,在運行測試階段利用Jenkins+Jmeter+測試腳本進行API接口的自動化安全測試,利用Jenkins+ APPscan進行定時計劃的web安全掃描等,通過以上工具鏈的實踐,減少人為參與的工作量,進一步將安全開發(fā)與敏捷開發(fā)進行融合。
場景4:敏捷模式下安全考量如何開展
實踐:非敏捷模式下的安全考量都不是一個簡單的話題,本實踐的思路是不單獨設(shè)置考量環(huán)節(jié),通過后置的安全活動進行間接考量。例如:安全需求提出的全面性和合理性考量,會在安全需求評審會中進行考量。需要引入經(jīng)驗豐富的內(nèi)部或外部安全專家和開發(fā)專家,能不斷以變化和最新的威脅角度審視安全需求是成功的關(guān)鍵。
以上的實踐在開發(fā)思想上和敏捷開發(fā)是一致的,將軟件的安全需求分拆,保證每個用戶操作場景的安全,從而保證整個軟件系統(tǒng)的安全[11]。
國內(nèi)開始重視軟件項目的安全是近兩年才開始,專業(yè)的安全領(lǐng)域人才稀缺。針對現(xiàn)狀,Gartner在2014年就提出了RASP的概念,就是將這些 實踐抽象成一種通用化的產(chǎn)品,該產(chǎn)品融合了安全編碼規(guī)范和漏洞發(fā)現(xiàn),開發(fā)人員可以將RASP產(chǎn)品結(jié)合掃描工具在運行時對產(chǎn)品漏洞檢測,快速定位存在安全漏洞[12]的代碼。希望通過本文對敏捷開發(fā)的SDL介紹,對企業(yè)的項目實施能有所啟發(fā)和幫助。
[1] 王丹亭. 利用SDL Trados解決科技文本合作式翻譯一致性問題的實踐報告[D]. 北京外國語大學, 2016.
[2] 丁慶洋, 王秀利, 朱建明, 宋彪. 基于區(qū)塊鏈的信息物理融合系統(tǒng)的信息安全保護框架[J]. 計算機科學, 2018,45(02): 32-39.
[3] 曾程勝. 實現(xiàn) Javascript-Delphi 高強度加密傳輸安全[J]. 軟件, 2018, 39(1): 173-179.
[4] 陳飛, 黃海明, 楊猛, 劉金剛. 基于SDL和OpenGL實時繪制中文字體[J]. 計算機工程與設(shè)計, 2011, 32(08): 2764-2767+2783.
[5] 江達秀, 許建龍, 孫樹森. 應(yīng)用SDL及GTK+實現(xiàn)視頻多路回放[J]. 浙江理工大學學報, 2009, 26(06): 897-900.
[6] 王園園, 高明煜, 曾毓. 基于SDL庫的嵌入式平臺中文顯示技術(shù)研究[J]. 計算機系統(tǒng)應(yīng)用, 2009, 18(04): 194-197.
[7] 惠子青, 劉曉燕, 朱匯龍. 基于敏捷開發(fā)增量 UML 模型的研究[J]. 軟件, 2018, 39(1): 142-146.
[8] 邱吉剛, 林孝康. 無線網(wǎng)絡(luò)VoIP協(xié)議的SDL實現(xiàn)與仿真[J]. 微計算機信息, 2006(28): 124-126+130.
[9] 朱靖宇, 楊樹堂, 薛質(zhì). 基于SDL的Mpeg-4視頻流實時解碼與回放方法[J]. 計算機應(yīng)用與軟件, 2006(06): 5-7+58.
[10] 張宏亮, 李偉超. 基于SDL和MSC的通信軟件系統(tǒng)分析和系統(tǒng)設(shè)計[J]. 鄭州航空工業(yè)管理學院學報(社會科學版), 2005(04): 158-160.
[11] 潘俊, 宋國新. UML到SDL在地鐵售票機系統(tǒng)中的應(yīng)用[J]. 華東理工大學學報, 2004(05): 552-555+570.
[12] 魏定國, 吳時霖, 黃秋波. UML與SDL結(jié)合使用的研究[J]. 小型微型計算機系統(tǒng), 2003(11): 2027-2030.
Analysis of SDL Practice Under Agile Development Model
YANG Ying1, XU Chao2, DENG Jun-hua2, LI Ye-fei1, JIANG Li-li1
(1. Jiangsu Fangtian Power Technology Co., Ltd., Nanjing Jiangsu 210000; 2. State Grid Jiangsu Electric Power Co., Ltd., Electric Power Research Institute, Nanjing Jiangsu 210000)
DevOps concept is to integrate Ops (operation and maintenance) into agile development model. After years of exploration and integration, some integration mode with enterprise features has been formed, but with no general scheme. With successive emergence of DevSecOps concept in 2017, Sec (security) should be integrated into agile development mode also. At present, typical theory of integrating security into traditional development mode is Security Development Lifecycle (SDL).
Information security; Computer; Agile development
TP391
A
10.3969/j.issn.1003-6970.2018.10.039
楊穎(1981-),男,研究生,研究方向:計算機應(yīng)用;鄧君華(1980-),男,研究生,研究方向:電力營銷技術(shù)支持研究;徐超(1989-),男,研究生,研究方向:電力營銷信息系統(tǒng),電力營銷專業(yè)信息安全;李葉飛(1979-),男,研究生,研究方向:IT基礎(chǔ)架構(gòu)研究;姜麗麗(1989-),女,研究生,研究方向:電力網(wǎng)絡(luò)與信息安全。
楊穎,徐超,鄧君華,等. 敏捷開發(fā)模式下的SDL實踐淺析[J]. 軟件,2018,39(10):203-206