摘要
在本課程模組中,您探索如何透過 DevSecOps 原則和實務,將安全性整合到軟體開發生命週期的每個階段。 將安全性視為發布前的最終檢查點的傳統方法會產生瓶頸、增加成本,並且在生產之前通常無法發現關鍵漏洞。 透過將安全性左移並使其成為每個人的責任,組織可以保持開發速度,同時顯著改善其安全態勢。
SQL 注入攻擊
您瞭解 SQL 插入 如何仍然是最危險和最普遍的 Web 應用程式弱點之一:
- 攻擊機制: 攻擊者將惡意 SQL 程式碼插入應用程式輸入中,利用輸入驗證不足來操縱資料庫查詢。
- 潛在損害: 成功的攻擊可以繞過身份驗證、檢索整個資料庫內容、修改或刪除記錄、執行作業系統命令或導致拒絕服務。
- 廣泛影響: SQL 注入會影響所有主要的資料庫系統,包括 MySQL、Oracle 資料庫、Microsoft SQL Server、PostgreSQL 和 SQLite。
- 預防要點: 透過使用參數化查詢、驗證和清理輸入、套用最低權限原則、進行定期安全測試以及監控資料庫活動來防止 SQL 注入。
DevSecOps 原則
您探索了 DevSecOps 如何將安全性從障礙轉變為推動者:
- 雲端應用程式中的安全漏洞: 許多應用程式對靜態和傳輸中的資料存在加密漏洞,並且缺乏適當的會話保護機制,例如 HTTP 安全標頭。
- 傳統問題: 傳統方法會在開發週期結束時產生計劃外的工作、昂貴的返工、發布流程中的瓶頸以及降低安全問題的優先順序。
- DevSecOps 解決方案: 從開發之初就整合安全性,使其成為開發、營運和安全團隊的共同責任。
- 擴展的安全範圍: 除了傳統的存取控制和邊界保護之外,DevSecOps 還可以保護整個管道,包括儲存庫、建置伺服器、工件儲存、部署工具、基礎設施即程式碼、配置管理和機密管理。
- 安全即代碼: 自動化基礎設施安全(IaC 掃描、策略即代碼、合規性檢查)和應用程序安全(SAST、DAST、SCA、容器掃描),以實現持續的安全驗證。
保護 DevOps 管線
您已檢查安全管線如何使用關鍵安全性功能來延伸增強標準 CI/CD:
- 具有安全核准的套件管理: 實作核准工作流程,掃描套件中的已知弱點、檢閱授權、分析相依性,並在允許第三方元件進入您的程式碼庫之前持續監控新的安全性問題。
- 原始碼安全掃描: 部署靜態應用程式安全測試 (SAST) 來分析程式碼而不執行程式碼,部署秘密掃描以防止憑證暴露,以及程式碼品質分析來識別導致漏洞的問題。
- 掃描時機: 在建置完成之後、測試和部署之前執行安全性檢查,在補救成本最低時提供早期偵測。
- 工具整合: 使用直接整合到管線中的 GitHub CodeQL、SonarQube、Checkmarx、Veracode 和 Microsoft 安全性程式碼分析等工具。
關鍵驗證點
您在整個開發過程中發現了重要的 安全檢查點 :
- IDE級安全檢查: 在程式碼編寫過程中透過即時回饋、即時學習機會和提交前的修復來捕捉漏洞,將回饋循環縮短至幾秒鐘。
- 存放庫提交控制:實作 Git 分支原則要求在合併變更之前進行程式碼檢閱、連結工作項目的稽核線索,以及成功通過 CI 建置。
- 程式碼審查要求: 確保手動驗證安全問題,包括輸入驗證、身份驗證和授權機制、敏感資料處理、安全庫使用以及沒有硬編碼秘密。
- 提取請求中的自動檢查: 執行靜態分析、依賴性漏洞檢查、秘密偵測和程式碼品質分析,結果直接顯示在拉取請求介面中。
- 逐步實施: 對於成熟的產品,逐步採用驗證點,優先考慮高影響力的檢查點,並隨著時間的推移建立安全文化。
持續安全性驗證
您瞭解持續 驗證 如何在整個軟體生命週期中維護安全性:
- 第三方組件風險: 現代應用程式嚴重依賴開源和第三方套件,引入了安全漏洞、許可證合規性問題和供應鏈攻擊媒介。
- 早期發現的價值: 在開發過程中發現漏洞的成本比在生產中修復漏洞低 10-100 倍,因此自動掃描在經濟上至關重要。
- 靜態程式碼分析: 使用 SonarQube、Visual Studio Code Analysis、Checkmarx、BinSkim 和特定語言分析器等工具來確保程式碼遵循安全性和可維護性規則。
- 漏洞掃描: 使用 Mend (WhiteSource)、GitHub Dependabot、Snyk 和 Azure Artifacts 等工具,持續監視、排定風險優先順序,並提供補救指引,自動偵測相依性中的已知弱點。
- 軟體組成分析的好處: 全面了解所有依賴項、追蹤版本、識別未維護的套件、使用 CVSS 分數確定風險優先順序、保持持續監控並產生合規文件。
威脅建模方法
您探索了 威脅建模 作為了解安全風險的結構化方法:
- 五個階段的過程: 定義安全性需求 (機密性、完整性、可用性、合規性)、建立應用程式圖表 (元件、資料流程、安全性界限)、使用 STRIDE 方法識別威脅、制定風險降低策略 (消除、預防、偵測、回應),並驗證風險降低措施是否仍然有效。
- STRIDE 方法論: 系統地考慮六類威脅:欺騙身分、篡改資料、否認操作、資訊洩漏、拒絕服務和權限提升。
- 常見威脅和緩解措施: 透過參數化查詢和輸入驗證解決 SQL 注入問題,透過安全工作階段管理和 HTTPS 防止工作階段劫持,透過 TLS 和憑證固定防止中間人攻擊,並透過雲端保護服務和速率限制來緩解 DDoS。
- 生命週期整合: 在初始設計期間進行全面的威脅建模,重複對重要的新功能進行建模,即使沒有重大更改,也執行定期審查,在安全事件發生後進行更新,並隨著時間的推移逐步降低風險。
- Microsoft 威脅建模工具: 使用此免費工具,以標準表示法視覺化系統元件、根據系統結構自動產生潛在威脅、記錄風險降低決策、追蹤實作狀態,以及與 Azure DevOps 整合。
CodeQL 自動化安全性分析
您已瞭解 GitHub CodeQL 如何啟用複雜的自動化安全性分析:
- 語意程式碼分析: CodeQL 將程式碼視為資料,方法是將程式碼轉換為可查詢的資料庫,以擷取語法樹狀結構、控制流程圖和資料流程路徑,從而實現準確的弱點偵測,從而了解程式碼內容,而不僅僅是模式比對。
- 三相分析: 建立代表程式碼結構的 CodeQL 資料庫、針對資料庫執行查詢以尋找安全性問題,以及使用優先順序、內容資訊和補救指引來解譯結果。
- CodeQL 查詢語言: 使用物件導向邏輯程式設計編寫宣告式查詢,該程式設計描述要尋找的內容而不是如何找到它,並具有針對 OWASP 前 10 個漏洞和 CWE 類別的廣泛標準查詢庫。
- GitHub 整合: 一鍵啟用程式碼掃描、接收顯示易受攻擊程式碼行的提取要求的內嵌註解、將 CodeQL 設定為合併前必須通過的必要檢查,並在 [安全性] 索引標籤中檢視所有發現項目以及詳細說明。
- CI/CD 管道整合: 透過命令列介面在 GitHub Actions、Azure Pipelines、Jenkins、GitLab CI/CD、CircleCI 和自訂系統中使用 CodeQL,設定在偵測到高嚴重性弱點時組建失敗的安全閘道。
- 開發工具: 使用 CodeQL 延伸模組在 Visual Studio Code 中撰寫和測試查詢,提供語法醒目提示、自動完成、本機分析和偵錯支援。
重點摘要
當您在組織中實施 DevSecOps 時,請記住以下基本原則:
安全是每個人的責任: 超越安全僅屬於安全團隊的思維方式。 開發人員、營運工程師、測試人員和業務利害關係人都為應用程式安全做出了貢獻。 當安全性成為每個人日常工作的一部分,而不是單獨的功能時,您就會建立一種文化,其中安全做法是預設的。
安全性左移:在儘早的階段解決安全性疑慮。 在開發過程中發現和修復漏洞的成本比在生產中修復它的成本要低得多——通常低 10 到 100 倍。 透過將安全性檢查整合到 IDE、程式碼審查流程和 CI 管道中,您可以在最容易、最便宜的修復時發現問題。
自動化安全驗證: 手動安全性檢閱無法因應現代發行節奏。 自動進行靜態程式碼分析、相依性弱點掃描、秘密偵測和程式碼品質的安全檢查。 自動化為每次提交提供一致的安全驗證,而不會減慢開發速度。
持續驗證: 安全不是發布前的一次性檢查點。 在多個階段實作安全性驗證,包括開發人員的 IDE、程式碼檢閱期間、CI 組建、部署之前和生產環境。 持續驗證會創造多個機會來發現問題,並提供深度防禦。
主動使用威脅模型: 不要等到安全事件發生後才考慮威脅。 在初始設計和新增重要功能時使用結構化威脅模型。 STRIDE 方法提供了一種系統方法,非安全專家可以在編寫代碼之前應用該方法來識別威脅並計劃緩解措施。
利用自動化分析工具: 像 CodeQL、SonarQube 和 Snyk 等工具能夠執行一些手動執行起來不切實際的複雜安全分析。 這些工具理解程式碼語義、追蹤資料流並發現大型程式碼庫中的複雜漏洞。 將它們整合到您的管道中,使進階安全分析成為例行公事。
追蹤和管理依賴關係: 現代應用程式嚴重依賴第三方元件。 自動相依性掃描可識別相依性中的已知弱點和授權合規性問題。 軟體組成分析可讓您了解供應鏈,並協助您在揭露新漏洞時快速回應。
文件安全決策: 使用威脅建模文件、安全要求和自動化工具輸出來建立稽核追蹤,顯示如何解決安全問題。 此文件展示了盡職調查,幫助新團隊成員了解安全內容,並提供合規性要求的證據。
平衡速度和安全性: DevSecOps 不是要減慢開發速度以添加安全檢查,而是要有效地整合安全性,以免妨礙速度。 自動化工具、明確的策略和內建於正常工作流程中的安全性使團隊能夠在不影響安全性的情況下快速行動。
迭代和改進:從高影響力的安全實踐開始,並隨著時間的推移進行擴展。 您不需要立即實作每個資安控制措施。 從自動相依性掃描或提取要求安全性檢查開始,示範價值,並逐步新增更複雜的驗證點。 安全性的持續改進反映了 DevOps 本身的迭代方法。
透過套用這些 DevSecOps 實務,您可以建立快速交付且設計安全的軟體。 安全性成為推動因素而不是障礙,讓您的組織充滿信心地進行創新。
深入了解
- DevSecOps 工具和服務 |Microsoft Azure。
- 使用 Azure 和 GitHub 啟用 DevSecOps - DevSecOps |Microsoft Learn。
- 進階威脅防護 - Azure SQL Database、SQL 受控實例和 Azure Synapse Analytics |Microsoft Learn。
- 保護 Azure Pipelines - Azure Pipelines | Microsoft Learn。
- SQL 注入 - SQL Server | Microsoft Learn。
- CodeQL 概觀。
- Microsoft 威脅模型化工具概觀。