容器和微服務(wù)是如何改變了安全性
- 云原生程序和基礎(chǔ)架構(gòu)需要完全不同的安全方式。牢記這些最佳實(shí)踐
如今,大大小小的組織正在探索云原生技術(shù)的采用。“云原生Cloud-native”是指將軟件打包到被稱為容器的標(biāo)準(zhǔn)化單元中的方法,這些單元組織成微服務(wù),它們必須對(duì)接以形成程序,并確保正在運(yùn)行的應(yīng)用程序完全自動(dòng)化以實(shí)現(xiàn)更高的速度、靈活性和可伸縮性。
由于這種方法從根本上改變了軟件的構(gòu)建、部署和運(yùn)行方式,它也從根本上改變了軟件需要保護(hù)的方式。云原生程序和基礎(chǔ)架構(gòu)為安全專業(yè)人員帶來了若干新的挑戰(zhàn),他們需要建立新的安全計(jì)劃來支持其組織對(duì)云原生技術(shù)的使用。
讓我們來看看這些挑戰(zhàn),然后我們將討論安全團(tuán)隊(duì)?wèi)?yīng)該采取的哪些最佳實(shí)踐來解決這些挑戰(zhàn)。首先挑戰(zhàn)是:
傳統(tǒng)的安全基礎(chǔ)設(shè)施缺乏容器可視性。 大多數(shù)現(xiàn)有的基于主機(jī)和網(wǎng)絡(luò)的安全工具不具備監(jiān)視或捕獲容器活動(dòng)的能力。這些工具是為了保護(hù)單個(gè)操作系統(tǒng)或主機(jī)之間的流量,而不是其上運(yùn)行的應(yīng)用程序,從而導(dǎo)致容器事件、系統(tǒng)交互和容器間流量的可視性缺乏。
攻擊面可以快速更改。云原生應(yīng)用程序由許多較小的組件組成,這些組件稱為微服務(wù),它們是高度分布式的,每個(gè)都應(yīng)該分別進(jìn)行審計(jì)和保護(hù)。因?yàn)檫@些應(yīng)用程序的設(shè)計(jì)是通過編排系統(tǒng)進(jìn)行配置和調(diào)整的,所以其攻擊面也在不斷變化,而且比傳統(tǒng)的獨(dú)石應(yīng)用程序要快得多。
分布式數(shù)據(jù)流需要持續(xù)監(jiān)控。容器和微服務(wù)被設(shè)計(jì)為輕量級(jí)的,并且以可編程方式與對(duì)方或外部云服務(wù)進(jìn)行互連。這會(huì)在整個(gè)環(huán)境中產(chǎn)生大量的快速移動(dòng)數(shù)據(jù),需要進(jìn)行持續(xù)監(jiān)控,以便應(yīng)對(duì)攻擊和危害指標(biāo)以及未經(jīng)授權(quán)的數(shù)據(jù)訪問或滲透。
檢測(cè)、預(yù)防和響應(yīng)必須自動(dòng)化。 容器生成的事件的速度和容量壓倒了當(dāng)前的安全操作流程。容器的短暫壽命也成為難以捕獲、分析和確定事故的根本原因。有效的威脅保護(hù)意味著自動(dòng)化數(shù)據(jù)收集、過濾、關(guān)聯(lián)和分析,以便能夠?qū)π率录鞒鲎銐蚩焖俚姆磻?yīng)。
面對(duì)這些新的挑戰(zhàn),安全專業(yè)人員將需要建立新的安全計(jì)劃以支持其組織對(duì)云原生技術(shù)的使用。自然地,你的安全計(jì)劃應(yīng)該解決云原生程序的整個(gè)生命周期的問題,這些應(yīng)用程序可以分為兩個(gè)不同的階段:構(gòu)建和部署階段以及運(yùn)行時(shí)階段。每個(gè)階段都有不同的安全考慮因素,必須全部加以解決才能形成一個(gè)全面的安全計(jì)劃。
確保容器的構(gòu)建和部署
構(gòu)建和部署階段的安全性側(cè)重于將控制應(yīng)用于開發(fā)人員工作流程和持續(xù)集成和部署管道,以降低容器啟動(dòng)后可能出現(xiàn)的安全問題的風(fēng)險(xiǎn)。這些控制可以包含以下準(zhǔn)則和最佳實(shí)踐:
保持鏡像盡可能小。容器鏡像是一個(gè)輕量級(jí)的可執(zhí)行文件,用于打包應(yīng)用程序代碼及其依賴項(xiàng)。將每個(gè)鏡像限制為軟件運(yùn)行所必需的內(nèi)容, 從而最小化從鏡像啟動(dòng)的每個(gè)容器的攻擊面。從最小的操作系統(tǒng)基礎(chǔ)鏡像(如 Alpine Linux)開始,可以減少鏡像大小,并使鏡像更易于管理。
掃描鏡像的已知問題。當(dāng)鏡像構(gòu)建后,應(yīng)該檢查已知的漏洞披露。可以掃描構(gòu)成鏡像的每個(gè)文件系統(tǒng)層,并將結(jié)果與定期更新的常見漏洞披露數(shù)據(jù)庫(kù)(CVE)進(jìn)行比較。然后開發(fā)和安全團(tuán)隊(duì)可以在鏡像被用來啟動(dòng)容器之前解決發(fā)現(xiàn)的漏洞。
數(shù)字簽名的鏡像。一旦建立鏡像,應(yīng)在部署之前驗(yàn)證它們的完整性。某些鏡像格式使用被稱為摘要的唯一標(biāo)識(shí)符,可用于檢測(cè)鏡像內(nèi)容何時(shí)發(fā)生變化。使用私鑰簽名鏡像提供了加密的保證,以確保每個(gè)用于啟動(dòng)容器的鏡像都是由可信方創(chuàng)建的。
強(qiáng)化并限制對(duì)主機(jī)操作系統(tǒng)的訪問。由于在主機(jī)上運(yùn)行的容器共享相同的操作系統(tǒng),因此必須確保它們以適當(dāng)限制的功能集啟動(dòng)。這可以通過使用內(nèi)核安全功能和 Seccomp、AppArmor 和 SELinux 等模塊來實(shí)現(xiàn)。
指定應(yīng)用程序級(jí)別的分割策略。微服務(wù)之間的網(wǎng)絡(luò)流量可以被分割,以限制它們彼此之間的連接。但是,這需要根據(jù)應(yīng)用級(jí)屬性(如標(biāo)簽和選擇器)進(jìn)行配置,從而消除了處理傳統(tǒng)網(wǎng)絡(luò)詳細(xì)信息(如 IP 地址)的復(fù)雜性。分割帶來的挑戰(zhàn)是,必須事先定義策略來限制通信,而不會(huì)影響容器在環(huán)境內(nèi)部和環(huán)境之間進(jìn)行通信的能力,這是正?;顒?dòng)的一部分。
保護(hù)容器所使用的秘密信息。微服務(wù)彼此相互之間頻繁交換敏感數(shù)據(jù),如密碼、令牌和密鑰,這稱之為秘密信息secret。如果將這些秘密信息存儲(chǔ)在鏡像或環(huán)境變量中,則可能會(huì)意外暴露這些。因此,像 Docker 和 Kubernetes 這樣的多個(gè)編排平臺(tái)都集成了秘密信息管理,確保只有在需要的時(shí)候才將秘密信息分發(fā)給使用它們的容器。
來自諸如 Docker、Red Hat 和 CoreOS 等公司的幾個(gè)領(lǐng)先的容器平臺(tái)和工具提供了部分或全部這些功能。開始使用這些方法之一是在構(gòu)建和部署階段確保強(qiáng)大安全性的最簡(jiǎn)單方法。
但是,構(gòu)建和部署階段控制仍然不足以確保全面的安全計(jì)劃。提前解決容器開始運(yùn)行之前的所有安全事件是不可能的,原因如下:首先,漏洞永遠(yuǎn)不會(huì)被完全消除,新的漏洞會(huì)一直出現(xiàn)。其次,聲明式的容器元數(shù)據(jù)和網(wǎng)絡(luò)分段策略不能完全預(yù)見高度分布式環(huán)境中的所有合法應(yīng)用程序活動(dòng)。第三,運(yùn)行時(shí)控制使用起來很復(fù)雜,而且往往配置錯(cuò)誤,就會(huì)使應(yīng)用程序容易受到威脅。
在運(yùn)行時(shí)保護(hù)容器
運(yùn)行時(shí)階段的安全性包括所有功能(可見性、檢測(cè)、響應(yīng)和預(yù)防),這些功能是發(fā)現(xiàn)和阻止容器運(yùn)行后發(fā)生的攻擊和策略違規(guī)所必需的。安全團(tuán)隊(duì)需要對(duì)安全事件的根源進(jìn)行分類、調(diào)查和確定,以便對(duì)其進(jìn)行全面補(bǔ)救。以下是成功的運(yùn)行時(shí)階段安全性的關(guān)鍵方面:
檢測(cè)整個(gè)環(huán)境以得到持續(xù)可見性。能夠檢測(cè)攻擊和違規(guī)行為始于能夠?qū)崟r(shí)捕獲正在運(yùn)行的容器中的所有活動(dòng),以提供可操作的“真相源”。捕獲不同類型的容器相關(guān)數(shù)據(jù)有各種檢測(cè)框架。選擇一個(gè)能夠處理容器的容量和速度的方案至關(guān)重要。
關(guān)聯(lián)分布式威脅指標(biāo)。 容器設(shè)計(jì)為基于資源可用性以跨計(jì)算基礎(chǔ)架構(gòu)而分布。由于應(yīng)用程序可能由數(shù)百或數(shù)千個(gè)容器組成,因此危害指標(biāo)可能分布在大量主機(jī)上,使得難以確定那些與主動(dòng)威脅相關(guān)的相關(guān)指標(biāo)。需要大規(guī)模,快速的相關(guān)性來確定哪些指標(biāo)構(gòu)成特定攻擊的基礎(chǔ)。
分析容器和微服務(wù)行為。微服務(wù)和容器使得應(yīng)用程序可以分解為執(zhí)行特定功能的最小組件,并被設(shè)計(jì)為不可變的。這使得比傳統(tǒng)的應(yīng)用環(huán)境更容易理解預(yù)期行為的正常模式。偏離這些行為基準(zhǔn)可能反映惡意行為,可用于更準(zhǔn)確地檢測(cè)威脅。
通過機(jī)器學(xué)習(xí)增強(qiáng)威脅檢測(cè)。容器環(huán)境中生成的數(shù)據(jù)量和速度超過了傳統(tǒng)的檢測(cè)技術(shù)。自動(dòng)化和機(jī)器學(xué)習(xí)可以實(shí)現(xiàn)更有效的行為建模、模式識(shí)別和分類,從而以更高的保真度和更少的誤報(bào)來檢測(cè)威脅。注意使用機(jī)器學(xué)習(xí)的解決方案只是為了生成靜態(tài)白名單,用于警報(bào)異常,這可能會(huì)導(dǎo)致嚴(yán)重的警報(bào)噪音和疲勞。
攔截并阻止未經(jīng)授權(quán)的容器引擎命令。發(fā)送到容器引擎(例如 Docker)的命令用于創(chuàng)建、啟動(dòng)和終止容器以及在正在運(yùn)行的容器中運(yùn)行命令。這些命令可以反映危害容器的意圖,這意味著可以禁止任何未經(jīng)授權(quán)的命令。
自動(dòng)響應(yīng)和取證。容器的短暫壽命意味著它們往往只能提供很少的事件信息,以用于事件響應(yīng)和取證。此外,云原生架構(gòu)通常將基礎(chǔ)設(shè)施視為不可變的,自動(dòng)將受影響的系統(tǒng)替換為新系統(tǒng),這意味著在調(diào)查時(shí)的容器可能會(huì)消失。自動(dòng)化可以確保足夠快地捕獲、分析和升級(jí)信息,以減輕攻擊和違規(guī)的影響。
基于容器技術(shù)和微服務(wù)架構(gòu)的云原生軟件正在迅速實(shí)現(xiàn)應(yīng)用程序和基礎(chǔ)架構(gòu)的現(xiàn)代化。這種模式轉(zhuǎn)變迫使安全專業(yè)人員重新考慮有效保護(hù)其組織所需的計(jì)劃。隨著容器的構(gòu)建、部署和運(yùn)行,云原生軟件的全面安全計(jì)劃將解決整個(gè)應(yīng)用程序生命周期問題。通過使用上述指導(dǎo)方針實(shí)施計(jì)劃,組織可以為容器基礎(chǔ)設(shè)施以及運(yùn)行在上面的應(yīng)用程序和服務(wù)構(gòu)建安全的基礎(chǔ)。
作者:WeLien Dang 是 StackRox 的產(chǎn)品副總裁,StackRox 是一家為容器提供自適應(yīng)威脅保護(hù)的安全公司。此前,他曾擔(dān)任 CoreOS 產(chǎn)品負(fù)責(zé)人,并在亞馬遜、Splunk 和 Bracket Computing 擔(dān)任安全和云基礎(chǔ)架構(gòu)的高級(jí)產(chǎn)品管理職位。