如何在整個(gè)DevOps中建立分層安全?
將我們的DevSecOps方法分成多層,可以在對(duì)強(qiáng)大安全性的需求與快速移動(dòng)并經(jīng)常部署的需求之間找到適當(dāng)?shù)钠胶狻?/p>
DevOps運(yùn)動(dòng)改變了我們集成和發(fā)布的方式。它使我們從緩慢的發(fā)行周期(有時(shí)是每年的發(fā)行周期)過(guò)渡到每天(有時(shí)甚至是每小時(shí))發(fā)行。我們能夠編寫(xiě)代碼并幾乎立即看到生產(chǎn)中的變化。DevOps是突破壁壘并支持對(duì)市場(chǎng)變化、客戶(hù)需求快速響應(yīng)的令人驚嘆的第一步,但是仍然需要打破一堵重要的壁壘,我們需要折中的一個(gè)重要群體:安全運(yùn)營(yíng)(SecOps)。
為了在生產(chǎn)變更持續(xù)集成和部署(CI/CD)中包括這個(gè)至關(guān)重要的小組,我們將DevOps重新定義為DevSecOps。我們?cè)谶@項(xiàng)工作中面臨的挑戰(zhàn)與在將開(kāi)發(fā)和運(yùn)營(yíng)整合在一起時(shí)所面臨的挑戰(zhàn)相同:開(kāi)發(fā)人員希望快速行動(dòng)并經(jīng)常進(jìn)行更改,而運(yùn)營(yíng)則需要穩(wěn)定和不頻繁的更改。安全團(tuán)隊(duì)傾向于支持穩(wěn)定性和不頻繁的更改,因?yàn)楦目赡芤馕吨貜?fù)安全測(cè)試并再次對(duì)環(huán)境進(jìn)行認(rèn)證。
當(dāng)我們以DevOps的速度前進(jìn)時(shí),我們?nèi)绾纹谕@些團(tuán)隊(duì)每天或每周重做他們的工作?
安全分層
在深入探討這個(gè)問(wèn)題之前,我們應(yīng)該談?wù)勔环N關(guān)鍵的安全實(shí)踐:分層安全或深度防御。分層安全是一種應(yīng)用多種安全措施的實(shí)踐,每一層都與前一層和下一層重疊,以創(chuàng)建一個(gè)安全控制網(wǎng)絡(luò),這些網(wǎng)絡(luò)可以一起工作以保護(hù)技術(shù)系統(tǒng)。
在分層安全方法中,公司通過(guò)使用諸如WAN網(wǎng)關(guān)防火墻和靜態(tài)數(shù)據(jù)加密之類(lèi)的訪問(wèn)控制來(lái)減輕對(duì)技術(shù)系統(tǒng)的入侵??丶斜砗軓V泛,但要點(diǎn)是,沒(méi)有任何控件可以充分保護(hù)技術(shù)系統(tǒng)。同樣的方法適用于對(duì)我們的應(yīng)用程序執(zhí)行安全性分析。
與公司的應(yīng)用程序安全團(tuán)隊(duì)聯(lián)系,詢(xún)問(wèn)他們使用哪些掃描工具來(lái)確保編寫(xiě)的應(yīng)用程序安全??赡艿氖牵麄儾粫?huì)使用一種工具進(jìn)行答復(fù),因?yàn)闆](méi)有一種工具可以全部完成。相反,他們可能會(huì)為您提供他們使用或期望開(kāi)發(fā)團(tuán)隊(duì)使用的工具列表或工具類(lèi)型。
這使我們回到了之前的問(wèn)題:在進(jìn)行所有這些掃描并使用所有這些工具時(shí),我們?nèi)绾纹谕S持一個(gè)持續(xù)的部署周期?這是一項(xiàng)艱巨的任務(wù)。其中一些掃描和工具需要花費(fèi)數(shù)小時(shí),數(shù)天或更長(zhǎng)時(shí)間。
內(nèi)聯(lián)掃描
盡管某些安全工具和掃描器確實(shí)需要很長(zhǎng)的時(shí)間才能運(yùn)行,但仍有一些更快的工具可以在開(kāi)發(fā)生命周期的早期使用,以形成我們的第一層DevSecOps。這就是左移背后的想法:將流程從開(kāi)發(fā)生命周期的末尾(或右側(cè))移到開(kāi)始或中間,即再向左移。
第一層應(yīng)包括需要幾秒鐘(或幾分鐘)運(yùn)行的工具和掃描程序。一些常見(jiàn)的示例是代碼lint,單元測(cè)試,SonarQube之類(lèi)的靜態(tài)代碼分析器,OWASP Dependency Checker等第三方依賴(lài)項(xiàng)漏洞檢查,以及集成測(cè)試的子集。
您可能會(huì)問(wèn):“整理代碼和運(yùn)行單元測(cè)試如何適合DevSecOps?” 軟件中的錯(cuò)誤可以為正在尋找的對(duì)手提供完美的解決方案。例如,OWASP在過(guò)去的兩個(gè)關(guān)鍵Web應(yīng)用程序安全報(bào)告(2013年和2017年) 中將代碼注入列為第一漏洞。單元測(cè)試和靜態(tài)代碼分析可以幫助捕獲我們的一些錯(cuò)誤,并可能有助于防止代碼中的安全漏洞。
由于這些工具掃描只需要很少的時(shí)間,因此最好將它們推到開(kāi)發(fā)生命周期中的最左側(cè)。當(dāng)開(kāi)發(fā)人員將代碼推送到我們的Git存儲(chǔ)庫(kù)并打開(kāi)請(qǐng)求時(shí),這些工具和掃描程序?qū)⑦\(yùn)行以確保代碼在合并之前通過(guò)。除了確保我們的主干分支保持可構(gòu)建狀態(tài)外,在開(kāi)發(fā)生命周期的早期就擁有這些工具還可以盡早且經(jīng)常向開(kāi)發(fā)人員提供反饋。
部署前掃描
DevSecOps的第二層與我們的部署管道內(nèi)聯(lián)運(yùn)行的工具,需要幾分鐘甚至一小時(shí)才能完成。這可能包括更深入的第三方漏洞掃描,Docker鏡像掃描和惡意軟件掃描。
該層的關(guān)鍵之一是,掃描器和工具在生成構(gòu)建工件之后且在將它們存儲(chǔ)到Artifactory或Amazon Elastic Container Registry等任何位置之前都可以運(yùn)行。更重要的是,此層中的任何故障都應(yīng)立即停止當(dāng)前部署,并向開(kāi)發(fā)團(tuán)隊(duì)提供反饋。
另一個(gè)關(guān)鍵是在這一層以及所有未來(lái)的層中實(shí)現(xiàn)并行化。開(kāi)發(fā)人員希望盡快部署他們的更改,并且連續(xù)運(yùn)行多次掃描(每次掃描可能長(zhǎng)達(dá)一個(gè)小時(shí))會(huì)不必要地減慢部署周期。通過(guò)并行運(yùn)行這些工具,部署速度的降低等于運(yùn)行時(shí)間最長(zhǎng)的掃描。
部署后掃描
DevSecOps的下一層包括在將代碼部署到預(yù)生產(chǎn)環(huán)境之后我們可以使用的工具和掃描程序。這些工具可能包括性能和集成測(cè)試以及應(yīng)用程序掃描程序,例如OWASP Zap。我們應(yīng)該努力使這一層快速運(yùn)行,希望在一小時(shí)或更短的時(shí)間內(nèi)運(yùn)行,以向開(kāi)發(fā)人員提供快速反饋并限制對(duì)CD流程的影響。
為確保我們不會(huì)錯(cuò)誤地將易受攻擊的代碼部署到生產(chǎn)中,此層應(yīng)作為CD管道的一部分運(yùn)行,目的是在任何掃描程序發(fā)現(xiàn)漏洞或以下情況時(shí)刪除工件,回滾環(huán)境。否則失敗。
根據(jù)行業(yè),安全性和法規(guī)要求,我們可以在此層成功完成后自動(dòng)將部署到生產(chǎn)中。管道中應(yīng)該已經(jīng)有足夠的自動(dòng)掃描和測(cè)試,可以合理地證明應(yīng)用程序的安全性和堅(jiān)固性。
持續(xù)掃描
我們討論的大多數(shù)掃描儀和工具都已嵌入CI/CD管道中。我們的目標(biāo)是在平衡這些工具對(duì)CI/CD管道的時(shí)間線(xiàn)的影響的同時(shí),為應(yīng)用程序的安全性提供合理的保證。
DevSecOps的最后一層是持續(xù)續(xù)掃描或持續(xù)續(xù)安全性(CS)。正如持續(xù)集成,測(cè)試和部署是DevOps的代名詞一樣,持續(xù)安全性是DevSecOps的代名詞和基石。該層包括Nessus,Qualys,IBM App Scan等工具,以及其他基礎(chǔ)結(jié)構(gòu),應(yīng)用程序和網(wǎng)絡(luò)掃描工具。
CS并非嵌入在CI/CD管道中,而是作為異步的,并向開(kāi)發(fā)人員提供持續(xù)的反饋。開(kāi)發(fā)人員如何接收和響應(yīng)該反饋需要進(jìn)行討論和達(dá)成共識(shí)。開(kāi)發(fā)人員將在收到任何反饋后立即對(duì)其進(jìn)行處理,并在較長(zhǎng)的周轉(zhuǎn)時(shí)間內(nèi)解決。
這些工具和掃描程序的啟動(dòng)方式以及運(yùn)行頻率是利益相關(guān)者應(yīng)同意CS的另一個(gè)方面。部署完成后,可以通過(guò)CI/CD管道啟動(dòng)具有API的工具。其他可能根據(jù)需要或基于一定的時(shí)間節(jié)奏來(lái)完成。無(wú)論如何完成,重要的是這些工具和掃描儀不會(huì)僅運(yùn)行一次,甚至每年運(yùn)行一次或兩次。相反,這些工具和掃描儀應(yīng)盡可能頻繁地運(yùn)行,并應(yīng)對(duì)應(yīng)用程序有意義。
結(jié)論
正如我們不能通過(guò)使用一兩個(gè)工具或安全性原則來(lái)確保技術(shù)系統(tǒng)的安全性一樣,我們應(yīng)用程序的安全性也不能僅取決于一兩個(gè)工具或掃描儀的類(lèi)型。它采用分層的方法來(lái)應(yīng)用不同的工具和掃描程序,以合理地確保我們的應(yīng)用程序及其運(yùn)行的基礎(chǔ)結(jié)構(gòu)的安全性。
關(guān)于我們澤陽(yáng),DevOps領(lǐng)域?qū)嵺`者。專(zhuān)注于企業(yè)級(jí)DevOps運(yùn)維開(kāi)發(fā)技術(shù)實(shí)踐分享,主要以新Linux運(yùn)維技術(shù)、DevOps技術(shù)課程為主。豐富的一線(xiàn)實(shí)戰(zhàn)經(jīng)驗(yàn),課程追求實(shí)用性獲得多數(shù)學(xué)員認(rèn)可。課程內(nèi)容均來(lái)源于企業(yè)應(yīng)用,在這里既學(xué)習(xí)技術(shù)又能獲取熱門(mén)技能,歡迎您的到來(lái)!(微信ID: devopsvip)


2023-07-10 11:14:28
2009-07-15 09:42:46




