如何以代碼的形式提供安全性:11個入門提示
如今,作為代碼和安全設計的安全性是會議的熱門術語。但這些短語究竟是什么意思,你怎么能開始在你的組織中采用它們?
正如Grupo Banco Santander安全研究負責人Daniel Cuthbert在“為開發者致電武器:以安全為代碼的革命性”中所寫道:
現在是時候把我們的努力集中在防御 - 而不是攻擊 - 并讓那些能夠有所作為的人成為英雄:開發者。
BIDS Trading Technologies的首席技術官Jim Bird是一位擁有20多年金融服務技術經驗的軟件和項目經理,他在O'Reilly的這份報告中寫道:
作為代碼的安全性是關于在DevOps工具和實踐中構建安全性,使其成為工具鏈和工作流的重要組成部分。您可以通過繪制如何更改代碼和基礎結構以及查找添加安全檢查和測試和門的位置而不會引入不必要的成本或延遲來實現此目的。
- 吉姆伯德
那么您的團隊如何超越概念轉變為行動?這里有11個技巧可以幫助您入門。
1.理解'安全SDLC'的含義
了解安全軟件開發生命周期(SDLC)將幫助您評估如何在特定的DevOps情況下構建安全性。您可以犯的很大錯誤是嘗試執行安全性而不了解它是什么。
關于這個主題的權威來源是OWASP Secure SDLC備忘單;雖然它仍處于草稿模式,但它提供了一個很好的概述。下圖顯示了在開發周期的每個步驟中發生的活動。

顯示“向左移動”的箭頭說明了通過執行安全實踐盡早嵌入安全性的概念,下面進一步定義。圖片提供:OWASP。
2.使用SAMM評估您的情況
軟件保障成熟度模型(SAMM)是一個開放式框架,可幫助組織制定和實施針對組織面臨的特定風險量身定制的軟件安全策略。但是,有些人認為這個框架執行起來很復雜。
在您的組織牢牢掌握SAMM之前,這些問題將幫助您快速評估DevOps流程的安全組件:
- 要求:您是否正在收集專門針對要構建的軟件的安全和隱私要求?
- 設計:您是否在每個sprint上進行威脅建模?
- 開發:您使用靜態分析和代碼審查嗎?
- 測試:您是否使用動態分析和安全測試來驗證安全要求?
- 部署:您是否計劃使用筆測試評估最終版本或進行包含錯誤賞金計劃的風險評估?
如果您的答案大多數沒有,那么您處于實施安全性的早期階段 - 換句話說,您的DevSecOps工作處于非常低的成熟度級別。
許多組織將他們的安全工作集中在周期的最后階段,在筆測試之后進行部署。不幸的是,如果您發現主要漏洞,這種方法成本很高。而且一個很大的風險是筆測試可能無法發現確實存在的任何重大問題。
相反,“左移”運動越來越注重從一開始就嵌入安全性,最終成本更低,風險更小。
3.注意DevOps中固有的安全挑戰
DevOps是一個嵌入安全性的具有挑戰性的過程。例如,考慮安全原則,例如“最低權限”,開發人員可以訪問生產環境并進行任何更改。這與大多數優秀實踐安全概念相矛盾,但是當安全性作為代碼到位時,仍然希望嵌入安全性。
安全性不能成為業務的障礙,但有必要在安全開發和沒有安全形式的敏捷之間找到平衡點。
4.盡快將安全性作為代碼實施
在敏捷沖刺期間嵌入安全性應該是完美無缺的,并且幾乎是自動的。這是理想的情況,但很難做到正確。
另一種方法是在此過程中盡可能自動化,包括應該必須具備的特定安全DevOps管道。團隊中的每個人都應該保持一致并堅持這些想法。
5.早期的威脅模型
在sprint開始前至少一天計劃威脅建模會話。所有潛在的問題和風險都應成為安全故事的一部分。
6.盡早定義安全要求
- 確保在sprint開始時定義安全要求,包括威脅建模問題。 (提示:使用OWASP ASVS 2.0來支持此過程。)
- 制作安全要求安全性故事并將其添加到sprint backlog中。
- 在sprint定義期間,計算實現和創建測試用例以解決這些安全性故事/任務所需的工作量。 (提示:使用OWASP測試指南。)
- 在開發階段使用OWASP主動控件,并確保在每個sprint期間這些控件成為常規任務。
7.使用SAST / DAST工具
- 在構建過程中插入靜態和動態分析工具(SAST / DAST)。
- 從這些掃描中獲得定期沖刺錯誤的結果。這應該在清理任務之后完成,例如確保消除盡可能多的誤報。
- 如果代碼變化太大,您可能會重新考慮如何應用SAST,因為當代碼發生很大變化時會出現許多誤報。
- 如果您的組織無法負擔付費工具,請查看開源替代方案,例如OWASP依賴關系檢查,以至少找到易受攻擊的組件。
8.盡可能執行代碼審查
一個任務是執行代碼審查作為sprint的一部分。這里發現的任何問題都會在沖刺結束時成為錯誤。
9.衡量風險并確定優先順序
產品所有者 - 或者在決策中執行此指定角色的人 - 應具有適當的安全背景,以了解問題并能夠優先考慮那些需要很高關注的問題。
10.準備安全性代碼骨干
環境的任何更改(QA / UAT / PROD)都應該使用代碼手動完成。配置的所有更改都應該通過代碼,使用源存儲庫并跟蹤所有更改。這可以通過任何流行的構建,源代碼和部署工具來實現。這是代碼安全概念的支柱。
縱觀整個過程,DevOps管道應側重于嵌入自動化持續交付過程的活動。以下是關注的內容:
- 所有環境中的配置更改都應該由源控制和同行評審。
- 構建過程應該自動化集成和部署。
- 在考慮安全性的情況下仔細檢查容器的配置。
- 應將SAST工具集成到構建過程中,并將發現的問題反饋到sprint中。
11.定期評估,沖洗并重復
進行SAMM評估會議以檢查您實施安全性的完整程度,并創建特定的短期任務來實現此目標。一步一步是關鍵。
左移可以幫助你保持領先
向左移動的組織在發現缺陷方面更有效,修復它們的損失和成本低于開發人員部署應用程序時,或者在發布應用程序之后。
但快速交付的壓力使設計的安全性變得更加困難。 DevOps團隊有責任在短時間內驗證安全要求。 “作為代碼的安全性”可以在這方面發揮重要作用,因為它有助于自動化安全部署過程,使過程更容易,更快。