隨著“安全左移”的深入,企業開發安全已經進入深水區,DevOps已經不局限于開發和運營部門,企業越來越關注商業價值端到端交付的全生命周期管理,敏捷開發正在融入敏捷業務和敏捷企業的核心業務流程,在這個“敏捷內生”的過程中,“天生敏捷”的開源工具正發揮著越來越重要的作用。

以下我們將介紹如何用流行開源工具搭建完整的DevSecOps流程,內容概要如下:

  • 頂級開源工具列表
  • 關鍵步驟與代碼示例
  • DevSecOps管道的最佳實踐
  • DevSecOps的高級技術

DevSecOps的主流開源工具

隨著黑客攻擊技術變得越來越復雜,無論是開發工程師還是開發團隊負責人,都迫切需要在自動化流程中加入更多的防御機制,如工具、庫、服務等。

DevSecOps的生命周期和主要產品工具 

雖然工具整合是大勢所趨,但在對DevSecOps工具鏈進行平臺化整合(了解哪些商業或開源工具是無效的甚至是有害的)之前,企業首先需要盡可能擴充工具鏈(了解哪些工具有助于加強DeSecOps流程)。以下是目前主流的DevSecOps開源工具(每個分類的TOP5):

1.CI/CD工具

Jenkins、Travis CI、CircleCI、GitLab CI/CD、Concourse

2.版本控制工具

Git、SVN(顛覆)、Mercurial、Bazaar、Fossil

3.機密掃描工具

GitSecrets、TruffleHog、Gitleaks、BlackBox、SOPS

4.SCA(源成分分析)

OWASP依賴性檢查、WhiteSource Bolt、OpenSCA、Black Duck Hub、CycloneDX

5.靜態應用程序安全測試(SAST)工具

SonarQube、Snyk、Semgrep、Bandit、FindBugs

6.動態應用程序安全測試(DAST)工具

OWASP ZAP、Wapiti、Dastardly、Vega、Nikto、Arachni

7.容器化工具

錨引擎、Clair、Trivy、Twistlock、OpenSCAP

關鍵步驟與代碼示例

以下是創建DevSecOps管道的通用步驟和基本組件(基于AWS,您可根據具體云環境和要求對其進行自定義): 

DevSecOps 自動化工具

第1步:需求收集和規劃

  • 確定您的項目和行業的具體安全要求和合規性標準。
  • 定義DevSecOps管道的范圍和目標。
  • 確定涉及的主要利益相關者和團隊,包括開發、運營和安全。

第2步:基礎設施配置

  • 配置您的開發和生產環境,利用Terraform、AWS CloudFormation或Azure等云計算服務的資源管理器模板等基礎設施即代碼工具。
  • 確保按照行業最佳實踐和安全準則安全配置基礎設施。

第3步:版本控制和協作

  • 使用Git之類的版本控制系統安全管理你的代碼庫。
  • 建立協作工作流,使開發人員能夠協同工作并有效地管理代碼更改。

第4步:持續集成(CI)

  • 設置一個CI服務器,例如Jenkins或GitLab CI/CD,以自動構建、測試和打包您的應用程序代碼。
  • 將CI服務器配置為在提交代碼更改時自動觸發構建。

第5步:靜態代碼分析和安全測試

  • 將SonarQube或Checkmarx等靜態代碼分析工具集成到CI管道中,以識別代碼質量問題、錯誤和安全漏洞。
  • 配置工具以實施安全策略、編碼標準和安全編碼實踐。

第6步:依賴管理和軟件組合分析(SCA)

  • 利用Maven或npm等依賴管理工具來管理和跟蹤外部庫和依賴項。
  • 結合軟件組合分析(SCA)工具,如Black Duck、OWASP Dependency-Check或Snyk,以識別和修復第三方組件中的漏洞:

第7步:動態應用程序安全測試(DAST)

  • 將OWASP ZAP、Burp Suite或Netsparker等DAST工具集成到管道中,以模擬真實世界的攻擊并識別應用程序中的安全漏洞。
  • 自動化DAST掃描作為CI管道的一部分或在開發過程中作為計劃測試。

第8步:容器化和容器安全

  • 使用Docker或Kubernetes實施容器化,以跨環境一致地打包和部署應用程序。
  • 包括容器安全實踐,例如圖像漏洞掃描、運行時安全監控和使用Docker安全掃描或Clair等工具的安全容器配置。

