采用五大行動步驟實現有效的DevSecOps
譯文【51CTO.com快譯】眾所周知,系統安全并不只是一本寫滿了要求開發人員和運營人員需要遵循的各種規則與策略的小冊子。系統安全也并不只是在項目進展到失去了方向時,網絡安全小組用來確保開發和運營安全的工具。
通常情況下,公司的安全團隊會通過各種會議來貫徹不同的規則和策略;并在發生安全泄漏事件之后,通過查詢電子郵件或聊天記錄,來獲知企業當前安全態勢,以追蹤罪犯。這些都是典型的安全攻防方式。
可以說系統網絡安全在我們的企業中無時不刻、無處不在地影響著每位員工。
讓我們更有效
將公司的安全重任集中歸責于某個單一團隊是一種普遍的錯誤。其實每一個直接接觸、或間接參與公司數據與系統的人員都承載著安全的責任。
在DevSecOps的落地過程中,我自己曾有過一些誤解,也走過不少彎路。在此,我將通過本文和您分享:如何在避免出現錯誤方法的前提下,實現有效的DevSecOps。
執行規則和策略
雖然我們的確需要各種章程來指導自己的行動,但這絕非是靠單向地從作戰室(war room)或咖啡間里發出指令來完成的。正如我們不應將整體安全重任歸責于某個單一團隊那樣,我們需要通過軟件定義和嵌入到DevOps管道(pipeline)中的模式來貫徹執行。
在執行規則和政策的過程中,我們有著許多可選的工具和方法。下面,我將向您展示如何通過有效地激發DevSecOps的能動性,來使企業收獲實施的效果。
為了達到該目標,我們應采用以下的行動步驟:
- 定義目標
- 創建藍圖
- 開展宣傳
- 具體執行
- 考量效果
在此,我假設您的公司已經達到了成熟的DevOps水平。
定義目標
為了知道自己將要達到什么樣的效果,我們必須首先制定好目標和努力的方向,以避免出現“腳踩西瓜皮,滑到哪里算哪里”的情況。我們可以采用小組討論、集思廣益的形式,羅列出一個個“小目標”,以方便深入討論。例如包括:
- 不暴露密碼:保證不會泄漏任何密碼、口令、證書鏈或私鑰等。
- 無過期的證書:特別是要避免TLS證書的過期。
- 無過時或無效庫:掃描各種項目依賴項、操作系統庫、系統服務和實用程序。
- 無代碼漏洞:靜態掃描各種源代碼,以發現其中的漏洞和bug。
- 遵守OWASP Top 10(開放式Web應用程序安全項目):動態掃描各種運行中的應用,以查找潛在漏洞。
除了上述安全目標,我們還能以頭腦風暴的形式快速列出更多的方便:消除未授權的進程、未授權的端口、未授權的存儲庫、未授權的帳戶、有bug的軟件庫,實現生命周期管理、漏洞管理,遵守公共漏洞和暴露(Common Vulnerabilities and Exposures,CVE)規范,實現TLS全覆蓋等。
創建藍圖
藍圖是我們定義如何讓開發(development)與運營(Operations)在安全(security)的基礎上協同工作的關鍵步驟。因為我們將定義一些開發和運營人員都值得關注的安全問題。在藍圖中,我們需要為整個公司定義各種規則,并準備好下一步執行的步驟。
下面的圖表,是基于上面的目標定義所繪制出的一個藍圖范例:
如表所示,我用四個深色模塊:密碼管理、代碼質量的靜態應用程序安全測試(SAST)、安全加固、和運行質量的動態應用程序安全測試(DAST),來對應我們的上述目標。與此同時,針對DevSecOps的實施計劃,我們還需要將它們下方的各個具體要點,按照規則、執行、工具集的分類逐一映射到相應的目標之中。
至此,您可以在公司的內網開始創建一個共享空間,寫上簡明清晰的標題,注明在藍圖中所表述的每一個細節,并重點做到如下方面:
- 將藍圖與各個目標相連接
- 詳細說明深色模塊里的內容
- 如何對它們予以實施
- 會用到哪些工具集
- 強調安全的第一性
- 建立安全體系
- 列出例外之處
- 如何遵守相關法規
- 畫出路線圖
如上述流程圖所示,我們必須嘗試著將藍圖中的深色模塊映射到自己的DevOps管道之中,以輔助我們去收集和考量在執行過程中的參數指標,并將它們作用到日常項目之中。
開展宣傳
現在,我們需要設法在公司內部“營銷”這些新的安全舉措了。畢竟再好的藍圖,如果沒人采納的話,也將絲毫不會讓企業受益。
由于公司中的每個人都會在DevSecOps中扮演著相應的角色,因此大家首先需要理解藍圖的重要性。我們不應當以一種“大爆炸”式的節奏去迅速推進,而應該讓每一個人都參與進來,促進藍圖的逐步完成。因此,我們在宣傳方面需要做到如下方面:
- 廣開傳播渠道,可以拉橫幅、發布到內部網絡、分發視頻、以及用電子看板等方式展示路線圖。
- 制作T恤、水瓶、粘紙、帽子等衍生小禮物。
- 招募愿意提前試用的“早鳥”。
- 舉辦研討會,造勢預熱。
- 舉行內部主題活動。
- 推送列舉了諸多優點與好處的郵件。
- 提供與安全相關的場景演練。
可見,良好的方案往往源自良好的溝通和營銷方式。如果沒人真正參加進來,那么再好的藍圖也只能停留在紙面上。我們要確保每一個IT人員在開發軟件、或提供和配置基礎結構的時候,能夠清楚地知曉何為正確、何為錯誤的。
具體執行
至此,企業中的每個人都應該知道自己在DevSecOps中所處的角色和作用了,那么我們來看看如何具體遵守規則,并執行各種策略。
如果在管道中,人工操作無法滿足各種有關軟件和基礎設施的執行,那么我們就需要使用工具來自動化地實現上述定義好的各項目標與任務。下面我將為您列舉與之相關的一套工具集。
注意:我在此不會去羅列那些專有的工具,因此您可以通過訪問諸如
stackshare.io(http://stackshare.io/)的網站,來尋找它們的付費版本。
不暴露密碼
此處所涉及到的密碼包括:密碼串、私鑰、數據庫帳戶、或令牌。
為了不暴露密碼,首先我們不能將密碼簡單地保存在未加密、或使用硬編碼的文件,以及Git存儲庫中,當然也應該定期更換密碼。因此我們自然而然地會想到必須使用一個中央存儲工具來管理各種密碼。
該存儲工具必須能夠管理密碼的整個生命周期,并能在泄漏發生時減少自身漏洞的暴露。通過使用成熟的此類工具,我們還可以管理許多不同類型的信任憑據,如數據庫、操作系統、云服務提供商等。同時,這些工具也能夠讓用戶通過API,以編程方式來獲取不同的密碼。例如:
- 用HashiCorp Vault來管理密鑰 - https://www.vaultproject.io/
- 用Gitrob掃描Git存儲庫以發現漏洞 - http://michenriksen.com/blog/gitrob-now-in-go/
如果您在管道中使用了SSH密鑰,那么就可以直接從自動化運行程序(例如Jenkins)中調用它。
無過期的證書
如今在各種Web應用中TLS已成為了標配,那么我們就必須管理好證書的過期問題,以防止出現SSL的握手錯誤。
因此我們可以使用如下工具,來監控公司內部(私有域)和外部(公有域)中的每一種證書:
- 用Sensu來檢查TTL證書 - https://sensu.io/
- 用HashiCorp Vault來管理私有域中的證書 - https://www.vaultproject.io/
注意:Sensu雖然沒有開箱即用(out-of-the-box)的功能,但它有個很好的插件 - https://github.com/sensu-plugins/sensu-plugins-ssl。通過它,我們可以監控許多相關的方面。您可以通過https://sensu.io/features/core來了解更多信息。
無過時或無效庫
大公司一般會并行開展數千的項目,那么當您的團隊開始研發新的微服務時,他們很容易會使用到一些過時或無效的庫。因此,我們需要盡量避免這種情況的發生。
注意:上述提到的是“開始研發新的......”,也就是說:我們對于生產環境中現有系統的執行應非常小心,不要僅僅為了跟風,而在現有環境中強制推行實施。我們需要在了解新策略可能帶來的影響,然后通過團隊合作,來避免產生混亂的局面。
可見,我們要選取適合手頭項目平臺和語言的特定工具。通過運用如下“必要”的工具,我們將能夠及時地識別出,那些依賴項中存在的各種過時的、且帶有bug的庫:
- OWASP依賴項檢查:適用于Java和.NET項目。 - https://www.owasp.org/index.php/OWASP_Dependency_Check
- RetireJS:適用于JavaScript項目。 - https://retirejs.github.io/retire.js/
我們必須在自己的管道中創建相應的步驟,以實現在每一次編譯中都能被執行到的既定目標。同時,這也保證了我們不會輕易地放過任何一個未經授權的、過時的或帶有bug的依賴項。
另外,如果面對的是服務器的集群,我們還可以使用Chef和Inspect之類的工具,來管理配置并維護系統的穩定性。這些工具能夠在操作系統級別執行維護,當然它們也需要在各個主機上安裝好代理程序。
無代碼漏洞
SAST(靜態應用程序安全測試)的目標是查出各種bug、錯誤的實踐、潛在的內存泄漏、無限循環、以及任何程序上的漏洞。SonarQube(https://www.sonarqube.org/)是該領域的一個知名工具,它提供了多種方法來掃描各個源文件、查找bug和錯誤的實踐方法,而且它能夠被用在許多種編程語言的場景中。
- Infer by Facebook:這是Facebook提供的一種工具,我們可以用來掃描Java、C/C++和Object-C。 - http://fbinfer.com/
遵守 OWASP Top 10
OWASP Top 10是業界常用的十大安全風險的集合,它的最新版本已于2017年被更新(您可以通過該鏈接查看到全部:https://www.owasp.org/index.php/Top_10-2017_Top_10)。我們可通過遵循該準則,來提供更好的Web安全應用。如今網上已有許多工具能在遵循該準則的基礎上,實施自己的檢查策略。在此,我僅列出如下兩種常用工具供您參考:
- OWASP ZAP:源自OWASP的滲透測試和漏洞挖掘工具。 - https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project
- IronWASP:一款開源的Web應用滲透測試與漏洞掃描工具。 - https://ironwasp.org/
考量效果
通過考量效果,我們能夠獲知上述各項DevSecOps策略的執行情況,從而避免整個公司長期處于“黑暗球場”的狀態。
同樣,網上也有許多十分優秀的開源工具,可被用來考量各項指標,并通過界面予以顯示。我個人非常喜歡使用Grafana(https://grafana.com/),它既能清晰地呈現各種監測到的指標,又能將它們進行存儲。另外,我也建議您使用
InfluxDB(https://www.influxdata.com/)。它可以被集成到我們的管道中,從而獲取精確的考量參數值。當然Grafana與InfluxDB之間也有著很好地相互集成。
那么我們具體能夠考量哪些指標呢?一般包括如下:
- 在Git存儲庫中發現的密碼值
- 各種過期的證書
- 續訂過期證書的平均時間
- 過時無效的依賴項
- 過時無效的操作系統庫
- 在源代碼中所找到的各種嚴重漏洞
- 在應用程序中發現的前十大漏洞
上述便是我對于實現有效DevSecOps的一些可行性的建議。現如今DevSecOps的概念已經被炒作得有些過熱了,因此,我強烈建議大家:與其坐而言,不如起而行。
原文標題:Effective DevSecOps,作者:Fabio Jose Moraes
【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】