探索安全的 DevOps 管線

已完成

安全 DevOps 管道的目標是讓開發團隊能夠快速工作,而不會在其專案中引入不必要的安全漏洞。 速度和安全性之間的這種平衡需要在整個管道中嵌入安全實踐,而不是將安全視為一個單獨的階段。

保護 DevOps 管線工作流程

全面的安全 DevOps 管道在軟體交付流程的多個階段整合了安全檢查:

顯示安全 Azure Pipelines 工作流程的圖表,其中 10 個相互連線的階段排列在連續的圓圈中,代表安全性整合的傳遞程式。

此工作流程可確保從程式碼提交到生產部署期間持續進行安全性驗證。 每個階段都包括自動執行的適當安全控制,無需手動干預進行例行檢查。

標準管道以外的基本安全功能

安全 DevOps 管線包含標準 CI/CD 管線中通常找不到的其他安全性功能。 這些功能可解決傳統管線遺漏的常見安全性弱點:

具有安全性核准的套件管理

挑戰: 現代應用程式依賴於眾多第三方套件、函式庫和元件。 這些相依性會帶來安全性風險:

  • 已知漏洞: 第三方套件可能包含攻擊者可以利用的已知安全漏洞。
  • 惡意套件: 攻擊者有時會發布名稱與流行包相似的惡意包,希望開發人員誤裝(誤植)。
  • 供應鏈攻擊: 受損的套件儲存庫或維護者帳戶可能會導致惡意程式碼透過合法更新管道分發。
  • 授權合規性: 某些軟體包許可證可能與您的預期用途不相容,從而產生法律風險。
  • 未維護的套件: 不再維護的套件將不會收到安全性更新,從而產生長期漏洞。

解決方案: 具有核准程序的套件管理會新增相依性的安全閘道:

審批工作流程步驟:

  1. 套餐要求: 開發人員請求批准添加新軟件包或更新現有軟件包。
  2. 安全掃描: 自動化工具使用 CVE(常見漏洞和暴露)和 NVD(國家漏洞資料庫)等漏洞資料庫掃描套件中的已知漏洞。
  3. 授權審查: 自動化工具會根據組織原則檢查套件授權。
  4. 依賴分析: 工具會分析傳遞性相依性(相依性的相依性),以檢查是否存在安全問題。
  5. 手動審核: 安全性小組會檢閱高風險套件或要求提高許可權的套件。
  6. 批准或拒絕: 套件會被批准使用、拒絕或在核准前標示為需要補救。
  7. 持續監控: 系統會持續監控已核准的套件,以尋找新發現的弱點。

早期識別的好處: 這些步驟應在管道的早期實施,以便在開發週期中更快地發現問題:

  • 早期發現的問題修復成本低於生產中發現的問題。
  • 開發人員可以在圍繞易受攻擊的依賴項構建重要功能之前選擇替代軟件包。
  • 當安全性審查以累加方式發生時,而不是在發布前一次全部發生,則不會成為瓶頸。

範例工具:

  • Azure 工件: 提供上游來源和漏洞掃描的套件管理功能。
  • GitHub Dependabot: 自動偵測易受攻擊的相依性,並建立提取要求來更新它們。
  • 斯尼克: 掃描相依性中的弱點和授權問題。
  • 白色來源: 提供開源元件的軟體組成分析。

原始碼安全掃描

挑戰: 應用程式原始程式碼可能包含在開發期間不會立即明顯的安全性弱點:

  • 注射缺陷: SQL 注入、命令注入和其他注入漏洞。
  • 驗證問題: 身份驗證機制薄弱、硬編碼憑證或會話管理不當。
  • 敏感資料外洩: 在程式碼中意外包含秘密、API 金鑰或個人資訊。
  • 安全性設定錯誤: 不安全的預設設定、啟用不必要的功能或缺少安全性修補程式。
  • 使用具有已知漏洞的元件: 存在安全問題的過時函式庫或框架。
  • 日誌記錄和監控不足: 缺乏足夠的安全事件日誌記錄來進行事件檢測和響應。

解決方案: 原始程式碼掃描會在建置程式中新增自動化安全性分析:

靜態應用程式安全測試 (SAST):

  • 分析原始程式碼而不執行它。
  • 識別程式碼中潛在的安全漏洞。
  • 偵測常見的弱點模式,例如 SQL 注入、跨網站指令碼 (XSS) 和緩衝區溢位。
  • 提供特定的程式碼位置和補救指引。
  • 執行速度足夠快,可在建置過程中提供反饋。

秘密掃描:

  • 偵測意外提交的敏感資料,例如 API 金鑰、密碼和憑證。
  • 防止將認證部署至生產環境。
  • 偵測到秘密時立即向開發人員發出警示。
  • 與秘密管理系統整合時,可以自動撤銷偵測到的憑證。

程式碼品質分析:

  • 識別可能導致安全漏洞的程式碼品質問題。
  • 偵測難以正確保護的複雜程式碼路徑。
  • 醒目提示需要額外安全性檢閱的區域。

掃描時機: 原始程式碼掃描會在建置應用程式之後,但在發行和發行前測試之前進行:

  • 建置後: 完整的應用程式程式碼可供分析,包括產生的程式碼。
  • 測試前: 在投資安全測試資源之前,會識別漏洞。
  • 部署前: 在到達預備或生產環境之前,會發現問題。

早期發現的好處:

  • 來源掃描會在開發週期的早期識別安全性弱點。
  • 開發人員會立即收到有關其程式碼中安全問題的回饋。
  • 當開發人員對程式碼記憶猶新時,安全問題已得到解決。
  • 修復漏洞的成本明顯低於在生產環境中修復漏洞的成本。

範例工具:

  • GitHub CodeQL: 語意程式碼分析引擎,可探索程式碼庫中的弱點。
  • 聲納昆比: 持續檢查工具,可偵測錯誤、程式碼氣味和安全漏洞。
  • 檢查馬克斯: 靜態應用安全測試平台。
  • 維拉代碼: 具有 SAST 功能的安全分析平台。
  • Microsoft 安全代碼分析: 執行安全性分析工具的 Azure DevOps 延伸模組。

與持續交付整合

套件管理核准和原始程式碼掃描都無縫整合到持續交付管道中:

自動閘門: 安全檢查成為自動化的流程閘門,必須通過這些閘門,流程才能繼續。 失敗的安全檢查會阻止不安全的程式碼繼續進行。

快速反饋: 開發人員可以在幾分鐘內收到安全回饋,而不是幾天或幾週。 這種快速反饋可以在上下文丟失之前快速修復。

安全可見性: 安全團隊可以了解正在部署的所有程式碼和相依性,而無需手動審查每個變更。

合規文件: 自動化安全檢查會建立稽核追蹤,記錄每個管道階段的安全驗證。

解決整個生命週期

在本模組的以下部分中,我們將詳細探討這些基本的安全功能:

  • 應進行安全檢查的關鍵驗證點。
  • 持續的安全驗證策略。
  • 不同管線類型的實作方法。
  • 有效安全自動化的工具和技術。
  • 如何平衡安全性的徹底性與交付速度。