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