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