1. 程式人生 > >DevOps 安全威脅,你值得關注!

DevOps 安全威脅,你值得關注!

隨著開源軟體被大量引用,線上執行的程式碼中超過80%的部分是開原始碼。軟體安全的重點已經從內部程式碼轉移到所引用開源部分上。 DevOps安全需要關注內部研發團隊的自研程式碼以及外部第三方開源軟體的安全,對於內部程式碼,所使用的依賴必須清楚,如果底層依賴有風險,還必須快速反向分析哪些其他軟體受到同樣的威脅;目前DevOps安全團隊和持續交付團隊往往獨立執行,資訊互動頻繁且效率低導致質量難以保證,安全問題整改的計劃外工作量大,成為DevOps安全工作常見的痛點。

開源安全威脅日趨嚴重

隨著網際網路化的趨勢日趨普遍,各大中小型企業都會基於開源軟體構建各種業務系統,可以說開源已經成為了目前企業內部構建業務系統的重要組成部分。開源軟體縮短了軟體交付週期的優勢確實很明顯,但是開源軟體的安全性也給企業帶來很多麻煩,尤其是涉及關鍵業務的一些系統。引入開源元件的途徑多種多樣,有可能是開源的原始碼,也有可能是開源的第三方類庫,或者從網際網路上覆制下來的程式碼段。

這裡寫圖片描述

開源軟體進入企業內部之後,還可能被其他團隊繼續使用,在經歷了長時間的開發週期後,某個第三方開源軟體被引用的情況已經變得無從追蹤,一旦某個開源軟體出現問題,影響範圍無從確定,更談不上風險控制。

DevOps 安全問題的維度

DevOps的落地使得軟體交付的頻率大幅度提升,這就進一步使得DevOps安全問題變得更加需要重視。那麼,有哪些層面的安全問題需要考慮呢?

自研程式碼的安全

內部研發的程式碼,建議通過單元測試、靜態掃描等基本手段進行安全合規性檢查。自研程式碼發現問題可以給研發人員指定相應的任務去解決,因為這些程式碼都是自主可控,而開原始碼缺陷基本不可能去修復,這是應對自研程式碼安全威脅的優勢。自研程式碼經過掃描之後,可以知道目前的技術債務(Technical Debt)情況,防止技術債務不停增長。

技術債務類似於金融債務,它也會產生利息,這裡的利息其實就是指由於魯莽的設計決策導致需要在未來的開發中付出更多努力的後果。我們可以選擇繼續支付利息,也可以通過重構之前魯莽的設計來將本金一次付清。雖然一次性付清本金需要代價,但卻可以降低未來的利息。

這裡寫圖片描述

開源的安全問題

傳統開源安全威脅解決手段通常是成立開源技術專家組(委員會),列出目前已知的、企業必須重視的安全威脅列表,在上線前由安全組對交付件進行掃描,發現問題立即進行整改,然後再次反覆此流程直到符合上線安全規範。從目前市場調查的情況來看,開源問題所帶來的威脅遍佈各行各業,且比例呈上升趨勢。

這裡寫圖片描述

從流程上來看,計劃外工作量很大,並且在拔除一個安全威脅後,不清楚目前發現的這些威脅還是否影響到其他軟體。造成這種的原因是交付件的依賴不清晰,導致不能反向排查安全問題的威脅。目前的一些工具(如Eclipse)提供了一些單個專案的依賴檢視,但對於企業內部跨團隊的分析依然顯得能力不足。

這裡寫圖片描述

解決策略

自研程式碼檢查

目前比較流行的SonarQube提供了多種語言的基於靜態規則的掃描,對使用者的行為習慣侵入性極小,支援單元測試結果、程式碼重複率、技術債務等一系列非常有用的指標。很多企業在持續交付流水線中集成了SonarQube靜態程式碼掃描的步驟。

在主流的二進位制倉庫Artifactory上,可以通過元資料將Sonar掃描的結果通過RestApi的方式記錄在交付件上,這樣在任何一個DevOps生命週期,都可以很清晰地知道這個交付件的靜態質量,從而釋出人員可以依據這些資訊制訂合理的質量關卡,方便運維人員篩選合適上線的交付件。

這裡寫圖片描述

第三方開源安全檢查

為避免在上線前緊急排查問題的窘境,必須將安全問題前置,即在構建甚至開發階段發現問題並立即解決問題,再做構建或者測試。目前企業內部都是構建各自的私服,各個私服對於安全管控的能力參差不齊,必須有一種支援各種語言的第三方安全掃描的平臺。

JFrog 公司提供的Artifactory + Xray 就是很好的一個組合。Artifactory提供了全語言的第三方依賴管理,Xray提供安全掃描,針對引入的任何第三方開源元件進行遞迴掃描,並提供視覺化檢視。

這裡寫圖片描述

從上圖中可以發現對於安全威脅給出了級別(高危、中級、低階),並且會由一些推薦的建議,方便及時作出調整。從這個層面解決了某一個軟體引入的開源元件不清晰的問題,比Eclipse等工具的單一檢視豐富很多。

對於開發工具,也可以有本地支援,比如在本地構建時從中央倉庫獲取依賴,並且觸發第三方開源漏洞掃描的過程,立即反饋結果到開發者本地,開發者根據反饋決定是否提交程式碼到版本控制系統(或者內建策略阻止程式碼提交)。

這裡寫圖片描述

對於反向排查安全威脅影響範圍,Xray也有很好的支援,能夠快速反向查詢有哪些其他團隊收到了該問題的威脅,這樣可以及時通知相關團隊進行修正並且不會有任何遺漏。值得一提的是,Xray還支援使用者自定義的Issue,比如舊版本、效能問題等等,也可以據此快速反向排查影響範圍。

這裡寫圖片描述

統一的流程

關於DevOps安全,從流程角度來看,一個重要的痛點是流程割裂,即持續交付團隊和安全團隊難以協作實現真正的24小時持續運作的自動化流程。這個過程中涉及到很多規範的溝通協商,這些溝通依賴於人工來實現,距離如下圖所示的理想流程相去甚遠。

這裡寫圖片描述

目前Xray支援統一的理想流程,幫助企業實現24小時動態監測所有外部依賴是否滿足合規性。具體做法通常是在Jenkins上整合Artifactory,然後呼叫Artifactory 的 XrayScan 進行安全掃描。

stage('XrayScan') {
        def scanConfig = [
            'buildName'     : buildInfo.name,
            'buildNumber'   : buildInfo.number,
            'failBuild'     : true
        ]
        def scanResult = artiServer.xrayScan scanConfig
        echo scanResult as String
}

為了儘可能早地發現和解決研發依賴的安全問題,我們提供了IDE的外掛,開發人員在引入依賴的時候,我們就會對其進行深度遞迴掃描,對相應安全的風險進行提示,確保開發人員可以有信心地引用第三方源。

這裡寫圖片描述

總結

安全是一個永久的話題,我們只有日趨接近,無法真正到達。DevOps的逐漸落地使得軟體交付頻率達到了前所未有的速度,對於DevOps過程中的安全管控提出了更嚴峻的挑戰,只有自動化的統一流程結合全面深入的安全掃描才能夠實現對任何一個安全細節都兼顧到,並且可以快速瞭解安全問題的影響範圍。在這方面Artifactory + Xray 方案顯然已經走在了前面,除了自身的掃描能力,也自持BlackDuck、aqua、whitesource、snyk等一系列主流安全漏洞掃描工具,值得大家關注與試用。