將咱們的DevSecOps方法分紅多層,能夠在對強大安全性的需求與快速移動並常常部署的需求之間找到適當的平衡。php
DevOps運動改變了咱們集成和發佈的方式。它使咱們從緩慢的發行週期(有時是每一年的發行週期)過渡到天天(有時甚至是每小時)發行。咱們可以編寫代碼並幾乎當即看到生產中的變化。DevOps是突破壁壘並支持對市場變化、客戶需求快速響應的使人驚歎的第一步,可是仍然須要打破一堵重要的壁壘,咱們須要折中的一個重要羣體:安全運營(SecOps)。安全
爲了在生產變動持續集成和部署(CI/CD)中包括這個相當重要的小組,咱們將DevOps從新定義爲DevSecOps。咱們在這項工做中面臨的挑戰與在將開發和運營整合在一塊兒時所面臨的挑戰相同:開發人員但願快速行動並常常進行更改,而運營則須要穩定和不頻繁的更改。安全團隊傾向於支持穩定性和不頻繁的更改,由於更改可能意味着重複安全測試並再次對環境進行認證。網絡
當咱們以DevOps的速度前進時,咱們如何指望這些團隊天天或每週重作他們的工做?異步
安全分層
在深刻探討這個問題以前,咱們應該談談一種關鍵的安全實踐:分層安全或深度防護。分層安全是一種應用多種安全措施的實踐,每一層都與前一層和下一層重疊,以建立一個安全控制網絡,這些網絡能夠一塊兒工做以保護技術系統。ide
在分層安全方法中,公司經過使用諸如WAN網關防火牆和靜態數據加密之類的訪問控制來減輕對技術系統的***。控件列表很普遍,但要點是,沒有任何控件能夠充分保護技術系統。一樣的方法適用於對咱們的應用程序執行安全性分析。
工具
與公司的應用程序安全團隊聯繫,詢問他們使用哪些掃描工具來確保編寫的應用程序安全。可能的是,他們不會使用一種工具進行答覆,由於沒有一種工具能夠所有完成。相反,他們可能會爲您提供他們使用或指望開發團隊使用的工具列表或工具類型。性能
這使咱們回到了以前的問題:在進行全部這些掃描並使用全部這些工具時,咱們如何指望維持一個持續的部署週期?這是一項艱鉅的任務。其中一些掃描和工具須要花費數小時,數天或更長時間。單元測試
內聯掃描
儘管某些安全工具和掃描器確實須要很長的時間才能運行,但仍有一些更快的工具能夠在開發生命週期的早期使用,以造成咱們的第一層DevSecOps。這就是左移背後的想法:將流程從開發生命週期的末尾(或右側)移到開始或中間,即再向左移。測試
第一層應包括須要幾秒鐘(或幾分鐘)運行的工具和掃描程序。一些常見的示例是代碼lint,單元測試,SonarQube之類的靜態代碼分析器,OWASP Dependency Checker等第三方依賴項漏洞檢查,以及集成測試的子集。加密
您可能會問:「整理代碼和運行單元測試如何適合DevSecOps?」 軟件中的錯誤能夠爲正在尋找的對手提供完美的解決方案。例如,OWASP在過去的兩個關鍵Web應用程序安全報告(2013年和2017年) 中將代碼注入列爲第一漏洞。單元測試和靜態代碼分析能夠幫助捕獲咱們的一些錯誤,並可能有助於防止代碼中的安全漏洞。
因爲這些工具掃描只須要不多的時間,所以最好將它們推到開發生命週期中的最左側。當開發人員將代碼推送到咱們的Git存儲庫並打開請求時,這些工具和掃描程序將運行以確保代碼在合併以前經過。除了確保咱們的主幹分支保持可構建狀態外,在開發生命週期的早期就擁有這些工具還能夠儘早且常常向開發人員提供反饋。
部署前掃描
DevSecOps的第二層與咱們的部署管道內聯運行的工具,須要幾分鐘甚至一小時才能完成。這可能包括更深刻的第三方漏洞掃描,Docker鏡像掃描和惡意軟件掃描。
該層的關鍵之一是,掃描器和工具在生成構建工件以後且在將它們存儲到Artifactory或Amazon Elastic Container Registry等任何位置以前均可以運行。更重要的是,此層中的任何故障都應當即中止當前部署,並向開發團隊提供反饋。
另外一個關鍵是在這一層以及全部將來的層中實現並行化。開發人員但願儘快部署他們的更改,而且連續運行屢次掃描(每次掃描可能長達一個小時)會沒必要要地減慢部署週期。經過並行運行這些工具,部署速度的下降等於運行時間最長的掃描。
部署後掃描
DevSecOps的下一層包括在將代碼部署到預生產環境以後咱們可使用的工具和掃描程序。這些工具可能包括性能和集成測試以及應用程序掃描程序,例如OWASP Zap。咱們應該努力使這一層快速運行,但願在一小時或更短的時間內運行,以向開發人員提供快速反饋並限制對CD流程的影響。
爲確保咱們不會錯誤地將易受***的代碼部署到生產中,此層應做爲CD管道的一部分運行,目的是在任何掃描程序發現漏洞或如下狀況時刪除工件,回滾環境。不然失敗。
根據行業,安全性和法規要求,咱們能夠在此層成功完成後自動將部署到生產中。管道中應該已經有足夠的自動掃描和測試,能夠合理地證實應用程序的安全性和堅固性。
持續掃描
咱們討論的大多數掃描儀和工具都已嵌入CI/CD管道中。咱們的目標是在平衡這些工具對CI/CD管道的時間線的影響的同時,爲應用程序的安全性提供合理的保證。
DevSecOps的最後一層是持續續掃描或持續續安全性(CS)。正如持續集成,測試和部署是DevOps的代名詞同樣,持續安全性是DevSecOps的代名詞和基石。該層包括Nessus,Qualys,IBM App Scan等工具,以及其餘基礎結構,應用程序和網絡掃描工具。
CS並不是嵌入在CI/CD管道中,而是做爲異步的,並向開發人員提供持續的反饋。開發人員如何接收和響應該反饋須要進行討論和達成共識。開發人員將在收到任何反饋後當即對其進行處理,並在較長的週轉時間內解決。
這些工具和掃描程序的啓動方式以及運行頻率是利益相關者應贊成CS的另外一個方面。部署完成後,能夠經過CI/CD管道啓動具備API的工具。其餘可能根據須要或基於必定的時間節奏來完成。不管如何完成,重要的是這些工具和掃描儀不會僅運行一次,甚至每一年運行一次或兩次。相反,這些工具和掃描儀應儘量頻繁地運行,並應對應用程序有意義。
結論
正如咱們不能經過使用一兩個工具或安全性原則來確保技術系統的安全性同樣,咱們應用程序的安全性也不能僅取決於一兩個工具或掃描儀的類型。它採用分層的方法來應用不一樣的工具和掃描程序,以合理地確保咱們的應用程序及其運行的基礎結構的安全性。