天天看點

軟體研發落地實踐,要從設計就開始

摘要:設計安全是實作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.華為可信專業級之—— 可信設計

繼續閱讀