從DevOps到DevSecOps,貫穿始終的安全棧
"二十一世紀最重要的啥?人才!"。葛大爺在《天下無賊》曾經這樣呼喊。但是在時下蟲蟲要說最重要是數據安全。不管是自動化DevOps,大數據還是AI,安全都是第一要務和基礎,甚至國家層面安全也都提到國家戰略中。在開發即上線的DevOps一棧式模式下,對Devops做安全升級,在全棧每一階段都進行安全檢查和整改,建設成安全棧式DevSecOps勢在必行。本文蟲蟲就就來給大家談談DevSecOps各階段進行的安全實踐活動和工具。
DevSecOps基本上基礎也采用DevOps實踐,并在相應階段增加安全性檢查,并集成到的CI/CD管道中,擴展現有的devops工具和實踐。
給Pipeline增加安全罩
安全無易事!當給DevOps集成安全功能時候,最容易變得不堪重負并迷失!了解當前的工作流程和工具是給管道集成安全檢查和安全控制的關鍵。一般來說DevOps持續集成(CI),持續交付和連續部署(CD)管道分為6階段:
編碼:開發階段,在代碼進入源代碼存儲庫之前。
構建:構建并執行系統的基本自動化測試。
測試:成功構建后,工件將部署到臨時和測試環境中。
主機運行:此階段涉及需要應用于基礎架構的配置和版本更新。
運行:如果主機運行通過,則表明應用程序已準備好部署到生產環境中,可以灰度發布和升級。
監控:持續測量和監控生產活動。
本文中,我們基于以上6個階段進行安全集成實踐和探索。
開發階段
DevOps實踐強調編寫良好的代碼。代碼運行良好,易于更改和理解。 DevSecOps通過添加用于編寫良好和安全代碼的安全檢查來擴展這些實踐。
傳統的單元測試,靜態代碼分析,代碼審查,預提交Hooks(git 客戶端鉤子)等實踐可以擴展到該階段的安全性檢查。為了不影響開發人員的工作效率,可以在將代碼提交到源代碼存儲庫之前查找并修復常見的安全問題。
代碼審查
代碼審查是提搞代碼安全性的重要手段。它可以增加開發人員的責任感和透明度,降低來自內部威脅的風險(比如有人代碼中投毒、隱藏后門以及邏輯炸彈等),同時代碼審查也有助于提高代碼質量。除了代碼外一些關鍵配置文件比如Puppet清單,Ansible playbooks,Dockerfiles,.gitlab-ci.yml等也需要納入代碼審查的范疇。
靜態分析工具
市面上有大量的靜態分析,包括開源和商業工具,可以將其集成到喜歡的IDE中,幫助我們檢查代碼的一致性,可維護性,清晰度,錯誤模式等等,還可以通過添加基本的規則(工具針對該語言)來識別基本安全漏洞。
工具列表
可以在此階段使用的非詳盡工具列表包括:
Gerrit,Phabricator,SpotBugs,PMD,CheckStyle,Find Security Bugs等等
項目構建
將代碼提交到源存儲庫后(比如gitlab),將執行應用程序的構建和基本自動化測試,以確保代碼始終可編譯可構建。
同樣,需要在此階段添加檢查,以檢測嚴重和高危安全性問題。如果發現嚴重問題,則需要進行安全控制,設定構建為失敗并發送警報通知。
依賴組件安全性分析
根據Sonatype的2018年軟件供應鏈報告,在該年度開發人員總共下載使用過逾3000億的開源組件,其中八分之一都包含已知的漏洞。而且今年內由于基礎庫被注入木馬的安全事件也頻繁發生,這蟲蟲之前的文章曾專門介紹過,大家可以搜索歷史文章。
使用依賴組件安全性分析可以發現,依賴的開源組件(類庫)是否包含已知的安全漏洞。運行SCA工具有助于識別具有已知安全漏洞的過時庫和框架。
SAST(靜態分析安全測試)
在此階段提高安全性并向團隊提供快速反饋的另一種有效方法是運行靜態分析軟件測試。這些工具可以找到審核者遺漏的隱藏錯誤,這類錯誤往往很難通過其他類型的測試找到。
單元測試
在重構代碼或進行其他更改時,單元測試對于撲捉回歸漏洞非常重要。對每一功能塊添加單元安全測試很有必要。
工具列表
可以在該階段使用的工具包括:眾所周知的Sonarqube,OWASP依賴性檢查,sourceclear,Retire.js和snyk等。
測試階段
成功構建后,通過選擇生成的工件并將其部署到到容器或者測試環境來觸發測試階段。這些測試包括功能測試,集成測試,性能測試,高級SAST,安全性和DAST。
這個階段通常需要更多的時間和資源來執行,并且遵循失敗快速方法優先原則,即更費勁和耗時的測試要盡可能后延,只有在其他測試都通過時才執行。
有針對性的動態掃描
一旦部署,應用程序就會暴露到各類可能攻擊中,例如跨站點腳本,SQL注入或身份驗證越過等等。而這些正是動態應用程序安全測試(DAST)發揮作用的地方。可以根據OWASP Top 10中總結的常見關高危漏洞來分析當前測試的應用程序。

