王 歡
(中國移動通信集團安徽有限公司,安徽 合肥 230001)
近年來,云計算模式逐漸被業(yè)界認可和接受。平臺即服務(Platform-as-a-Service,PaaS)作為云計算3大服務之一,同樣實現(xiàn)了快速發(fā)展。容器技術憑借其彈性敏捷的特性和活躍強大的社區(qū)支持,逐漸成為推動PaaS發(fā)展的核心技術。容器技術是一種輕量的虛擬化方式,此處的輕量主要是相較于虛擬化技術。例如,虛擬化技術通常在Hypervisor層實現(xiàn)對硬件資源的虛擬化,Hypervisor為虛擬機提供了虛擬的運行平臺,管理虛擬機的操作系統(tǒng)運行。其中,每個虛擬機都有自己的操作系統(tǒng)、系統(tǒng)庫以及應用[1]。而容器并沒有Hypervisor層,每個容器和主機共享硬件資源和操作系統(tǒng)。容器技術在操作系統(tǒng)層面實現(xiàn)了對計算機系統(tǒng)資源的虛擬化,在操作系統(tǒng)中通過對CPU、內存以及文件系統(tǒng)等資源的隔離、劃分和控制,實現(xiàn)進程之間透明的資源使用。
作為容器技術的一種具體實現(xiàn),Docker(一種開源的應用容器引擎)近年來受到越來越多的關注,在某種程度上已經(jīng)成為了容器技術的代表。Docker在設計上采用了常見的客戶機/服務器(Client/Server,C/S)架構,在主機運行Docker服務程序,Docker Client根據(jù)需求向Docker服務程序發(fā)出相關的請求[2]。為了實現(xiàn)集群管理,Docker官方還提供了一個遠程管理接口的REST API,允許通過傳輸控制協(xié)議(Transmission Control Protocol,TCP)遠程訪問Docker服務。在使用Docker Swarm時,Docker節(jié)點上會開放一個TCP端口2375,綁定在0.0.0.0上。開啟這種沒有任何加密和訪問控制的Docker Remote API服務非常危險,尤其是將默認的2375端口暴露到互聯(lián)網(wǎng)中,一旦被攻擊者發(fā)現(xiàn),攻擊者無需認證即可訪問到容器數(shù)據(jù),從而導致敏感信息泄露。此外,攻擊者也可以惡意刪除容器上的數(shù)據(jù)或利用容器自身特性直接訪問主機上的敏感信息,獲取服務器root權限,對敏感文件進行修改并最終完全控制服務器[3]。
開發(fā)者通常會在Docker官方的Docker Hub倉庫下載鏡像,這些鏡像一部分來源于開發(fā)鏡像內相應軟件的官方組織,但還有大量鏡像來自第三方組織或個人。在整個應用生命周期中,開發(fā)人員、測試人員以及運維人員會根據(jù)不同需求下載并運行鏡像,在容器運行前進行鏡像檢查非常重要。除了Docker Hub外,還有大量的第三方鏡像倉庫,包括DaoCloud、阿里云等。這些第三方鏡像倉庫在為獲取鏡像提供方便的同時,也存在潛在的安全風險,如下載鏡像內軟件本身是否包含漏洞、下載的鏡像是否被惡意植入后門、鏡像在傳輸過程中是否被篡改等[4]。
由于容器與主機共享內核,因此可能會存在容器隔離失效的安全風險。攻擊者只要攻破容器操作系統(tǒng)內核,就可以訪問主機上的文件系統(tǒng)或進入其他容器,導致容器隔離失效。主機的文件系統(tǒng)被掛載到多個容器的目錄里,不同的容器可以訪問同一個目錄,只要進入某個容器中,就可以通過共同掛載目錄訪問其他容器的文件系統(tǒng),這樣可能會引起信息泄露或內容篡改等安全問題。
容器安全防護平臺由基礎功能層、核心功能層、接口層以及可視化層組成,基于自動學習等新技術對容器全生命周期進行自適應安全防護和統(tǒng)一管理,包括鏡像安全、容器安全、微服務安全以及網(wǎng)絡安全等?;A功能層針對容器集群的基線、鏡像、倉庫、主機等基礎運行環(huán)境進行安全審查,保障容器集群的運行穩(wěn)定。核心功能層基于安全左移理念實現(xiàn)開發(fā)安全、運行安全、微服務安全以及運行環(huán)境安全管理,形成容器安全閉環(huán)管理。接口層通過能力的完善和接口開放達成與現(xiàn)有平臺數(shù)據(jù)對接,提供主流接口格式,支持自定義接口擴展,可以實現(xiàn)數(shù)據(jù)統(tǒng)一管控??梢暬瘜油ㄟ^對數(shù)據(jù)簡潔明了的展示,構建容器安全的整體監(jiān)控和防護體系。
1.1.1 容器資產(chǎn)識別
首先,支持查看運行容器相關信息,包含容器名、容器狀態(tài)、容器啟動時間、運行用戶、停止時間、鏡像創(chuàng)建時間、容器宿主機狀態(tài)以及宿主機IP。其次,支持查看管理容器內的所部署Web服務相關信息,包括容器名、啟動用戶、進程路徑以及進程命令行。最后,支持查看數(shù)據(jù)庫容器內的數(shù)據(jù)庫應用信息,包括容器名、版本、監(jiān)聽端口、二進制路徑以及配置文件路徑。
1.1.2 容器訪問可視化
首先,支持以容器拓撲圖的方式展示業(yè)務容器之間的調用關系;其次,支持從集群、命名空間、運行服務、容器名等維度進行展示;最后,支持訪問關系詳情、進站源IP、出站目的IP、關聯(lián)信息以及安全狀態(tài)等的展示。
1.1.3 鏡像文件安全防護
對制作的鏡像文件進行靜態(tài)和動態(tài)安全掃描,及時發(fā)現(xiàn)鏡像文件中的安全漏洞、木馬病毒、涉密文件以及環(huán)境變量,保證進入生產(chǎn)環(huán)境的是安全鏡像。此外,還需要對鏡像的來源和歷史操作行為進行分析,對非法來源和有安全問題的鏡像禁止運行。
1.1.4 容器運行保護
對容器運行過程進行全程安全監(jiān)控,對容器訪問宿主機的資源進行細粒度控制,防止有越權訪問破壞容器隔離性的行為。對容器內應用進行安全漏洞識別和網(wǎng)絡威脅檢測,從而保證容器內應用的安全。對容器的相關運行環(huán)境(如鏡像倉庫、容器守護進程以及容器編排集成工具)進行安全風險識別及控制,支持查看風險結果詳細信息,包括危險程度、風險描述信息、風險類型、風險特征、風險修復建議、存在風險的主機以及集群信息。
1.1.5 容器鏡像安全檢查
首先,支持對鏡像進行病毒木馬和Webshell檢查并告警,檢查結果包含文件名、文件路徑等,告警信息包括名稱、級別、時間、影響節(jié)點、影響鏡像以及處理建議等。其次,支持應用漏洞檢測,檢測出鏡像內的應用漏洞風險,檢查結果包括危險程度、漏洞名稱、漏洞類型、漏洞風險特征、存在漏洞的應用及應用版本、應用修復版本等。同時支持查看漏洞所在鏡像層Layer信息,包括層指令、LayerID。最后,支持鏡像阻斷能力,阻斷存在指定病毒木馬文件Hash、指定漏洞編號、指定軟件包或軟件包版本、特權啟動、特定許可證書以及指定敏感信息規(guī)則的鏡像運行。
1.1.6 容器入侵檢測
首先,支持實時檢測Web后門并告警,告警信息包括名稱、級別、鏡像影響、處理建議、受感染容器、發(fā)現(xiàn)時間以及容器名。其次,支持容器暴力破解檢測并展示暴力破解詳細信息,包括最近攻擊時間、攻擊來源、被攻擊節(jié)點以及歷史攻擊次數(shù)。再次,支持病毒檢測,可以實時告警上報病毒木馬入侵事件,告警信息包括文件名、文件路徑、受感染容器以及發(fā)現(xiàn)時間。最后,支持容器逃逸檢測,可以檢測出容器的敏感權限、利用漏洞逃逸等逃逸風險行為并告警上報。
1.1.7 容器審計日志
容器安全防護平臺支持容器審計日志功能,能夠查看容器內的進程啟動日志事件和事件相關的容器名、容器ID、進程名、進程命令行以及進程PID等詳細信息。
1.1.8 管理中心
容器安全防護平臺提供圖形頁面管理功能,支持容器相關資產(chǎn)的查看、管理以及安全事件的告警和綜合處理。管理中心支持以Web形式進行登錄,登錄系統(tǒng)后可以查看該用戶已授權的資源,用戶可以對其擁有的資源進行操作。其中,管理員用戶可以重置自身及其他用戶的密碼。
容器安全防護平臺采用全球獨創(chuàng)的容器基因檢測技術,基于機器學習對容器全生命周期進行深度分析學習并建立安全模型,為每一個容器生成運行白名單,可以應對容器未知威脅,真正實現(xiàn)自適應防護。該技術可以為鏡像生成自動修復的配置文件,支持鏡像的全流程安全閉環(huán)管理。將創(chuàng)新的行為學習方式與規(guī)則進行互補,有效提高入侵檢測的準確性,大大提升平臺的安全檢測能力和服務橫向擴展能力。與市場上同類產(chǎn)品相比,容器安全防護平臺是國內唯一云原生容器安全防護產(chǎn)品,運行在容器集群中可以對容器的網(wǎng)絡、微服務、集群自身的安全進行防護,處于行業(yè)領先水平[5]。
平臺采用微服務開發(fā)框架,將鏡像安全、容器運行防護、集群安全、微服務安全以及主機安全進行了細分,每個服務彼此獨立,一個服務的啟停上下線不會影響其他服務的運行。平臺采用全容器化部署,防護和監(jiān)控模式靈活切換,支持多集群同時管理。平臺引入了容器調度引擎Kubernetes(簡稱K8s)來管理、調度、啟動服務集群,其最大可管理的集群節(jié)點高達5 000個。平臺能自動感知服務實例POD狀態(tài),若發(fā)生意外停止或人為刪除,可立即啟動新的服務實例副本。這些提供相同服務的實例POD通過K8s中Service和Proxy模塊將集群訪問流量動態(tài)負載均衡到各個實例上,同時也可以將常見的Nginx或Haproxy等反向代理負載均衡器軟件放到K8s集群中運行,充分保障平臺運行的穩(wěn)定性。
容器安全平臺核心功能組件皆以容器形式交付,所有組件均使用旁路部署模式,在客戶現(xiàn)有的業(yè)務架構下不需要任何改動即可無感知地部署到客戶環(huán)境中,實現(xiàn)所部署節(jié)點的容器資產(chǎn)可視化、合規(guī)檢查以及安全防護。所有組件全部部署在K8s集群,在管理集群部署統(tǒng)一管控平臺,其中所有K8s集群都會部署防御容器和服務端。數(shù)據(jù)庫可以同樣部署在管控平臺,也可以部署在集群外。K8s集群部署服務端會受到管控集群的任務調度器控制,從而實現(xiàn)多集群的管理。
容器安全防護平臺使用純容器非特權旁路部署,所有組件受Kubernetes管理調度。在部署時會設置資源限制,容器本身具有天然的隔離性,每個容器具有獨立的進程間通信、文件系統(tǒng)掛載點、隔離網(wǎng)絡協(xié)議棧、進程號、用戶、主機名以及域名,容器安全組件不會影響到主機服務和容器服務。容器使用CGroup進行資源限制,容器安全組件資源占用超出時會觸發(fā)內存溢出(Out Of Memory,OOM)被重啟,避免大量占用主機資源,造成主機僵死情況。容器安全組件在每一個機器上只會占用機器有限的資源,不會對任何主機上的主機服務和容器服務造成影響。
引入新的容器集群和機器時進行合規(guī)檢測,保障容器運行環(huán)境安全,防止不安全的配置造成容器逃逸或集群入侵事件。容器防護平臺能夠對容器及集群進行合規(guī)審計,支持主流的安全檢測標準?;诋a(chǎn)品提供可視化的檢測結果和修復建議,用戶可以自行修復不合規(guī)的檢測項。
引入新容器業(yè)務需要保障業(yè)務鏡像安全,使用平臺鏡像掃描功能可以及時發(fā)現(xiàn)鏡像中存在的漏洞和木馬病毒,根據(jù)用戶需要實現(xiàn)自定義阻斷,包括高危漏洞鏡像阻斷、攜帶敏感信息鏡像阻斷等。
在日常運營中,可以開啟容器安全的入侵行為黑名單,通過告警功能結合容器網(wǎng)絡連接拓撲實現(xiàn)容器入侵影響范圍的快速判斷,使用容器網(wǎng)絡隔離實現(xiàn)容器入侵屏蔽治理。
“護網(wǎng)”和“重保”期間不會引入新業(yè)務并增加新的集群,用戶需要關注運行時的安全,細致檢查容器所有行為,防范未知攻擊和加密攻擊。此外,用戶還需要關注集群的自身漏洞和可被利用的集群漏洞,借助使用容器平臺的集群滲透測試功能來進行事前檢測。
根據(jù)中國移動磐基PaaS平臺安徽節(jié)點建設項目要求,安徽公司信息系統(tǒng)部組織了磐基PaaS平臺安徽節(jié)點工程建設工作,建設內容包括彈性計算平臺、容器云門戶、開發(fā)交付體系、微服務體系、組件管理以及容器云運營運維。同步上線容器安全防護平臺,滿足“三同步”及容器安全管控要求。容器安全防護平臺具備容器資產(chǎn)識別、容器訪問可視化、鏡像安全檢查、容器入侵檢測、運行環(huán)境安全監(jiān)測、容器審計以及運行合規(guī)檢查等功能。在DevOps剛啟動時,對Docker file進行掃描,沒有命中阻斷規(guī)則可以進行構建。實時監(jiān)控掃描代碼倉庫,在鏡像構建后對其進行掃描,保障鏡像安全,沒有命中阻斷規(guī)則時可以上傳到鏡像倉庫。在傳輸過程中實現(xiàn)鏡像的認證簽名,防止篡改,保障鏡像的傳輸安全。對從倉庫上傳到主機上的鏡像進行掃描,沒有命中阻斷規(guī)則時可以啟動。
系統(tǒng)上線后運行穩(wěn)定,已經(jīng)監(jiān)控B域整個集群,包括20多個節(jié)點、1 500多個容器以及2 200多個鏡像,最大支持3 000個容器的全生命周期監(jiān)控。對外提供了新容器鏡像自動監(jiān)測、漏洞掃描以及高危鏡像自動阻斷等功能,新集群、新節(jié)點配置便捷。容器安全防護平臺的建設和投入使用不僅解決了安徽移動IT容器云項目建設時部分安全能力與IT基礎設施虛擬化、容器化不匹配的問題,而且也解決了部分安全機制與一體化開發(fā)交付不匹配的現(xiàn)狀。
安徽移動容器安全防護平臺的建設為PaaS容器平臺提供了自主可控的安全防護,可以應對容器全生命周期存在的安全風險。從容器運行的基礎環(huán)境安全、容器軟件供應鏈安全、容器運行時安全、各類微服務應用接口安全以及針對異常行為的微隔離與阻斷等維度采取針對性措施,提升了PaaS平臺的安全防護能力,為IT容器云的發(fā)展奠定基礎。