En 400-6655-581
5
返回列表
> 資源中心 > 技術(shù)干貨 | 持續(xù)集成與持續(xù)交付之間相差一個(gè)“安全”

技術(shù)干貨 | 持續(xù)集成與持續(xù)交付之間相差一個(gè)“安全”

2019-11-29瀏覽次數(shù):1303

隨著微服務(wù)架構(gòu)在業(yè)內(nèi)的盛行,很多企業(yè)也實(shí)現(xiàn)了DevOps的落地,那么就可以實(shí)現(xiàn)持續(xù)交付了嗎?沒(méi)那么簡(jiǎn)單,如果想要充分發(fā)揮出DevOps的敏捷性和響應(yīng)力,必須在整個(gè)生命周期內(nèi)兼顧安全性。在傳統(tǒng)軟件開(kāi)發(fā)過(guò)程中,安全往往在開(kāi)發(fā)的最后階段由特定的團(tuán)隊(duì)來(lái)負(fù)責(zé),企業(yè)軟件產(chǎn)品在發(fā)布前,才會(huì)通知安全團(tuán)隊(duì)對(duì)系統(tǒng)進(jìn)行安全測(cè)試,當(dāng)開(kāi)發(fā)周期長(zhǎng)達(dá)幾個(gè)月、甚至幾年時(shí),上述做法沒(méi)太大問(wèn)題。現(xiàn)在有效的DevOps可順利推進(jìn)快速頻繁的開(kāi)發(fā)周期,安全性的滯后抑制了 DevOps 的敏捷性。企業(yè)真正要實(shí)現(xiàn)的是DevSecOps,畢竟安全穩(wěn)定快速發(fā)布才是王道。


DevSecOps是什么?


