容器,是未來(lái)IT創(chuàng)新和數(shù)字化轉(zhuǎn)型第一驅(qū)動(dòng)力,這幾年已經(jīng)成為開(kāi)發(fā)人員最?lèi)?ài)。容器構(gòu)造之精密,絲毫不亞于建筑大師蜜蜂所造蜂房。正如達(dá)爾文贊嘆蜜蜂的巢房是自然界最令人驚訝的神奇建筑,蜂房是自然界最經(jīng)濟(jì)有效的建筑。在這里,青藤推出“蜂巢之聲”欄目,和大家講講堪比大自然鬼斧神工般的容器,其安全該怎么做?
雖然現(xiàn)在容器的使用率還不是特別高,但是許多組織機(jī)構(gòu)也正在加速采用容器,容器化是未來(lái)發(fā)展的所趨。根據(jù)Gartner預(yù)測(cè),到2023年將有超過(guò)70%組織會(huì)在生產(chǎn)環(huán)境中運(yùn)行超過(guò)3個(gè)容器應(yīng)用程序。如下圖所示,越來(lái)越多組織將采用容器化部署應(yīng)用,對(duì)超過(guò)一半的應(yīng)用程序進(jìn)行容器化處理的組織百分比從23%增至29%,增長(zhǎng)率為22%。同時(shí),將少于10%的應(yīng)用程序打包的組織的數(shù)量從32%下降到21%。
容器化部署應(yīng)用程序占比
但是,開(kāi)發(fā)人員常常用不安全的方式來(lái)部署容器,而安全團(tuán)隊(duì)卻很少或根本沒(méi)有機(jī)會(huì)參與。如何讓容器更加安全使用?
一、安全左移和自動(dòng)化是容器安全前提
在當(dāng)今快節(jié)奏的容器DevOps中,部署容器時(shí),安全人員必須注意容器共享OS內(nèi)核帶來(lái)潛在風(fēng)險(xiǎn)、鏡像漏洞、錯(cuò)誤配置、容器間網(wǎng)絡(luò)流量問(wèn)題。不管是防火墻還是入侵防御系統(tǒng),并不適用于容器環(huán)境。
此外,隨著現(xiàn)代環(huán)境越來(lái)越多地由軟件控制,并實(shí)現(xiàn)了自動(dòng)化,停止作業(yè)進(jìn)行安全評(píng)估已不再可行。標(biāo)準(zhǔn)的做法是盡可能地將安全融入生產(chǎn),并且通過(guò)微服務(wù)進(jìn)行快速迭代。
安全左移
現(xiàn)在容器鏡像是由開(kāi)發(fā)人員構(gòu)建的,因此,開(kāi)發(fā)人員承擔(dān)了許多其他職責(zé)。開(kāi)發(fā)人員對(duì)以前由其他團(tuán)隊(duì)處理的活動(dòng)所具有的控制權(quán)越來(lái)越多,包括一部分測(cè)試和運(yùn)營(yíng)。
無(wú)論是在測(cè)試環(huán)境中還是在生產(chǎn)環(huán)境中,由開(kāi)發(fā)人員構(gòu)建的容器鏡像的運(yùn)行方式都是相同的。因此,容器鏡像必須是獨(dú)立的而且適配各類(lèi)環(huán)境,只需配置好與容器相關(guān)的安全和加固策略,適當(dāng)調(diào)整可與生產(chǎn)資源連接的基本操作系統(tǒng)即可。
因此,容器安全必須左移,從代碼編寫(xiě)和編譯時(shí)就要確保容器安全。如果在生產(chǎn)過(guò)程中解決安全問(wèn)題必然會(huì)產(chǎn)生大量浪費(fèi),因?yàn)樾迯?fù)發(fā)現(xiàn)的問(wèn)題就要終止創(chuàng)新管道,并將容器返回到開(kāi)發(fā)階段。
自動(dòng)化
容器是DevOps實(shí)踐最佳承載方式之一,微服務(wù)事實(shí)上成為新應(yīng)用程序體系結(jié)構(gòu)。借助容器化微服務(wù),不同的開(kāi)發(fā)團(tuán)隊(duì)通過(guò)為每個(gè)微服務(wù)建立并行開(kāi)發(fā)管道,可將創(chuàng)新速度提高十倍以上。
當(dāng)這些微服務(wù)投入生產(chǎn)時(shí),編排軟件可以對(duì)其進(jìn)行部署和管理。編排軟件是基于策略來(lái)運(yùn)行的,從而讓容器部署實(shí)現(xiàn)遠(yuǎn)超人工可以實(shí)現(xiàn)的效果。這就有效地讓人員從容器化生產(chǎn)環(huán)境運(yùn)營(yíng)中抽出身來(lái),讓他們能夠進(jìn)行策略制定和監(jiān)控異常。這就意味著支持自動(dòng)化、API和策略運(yùn)行,從而讓容器具有自行評(píng)估和采取措施的能力。
二、全生命周期方案
構(gòu)建階段
(1)安全鏡像掃描
通常,容器鏡像是從根鏡像的基礎(chǔ)上構(gòu)建出來(lái)的,根鏡像提供了操作系統(tǒng)組件和應(yīng)用程序中間件(例如node.js或Tomcat)。然后,開(kāi)發(fā)人員通過(guò)自己的代碼對(duì)根鏡像進(jìn)行拓展,形成微服務(wù)的應(yīng)用程序結(jié)構(gòu)。一般情況下,無(wú)需修改即可直接使用Kafka或Vertica等應(yīng)用中間件。
但是,如果是從Docker Hub等公共倉(cāng)庫(kù)獲取根鏡像時(shí),開(kāi)發(fā)人員無(wú)法了解那些未經(jīng)測(cè)試和未經(jīng)驗(yàn)證的根鏡像究竟會(huì)帶來(lái)哪些安全風(fēng)險(xiǎn)。因此,需要通過(guò)容器鏡像掃描,檢測(cè)是否包含了常用漏洞和風(fēng)險(xiǎn)(CVE),減少最終容器鏡像的攻擊面。
正確的鏡像掃描應(yīng)包括以下幾個(gè)級(jí)別:
·進(jìn)行鏡像掃描,檢查根鏡像,檢測(cè)開(kāi)源鏡像庫(kù)中是否有已知的第三方漏洞。
·對(duì)配置和部署腳本進(jìn)行靜態(tài)掃描,及早發(fā)現(xiàn)錯(cuò)誤配置問(wèn)題,并對(duì)已部署的鏡像進(jìn)行動(dòng)態(tài)基礎(chǔ)架構(gòu)加固掃描。
(2)對(duì)受信鏡像進(jìn)行簽名和注冊(cè)
在查看容器鏡像時(shí),確保已對(duì)其進(jìn)行了掃描和測(cè)試以確保安全。了解這一點(diǎn)很重要,因?yàn)檫@會(huì)影響下一個(gè)階段(例如轉(zhuǎn)移到生產(chǎn)環(huán)境中)的其他檢查點(diǎn)。
在成功進(jìn)行鏡像掃描和創(chuàng)建安全評(píng)分后,可以對(duì)容器鏡像重新簽名,包括安全評(píng)分和測(cè)試結(jié)果,標(biāo)明該容器鏡像已經(jīng)過(guò)測(cè)試并達(dá)到特定的安全狀態(tài)等級(jí)。
(3)觀(guān)察應(yīng)用程序行為
當(dāng)開(kāi)發(fā)人員通過(guò)許多容器化的微服務(wù)形成其工作負(fù)載和應(yīng)用程序時(shí),網(wǎng)絡(luò)將成為應(yīng)用程序結(jié)構(gòu)。網(wǎng)絡(luò)動(dòng)態(tài)綁定所有微服務(wù)。以前,所有邏輯都是在編譯時(shí)綁定的。現(xiàn)在,微服務(wù)是解綁的,并根據(jù)需要在運(yùn)行時(shí)與其他服務(wù)形成連接。
當(dāng)然,判斷正常行為和異常行為并非易事。將一個(gè)應(yīng)用程序分解為可服務(wù)多個(gè)應(yīng)用程序的微服務(wù)時(shí),威脅建模要困難得多。建議在開(kāi)發(fā)和集成時(shí)觀(guān)察微服務(wù)架構(gòu),了解哪些是正常行為,這有助于威脅建模。在生產(chǎn)中,可通過(guò)威脅模型檢測(cè)異常行為,進(jìn)行隔離。
分發(fā)
(1)審核已知內(nèi)容
隨著容器鏡像從一個(gè)鏡像倉(cāng)庫(kù)遷移到另一個(gè)鏡像倉(cāng)庫(kù)(不管是內(nèi)部還是外部運(yùn)行的),遇到包含未知漏洞的鏡像風(fēng)險(xiǎn)都會(huì)增加。容器安全系統(tǒng)需要在通過(guò)容器鏡像倉(cāng)庫(kù)時(shí)驗(yàn)證容器鏡像,一旦發(fā)現(xiàn)不合規(guī)情況,就要攔截和隔離相關(guān)鏡像。
每次將容器升級(jí)到新?tīng)顟B(tài)時(shí)(例如,從開(kāi)發(fā)到測(cè)試或從測(cè)試到生產(chǎn)),都應(yīng)執(zhí)行額外的強(qiáng)制措施,以確保在上一階段為了方便進(jìn)行調(diào)試/監(jiān)視/基準(zhǔn)測(cè)試而添加的任何配置不會(huì)隨容器本身而進(jìn)入下一個(gè)階段。
(2)審核風(fēng)險(xiǎn)評(píng)分
容器和鏡像層的安全策略非常廣泛,因此,很難設(shè)置一個(gè)人為管理的統(tǒng)一且易于維護(hù)的安全策略。對(duì)安全策略進(jìn)行編碼,對(duì)每個(gè)檢查點(diǎn)的每個(gè)容器鏡像生成一個(gè)風(fēng)險(xiǎn)評(píng)分,這樣就可以實(shí)現(xiàn)容器生命周期的標(biāo)準(zhǔn)化,并對(duì)每個(gè)重要的檢查點(diǎn)中設(shè)置最低安全閾值,如果沒(méi)有達(dá)到最低水平,將對(duì)容器生命周期進(jìn)行控制。
風(fēng)險(xiǎn)評(píng)分還有助于促進(jìn)Dev、Sec和Ops的協(xié)同合作,因?yàn)檫@個(gè)統(tǒng)一的風(fēng)險(xiǎn)評(píng)分是對(duì)這三方的綜合評(píng)分,這有助于促進(jìn)不同團(tuán)隊(duì)和專(zhuān)業(yè)人士保持統(tǒng)一行為。
部署
(1)自動(dòng)部署
開(kāi)發(fā)人員正在以不斷加快的速度創(chuàng)建容器格式的微服務(wù)。不僅DevOps管道難以管理,而且在生產(chǎn)環(huán)境中,在調(diào)度和編排方面,人工操作要讓位于機(jī)器操作,因?yàn)榫幣藕驼{(diào)度程序可以實(shí)現(xiàn)容器化微服務(wù)的自動(dòng)化部署。編排程序可以比人做出更好的布局和擴(kuò)展決策,因此,可以統(tǒng)一穩(wěn)定地實(shí)施安全策略。
為了將管理良好的安全狀態(tài)始終維持在一個(gè)可接受的水平上,要將容器安全軟件與部署系統(tǒng)聯(lián)系起來(lái),以便您按統(tǒng)一方式遵守安全策略。
基于基礎(chǔ)架構(gòu)即代碼(IaC)原則,要對(duì)所編寫(xiě)的、支持自動(dòng)化部署任務(wù)的代碼進(jìn)行掃描和驗(yàn)證,按照應(yīng)用程序代碼級(jí)別,發(fā)現(xiàn)代碼中存在的漏洞。
(2)安全基礎(chǔ)架構(gòu)
在主機(jī)上部署干凈無(wú)漏洞的容器仍然會(huì)有安全風(fēng)險(xiǎn),需要實(shí)施相關(guān)的加固最佳實(shí)踐,否則,針對(duì)流氓容器的保護(hù)就太少了。例如,以CIS基準(zhǔn)或公司加固策略為基準(zhǔn),查看與加固最佳實(shí)踐存在哪些偏差;向管理員發(fā)出警報(bào),并為容器化的基礎(chǔ)架構(gòu)提供安全評(píng)分。
(3)用戶(hù)和機(jī)器審計(jì)
通過(guò)完整的審核跟蹤,團(tuán)隊(duì)可以調(diào)查導(dǎo)致安全事件的原因,并據(jù)此采取補(bǔ)救措施并實(shí)施新的安全策略。這就需要知道誰(shuí)做了什么,哪個(gè)容器編排程序?qū)⒛膫€(gè)鏡像部署到了物理或虛擬主機(jī),或者為什么阻止了容器鏡進(jìn)行部署或訪(fǎng)問(wèn)給定資源。
容器安全系統(tǒng)需要與人為操作系統(tǒng)和機(jī)器操作系統(tǒng)連接起來(lái),對(duì)容器基礎(chǔ)設(shè)施上發(fā)生的所有事件創(chuàng)建準(zhǔn)確的審計(jì)跟蹤,并記錄其自身的行動(dòng)和活動(dòng)。
運(yùn)行
(1)秘鑰管理
在很多系統(tǒng)中,密碼和安全令牌之類(lèi)的秘鑰是安全系統(tǒng)的一個(gè)重要組成部分。在主機(jī)上部署容器鏡像或訪(fǎng)問(wèn)基于網(wǎng)絡(luò)的資源時(shí)需要這些秘鑰。若將秘鑰存儲(chǔ)在容器或環(huán)境變量中,所有有權(quán)訪(fǎng)問(wèn)該容器的人都會(huì)可以看到。
容器系統(tǒng)要求在進(jìn)行操作(例如容器部署)時(shí)使用秘鑰。因此,容器安全系統(tǒng)通常需要訪(fǎng)問(wèn)秘鑰系統(tǒng),在容器命令中注入正確的秘鑰進(jìn)行部署和運(yùn)行。因此,容器的秘鑰管理需要采用專(zhuān)門(mén)解決方案。例如,與HashiCorp的Vault之類(lèi)的秘鑰系統(tǒng)集成后,僅特定用戶(hù)和容器可以訪(fǎng)問(wèn)特定秘鑰。
(2)與主機(jī)隔離
在主機(jī)上運(yùn)行的容器可能會(huì)訪(fǎng)問(wèn)主機(jī)資源,例如計(jì)算資源、存儲(chǔ)資源和網(wǎng)絡(luò)資源。此外,由于容器通常包含微服務(wù),因此從本質(zhì)上講,容器應(yīng)僅限于一些特定任務(wù),并且每個(gè)容器通常負(fù)責(zé)的任務(wù)只有一個(gè)。
一旦流氓容器獲得對(duì)主機(jī)資源(尤其是網(wǎng)絡(luò))的訪(fǎng)問(wèn)權(quán)限,就可以從網(wǎng)絡(luò)上獲取更多資源,進(jìn)一步滲透到其他主機(jī)和系統(tǒng)。應(yīng)該限制正在運(yùn)行的容器的訪(fǎng)問(wèn)權(quán)限,并且這些容器只能使用已批準(zhǔn)的特定主機(jī)資源,從而限制其對(duì)主機(jī)和網(wǎng)絡(luò)的影響。
(3)容器網(wǎng)絡(luò)安全
一臺(tái)主機(jī)上有多個(gè)容器,每個(gè)容器都與同一主機(jī)或基于網(wǎng)絡(luò)的服務(wù)上的相鄰容器進(jìn)行交互,僅依靠網(wǎng)絡(luò)安全措施是不夠的,因?yàn)橹鳈C(jī)內(nèi)部發(fā)生的一切對(duì)于這些解決方案都是不可見(jiàn)的。
容器安全解決方案需要更靠近主機(jī)上發(fā)生事件的地方。比如,通過(guò)容器化的agent,它會(huì)監(jiān)控所有主機(jī)網(wǎng)絡(luò)活動(dòng),主機(jī)上運(yùn)行的容器的流入和流出,并觀(guān)察容器是如何與不同主機(jī)的另一個(gè)網(wǎng)絡(luò)進(jìn)行交互的。了解了網(wǎng)絡(luò)交互情況之后,可以通過(guò)網(wǎng)絡(luò)流量加固活動(dòng)來(lái)阻止任何異?;顒?dòng)。
應(yīng)根據(jù)在構(gòu)建階段進(jìn)行的威脅建模,預(yù)先規(guī)劃適當(dāng)?shù)木W(wǎng)絡(luò)分段,并對(duì)其進(jìn)行實(shí)施和驗(yàn)證,確保失陷容器盡可能少地影響其他網(wǎng)段,而不會(huì)對(duì)整個(gè)網(wǎng)絡(luò)造成重大影響系統(tǒng)。
(4)應(yīng)用程序配置文件加固
應(yīng)用程序架構(gòu)是由眾多微服務(wù)構(gòu)建而成,每個(gè)微服務(wù)都具有一個(gè)或多個(gè)實(shí)例,可以實(shí)現(xiàn)彈性擴(kuò)展。應(yīng)用程序架構(gòu)中的容器在不斷發(fā)生變化,主要由編排產(chǎn)品來(lái)實(shí)現(xiàn)的。
因此,想要維持正確的應(yīng)用程序拓?fù)浜陀^(guān)察異常行為也愈發(fā)困難。例如,異常行為可能是由軟件缺陷帶到了生產(chǎn)環(huán)境中造成的,也可能是通過(guò)第三方開(kāi)放源代碼庫(kù)滲透的惡意代碼引起的。
建議,在開(kāi)發(fā)階段捕獲正常的應(yīng)用程序拓?fù)浜托袨?,然后將其用于與生產(chǎn)環(huán)境的實(shí)際行為進(jìn)行對(duì)比,從而發(fā)現(xiàn)異常情況。另外,可以先讓?xiě)?yīng)用程序運(yùn)行一段時(shí)間,確定在生產(chǎn)環(huán)境中的預(yù)期應(yīng)用程序,然后再捕獲哪些屬于正常網(wǎng)絡(luò)行為,并將其另存為正常應(yīng)用程序行為配置文件。
三、寫(xiě)在最后
從簡(jiǎn)單的應(yīng)用容器化,到云原生應(yīng)用的開(kāi)發(fā),容器技術(shù)成為了其最基礎(chǔ)也是最核心的支 撐技術(shù)。新技術(shù)帶來(lái)便捷與利益的同時(shí),其安全性也需要引起足夠的重視。近年來(lái),由于容器以及容器應(yīng)用環(huán)境引發(fā)的安全風(fēng)險(xiǎn)與安全事件不斷的被曝出,容器網(wǎng)絡(luò)、容器鏡像、暴露的 API、容器的隔離等問(wèn)題成為了容器使用時(shí)需要著重考慮的問(wèn)題。
目前,市場(chǎng)上涌現(xiàn)了一批容器安全產(chǎn)品安全廠(chǎng)商,如Twistlock、Aqua等等,國(guó)內(nèi)自研容器安全產(chǎn)品的則有青藤云安全。基于青藤Agent的主機(jī)防護(hù)能力,監(jiān)控宿主機(jī)上容器相關(guān)的文件、進(jìn)程、系統(tǒng)調(diào)用等等信息,增加其Agent中對(duì)于容器的清點(diǎn)、監(jiān)控、防護(hù)能力,以實(shí)現(xiàn)一個(gè)Agent,實(shí)現(xiàn)宿主機(jī)安全、容器安全兩種防護(hù)的效果。
(免責(zé)聲明:本網(wǎng)站內(nèi)容主要來(lái)自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請(qǐng)進(jìn)一步核實(shí),并對(duì)任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對(duì)有關(guān)資料所引致的錯(cuò)誤、不確或遺漏,概不負(fù)任何法律責(zé)任。
任何單位或個(gè)人認(rèn)為本網(wǎng)站中的網(wǎng)頁(yè)或鏈接內(nèi)容可能涉嫌侵犯其知識(shí)產(chǎn)權(quán)或存在不實(shí)內(nèi)容時(shí),應(yīng)及時(shí)向本網(wǎng)站提出書(shū)面權(quán)利通知或不實(shí)情況說(shuō)明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實(shí)情況證明。本網(wǎng)站在收到上述法律文件后,將會(huì)依法盡快聯(lián)系相關(guān)文章源頭核實(shí),溝通刪除相關(guān)內(nèi)容或斷開(kāi)相關(guān)鏈接。 )