探索持續安全性驗證
現代開發人員經常使用公共套件來源中可用的元件,例如 npm、NuGet、PyPI、Maven Central 和 RubyGems。 隨著組織採用開源軟體 (OSS) 元件以加快交付速度並提高生產力,這種做法已成為整個軟體產業的標準。
第三方組件的雙刃劍
第三方元件的優點:
- 更快的開發: 開發人員不需要從頭開始建置通用功能。
- 經過驗證的解決方案: 流行的軟件包已經過數千名用戶的測試。
- 社區支持: 活躍的社區提供文檔、更新和幫助。
- 節約成本: 免費的 OSS 組件顯著降低了開發成本。
- 創新加速: 團隊可以專注於獨特的業務邏輯,而不是重新發明標準功能。
日益增長的安全性和合規性風險: 然而,隨著對第三方 OSS 元件的依賴增加,風險也隨之增加:
安全漏洞:
- 第三方套件可能包含攻擊者可以利用的已知安全漏洞。
- 在現有套件中不斷發現漏洞。
- 遞歸相依性 (您的相依性的相依性) 會引入您可能不知道的弱點。
- 供應鏈攻擊針對流行的套件,以破壞許多下游應用程式。
授權合規性問題:
- 隱藏的授權要求可能會產生法律義務。
- 某些 OSS 授權要求您在使用其元件時開源自己的程式碼。
- 違反許可證可能會導致訴訟、經濟處罰和強制代碼發布。
- 不同的授權可能彼此不相容,從而產生合規性衝突。
業務關鍵性: 對於企業來說,這些問題至關重要。 與合規性、責任和客戶個人資料相關的問題可能會導致嚴重的隱私和安全問題:
- 法律責任: 違反許可證會使組織面臨法律訴訟。
- 資料外洩: 易受攻擊的元件可能會導致影響客戶個人資料的資料外洩。
- 監管合規性: 違反 GDPR、CCPA 或 HIPAA 等法規可能會導致巨額罰款。
- 聲譽受損: 安全事件和許可證違規會損害客戶信任和品牌聲譽。
- 客戶合約: 企業客戶通常需要保證安全性和合規性,而這些保證會因元件漏洞而無法滿足。
早期發現的價值
提前警告: 在發行週期早期識別安全性和合規性問題可提供進階警告,並有足夠的時間在問題進入生產環境之前修正問題。
補救費用: 在專案中發現問題的早期,糾正問題的成本就會大大降低:
- 在開發過程中: 變更相依性會花費數小時的開發人員時間。
- 測試期間: 修正問題需要重新測試整個應用程式。
- 生產中: 補救需要緊急修補、安全事件回應、客戶通知和潛在的監管報告。
經濟影響: 研究表明,在生產中發現的安全問題的修復成本是開發過程中發現的安全問題的 10-100 倍。
持續整合安全性驗證
一旦程式碼合併到主分支中,全面的安全性驗證應該作為持續整合 (CI) 建置過程的一部分執行。
CI 組建與 PR-CI 組建
提取要求 CI (PR-CI):在合併程式碼之前,請在提取要求驗證期間執行。 提供快速回饋,防止易受攻擊的程式碼進入程式碼庫。
完整的 CI 建置: 在程式碼合併到 main 分支之後執行。 包括更全面的檢查,並準備好用於部署的工件。
典型差異: PR-CI 和完整 CI 組建之間的主要差異在於,PR-CI 不需要完整 CI 組建所產生的封裝或暫存構件。 這可以保持 PR-CI 快速,同時保持安全驗證。
兩者都應包括安全檢查: 這兩種組建類型都應該執行核心安全性驗證,但完整的 CI 組建可能包含額外的耗時檢查。
CI 組建中的靜態程式碼分析
目的: CI 組建應該執行靜態程式碼分析測試,以確保程式碼遵循可維護性和安全性的所有規則。
常見的靜態分析工具:
聲納昆比:
- 全面的程式碼品質和安全平台。
- 偵測程式錯誤、代碼異味和安全漏洞。
- 追蹤一段時間內的程式碼品質指標。
- 整合當未達到品質閾值時,建構失敗的品質閘道。
- 支持多種編程語言。
Visual Studio Code Analysis 和 Roslyn 安全性分析:
- .NET 應用程式的內建分析。
- Roslyn 安全性分析器會偵測 C# 程式碼中的安全性弱點。
- 在編譯期間運行,提供即時反饋。
- .NET 專案不需要額外的基礎結構。
Checkmarx:
- 靜態應用程式安全測試 (SAST) 工具。
- 對原始碼進行深度安全分析。
- 識別 SQL 注入、XSS 和身份驗證問題等漏洞。
- 提供詳細的補救指引。
- 支援多種程式語言和框架。
賓斯基姆:
- 來自 Microsoft 的二進制靜態分析工具。
- 提供 Windows 可攜式可執行檔 (PE 檔案) 的安全性和正確性結果。
- 分析編譯的二進位檔而不是原始程式碼。
- 識別編譯設定和二進位結構中的安全性問題。
- 對於分析協力廠商編譯的元件很有用。
附加工具:
- 帶有安全插件的 ESLint: JavaScript/TypeScript 安全性分析。
- 強盜: Python 安全分析。
- Brakeman: Ruby on Rails 安全掃描器。
- gosec: Go 安全性檢測工具。
Azure Pipelines 整合: 許多安全性工具會順暢地整合至 Azure Pipelines 和其他 CI/CD 平臺。 Visual Studio Marketplace 提供各種安全性工具的延伸模組,讓整合變得簡單:
- 工具會以管線任務的形式顯示,您可以將其新增至管線定義中。
- 結果會顯示在管線記錄中,而且偵測到問題時,組建可能會失敗。
- 安全性檢測結果與 Azure DevOps 工作項目管理整合。
第三方套件漏洞掃描
關鍵但經常被忽視: 除了驗證程式碼品質之外,另外兩個關鍵驗證經常被忽略或執行不充分:
- 掃描協力廠商套件是否有已知的安全性弱點。
- 驗證 OSS 授權合規性。
常見的組織應對: 當被問及第三方套件漏洞和授權時,許多組織會以恐懼或不確定的態度回應。 他們沒有明確的流程來管理這些風險。
手動流程問題: 嘗試管理第三方套件漏洞或 OSS 授權的組織通常會解釋說,他們的流程既繁瑣又手動:
- 開發人員手動搜尋漏洞資料庫。
- 安全團隊維護已批准軟件包的電子表格。
- 每個套件的授權審查需要法律團隊的參與。
- 更新是手動追蹤的,導致依賴性資訊過時。
- 這個過程需要數週時間,顯著減慢了開發速度。
自動化解決方案: 現代軟體組合分析 (SCA) 工具可自動執行此識別過程,使其幾乎是即時的:
Mend(以前稱為 WhiteSource):
- 自動偵測應用程式中的所有 OSS 元件。
- 識別相依性中的已知安全性弱點。
- 根據組織原則檢查授權合規性。
- 提供補救指引,包括可用的修正後版本。
- 持續監控已使用套件中的新漏洞。
GitHub Dependabot:
- 自動掃描相依性以尋找已知漏洞。
- 建立提取請求以更新易受攻擊的相依性。
- 支援多種套件生態系統(npm、Maven、pip 等)。
- 免費使用於公共和私有的 GitHub 存放庫。
斯尼克:
- 開發人員優先的安全工具,用於尋找和修復漏洞。
- 掃描相依性、容器映像和以程式碼管理的基礎設施。
- 提供補救建議和自動提取要求。
- 整合到 IDE、原始碼控制和 CI/CD 管道中。
Azure Artifacts 上游來源:
- 可設定為掃描來自上游來源的套件。
- 封鎖具有已知弱點的套件。
- 為整個組織中使用的所有套件提供可視性。
軟體組成分析的好處
全面的可見性: SCA 工具提供對軟體供應鏈的完整可見性:
- 清查所有直接和可轉移相依性。
- 追蹤版本和更新狀態。
- 識別不再維護的元件。
- 將依賴關係對應到特定的應用程式和團隊。
風險優先順序: 並非所有漏洞都同樣嚴重。 SCA 工具有助於確定以下優先順序:
- 嚴重性分數 (CVSS 評級) 表示漏洞嚴重性。
- 可利用性評級顯示是否已知存在攻擊。
- 可連線性分析,判斷您的應用程式中是否實際使用易受攻擊的程式碼。
- 在商務環境中,哪些應用程式最為關鍵。
持續監控: 安全漏洞不斷被發現。 SCA 工具提供持續監控:
- 在您使用的套件中發現新漏洞時發出警示。
- 定期報告安全態勢趨勢。
- 與問題追蹤系統整合以管理補救工作。
合規文件: SCA 工具會產生合規性報告:
- 所有已使用元件的授權義務。
- 必須符合的歸因要求。
- 已執行安全性檢閱的證據。
- 法規遵循的審核記錄。
在流程中整合
安全性持續驗證以自動化任務形式整合到您的 CI/CD 管道中:
- 程式碼合併: 提取請求已獲得批准,程式碼合併到主分支中。
- CI 建置觸發程式: 合併會自動觸發完整的 CI 建置。
- 靜態分析執行: SAST 工具分析原始程式碼是否有漏洞。
- 依賴項掃描: SCA 工具會掃描所有相依性,以尋找弱點及授權問題。
- 優質大門: 如果安全性問題超過可接受的臨界值,建置就會失敗。
- 結果已經可用: 安全調查結果供開發人員和安全團隊使用。
- 神器創建: 如果安全檢查通過,則會建立建置構件以進行部署。
在後面的模組中,我們將討論將數個有用且常用的安全性與合規性工具整合到您的特定管線設定中。