軟體研發落地實踐,要從設計就開始
摘要:設計安全是實現DevSecOps非常重要的一環,大量歷史經驗也表明,越早在架構設計階段考慮到安全設計的系統,比那些在越晚的開發設計階段才考慮安全設計的系統,要安全得多。
本文分享自華為雲社區《DevSecOps研發安全實踐——設計篇》,作者:華為雲PaaS小助手。
前言
隨著DevOps的發展,DevOps大幅提升了企業應用迭代的速度。但同時,安全如果不能跟上步伐,不僅會抵消DevOps變革帶來的提升,拖慢企業數字化轉型進程,還會導致漏洞與風險不約而至。所以安全能力在全球範圍內受到的重視越來越高, 軟體開發內生的安全性成為評價企業DevOps成熟度水平的重要指標 。
安全設計的重要性
在《DevSecOps領導者指南》一書中,作者Glenn Wilson提出了DevSecOps的三層方法論,安全教育(Security Education)、通過設計保證安全(Secure By Design)、安全自動化(Security Automation)。設計安全是實現DevSecOps非常重要的一環,大量歷史經驗也表明,越早在架構設計階段考慮到安全設計的系統,比那些在越晚的開發設計階段才考慮安全設計的系統,要安全得多。根據美國國家標準與技術研究所(NIST)統計,在發布後執行程式碼修復,其修復成本相當於在設計階段執行修復的 30 倍。具體數據如圖所示。
DevSecOps 的目標是在軟體生命周期的全部階段,可以更早、更快地發現並處理安全問題。從開始的安全左移到現在的無處不移,都是為了實現這個目標。因此設計安全作為全生命研發周期的排頭兵必不可少。
如何做好安全設計
如何做好設計安全,我們主要是圍繞安全架構設計保證安全落地有法可依,進行威脅建模讓安全落地有跡可循、做好隱私和敏感數據保護讓安全落地在每一個細節和實處這幾個方面進行闡述。
安全架構設計
在DevSecOps中,安全設計從應用程式擴展到容器和基礎設施,應用程式程式碼和基礎設施程式碼是抵禦惡意行為者的多重威脅的重要防線。將良好的設計原則集成到產品的架構和開發中是編寫安全程式碼的基本要求。當架構與安全控制直接相關時,確保工程師遵守良好的設計原則是非常重要的。安全控制存在於端到端交付的整個價值流中,從開發階段內置於應用程式中的控制到運行時保存應用程式的控制。這些措施包括保護源程式碼或者保護應用程式運行時,還擴展到客戶與應用程式的交互,如身份驗證和授權過程。
在安全架構設計中,可以以安全三元組和安全設計原則為基準。機密性(Confidentiality)、完整性(Integrity)、可用性(Availability),簡稱為CIA三元組,是安全的基本原則。機密性指只有授權用戶可以獲取資訊,不可被任何未授權的用戶獲取。完整性指資訊在輸入和傳輸的過程中,不被非法授權修改和破壞,保證數據的一致性。可用性指保證合法用戶對資訊和資源的使用不會被不正當地拒絕。
業界通用的安全設計原則,主要體現在限制性、簡單性和設計性三個方面:
• 限制性原則
1.失敗-默認安全原則(Fail-Safe Defaults),要有當功能失效後的應急安全機制,還有默認的產品配置就應該是安全狀態,不存在安全漏洞。
2.完全仲裁原則(Complete Mediation),安全檢查要覆蓋任何一個訪問操作。安全機制有能力標識每一個訪問操作請求的所有源頭。
3.特權分離原則(Separation of Privilege),將特權進行細分,分配給多個主體,避免一個主體擁有的特權非常多。比如設置系統管理員,配置管理員,安全管理員等不同角色,對應不同特權。
4.最小許可權原則(Least Privilege),每個對象只擁有完成工作所需特權的最小集合,限制由意外或錯誤所引起的破壞。
• 簡單性原則
1.經濟適用原則(Economy of Mechanism),安全設計儘可能短小精悍,在使用的時候更容易處理。
2.最少公共機制原則(Least Common Mechanism),公共資源的共享對象應該設置為最少的數量,避免多個對象共享同一個資源的場景。
• 設計性原則
1.開放設計原則(Open Design),不要自行設計安全機制,不要自研演算法,開發設計更重要。可以通過密鑰、口令等來增強系統的安全性,這樣有利於安全機制接受廣泛的審查。
2.心理可承受原則(Psychological Acceptability),在心理可承受的前提下,為安全機制設置良好交互性,安全機制可能會為用戶增加額外的負擔,但是這種負擔必須是合理的,用戶可承受的。比如多次登錄失敗後才需要輸入驗證碼。
業界經過多年的發展和總結,又發展引申出其他一些安全原則,例如縱深防禦、不要輕信、保護最薄弱環節、提升隱私原則等。
威脅建模
威脅建模是分析應用程式安全性的一種結構化方法,用來識別,量化和解決與應用程式相關的安全風險,通過識別目標和漏洞來優化系統安全,然後定義防範或減輕系統威脅的對策的過程。在設計新產品或者現有產品中功能的時候,工程師需要熟悉攻擊者搜索的安全漏洞類型,以便他們能夠減輕被利用的風險;需要了解設計中固有的風險,以便在交付生命周期的早期消除或者減輕這些風險。綜上所述,威脅建模就是工程師評估產品或功能的設計以識別威脅並確定如何構建針對他們的保護的過程。
威脅建模的過程可以參考微軟提供的方法:預設場景->圖表化場景/過程->識別威脅->提供給每個威脅的環節措施->驗證所有威脅和緩解措施。
一些IT互聯網公司,在大量的實踐經驗基礎上,構建了自己的安全威脅庫和安全需求庫,實現了輕量級威脅建模過程,通過安全評估調查問卷,從系統結構和使用場景去識別將要構建的應用類型,然後匹配對應的威脅庫和需求庫,確定安全需求基準線,最終得出安全設計方案。
業界有許多的威脅建模的方法已經開發出來,如微軟的STRIDE、攻擊模擬和威脅分析流程PASTA、LINDDUN、通用漏洞評分系統CVSS、攻擊樹、Persona non Grata、安全卡、VAST建模等方法,可以將它們組合起來以創建更強大、更全面的潛在威脅視圖。並不是所有的方法都是全面的,有些是抽象的,有些以人為中心,還有些方法是專門針對風險或者隱私問題,組織應該根據項目的特定需求選擇哪種方法。
安全隱私和數據保護
安全隱私需求分析與設計是服務應用研發運營整個生命周期的源頭,在設計階段應仔細考慮安全和隱私問題,在項目初期確定好安全需求,儘可能避免安全引起的需求變更。
DevSecOps研發運營安全解決方案關注痛點安全問題,如安全要求、合規要求以及目前熱點的個人數據和隱私保護等問題,使用安全解決方案可以更好的避免此類安全問題的發生,提升軟體應用服務的安全性。
安全隱私需求主要來自於客戶安全需求,業界最佳實踐如OWASP TOP10、OWASP ASVS,公司安全策略《xxx資訊技術管理規範》《xxx數據管理規範》,行業監管要求,以及法律法規《網路安全法》、《個人資訊保護規範》、《數據安全法》等。建立明確的安全需求管理流程,能夠對安全需求的分析、評審、決策等環節進行有效管理,讓需求分解分配可追溯。
華為雲安全設計實踐
華為有20年研發安全積累,華為的研發安全能力是伴隨業務中不斷出現的問題逐步形成的。華為將已經開放的運維安全能力,和即將開放的研發安全能力與華為雲DevCloud深度融合,為企業帶來DevSecOps平台,讓企業便捷的落地DevSecOps理念,在軟體開發過程中就內置了安全保護,讓軟體「天生安全,健康成長」,成為企業的競爭力。
安全架構設計
華為在安全設計原則方面,基於業界的規範,構建了自己的基礎安全技術與工程能力,形成了安全標準與規範,其中包括安全/隱私需求基準線,基礎安全設計規範落地,安全編碼規範,採購安全要求,開源及第三方軟體安全管理策略。
華為雲在參考資訊技術安全評價通用專責CC的安全功能項、NIST控制集,總結成產品安全架構設計8維度24子項,。8維度安全架構設計包括以下幾個方面:
以此指導架構設計人員系統、全面地進行安全架構設計,避免架構級安全設計遺漏。
威脅建模
華為有自己的威脅建模工具 SecDesign,在產品設計期就進行威脅建模,識別並消減風險
從痛點問題入手去思考:在系統需求分析和設計階段,怎樣才能使產品更安全?在什麼樣的子系統、模組、數據流之間考慮安全風險?識別了風險後,怎麼消減幾個方面進行思考?華為雲開放的安全設計域,對STRIDE方法論進行升級,用於系統威脅分析,提供分析維度、參考案例,輔助進行安全設計;根據識別到的安全風險,智慧推薦消減措施及測試用例,輸出分析報告;長期積累的安全風險識別方案、消減方案、設計方案、測試用例、場景樣例與知識,為安全設計提供豐富的華為與業界經驗,極大降低企業安全設計門檻。
安全隱私和數據保護
華為雲構建了全生命周期的數據安全和隱私保護設計,實現數據隔離、數據加密和數據冗餘。
• 數據隔離:隔離機制可避免客戶間有意或無意的非授權訪問、篡改等行為,降低數據泄露風險。華為雲的雲硬碟EVS、對象存儲服務OBS、彈性文件服務SFS等服務均將客戶數據隔離作為重要特性。用戶在設計雲上業務架構時可利用這些雲服務實現數據安全隔離的目標。
• 數據加密:加密可保護靜態和傳輸中的數據。華為雲的雲硬碟EVS等多個服務均支援與數據加密服務DEW集成,實現密鑰管理和數據加密。華為雲還採用加密傳輸通道,保障數據在傳輸過程的機密性和完整性。用戶在設計數據加密功能時,可以充分借鑒華為雲已有的實踐和能力。
• 數據冗餘:冗餘設計可以有效防止數據丟失。華為雲採用多副本備份和糾刪碼設計,通過冗餘和校驗機制來判斷數據的損壞並快速進行修復,以確保服務的可靠性。用戶在設計雲上業務時,可充分利用華為雲服務提供的可靠性服務。
• 隱私保護設計:在產品設計過程中考慮隱私,可大幅提高產品的隱私保護能力。華為雲在構建雲服務時,將隱私保護作為需求落入產品開發設計流程。華為雲在個人數據全生命周期貫徹PbD(Privacy by design)的理念,構建具備隱私保護特性的安全雲服務。華為雲基於PbD原則在設計中考慮隱私,即通過設計來保護個人數據和隱私,將保護個人數據和隱私的理念以技術手段運用到產品和服務的各個環節中。
華為雲貫徹和落實的七條隱私保護基本原則是合法、正當、透明,目的限制,數據最小化,準確性,存儲期限最小化,完整性與保密性,可歸責。
華為雲解讀GDPR等法律法規,幫助企業滿足合規要求。華為雲開放的隱私合規域,根據對GDPR等的解讀與業務分析,提供工具,生成隱私合規報告、隱私聲明,幫助企業合規設計;根據隱私合規設計方案,自動生成和執行測試用例,最後給出隱私合規驗證報告。
後記
DevOps 的基本訴求之一是要「快」,而安全保障卻具有「快不起來」的特點。因為安全本身需要更為專業的知識背景,分析更複雜的攻擊方式和潛在安全問題。並且,即使使用工具,其技術棧也深於普通的檢查工具,這意味著耗時更長。比如,對源程式碼的靜態檢查,如果只是檢查程式碼風格,他們可以做到快速掃描;如果需要進行安全編碼的自動化檢查,那麼就需要進行流分析,甚至需要一個專門的編譯過程來收集必要資訊。未來的路任重道遠,實現DevSecOps還有很長的路要走。
參考附錄
1.《DevSecOps領導者指南》格倫·威爾遜(GLENN WILSON)翻譯:庄飛
2.《研發運營安全白皮書》. 雲計算開源產業聯盟.
3.《華為雲安全白皮書》.華為技術有限公司
4.華為可信專業級之—— 可信設計
5. 每天掃描超300億行程式碼,DevSecOps在華為的落地與實踐_DevOps