第9步:持續部署(CD)

  • 使用Ansible、Chef或Kubernetes等部署工具自動執行部署過程,以實現無縫和可重復的部署。
  • 實施藍/綠部署或Canary發布等部署策略,以最大限度地降低風險并確保在必要時順利回滾。

第10步:持續監控和事件響應

  • 集成集中式日志記錄和監控解決方案,如ELK Stack(Elasticsearch、Logstash、Kibana)、Splunk或Prometheus,以從應用程序和基礎設施收集和分析日志和指標。
  • 實施實時警報機制,以便在發生安全事件或異常情況時通知相應的團隊。

第11步:合規與治理

  • 在管道中實施合規性檢查和審計,以確保遵守法規要求和安全標準。
  • 利用OpenSCAP或Chef Compliance等工具執行自動合規性掃描并生成報告。

請注意,上述代碼示例經過簡化,可能需要根據具體需要和工具進行調整。這些代碼有助于幫你了解如何實施DevSecOps管道的不同組件。用戶需要根據具體技術、基礎設施和安全要求自定義和修改這些代碼片段,這一點非常重要。

此外,請記住,構建DevSecOps管道需要配置大量工具并將它們集成到管道中,此外還需要建立必要的流程和工作流。上面提供的代碼片段僅代表整體實現的一部分。

構建DevSecOps管道的最佳實踐

要構建有效的DevSecOps管道,還需要考慮以下最佳實踐:

1.安全即代碼:將安全配置、策略和控制視為代碼,并使用版本控制系統對其進行管理,以確保一致性和可重復性。

2.自動化:利用自動化工具在整個管道中實施安全檢查和策略,減少人為錯誤并提高效率。

3.協作:促進開發、運營和安全團隊之間的協作和溝通,以共享知識、識別風險并及時解決問題。

4.持續反饋:建立反饋循環,為開發人員提供可操作的安全信息,并鼓勵持續改進的文化。

5.威脅建模:進行威脅建模練習以識別潛在的安全風險并在開發過程的早期設計適當的安全控制。

6.安全測試:實施各種安全測試技術,例如靜態代碼分析、動態應用程序安全測試(DAST)和滲透測試,以識別和修復漏洞。

7.安全配置:確保所有組件(如服務器、容器和數據庫)均根據行業最佳實踐進行安全配置,并針對已知漏洞進行強化。

DevSecOps管道的高級技術

1.基礎架構即代碼(IaC)安全性:在基礎架構代碼中實施安全檢查和驗證,以確保云資源的安全供應和配置。Terraform、AWS CloudFormation和Azure資源管理器模板等工具可用于安全地定義和管理基礎設施。

2.容器安全:通過結合圖像漏洞掃描、容器運行時安全和安全容器編排等技術來增強容器安全性。Docker Security Scanning、Clair和Kubernetes Security Contexts等工具可用于加強容器安全性。

3.安全編排、自動化和響應(SOAR):集成SOAR平臺以自動化安全事件響應流程。這些平臺有助于協調安全工作流程,實現自動化威脅響應,并促進安全團隊與開發/運營團隊之間的協作。

4.生產中的安全測試:實施Canary部署和藍/綠部署等技術,以在類似生產的環境中測試應用程序安全性。通過逐漸向一部分用戶公開新版本,可以在完整版本發布之前識別并解決安全漏洞。

5.威脅情報集成:將威脅情報饋入集成到安全監控系統中,以增強檢測和響應能力。這允許主動識別新出現的威脅并迅速采取行動來減輕潛在風險。

6.不可變基礎設施:構建和部署不可變基礎設施,其中實例或容器在部署后永遠不會被修改。這種方法可確保通過創建新實例或容器來解決任何更改或漏洞,從而降低因配置漂移或未修補軟件而受到損害的風險。

7. 安全供應鏈管理:實施安全軟件供應鏈實踐,包括驗證第三方庫和依賴項的完整性和真實性、使用代碼簽名以及監控任何潛在的供應鏈攻擊。

結論

DevSecOps是在整個軟件開發生命周期中集成安全性的關鍵方法。通過DevSecOps實踐,企業可以開發安全且有彈性的應用程序,同時又能保持DevOps的敏捷性和速度。利用開源工具建立有效的DevSecOps管道并實施先進技術,能幫助企業領先于安全威脅并在快速發展的環境中交付安全軟件。