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