1. 程式人生 > 實用技巧 >DevSecOps - DevOps 與 安全理念的碰撞

DevSecOps - DevOps 與 安全理念的碰撞

DevOps 作為軟體交付生命週期管理領域的方法論,已經被越來越多的IT企業所接受。它所帶來的業務價值也是毋庸置疑的,“1天N次部署”、從程式碼到上線只需數十分鐘甚至幾分鐘。DevOps 已經逐漸成為更多企業軟體開發及運維成熟度的新標杆。

而隨著 DevOps 的落地,軟體交付速度不斷提升,安全問題也越來越凸顯,而在傳統軟體開發過程中,安全往往是處於最後的一步,企業軟體系統在上線前,才會通知安全人員對系統進行安全測試,甚至沒有經過任何安全檢測,事故頻發,以下是企業安全常見痛點:

1. 問題後置:往往系統上線之後發現安全漏洞,而損失已經發生。

2. 漏洞重複出現:同樣的漏洞會在不同團隊多次出現,無法分析漏洞影響範圍,缺少統一監管以及漏洞資料的積累。

3. 大量第三方漏洞,易***,排查困難:往往安全漏洞出現在外部,如第三方依賴,中介軟體,基礎作業系統等等,而該類漏洞一經出現,最易***。

4. 二次故障:發現漏洞後回滾或更新系統,進而影響到被依賴的系統,造成二次損失。

5. 開發人員安全意識弱:SQL 注入等漏洞導致資料洩漏。

DevSecOps 是 Gartner 在2012年的一份報告中提出的概念。在這份報告中,Gartner 提出將安全理念需要更融入到 DevOps 的實踐中,提高企業安全意識,最大化企業價值。據《2017年 DevSecOps 社群》的調查資料顯示:

  • 67%的IT企業將 DevOps 描述為非常成熟或者提高成熟度;

  • 58%的成熟 DevOps 團隊將自動化安全作為持續整合實踐的一部分;

  • 47%的傳統開發和運營團隊報告安全團隊和政策正在放緩;

而其中58% 的受訪者仍表示安全性抑制了 DevOps 的敏捷性,正如上文中提到的第6個痛點。在我看來這兩者在企業管理中都非常重要,忽略任何一個都可能打擊企業創造價值的能力,穩定快速釋出才是王道。那我們應該如何來兼顧敏捷性和安全性呢?

現在國際上主流的實踐是把安全監管嵌入到了研發和運營整個體系過程中,並引入自動化化的安全機制,貫穿 DevOps 的整個生命週期,今天為大家介紹幾個最佳實踐。

持續掃描,持續反饋,即時告警

軟體開發中,越早修復一個 Bug,那麼修復 Bug 成本的就越低,對與安全漏洞來說也是一樣,但我們不可能在開發階段預知到開發使用哪些組建,因此我們可以在構建過程中將安全機制整合進來,阻止漏洞包交付到生產環境,如下圖

DevSecOps - DevOps 與 安全理念的碰撞


過程(3)包括您常規構建過程,如依賴項解析、構建、測試、釋出到生產倉庫以及部署到測試環境以待測試。當將構建產物釋出到 JFrog Artifactory(步驟4)之後,可以引入一個新的分析步驟(步驟6)到你的流水線中,該步進行二進位制包級別漏洞掃描,根據分析結果,構建將被升級到生產倉庫並部署到生產環境,或者讓此次構建失敗(7/8)。一個失敗的構建會生成漏洞分析報告,列出所有的漏洞和嚴重級別,如下圖:

DevSecOps - DevOps 與 安全理念的碰撞


SOS (Safe Open Source)

傳統開發中,一半都會會依賴大量第三方軟體依賴庫,提高開發效率,但同時也會帶來未知的風險和挑戰,從前端框架 Angular.js, React 到 MongoDb,這些依賴還會有多層級傳遞依賴,形成一個軟體樹,那我們如何監管這些隱藏的第三方依賴呢?上面介紹了 XRay 可以幫助我們掃描二進位制包安全漏洞,並且它可以做到深度掃描,組層掃描依賴的依賴,並且結合開源漏洞資料來源(NVD)和 Snyk 提供的漏洞資料來源對整個軟體樹進行安全分析。更進一步 Snyk 有專門的團隊分析這些已暴露的漏洞,給出修復的建議或者漏洞修復的正確版本,並且可以做到自動化,為我們自動化修復漏洞提供了可能性,幫助我們兼顧敏捷與安全,如下圖:

DevSecOps - DevOps 與 安全理念的碰撞


內容驅動,避免二次故障風險

傳統軟體交付或上線的都是二進位制包,如 War 包,Tar 包,Docker 映象,對於安全監管人員來說是一個黑盒子,那麼我們如何將其透明化,更好更快的發現問題從而提前避免風險呢?上文也提到軟體樹,其實我們每一次正確或失敗的交付物其實都是一顆軟體樹,我們可以充分利用這顆樹的資訊,幫助我們避免二次故障,如下圖:

DevSecOps - DevOps 與 安全理念的碰撞


我們某一次構建發現一個 Struts2 的漏洞(該漏洞允許***執行一個指令碼到我們的伺服器主機上)。我們可以根據歷史構建的軟體正向依賴樹資訊,快速在多個軟體樹中從下往上分析出該漏洞包的反向依賴,找出所有依賴該漏洞的專案,從而通知其他團隊避免使用該漏洞包。進一步,我們還可以結合二進位制倉庫(Artifactory)管理元資料能力,將漏洞資訊繫結到二進位制包上,進而自動阻止該漏洞包的下載行為,例如包含漏洞元資料的二進位制包禁止下載,如下圖:

DevSecOps - DevOps 與 安全理念的碰撞


提高開發人員安全意識

DevSecOps 需要開發、運維和安全這三方面人員的通力合作,站在對方的視角客觀看待問題。具體到開發人員而言,不僅僅需要開發技能,還需要對運維及安全有了解,對運維人員和安全人員也是一樣,需要各自擴充不同領域的通用技能與知識。同時我們可以藉助一些工具或者外掛,在開發階段提前發現隱藏的漏洞,促使開發人員有意識的提高安全意識,如下圖:

DevSecOps - DevOps 與 安全理念的碰撞


總結

今天我們介紹了企業安全中常見的痛點及問題,並且介紹了國際上主流的一些實踐,同時,對於大型企業,會有多個研發團隊,甚至多個研發中心,我們需要統一監管軟體所有交付物,防止漏洞上線到生產環境,並且建立企業漏洞資料中心,不斷積累漏洞資料,引一句名言,你能看到多遠的過去,就可以看到多遠的未來,有了充足的歷史資料可以提高我們交付的信心,穩定快速的釋出,將 DevOps 和安全理念融合,落地 DevSecOps。

作者:劉永強

JFrog 中國技術支援負責人,曾在 HPE,億瑪等公司擔任高階工程師,專注系統架構、軟體 CI/CD 及 Devops 領域,在網際網路平臺建設上有著豐富的經驗,曾服務的客戶有中興通訊,宜人貸,易保科技,順豐等等,並負責過多個網際網路平臺和移動應用的研發和運維工作。


轉載於:https://blog.51cto.com/jfrogchina/2093769