基于DevOps的容器安全優(yōu)秀實踐
雖然云和容器的崛起,容器成了日常。容器的安全要求也隨之而來,如何確定一個最適合業(yè)務(wù)的容器安全保障是大家最關(guān)注的問題。本文我們就來通過DevOps生命周期來全面考慮容器安全和各階段的安全策略,更詳細(xì)的工具介紹可以參考蟲蟲之前的文章從DevOps到DevSecOps,貫穿始終的安全棧。
DevOps生命周期
每個安全計劃都會受到可實施安全控制措施的限制,DevOps生命周期是以下各項的無限迭代:計劃、編碼、構(gòu)建、測試、發(fā)布、部署、運維、監(jiān)控
在應(yīng)用程序中容器以Dockerfiles的形式來表達(dá),但實際上Dockerfiles并不是容器的一部分(計劃和編碼)。從安全性的角度來看,容器安全主要涉及以下三部分,六個階段:
- 構(gòu)建時:構(gòu)建,測試和發(fā)布
- 容器基礎(chǔ)架構(gòu):部署和運維
- 運行時:監(jiān)控
每個安全策略只有在可以實施的情況下才有效。每個部分中的各個步驟可以實施安全控制措施:
- 構(gòu)建時:CI/CD基礎(chǔ)結(jié)構(gòu),容器注冊表
- 容器基礎(chǔ)設(shè)施:容器編排器
- 運行時:生產(chǎn)環(huán)境
構(gòu)建時安全
在容器構(gòu)建時,輸入了一堆源文件和一個Dockerfile,輸出為Docker鏡像。該階段有很多安全和云廠商提供了很多安全方案和鏡像安全掃描工具。容器安全掃描非常重要,是的,光鏡像掃描還遠(yuǎn)遠(yuǎn)不夠。本部分的安全目標(biāo)是最小化供應(yīng)鏈攻擊的風(fēng)險。
1. 基礎(chǔ)鏡像的安全
首先,檢查鏡像的基礎(chǔ),重點是檢查要引入的依賴項:
- 允許開發(fā)人員使用的基本鏡像。
- 固定軟件依賴性,依賴所要拉取的源。
- 是否需要通過標(biāo)簽來簡化治理和合規(guī)性?
- 整理Dockerfile。
所有這些檢查都是靜態(tài)的,可以很容易在構(gòu)建管道編寫檢查語實現(xiàn)。
2. 容器鏡像掃描
然后,下一步就是掃描容器鏡像。
不要在構(gòu)建管道中掃描鏡像,而是在容器注冊表中設(shè)置連續(xù)掃描。
漏洞可能早就存在,如果在構(gòu)建時才檢查有點遲了。其次,構(gòu)建是疊加的:每個構(gòu)建都會生成一個新鏡像。因此,通過掃描信任注冊表,發(fā)布的每個標(biāo)簽都可以信任,而無需重復(fù)在每次構(gòu)建時候都檢查。最后由于鏡像掃描需要時間,如果在構(gòu)建時候掃描會影響構(gòu)建的性能。
也可以考慮定義補丁程序管理和保質(zhì)期流程:
- 補丁程序管理:掃描結(jié)果提供補丁程序,從而產(chǎn)生新版本的鏡像
- 保質(zhì)期:對于超過期限未修補/舊/不安全的鏡像從注冊表中予以刪除。
- 本階段可參考的工具:開源工具有Anchore,Clair,Dagda,商業(yè)化軟件有Atomic和Docker Cloud。
Docker基礎(chǔ)設(shè)施安全
容器基礎(chǔ)結(jié)構(gòu)由所有移動部件組成,這些部件負(fù)責(zé)從注冊表中提取鏡像并將其作為容器在生產(chǎn)環(huán)境中運行。
主要是容器編排器有 kubernetes,Swarm。
本部分的目標(biāo)有兩個:避免由于平臺配置錯誤帶來安全隱患;最小化來自受感染容器的攻擊擴(kuò)展。
1. 配置錯誤
容器編排器非常復(fù)雜,特別是K8S。截至目前,它們還沒有實現(xiàn)DevOps的承諾。每個復(fù)雜的平臺都容易配置錯誤,這是我們要關(guān)注的部分。
必須對基礎(chǔ)架構(gòu)進(jìn)行威脅建模,以確保其不會被濫用。這個特定的線程模型應(yīng)該專注于每個角色,但容器除外。取決于運行情況。對于K8S而言,這進(jìn)行威脅建模的一個很好的起點。
也可以使用托管平臺,可以與(受信任的)供應(yīng)商一起使用共享責(zé)任模型,則可以降低復(fù)雜性。
2. 橫向擴(kuò)展
接下來,我們要將討論容器被破壞時會發(fā)生什么。我們希望最大程度地減少攻擊者橫向擴(kuò)展的能力,重點是兩個方面:網(wǎng)絡(luò)和身份和訪問管理。
容器網(wǎng)絡(luò)圖省事而放通設(shè)置??梢韵葘⑺袃?nèi)容嚴(yán)格劃分為子網(wǎng),然后逐步發(fā)展為完整的服務(wù)網(wǎng)絡(luò)。
在IAM層上,朝著每個容器具有單一標(biāo)識的方向進(jìn)行操作,以微調(diào)授權(quán)授權(quán)。這在多租戶平臺中尤其重要:沒有精細(xì)的身份,就不可能獲得最低特權(quán)。
容器基礎(chǔ)不變的,可以通過周期性關(guān)閉舊容器,新起容器的方法,避免長期運行的容器來減少攻擊者橫向擴(kuò)展并獲得持久性注入點。
本部分可以使用的開源工具有Habitat.sh,firejail等。
3. 運行時安全
最后一方面是正在運行的工作負(fù)載的安全性。本階段目標(biāo)是盡量減少從受損的容器的攻擊。
4. 檢測和事件響應(yīng)
控制攻擊影響的最佳方法是最大程度地減少從漏洞發(fā)生到安全團(tuán)隊收到警報的時間。
檢測到持續(xù)的違規(guī)行為是有大量供應(yīng)商大量解決方案的領(lǐng)域。有許多方法,其中大多數(shù)將需要邊緣節(jié)點和守護(hù)程序集來主動監(jiān)視pod的流量和系統(tǒng)調(diào)用。
建議是快速開始并反復(fù)進(jìn)行迭代完善:使用現(xiàn)有的SIEM,提取平臺,應(yīng)用程序和審核日志。
肯定會有事件發(fā)生,然后對其進(jìn)行響應(yīng)處理,積累經(jīng)驗:
時??紤]這樣的問題:"下次如何更快地檢測到這種況?"這能使我們識別盲點,然后將其用于了解缺失的環(huán)節(jié)以及建立更完善的策略。
本部分可以使用的開源工具有Sysdig falco, OpenSCAP,Grafeas等。
結(jié)論
容器安全性是一個廣泛的問題,而不僅僅是掃描鏡像。通過建立并用于推理容器風(fēng)險和解決方案的模型才能全面完整的考慮到所有方面,當(dāng)然和所有模型一樣,需要不斷實踐迭代完善,才能建立完善的容器安全模型。