淺談如何有效落地DevSecOps
前言
隨著業務更新迭代速度加快,對客系統增多,大部分企業因安全資源有限等原因,在信息系統開發生命周期中往往忽略了安全活動,或者僅在運行階段才開展安全活動,造成多種問題難以解決:
安全問題暴露時間長
大部分企業信息安全人員工作更多的是應急處理信息系統運行時出現的安全問題,屬于事后的安全問題處理,未在信息系統建設開始時實施相關安全活動使安全問題較早解決。安全活動滯后,增加了信息系統安全問題的暴露時間。
安全問題整改成本較高
目前企業的安全人員通常是在系統上線或運行時才開始介入安全活動,安全問題在此階段被集中發現。由于漏洞多是在上線前一刻或者運行時被發現,安全問題數量往往較多,而且此階段對安全問題進行整改,需重新安排人力和時間,增加了安全問題的整改成本,影響了信息系統上線進度。
安全活動無重點
企業信息資產較多,安全工具自動化不足或集成程度不高,信息安全人員較多沉浸在資產的日常安全維護中,讓信息安全人員處于非常被動狀態中。實施安全活動無計劃,無重點,不成體系化,而且實施效果不盡人意。
安全人員力不從心
企業專職安全人員非常有限,在安全上的人力投入無法和互聯網公司相比,但卻又和互聯網公司面臨一樣的安全風險。再加上行業監管要求高,在眾多風險面前,往往讓安全人員力不從心。
"速度"和風險難以平衡
開發交付團隊,甚至管理層過度地強調“速度",隨著發布速度和頻率不斷增加,傳統的應用程序安全團隊無法跟上發布的步伐,以確保每個發布都是安全的。
為了解決這個問題,企業需要在開發過程中每個階段持續構建安全性,以便DevOps團隊能夠快速、高質量地交付安全的應用程序。越早地將安全性引入到工作流中,就能越早地識別和彌補安全性缺陷和漏洞。這個概念是“shiftleft”的一部分,它將安全測試轉移給功能測試人員甚至是開發人員,使他們能夠幾乎實時地修復代碼中的安全問題。通過DevSecOps,企業可以將安全性無縫地集成到他們現有的持續集成和持續交付(CI/CD)實踐中。
DevOps?
在了解DevSecOps前,讓我們先來了解一下DevOps。
DevOps由三個部分組成:組織文化、流程、技術和工具,幫助開發和IT運營團隊以一種比傳統軟件開發過程更快、更敏捷、更迭代的方式構建、測試和發布軟件。
根據DevOps手冊,“在DevOps的理念中,開發人員會收到關于他們工作的快速、持續的反饋,這使他們能夠快速、獨立地實現、集成和驗證他們的代碼,并將代碼部署到生產環境中。
簡單來說,DevOps就是要消除兩個傳統的豎井團隊(開發和運營)之間的障礙。在DevOps模型中,開發和運營團隊在整個軟件應用生命周期中共同工作,從開發、測試、部署到運營。
DevSecOps是什么?why?
DevSecOps是Gartner 2012年在一份報告中提出的概念,是應用程序安全(AppSec)領域的一個相對較新的術語。它通過在DevOps活動中擴大開發和操作團隊之間的緊密協作,將安全團隊也包括進來,從而在軟件開發生命周期(SDLC)的早期引入安全。
DevSecOps意味著安全是每個人的共同責任,每個參與SDLC的人都在將安全性構建到DevOps CI/CD的工作中發揮作用。
DevOps關注的是應用交付的速度,而DevSecOps通過盡可能快地交付盡可能安全的應用來提高速度和安全性。
Devops為開發團隊帶來更快、更好的協作,可以在幾天到幾周內交付和部署軟件,然而快速創新與安全性的沖突,讓安全性成為Devops的瓶頸。
DevSecOps(DevOps+Sec=DevSecops)通過在DevOps流程的每個階段或檢查點構建安全性來消除DevOps和信息安全之間的障礙,從而更快更安全地生成高質量的代碼。
根據DevSecOps的理念,企業應將安全集成到DevOps生命周期的每個部分,包括初始、設計、構建、測試、發布、支持、維護等等。在DevSecOps中,安全是DevOps價值鏈中每個人的共同責任。DevSecOps涉及開發、發布管理(或運營)和安全團隊之間持續的、靈活的協作。 ·
DevSecOps可以更早地、有目的地將安全性融入SDLC中,如果開發組織從一開始就將安全性考慮在代碼中,那么在漏洞進入生產環境之前或發布之后發現并修復它們會更容易,成本也更低。
DevSecOps工具
DevSecOps工具是整個DevSecOps的核心。它通過掃描開發代碼、模擬攻擊行為,從而幫助開發團隊發現開發過程中潛在的安全漏洞。
從安全的角度來看,DevSecOps工具可以劃分為以下四類:
靜態應用安全檢測工具(SAST)
靜態應用程序安全測試(Static Application Security Testing,SAST)技術通常在編碼階段分析應用程序的源代碼或二進制文件的語法、結構、過程、接口等來發現程序代碼存在的安全漏洞。SAST主要用于白盒測試,檢測問題類型豐富,可精準定位安全漏洞代碼,比較容易被程序員接受。但是其誤報多,耗費的人工成本高,掃描時間隨著代碼量的增多顯著增長。相關的工具有:Checkmarx,Fortify,代碼衛士等。
動態應用安全檢測工具(DAST)
動態應用程序安全測試(Dynamic Application Security Testing)技術在測試或運行階段分析應用程序的動態運行狀態。它模擬黑客行為對應用程序進行動態攻擊,分析應用程序的反應,從而確定該Web應用是否易受攻擊。這種工具不區分測試對象的實現語言,采用攻擊特征庫來做漏洞發現與驗證,能發現大部分的高風險問題,因此是業界Web安全測試使用非常普遍的一種安全測試方案。但是由于該類工具對測試人員有一定的專業要求,大部分不能被自動化,在測試過程中產生的臟數據會污染業務測試數據,且無法定位漏洞的具體位置等特點,不適合DevSecOps環境使用。相關工具有:AWVS、Burpsuite、OWASP ZAP等。
交互式應用安全檢測工具(IAST)
交互式應用程序安全測試(Interactive Application Security Testing)是2012年Gartner公司提出的一種新的應用程序安全測試方案,通過在服務端部署Agent程序,收集、監控Web應用程序運行時函數執行、數據傳輸,并與掃描器端進行實時交互,高效、準確的識別安全缺陷及漏洞,同時可準確確定漏洞所在的代碼文件、行數、函數及參數。IAST相當于是DAST和SAST結合的一種互相關聯運行時安全檢測技術。IAST的檢測效率、精準度較高,并且能準確定位漏洞位置、漏洞信息詳細度較高。但是其部署成本略高、且其無法測試業務邏輯漏洞。相關的工具有:Contrast Security、默安IAST、懸鏡等。
開源軟件安全工具(FOSS)
現在很多開源軟件安全工具已經比較成熟了,比較著名的有:X-ray、Sonatype IQ Server、Dependencies Check等。
一般情況下,選用功能齊全的IAST或DAST即可解決大部分安全問題,想要進一步左移,可繼續推進SAST和FOSS的建設,將漏洞發現提前到開發階段。
這里有一點需要提一下,工具解決的只是通用漏洞方面的問題,對于邏輯比較強的邏輯漏洞,例如0元支付這類邏輯漏洞,則需要上線前的人工安全測試去發現和解決,或者在設計階段通過安全需求進行規避。
DevSecOps具體實踐
DevSecOps的關鍵在于CI/CD流程的安全嵌入,筆者根據實踐經驗,繪制了DevSecOps自動化安全測試流程圖如下,供大家參考。
在需求分析階段,將需求管理平臺Confluence接入JIRA,由JIRA獲取到需求和任務排期,向開發人員下達開發任務。在系統開發之前,為保證應用的安全,可對開發人員進行信息安全知識培訓和必要的安全編碼技能的培訓,此處可利用一些在線的課程、或者在線安全平臺:Secure Code Warrior。在安全培訓周期方面,要全方位、多角度的,既有新人初期培訓,也有周期性的培訓,還要密切觀察開發人員出現的問題并及時給予有針對性的專題培訓,方便研發人員在了解漏洞原理之后,能寫出高質量、安全的代碼。
開發人員接收到JIRA下發的開發任務,根據《編碼安全指南》,進行系統開發。在開發階段,通過在IDE中引入開源組件&內部依賴組件安全掃描。若發現風險組件,通過同步到JIRA通知開發人員。在系統開發完成之后,開發人員通過GIT/SVN將代碼提交到代碼倉庫。當代碼被提交到代碼倉庫之后觸發SAST進行增量源代碼安全掃描,并將風險同步到JIRA。除此之外SAST也會對代碼倉庫進行周期巡檢。這里,可將安全編碼基線要求配置成為源代碼安全檢查工具掃描規則,使通過源代碼安全工具掃描的源代碼,確保其能夠符合安全編碼要求。
在代碼完成自動構建時,自動對構建代碼進行安全掃描,若掃描發現缺陷,將缺陷信息同步至JIRA,由JIRA推送至研發人員,同時終止流水線作業。待研發人員完成缺陷修復后,再新重啟發起自動發布流水線。為減少因源代碼缺陷導致流水線頻繁中止重啟,建議在編碼過程,每日代碼歸并時自動開展源代碼安全掃描,在發布前發現并修復代碼中存在的缺陷。
在測試階段,利用交互式安全檢測工具在單元測試、回歸測試時,自動收集測試流量,針對測試流量進行分析和自動構建漏洞測試請求,在開展功能測試的同時,即可完成安全測試。若發現漏洞可實時同步到JIRA,并由JIRA將漏洞信息推送研發團隊。
總結
DevSecOps是組織文化、流程和技術的統一。如何有效落地離不開這三個方面的內容:
組織文化
人和文化特別重要,DevSecops的落地不僅需要上級領導甚至最高領導的重視和投入,還需要業務團隊對安全的重視,“自上而下”而不是“自下而上”,在落地過程中和不同部門的團隊協作也是非常重要的。
工具鏈的建設
工具鏈建設是整個DevSecOps的核心。軟件開發是一個復雜的問題,需要DevSecOps提供相應的自動化工具支持,關鍵是CI/CD流程的安全嵌入。
流程和體系的建立
傳統的IT治理模型、流程不適合跨團隊協作。如何解決各個開發團隊之間的溝通、協作,需要結合自己的業務情況去制定。