原生云應(yīng)用程序和基礎(chǔ)設(shè)施需要完全不同的安全方法。請(qǐng)牢記下面這些最佳實(shí)踐。
如今,大大小小的組織正在探索云原生軟件技術(shù)的應(yīng)用?!霸疲╟loud-native)”是指將軟件封裝在被稱為容器的標(biāo)準(zhǔn)化單元內(nèi)的方法,將這些單元排列成彼此以接口連接的微服務(wù)器以形成應(yīng)用程序,并確保運(yùn)行的應(yīng)用程序完全自動(dòng)化,以實(shí)現(xiàn)更高的速度、靈活性和可擴(kuò)展性。
因?yàn)檫@種方法從根本上改變了軟件的構(gòu)建、部署和運(yùn)行,所以它也從根本上改變了保護(hù)軟件的方式。原生云應(yīng)用程序和基礎(chǔ)設(shè)施為安全專業(yè)人員帶來(lái)了幾個(gè)新的挑戰(zhàn),他們將需要建立新的安全程序來(lái)支持組織使用原生云技術(shù)。
我們來(lái)看看這些挑戰(zhàn),然后我們將討論安全小組應(yīng)對(duì)這些挑戰(zhàn)應(yīng)采取的一些最佳實(shí)踐。首先面臨的挑戰(zhàn)是:
· 傳統(tǒng)的安全基礎(chǔ)設(shè)施缺乏容器的可見(jiàn)性。大多數(shù)現(xiàn)有的基于主機(jī)和網(wǎng)絡(luò)安全的工具無(wú)法監(jiān)視或采集容器活動(dòng)。這些工具被構(gòu)建為保護(hù)單個(gè)操作系統(tǒng)或主機(jī)之間的流量,而不是在其上運(yùn)行的應(yīng)用程序,這導(dǎo)致對(duì)容器事件、系統(tǒng)交互和容器間流量的可見(jiàn)性的損失。
· 攻擊面可能會(huì)迅速變化。原生云應(yīng)用程序由很多被稱為微服務(wù)的較小的組件組成,這些組件高度分布,必須單獨(dú)審計(jì)和保護(hù)每個(gè)組件。由于這些應(yīng)用程序被設(shè)計(jì)為由編排系統(tǒng)進(jìn)行配置和擴(kuò)展,因此它們的攻擊面會(huì)不斷變化,遠(yuǎn)遠(yuǎn)超過(guò)傳統(tǒng)的整體式應(yīng)用程序(monolithic application)。
· 分布式數(shù)據(jù)流需要持續(xù)監(jiān)控。把容器和微服務(wù)設(shè)計(jì)為輕量級(jí),并通過(guò)編程方式與彼此或外部云服務(wù)進(jìn)行互連。這將在整個(gè)環(huán)境中產(chǎn)生大量快速移動(dòng)的數(shù)據(jù),以便不斷監(jiān)控攻擊指標(biāo)以及未經(jīng)授權(quán)的數(shù)據(jù)訪問(wèn)或滲透。
· 檢測(cè)、預(yù)防和響應(yīng)必須自動(dòng)化。容器產(chǎn)生的事件的速度和容量使當(dāng)前的安全操作流程無(wú)法招架。容器的短暫的生命也使捕獲、分析和確定事件的根本原因變得很困難。有效的威脅保護(hù)意味著將數(shù)據(jù)收集、過(guò)濾、關(guān)聯(lián)和分析自動(dòng)化,以便能夠?qū)π率录龀鲎銐蚩斓捻憫?yīng)。
面對(duì)這些新挑戰(zhàn),安全專業(yè)人員需要建立新的安全計(jì)劃,以支持其組織使用原生云技術(shù)。當(dāng)然,你的安全程序應(yīng)該解決原生云應(yīng)用程序的整個(gè)生命周期,這可以分為兩個(gè)不同的階段:構(gòu)建和部署階段以及運(yùn)行時(shí)階段。這些階段中的每一個(gè)階段都有一組不同的安全因素,必須解決這些安全因素以形成一個(gè)全面的安全程序。
保護(hù)容器的構(gòu)建和部署
構(gòu)建和部署階段的安全性把重點(diǎn)放在將控件應(yīng)用于開(kāi)發(fā)人員工作流程以及持續(xù)集成和部署管道(deployment pipeline),以減輕容器啟動(dòng)后可能出現(xiàn)的安全問(wèn)題的風(fēng)險(xiǎn)。這些控件可以包含以下準(zhǔn)則和最佳實(shí)踐:
· 保持圖像盡可能小。容器鏡像是一個(gè)輕量級(jí)的可執(zhí)行文件,它用于封裝應(yīng)用程序代碼及其依賴項(xiàng)。將每個(gè)圖像的大小限制在剛好夠軟件運(yùn)行,這樣就可以將從圖像啟動(dòng)的每個(gè)容器的攻擊面最小化。從最小的操作系統(tǒng)基礎(chǔ)圖像開(kāi)始,如Alpine Linux可以減小圖像尺寸,并使圖像更容易管理。
· 掃描圖像以了解已知問(wèn)題。當(dāng)構(gòu)建圖像時(shí),應(yīng)檢查已知的漏洞和后門。可以掃描構(gòu)成圖像的每個(gè)文件系統(tǒng)層,并將結(jié)果與常規(guī)更新的通用漏洞和后門(Common Vulnerabilities and Exposures,CVE)數(shù)據(jù)庫(kù)進(jìn)行比較。然后,開(kāi)發(fā)和安全團(tuán)隊(duì)可以在圖像用于啟動(dòng)容器之前處理發(fā)現(xiàn)的漏洞。
· 數(shù)字簽名圖像。一旦構(gòu)建了圖像,就應(yīng)該在部署前驗(yàn)證它們的完整性。有些圖像格式使用被稱為摘要的唯一標(biāo)識(shí)符,它們可以用來(lái)檢測(cè)圖像內(nèi)容何時(shí)發(fā)生變化。用私鑰簽名圖像提供加密可以確保用于啟動(dòng)容器的每個(gè)圖像都是由受信方創(chuàng)建的。
· 加強(qiáng)并限制對(duì)主機(jī)操作系統(tǒng)的訪問(wèn)。由于在主機(jī)上運(yùn)行的容器共享相同的操作系統(tǒng),因此確保它們以適當(dāng)限制的一系列功能開(kāi)始是非常重要的。這可以用內(nèi)核安全功能和模塊(如Seccomp,AppArmor和SELinux)來(lái)實(shí)現(xiàn)。
· 指定應(yīng)用級(jí)分段策略。微服務(wù)之間的網(wǎng)絡(luò)流量可以分段,以限制它們之間的連接方式。然而,這需要根據(jù)標(biāo)簽和選擇器之類的應(yīng)用程序級(jí)屬性進(jìn)行配置,從而抽象出處理IP地址之類的傳統(tǒng)網(wǎng)絡(luò)細(xì)節(jié)的復(fù)雜性。分段所提出的挑戰(zhàn)是必須先定義限制通信的策略,而不影響作為容器的正?;顒?dòng)的一部分在環(huán)境內(nèi)和跨環(huán)境中進(jìn)行通信的能力。
· 保護(hù)容器所使用的秘密?;ハ嘁越涌谶B接的微服務(wù)經(jīng)常交換被稱為秘密的密碼、令牌和密鑰等敏感數(shù)據(jù)。如果這些秘密存儲(chǔ)在圖像或環(huán)境變量中,可能會(huì)意外暴露。因此,Docker和Kubernetes等多個(gè)編排平臺(tái)已經(jīng)集成了秘密管理,確保秘密只在需要時(shí)才將其分配給使用它們的容器。
Docker、Red Hat和CoreOS等公司的幾個(gè)領(lǐng)先的容器平臺(tái)和工具提供了部分或全部功能。從這些選項(xiàng)之一著手是構(gòu)建和部署階段確保強(qiáng)健的安全性的最簡(jiǎn)單的方法。
然而,構(gòu)建和部署階段的控件仍然不足以確保全面的安全程序。在容器開(kāi)始運(yùn)行之前搶占所有安全事件是不可能的,原因如下。首先,不可能一勞永逸地消除所有漏洞,新的漏洞始終會(huì)被利用。其次,聲明式容器元數(shù)據(jù)和網(wǎng)絡(luò)分段策略不能完全預(yù)測(cè)高度分布式環(huán)境中的所有合法應(yīng)用程序活動(dòng)。最后,運(yùn)行時(shí)控件使用起來(lái)很復(fù)雜,經(jīng)常會(huì)配置錯(cuò)誤,使應(yīng)用程序容易受到威脅。
在運(yùn)行時(shí)保護(hù)容器
運(yùn)行時(shí)階段的安全性包括發(fā)現(xiàn)和停止容器運(yùn)行時(shí)發(fā)生的攻擊和策略違規(guī)所需的所有功能,即可見(jiàn)性、檢測(cè)、響應(yīng)和預(yù)防。安全小組需要對(duì)安全事件的根本原因進(jìn)行鑒別分類、調(diào)查和確認(rèn),以便對(duì)其進(jìn)行充分的補(bǔ)救。以下是成功運(yùn)行時(shí)階段的安全性的關(guān)鍵方面:
· 為持續(xù)可見(jiàn)性測(cè)量整個(gè)環(huán)境。能夠檢測(cè)攻擊和違反策略的行為都始于能夠?qū)崟r(shí)捕獲運(yùn)行容器的所有活動(dòng),以提供可操作的“事實(shí)上的來(lái)源(source of truth)”。存在各種用于捕獲不同類型的容器的相關(guān)數(shù)據(jù)的儀器框架。選擇可以處理容器的容積和速度的關(guān)鍵。
· 關(guān)聯(lián)分布式威脅指標(biāo)。把容器設(shè)計(jì)成按資源可用性分布在計(jì)算基礎(chǔ)設(shè)施。鑒于應(yīng)用程序可能包含數(shù)百或數(shù)千個(gè)容器,攻擊的指標(biāo)可能會(huì)擴(kuò)散到大量的主機(jī)上,這使確定與作為主動(dòng)威脅的一部分相關(guān)的那些主機(jī)變得更困難。需要大規(guī)模,快速的相關(guān)性來(lái)確定是哪些指標(biāo)構(gòu)成特定攻擊的基礎(chǔ)。
· 分析容器和微服務(wù)行為。微服務(wù)和容器可將應(yīng)用程序分解為執(zhí)行特定功能并被設(shè)計(jì)為不可變的最小組件。這種做法比傳統(tǒng)應(yīng)用程序環(huán)境更容易讓人理解預(yù)期行為的正常模式。與這些行為基準(zhǔn)的偏差可能反映了惡意活動(dòng),而這可以更準(zhǔn)確地檢測(cè)威脅。
· 用機(jī)器學(xué)習(xí)增強(qiáng)威脅檢測(cè)。在容器環(huán)境中產(chǎn)生的數(shù)據(jù)量和速度使常規(guī)的檢測(cè)技術(shù)應(yīng)接不暇。自動(dòng)化和機(jī)器學(xué)習(xí)可以實(shí)現(xiàn)更有效的行為建模、模式識(shí)別和分類,以更高的保真度和更少的誤報(bào)檢測(cè)威脅。要警惕那些僅僅用機(jī)器學(xué)習(xí)來(lái)生成用于警告異常的靜態(tài)白名單的解決方案,這可能會(huì)導(dǎo)致嚴(yán)重的警報(bào)噪音和疲勞。
· 攔截和阻止未經(jīng)授權(quán)的容器引擎命令。發(fā)給容器引擎的命令(例如Docker)用于創(chuàng)建、啟動(dòng)和終止容器以及運(yùn)行啟動(dòng)中的容器內(nèi)的命令。這些命令可以反映對(duì)容器的攻擊企圖,這意味著必須禁止任何未經(jīng)授權(quán)的容器。
· 將響應(yīng)和取證的動(dòng)作自動(dòng)化。容器的短暫生命意味著它們留給事件響應(yīng)和取證的可用信息極少。此外,原生云架構(gòu)往往將基礎(chǔ)設(shè)施視為不可變,自動(dòng)將受影響的系統(tǒng)替換為新的系統(tǒng),這意味著容器在調(diào)查時(shí)可能會(huì)消失。自動(dòng)化可以確??焖俨东@、分析和升級(jí)信息,以減輕攻擊和破壞的影響。
基于容器技術(shù)和微服務(wù)架構(gòu)的原生云軟件正在迅速地對(duì)應(yīng)用程序和基礎(chǔ)設(shè)施進(jìn)行現(xiàn)代化。這種范式轉(zhuǎn)移迫使安全專業(yè)人員重新考慮能有效保護(hù)其組織所需的計(jì)劃。當(dāng)容器被構(gòu)建、部署和運(yùn)行時(shí),一個(gè)全面的原生云軟件安全程序解決了整個(gè)應(yīng)用程序生命周期。通過(guò)使用上述指南實(shí)施程序,組織可以為容器基礎(chǔ)設(shè)施及運(yùn)行在它上面的應(yīng)用程序和服務(wù)構(gòu)建穩(wěn)固的基礎(chǔ)。
Wei Lien Dang是StackRox的產(chǎn)品副總裁,StackRox是一家為容器提供適應(yīng)性威脅防護(hù)的安全公司。此前,他曾擔(dān)任CoreOS的產(chǎn)品負(fù)責(zé)人,并擔(dān)任Amazon Web Services、Splunk和Bracket Computing的安全和云基礎(chǔ)架構(gòu)的高級(jí)產(chǎn)品管理角色。