當(dāng)前位置:全球供應(yīng)網(wǎng) > 技術(shù)中心 > 所有分類
隨著微服務(wù)架構(gòu)在業(yè)內(nèi)的盛行,很多企業(yè)也實現(xiàn)了DevOps的落地,那么就可以實現(xiàn)持續(xù)交付了嗎?沒那么簡單,如果想要充分發(fā)揮出DevOps的敏捷性和響應(yīng)力,必須在整個生命周期內(nèi)兼顧安全性。在傳統(tǒng)軟件開發(fā)過程中,安全往往在開發(fā)的最后階段由特定的團隊來負(fù)責(zé),企業(yè)軟件產(chǎn)品在發(fā)布前,才會通知安全團隊對系統(tǒng)進(jìn)行安全測試,當(dāng)開發(fā)周期長達(dá)幾個月、甚至幾年時,上述做法沒太大問題?,F(xiàn)在有效的DevOps可順利推進(jìn)快速頻繁的開發(fā)周期,安全性的滯后抑制了 DevOps 的敏捷性。企業(yè)真正要實現(xiàn)的是DevSecOps,畢竟安全穩(wěn)定快速發(fā)布才是。
DevSecOps 是 Gartner 在2012年的一份報告中提出的概念。在這份報告中,Gartner 提出需將安全理念融入到 DevOps 的實踐中,提高企業(yè)安全意識,企業(yè)價值。因為調(diào)查發(fā)現(xiàn)大約80%的安全問題發(fā)生在應(yīng)用層,而企業(yè)在應(yīng)用層的投入又相對匱乏。以下問題在軟件企業(yè)普遍存在:
1. 問題后置:往往產(chǎn)品發(fā)布之后發(fā)現(xiàn)安全漏洞,而損失已經(jīng)發(fā)生。
2. 漏洞重復(fù)出現(xiàn):同樣的漏洞會在不同團隊多次出現(xiàn),無法分析漏洞影響范圍,缺少統(tǒng)一監(jiān)管以及漏洞數(shù)據(jù)的積累。
3. 大量第三方漏洞,易攻擊,排查困難:往往安全漏洞出現(xiàn)在外部,如第三方依賴,中間件等等,而該類漏洞一經(jīng)出現(xiàn),最易攻擊。
4. 二次故障:發(fā)現(xiàn)漏洞后回滾或更新系統(tǒng),進(jìn)而影響到被依賴的系統(tǒng),造成二次損失。
5. 開發(fā)人員安全意識弱:SQL 注入等漏洞導(dǎo)致數(shù)據(jù)泄漏等。
當(dāng)然僅有DevOps還不能實現(xiàn)完整的軟件安全評估,人工的滲透測試依然。
哪些安全測試適合DevOps中做呢?
代碼提交前的自動化的靜態(tài)代碼掃描、依賴掃描、動態(tài)系統(tǒng)掃描以及初級的滲透測試都推薦在DevOps中實現(xiàn)。
那么秉著持續(xù)掃描、持續(xù)反饋、即時告警的思想,安全和DevOps的結(jié)合會是如下這樣:
首先是代碼提交前的靜態(tài)代碼安全掃描,靜態(tài)代碼安全掃描相對成熟和容易實施,推薦使用SonarQube(/),一個開源的代碼質(zhì)量管理平臺,可以掃描代碼規(guī)范、重復(fù)代碼、單元測試覆蓋率(pmd-cpd,checkstyle,findbugs)等問題,集成簡單,通過Pipeline的Junit插件與Jenkins集成,詳細(xì)步驟可參考。
其次是構(gòu)建時的依賴組件掃描,在當(dāng)下軟件應(yīng)用的開發(fā)過程當(dāng)中,自研的內(nèi)部代碼所占的比例逐步地減少,開源的框架和共用庫已經(jīng)得到了廣泛的引用,據(jù)不統(tǒng)計,現(xiàn)在有78%的企業(yè)都在使用開源軟件。但是,大家在享受開源軟件帶來的研發(fā)便利的同時,是否也意識到開源軟件帶來的安全隱患呢?下圖的統(tǒng)計數(shù)據(jù)表明,安全性并不是開源軟件維護(hù)者的維護(hù)重點,這樣的現(xiàn)狀導(dǎo)致我們常用的開源軟件庫包含了各種各樣的安全漏洞,們已逐漸把開源軟件作為了主要的攻擊目標(biāo)。
要保證我們上線應(yīng)用的安全,必須進(jìn)行依賴包安全掃描,推薦使用Xray(https://jfrog.com/xray/)可以掃描二進(jìn)制包安全漏洞,且可以做到深度掃描,掃描依賴的依賴,并且結(jié)合開源漏洞數(shù)據(jù)源(NVD)和 Snyk 提供的漏洞數(shù)據(jù)源對整個軟件樹進(jìn)行安全分析。
最后就是構(gòu)建后的動態(tài)系統(tǒng)掃描以及初級的滲透測試,初級滲透測試有主動掃描和被動掃描。推薦使用被動掃描,基本原理是設(shè)置掃描工具為一個Proxy Server,功能測試通過這個代理服務(wù)訪問系統(tǒng),掃描工具可以截獲所有的交互數(shù)據(jù)并進(jìn)行分析,通過與已知安全問題進(jìn)行模式匹配,從而發(fā)現(xiàn)系統(tǒng)中可能的安全缺陷。建議將被動掃描和自動化測試結(jié)合,在運行自動化功能測試的時候使用被動掃描方法,從而實現(xiàn)動態(tài)安全掃描。
主動掃描(初級滲透)是給定需要掃描的系統(tǒng)地址,掃描工具通過訪問這個地址,使用各種已知漏洞模型進(jìn)行訪問,并根據(jù)系統(tǒng)返回的結(jié)果判定系統(tǒng)存在哪些漏洞;或者在訪問請求中嵌入各種隨機數(shù)據(jù)的模糊,測試進(jìn)行一些簡單的滲透性測試和弱口令測試等。主動掃描覆蓋測試面會比較大,但缺點是完成一次全面掃描非常耗時,一般都需要幾個小時,這種不適合在pipeline中進(jìn)行集成在每次發(fā)布的時候做,建議單獨建立job定時掃描然后查看掃描報告。
經(jīng)過以上步驟就可以做持續(xù)交付了,充分發(fā)揮DevOps的敏捷性和響應(yīng)力。
DevSecOps的落地需要開發(fā)、測試、安全和運維人員的通力合作,站在對方的視角客觀看待問題,將DevOps 和安全理念融合,落地確實不易,但是我們做到了,在統(tǒng)一身份認(rèn)證系統(tǒng)(ESC5)的研發(fā)過程中,堅持做代碼提交前的靜態(tài)掃描,構(gòu)建時的依賴組件掃描,編譯后全套的自動化測試用例結(jié)合系統(tǒng)動態(tài)掃描和滲透測試,鑄就了統(tǒng)一身份認(rèn)證系統(tǒng)安全的壁壘,在今年6月份的“護(hù)網(wǎng)行動”中,防住了“攻方”的惡意攻擊,成功為多家企業(yè)安全護(hù)航。