DevSecOps 是 Gartner 在2012年的一份報(bào)告中提出的概念。在這份報(bào)告中,Gartner 提出需將安全理念融入到 DevOps 的實(shí)踐中,提高企業(yè)安全意識(shí),最大化企業(yè)價(jià)值。因?yàn)檎{(diào)查發(fā)現(xiàn)大約80%的安全問(wèn)題發(fā)生在應(yīng)用層,而企業(yè)在應(yīng)用層的投入又相對(duì)匱乏。以下問(wèn)題在軟件企業(yè)普遍存在:


1. 問(wèn)題后置:往往產(chǎn)品發(fā)布之后發(fā)現(xiàn)安全漏洞,而損失已經(jīng)發(fā)生。


2. 漏洞重復(fù)出現(xiàn):同樣的漏洞會(huì)在不同團(tuán)隊(duì)多次出現(xiàn),無(wú)法分析漏洞影響范圍,缺少統(tǒng)一監(jiān)管以及漏洞數(shù)據(jù)的積累。


3. 大量第三方漏洞,易攻擊,排查困難:往往安全漏洞出現(xiàn)在外部,如第三方依賴(lài),中間件等等,而該類(lèi)漏洞一經(jīng)出現(xiàn),最易攻擊。


4. 二次故障:發(fā)現(xiàn)漏洞后回滾或更新系統(tǒng),進(jìn)而影響到被依賴(lài)的系統(tǒng),造成二次損失。


5. 開(kāi)發(fā)人員安全意識(shí)弱:SQL 注入等漏洞導(dǎo)致數(shù)據(jù)泄漏等。


DevSecOps推薦實(shí)踐


當(dāng)然僅有DevOps還不能實(shí)現(xiàn)完整的軟件安全評(píng)估,人工的滲透測(cè)試依然不可缺少。


哪些安全測(cè)試適合DevOps中做呢?


代碼提交前的自動(dòng)化的靜態(tài)代碼掃描、依賴(lài)掃描、動(dòng)態(tài)系統(tǒng)掃描以及初級(jí)的滲透測(cè)試都推薦在DevOps中實(shí)現(xiàn)。



那么秉著持續(xù)掃描、持續(xù)反饋、即時(shí)告警的思想,安全和DevOps的結(jié)合會(huì)是如下這樣:



首先是代碼提交前的靜態(tài)代碼安全掃描,靜態(tài)代碼安全掃描相對(duì)成熟和容易實(shí)施,推薦使用SonarQube(官網(wǎng)https://www.sonarqube.org/),一個(gè)開(kāi)源的代碼質(zhì)量管理平臺(tái),可以掃描代碼規(guī)范、重復(fù)代碼、單元測(cè)試覆蓋率(pmd-cpd,checkstyle,findbugs)等問(wèn)題,集成簡(jiǎn)單,通過(guò)Pipeline的Junit插件與Jenkins集成,詳細(xì)步驟可參考官網(wǎng)。


其次是構(gòu)建時(shí)的依賴(lài)組件掃描,在當(dāng)下軟件應(yīng)用的開(kāi)發(fā)過(guò)程當(dāng)中,自研的內(nèi)部代碼所占的比例逐步地減少,開(kāi)源的框架和共用庫(kù)已經(jīng)得到了廣泛的引用,據(jù)不完全統(tǒng)計(jì),現(xiàn)在有78%的企業(yè)都在使用開(kāi)源軟件。但是,大家在享受開(kāi)源軟件帶來(lái)的研發(fā)便利的同時(shí),是否也意識(shí)到開(kāi)源軟件帶來(lái)的安全隱患呢?下圖的統(tǒng)計(jì)數(shù)據(jù)表明,安全性并不是開(kāi)源軟件維護(hù)者的維護(hù)重點(diǎn),這樣的現(xiàn)狀導(dǎo)致我們常用的開(kāi)源軟件庫(kù)包含了各種各樣的安全漏洞,黑客們已逐漸把開(kāi)源軟件作為了主要的攻擊目標(biāo)。



要保證我們上線應(yīng)用的安全,必須進(jìn)行依賴(lài)包安全掃描,推薦使用Xray(https://jfrog.com/xray/)可以掃描二進(jìn)制包安全漏洞,且可以做到深度掃描,掃描依賴(lài)的依賴(lài),并且結(jié)合開(kāi)源漏洞數(shù)據(jù)源(NVD)和 Snyk 提供的漏洞數(shù)據(jù)源對(duì)整個(gè)軟件樹(shù)進(jìn)行安全分析。


最后就是構(gòu)建后的動(dòng)態(tài)系統(tǒng)掃描以及初級(jí)的滲透測(cè)試,初級(jí)滲透測(cè)試有主動(dòng)掃描和被動(dòng)掃描。推薦使用被動(dòng)掃描,基本原理是設(shè)置掃描工具為一個(gè)Proxy Server,功能測(cè)試通過(guò)這個(gè)代理服務(wù)訪問(wèn)系統(tǒng),掃描工具可以截獲所有的交互數(shù)據(jù)并進(jìn)行分析,通過(guò)與已知安全問(wèn)題進(jìn)行模式匹配,從而發(fā)現(xiàn)系統(tǒng)中可能的安全缺陷。建議將被動(dòng)掃描和自動(dòng)化測(cè)試結(jié)合,在運(yùn)行自動(dòng)化功能測(cè)試的時(shí)候使用被動(dòng)掃描方法,從而實(shí)現(xiàn)動(dòng)態(tài)安全掃描。


主動(dòng)掃描(初級(jí)滲透)是給定需要掃描的系統(tǒng)地址,掃描工具通過(guò)訪問(wèn)這個(gè)地址,使用各種已知漏洞模型進(jìn)行訪問(wèn),并根據(jù)系統(tǒng)返回的結(jié)果判定系統(tǒng)存在哪些漏洞;或者在訪問(wèn)請(qǐng)求中嵌入各種隨機(jī)數(shù)據(jù)的模糊,測(cè)試進(jìn)行一些簡(jiǎn)單的滲透性測(cè)試和弱口令測(cè)試等。主動(dòng)掃描覆蓋測(cè)試面會(huì)比較大,但缺點(diǎn)是完成一次全面掃描非常耗時(shí),一般都需要幾個(gè)小時(shí),這種不適合在pipeline中進(jìn)行集成在每次發(fā)布的時(shí)候做,建議單獨(dú)建立job定時(shí)掃描然后查看掃描報(bào)告。


經(jīng)過(guò)以上步驟就可以做持續(xù)交付了,充分發(fā)揮DevOps的敏捷性和響應(yīng)力。


DevSecOps的落地需要開(kāi)發(fā)、測(cè)試、安全和運(yùn)維人員的通力合作,站在對(duì)方的視角客觀看待問(wèn)題,將DevOps 和安全理念融合,落地確實(shí)不易,但是我們做到了,在統(tǒng)一身份認(rèn)證系統(tǒng)(ESC5)的研發(fā)過(guò)程中,堅(jiān)持做代碼提交前的靜態(tài)掃描,構(gòu)建時(shí)的依賴(lài)組件掃描,編譯后全套的自動(dòng)化測(cè)試用例結(jié)合系統(tǒng)動(dòng)態(tài)掃描和滲透測(cè)試,鑄就了統(tǒng)一身份認(rèn)證系統(tǒng)安全的壁壘,在今年6月份的“護(hù)網(wǎng)行動(dòng)”中,防住了“攻方”的惡意攻擊,成功為多家企業(yè)安全護(hù)航。