許多人認(rèn)為應(yīng)用安全僅僅應(yīng)該是安全團(tuán)隊(duì)的責(zé)任。然而,雖然安全專家可以對(duì)此做出貢獻(xiàn),開(kāi)發(fā)人員通常是唯一具備修復(fù)軟件安全漏洞的技術(shù)能力的人。軟件合規(guī)性也是如此。歸根結(jié)底,只有開(kāi)發(fā)人員才能構(gòu)建符合特定軟件標(biāo)準(zhǔn)的應(yīng)用程序。
考慮到開(kāi)發(fā)團(tuán)隊(duì)的緊迫期限,給他們額外的職責(zé)可能會(huì)帶來(lái)挑戰(zhàn)。為了幫助開(kāi)發(fā)人員在不降低速度的情況下交付安全的應(yīng)用程序,許多團(tuán)隊(duì)采用了DevSecOps,鼓勵(lì)將自動(dòng)安全測(cè)試集成到每個(gè)版本的DevOps工作流程中。
DevSecOps幫助團(tuán)隊(duì)更快地交付更安全的軟件,但是否是更加符合合規(guī)性的軟件呢?許多嘗試實(shí)現(xiàn)軟件合規(guī)性的團(tuán)隊(duì)遇到了與試圖實(shí)現(xiàn)軟件安全性的團(tuán)隊(duì)相似的挑戰(zhàn)。幸運(yùn)的是,他們可以采用相似的策略。
DevSecOps的作用是什么?
DevOps工作流程支持快速迭代的軟件發(fā)布周期,這給軟件安全帶來(lái)了一定障礙。
在保護(hù)軟件安全的傳統(tǒng)方法中,測(cè)試是在應(yīng)用程序構(gòu)建之后,軟件開(kāi)發(fā)生命周期結(jié)束之后才進(jìn)行的。結(jié)果,大多數(shù)(如果不是全部的話)應(yīng)用程序同時(shí)測(cè)試,并且將一長(zhǎng)串、令人生畏的安全問(wèn)題清單發(fā)回給開(kāi)發(fā)人員。
然而,許多團(tuán)隊(duì)發(fā)現(xiàn)這種方法與DevOps不兼容。開(kāi)發(fā)團(tuán)隊(duì)沒(méi)有時(shí)間,更不用說(shuō)預(yù)算,來(lái)停止他們正在做的事情去處理一大堆表格中的問(wèn)題。
為了解決這個(gè)問(wèn)題,企業(yè)可以通過(guò)將安全測(cè)試集成到DevOps發(fā)布周期更短的、更高頻率的反饋循環(huán)中,以實(shí)現(xiàn)DevSecOps。DevSecOps要求在早期經(jīng)常執(zhí)行自動(dòng)安全測(cè)試,而不是在開(kāi)發(fā)人員完成構(gòu)建應(yīng)用程序之后運(yùn)行大型的測(cè)試。通過(guò)幫助開(kāi)發(fā)人員編入更安全的代碼,DevSecOps有助于減少質(zhì)量保證(QA)必須識(shí)別以及發(fā)回來(lái)的問(wèn)題數(shù)量。
如果開(kāi)發(fā)團(tuán)隊(duì)可以將安全測(cè)試集成到DevOps工作流程中,為什么不將合規(guī)性測(cè)試也集成到DevOps工作流程中呢?
如何將DevSecOps實(shí)踐應(yīng)用到軟件合規(guī)性中?
雖然安全測(cè)試通常與合規(guī)性測(cè)試要求不一樣的分析方法,但是嘗試DevSecOps的開(kāi)發(fā)團(tuán)隊(duì)可以使用類似的方法來(lái)進(jìn)行合規(guī)性測(cè)試。
正如傳統(tǒng)的應(yīng)用安全測(cè)試一樣,合規(guī)性測(cè)試通常發(fā)生在QA環(huán)境中。大致的應(yīng)用開(kāi)發(fā)和測(cè)試流程如下所示:
1. 開(kāi)發(fā)人員編寫(xiě)應(yīng)用程序的代碼
2. QA在開(kāi)發(fā)人員轉(zhuǎn)移到另一個(gè)項(xiàng)目時(shí)測(cè)試代碼
3. QA向開(kāi)發(fā)人員發(fā)送一份違反合規(guī)性的列表,要求他們暫停當(dāng)前的工作,先解決這些問(wèn)題
這種合規(guī)性測(cè)試策略在技術(shù)上并沒(méi)有什么問(wèn)題。然而,這種方法并不受開(kāi)發(fā)人員歡迎,如果問(wèn)題列表特別長(zhǎng),對(duì)于開(kāi)發(fā)團(tuán)隊(duì)來(lái)說(shuō)可謂代價(jià)高昂。為了在應(yīng)用程序完成之前解決更多的合規(guī)性問(wèn)題,團(tuán)隊(duì)可以實(shí)施受DevSecOps啟發(fā)的實(shí)踐,來(lái)幫助開(kāi)發(fā)人員在軟件開(kāi)發(fā)生命周期(SDLC)早期提交合規(guī)性代碼。
策略之一是將自動(dòng)合規(guī)性測(cè)試集成到DevOps發(fā)布周期中。通過(guò)定期測(cè)試而不是一次性測(cè)試應(yīng)用程序,團(tuán)隊(duì)可以減少每個(gè)測(cè)試周期違規(guī)的數(shù)量。顯然它需要在整個(gè)SDLC中進(jìn)行更高頻率的測(cè)試,事實(shí)證明這種方法比在QA中找到問(wèn)題更快。
另一種方法是在集成開(kāi)發(fā)環(huán)境(IDE)中創(chuàng)建沙箱環(huán)境,開(kāi)發(fā)人員可以自己在其中運(yùn)行測(cè)試。在編寫(xiě)代碼時(shí)測(cè)試他們自己寫(xiě)的代碼,使開(kāi)發(fā)人員能夠編入更清晰、更合規(guī)的代碼,
因此違規(guī)就不太可能出現(xiàn)在QA中或者更糟出現(xiàn)在生產(chǎn)中。這種方法另一個(gè)好處是幫助開(kāi)發(fā)人員熟悉可能導(dǎo)致違規(guī)行為的代碼。
這些識(shí)別和解決違規(guī)問(wèn)題的策略并不意味著要取代QA測(cè)試。然而,通過(guò)將合規(guī)性測(cè)試集成到SDLC的多個(gè)階段,團(tuán)隊(duì)將在QA和開(kāi)發(fā)的反饋循環(huán)中看到更少的問(wèn)題,這將會(huì)更好地支持DevOps工作流程。
在現(xiàn)實(shí)中又是怎樣的情況呢?
就像安全測(cè)試一樣,將合規(guī)性測(cè)試集成到DevOps發(fā)布周期需要新的技術(shù)和工作流程,它們都有不同的學(xué)習(xí)曲線。
關(guān)于技術(shù),靜態(tài)分析正成為幫助開(kāi)發(fā)團(tuán)隊(duì)構(gòu)建合規(guī)應(yīng)用程序的流行的選擇方式。靜態(tài)分析工具之間的覆蓋范圍各不相同,但是總體而言,該技術(shù)可以在代碼質(zhì)量標(biāo)準(zhǔn)中發(fā)現(xiàn)問(wèn)題,比如MISRA 和CERT C/C++,以及安全標(biāo)準(zhǔn),比如OWASP Top 10和 PCI DSS。
團(tuán)隊(duì)選擇的用來(lái)解決合規(guī)性問(wèn)題的靜態(tài)分析工具或者其他的任何技術(shù)在他們采用的工作流程中發(fā)揮著重要作用。如前所述,那些希望將問(wèn)題排除在QA之外的人希望找到解決方案從而能夠:
1. 將快速反饋循環(huán)集成到測(cè)試和開(kāi)發(fā)中
2. 在開(kāi)發(fā)人員編寫(xiě)代碼時(shí)在IDE中掃描代碼
在測(cè)試和開(kāi)發(fā)之間構(gòu)建一個(gè)持續(xù)的反饋循環(huán)可能代表了開(kāi)發(fā)人員日常工作的重大轉(zhuǎn)變。
雖然“DevSecOps”并不完全相同,但是受管制行業(yè)的開(kāi)發(fā)團(tuán)隊(duì)可以通過(guò)將合規(guī)性測(cè)試集成到DevOps發(fā)布周期中來(lái)獲得降低成本的益處。