模糊測試(Fuzzy)
模糊測試是一種黑盒測試,暴力可靠性測試技術,主要包括以自動方式使用非預期的數據測試結果以發現漏洞的測試方法。
自動攻擊
作為自動化測試周期的一部分,我們可以進一步嘗試模擬對運行應用程序的攻擊,對系統執行基本的針對性自動滲透測試。
工具列表
該階段可用的工具(開源和商業)包括:Acunetix Web Vulnerability Scanner,BDD Security,JBroFuzz,Boofuzz,OWASP ZAP,Arachi,IBM AppScan,Mittn,GAUNTLT,SecApp套件等等
主機運行(單機)
在主機運行階段主要立足于保護運行時環境和保護其上運行的應用程序。多年來,業界提出了很多最佳安全實踐,模式,指南和工具,以幫助加強基礎架構并使其更具彈性。
降權、最低權限
PoLP聲明每個模塊(例如進程,用戶或程序,取決于主題)必須只能訪問其合法用途所必需的信息和資源。
配置自動化
配置管理工具可以輕松地反復大規模部署和創建安全基礎架構。通過標準化配置,CM工具可以減少與補丁管理相關的問題,最大限度地降低黑客可以利用未修補的服務器的風險,并有助于減少不同環境之間的差異。值得一提的是,使用CM工具可以在中央存儲庫和版本控制下跟蹤配置信息。
不可變基礎架構
使用不可變基礎架構,一旦在系統中創建工件,它就不會通過用戶修改而改變,則不會有增量更改:創建新服務器實例并替換舊服務器實例,而不是一系列增量更新和更改。一。
安全標準
許多社區提供了基礎架構加強指導和建議。這些標準包括Internet安全中心(CIS)基準測試和NIST配置清單等。

工具列表
該階段可使用工具包括:Ansible,Puppet,(R)?ex,HashiCorp Terraform,Chef,Docker等等
運行階段
如果上述所有階段成功運行,則需要準備投入生產環境運行。該階段目標主要是驗證在配置或部署時間內是否存在任何錯誤,這些錯誤是否會降低系統的可靠性和彈性,是否可以在故障情況通過這些進行攻擊。
該階段使用自動化運行時檢查和測試中發揮重要作用的地方,特別是發現安全違規和漏洞的安全問題,并突出了風險,如訪問控制策略或防火墻規則的變化。
工具列表
這方面我們要特別提及一個Netflix開源的工具chaosmonkey,利用混沌學原理,在分布式系統上進行實驗, 目的是建立對系統抵御生產環境中失控條件的能力以及信心。

監控階段
系統投入生產后,安全性不會終止,而是真正開始。在DevSecOps中,自動安全檢查和監視反饋循環迭代是生產操作的基本部分。
持續監控可以深入了解應用程序正在接收的流量類型,并幫助識別惡意用戶的攻擊模式。
運行時應用程序安全保護
RASP技術可實時識別和阻止應用程序安全威脅。通過向應用程序運行時環境添加檢測和保護功能,RASP使應用程序能夠通過自動重新配置來"自我保護",無需人工干預,以響應某些條件。
安全監控
首先是自動收集和分析潛在安全威脅指標的過程,定義應觸發警報的行為類型,并對警報采取嚴肅措施。比如IDS,主機進程監控,工作目錄變更監控,流量監控等等。
漏洞懸賞
通過漏洞懸賞計劃,借助第三方的力量,深入漏洞挖掘,充分了解現實的風險水平,系統弱點和漏洞。他們通常可以自由地采取行動,不會破壞系統或破壞或泄露敏感數據。
工具列表
市場上存在許多運行時防御工具:Prevoty,Alert Logic,HALO,EVIDENT等等。