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