作者:新思科技高級安全策略師Jonathan Knudsen
飛象網訊 現代軟件開發具有更多的代碼、語言、平臺以及部署選項。 DevOps要求自動化最大限度地提高速度。而這些都意味著更多的安全風險。因此,DevSecOps開始受到關注,將安全集成到DevOps管道的每個階段,統一開發活動、操作支持和安全檢查,并協調軟件開發生命周期(SDLC)中涉及的團隊。自動化之間有助于提升團隊之間的協同作用。
新思科技(Synopsys)近期發布的《2020年DevSecOps實踐和開源管理報告》顯示DevSecOps在全球范圍內迅速增長。總計63%的受訪者表示他們正在將一些DevSecOps活動融入其軟件開發計劃中。
那么,如何將安全置于DevOps之中呢?
引入DevSecOps
向DevSecOps過渡極具挑戰性。一方面,雖然目前主要是安全小組獨立地負責安全,但逐漸開發團隊也參與進來,共同負責安全和預算,使安全成為開發流程不可或缺的一部分;另一方面,開發團隊正在通過自動化和持續改進流程來優化速度,實踐DevOps。
許多團隊缺乏全盤計劃,忽視了管理風險。團隊沒有采取審慎的、深思熟慮的方法來提高安全,而是陷入一種僵局。團隊試圖使一切運行得足夠快,以跟上DevOps的步伐,但由于信息量太大,以至于他們不知道從哪里開始才能改善流程。
在不影響速度的情況下為DevOps增加安全
從切實降低風險的角度出發,從整體上解決安全問題的最佳方法是什么?答案是更高效的自動化。開發人員不必在每次更改代碼時都運行全面掃描,而是根據上下文使用智能測試,并決定要運行的內容、運行時間以及運行方式。
逐步提升安全
讓我們看一下軟件開發中安全測試的典型演變。也許從部署靜態應用安全測試(SAST)開始。僅分析集成就有許多可能性:
分析每次提交
分析每個推送請求
分析主要版本
選擇分析檢查器
配置分析檢查器
接下來,您決定進一步提升安全性,添加軟件組成分析(SCA)。您可以將其單獨集成到管道中,但是仍然有很多其它選擇:
掃描應用程序
掃描部署容器
選擇掃描粒度和其他配置選項
識別通用漏洞披露(CVE)公布有違反政策的組件
識別CVE公布的組件在通用漏洞評分系統(CVSS)的評分
識別操作風險高的組件
識別有一定許可證風險的組件
將掃描結果的總結上傳到風險追蹤系統
每個不符合要求的組件信息都將發送到風險追蹤系統
將策略當作代碼
策略很重要。要求所有應用程序開發團隊使用靜態分析是一種簡單但無效的軟件安全策略。更有效的策略應該根據需要指定要使用的工具、所需的配置,最重要的是,可以指定在發布應用程序之前所需的結果類型。
闡明策略的好方法是采用機器可讀文件的形式,有時將其稱為代碼(我實際上并沒有將其稱為代碼;它實際上是一個配置文件,可能是JSON或YAML)。
DevSecOps中安全層的關鍵功能
這里的“策略”描述了應該進行哪些測試、規定需要什么樣的結果(或將停止構建或部署)、將什么樣的結果發送到常規問題追蹤系統、需要進行哪些合規性活動等等。可以有多個策略,每個策略反映不同類型的應用程序和不同類型的風險狀況。
根據策略的規定在開發管道中的特定事件上執行相應的測試,但是針對項目的當前狀態進行了優化。安全層處理與工具的集成。
與安全層的輕量級集成發生在特定事件(例如合并請求)上。安全層旨在簡化集成。
什么時候應該做安全防護呢?在發生代碼倉提交或代碼倉合并請求之類的事件時,管道會要求安全層執行安全測試。安全層可以發揮一些強大的魔力,我們稱之為智能編排(Intelligent Orchestration)。首先,它參考策略來了解哪種安全測試是適合的。根據策略,安全層可以優化測試的執行方式。例如,如果開發人員剛剛對CSS文件進行了更改,那么Intelligent Orchestration會意識到完整的SAST掃描和SCA掃描是不必要的。對于更改特定模塊中的幾個Java源文件,可以執行增量SAST以優化速度。
那是否合規呢?開發管道可以要求安全層對項目是否合規做出判斷。
我們如何處理安全問題?可以按嚴重性對結果進行分類,通過CWE Top 25或OWASP Top 10進行檢查,也可以根據需要進行過濾和排序。您可以將結果整合到Tableau或Power BI之類的分析工具中。您可以制作圖表,顯示隨著團隊努力解決安全問題而使得錯誤(和風險)下降的趨勢。
使用安全集成層還可以簡化添加新的安全測試工具或替換現有工具的流程。每個新工具都集成到安全層中,但是開發管道和安全層之間的接口保持不變。
為未來做好準備
軟件安全是一個蓬勃發展的領域。如果您試圖建立DevSecOps策略,那么確定所需的工具和流程可能會面臨挑戰。有了安全層,您開發過程中的集成就不需要更改。您只需要從安全層集成到新工具,然后調整策略即可。