王 歡
(中國移動通信集團安徽有限公司,安徽 合肥 230000)
此次項目構(gòu)建全生命周期的容器安全防護體系的意義如下:
(1)防止不安全的鏡像分發(fā)到生產(chǎn)環(huán)境:通過構(gòu)建自動化的容器鏡像安全掃描系統(tǒng),及時了解容器鏡像的安全風(fēng)險,消除潛在的安全風(fēng)險。
實時了解鏡像倉庫中的安全風(fēng)險,防止不安全的鏡像分發(fā)到生產(chǎn)環(huán)境;
提供容器鏡像的敏感信息掃描,防止密鑰、數(shù)據(jù)庫密碼等敏感信息泄露;
持續(xù)跟蹤最新的漏洞和病毒,當(dāng)最新安全通告公布后,自動測試受影響的所有容器鏡像,幫助安全團隊對新增風(fēng)險作出快速響應(yīng)。
(2)防止容器逃逸:通過構(gòu)建容器運行時安全檢測體系,提升公司PAAS的安全防護水平,防止黑客入侵、挖礦等,對公司商譽造成影響。
提供容器配置基線檢測:能夠?qū)ocker和K8s配置合規(guī)進行檢測,防止由于配置不當(dāng)造成的黑客入侵;
容器運行時入侵檢測:檢測容器隔離失效、容器內(nèi)部的異常行為等,防止容器被入侵,容器逃逸發(fā)生;
容器安全審計:監(jiān)控容器的創(chuàng)建、運行、停止銷毀等動作;監(jiān)控主機和容器內(nèi)部的shell命令執(zhí)行;監(jiān)控容器關(guān)鍵文件、配置的訪問、修改。防止容器被入侵后的跟蹤溯源。
針對容器出現(xiàn)的風(fēng)險和威脅,傳統(tǒng)防護手段已經(jīng)失效,縱觀容器的生命周期,容器存在的三個形態(tài)為:模板、鏡像和容器。應(yīng)用容器是由模板文件先進行編譯成鏡像,鏡像通過運行變更成容器,最終容器方式運行其中的應(yīng)用。在整個容器的安全生命周期中,通過采用自動檢測、自動分析、自動處理的方式來防御整個容器生命周期中所遇到的安全威脅。
圖1 防護模型圖
安徽移動在“全生命周期的容器安全防護體系”的建設(shè)過程中,對容器全生命周期涉及到的各個環(huán)節(jié),通過一套容器安全管理平臺對容器鏡像文件的制作過程、容器運行的過程以及容器內(nèi)應(yīng)用進行全自動的安全檢測、預(yù)警與防護。
每個容器鏡像都是由一系列的“鏡像層”組成,需要對其解包后安全分析掃描以發(fā)現(xiàn)安全漏洞。從cve漏洞、木馬病毒、可疑歷史操作、敏感信息泄漏以及是否是可信任鏡像等多個維度對鏡像文件進行深度分析。鏡像檢測的核心是已知系統(tǒng)cve檢測。掃描器獲取到鏡像后,將它分離成相應(yīng)的層和軟件包。然后這些軟件包將與多個cve數(shù)據(jù)庫的名稱和版本進行對比,從而判定是否存在漏洞。而對鏡像中的文件進行分層提取后,同時逐層進行惡意代碼檢測。主要檢測webshell和木馬病毒。檢測方式分別如下:
(1)模糊哈希。
(2)yara規(guī)則。
(3)機器學(xué)習(xí)的CNN-Text-Classfication分類算法。
通過模糊哈希算法來匹配docker鏡像中的文件內(nèi)容,對于可疑的文件進行打分。同時使用病毒引擎,進行惡意代碼識別,還使用CNN-Text-Classfication分類算法對文件進行檢測。三種檢測方法都有相應(yīng)的權(quán)重,最終會根據(jù)打分結(jié)果來判斷文件是否是木馬病毒文件。
通過對鏡像文件進行解包后,從manifest.json中讀取歷史操作信息。將歷史操作信息發(fā)送到掃描器分析層,進行安全分析,對于可疑歷史操作會進行標注并觸發(fā)報警。
通過manifest.json讀取layer信息。對layer信息進行分析,提取layer中文件內(nèi)容,對證書格式文件進行內(nèi)容匹配。檢測是否存在信息泄露風(fēng)險。
對鏡像的證書標簽和倉庫來源進行可信檢測,以排除從不可信的倉庫或者直接安裝的容器鏡像。
容器運行入侵檢測核心是eBPF核心虛擬機,eBPF支持在用戶態(tài)將C語言編寫的一小段“內(nèi)核代碼”注入到內(nèi)核中運行,注入時要先用llvm編譯得到使用BPF指令集的elf文件,然后從elf文件中解析出可以注入內(nèi)核的部分,最后用bpf_load_program方法完成注入。用戶態(tài)程序和注入到內(nèi)核中的程序通過共用一個位于內(nèi)核中map實現(xiàn)通信。為了防止注入的代碼導(dǎo)致內(nèi)核崩潰,eBPF會對注入的代碼進行嚴格檢查,拒絕不合格的代碼的注入。
支持CIS容器安全基線標準,掃描包括主機安全配置、docker守護進程配置、docker守護文件配置、容器鏡像和構(gòu)建文件、容器運行時保護、docker安全操作、docker集群配置等。當(dāng)發(fā)現(xiàn)有安全問題的容器鏡像時,防護容器可以通過禁止其運行來達到防護的效果,支持鏡像運行的安全策略如下:
(1)發(fā)現(xiàn)鏡像以root用戶運行禁止運行。
(2)發(fā)現(xiàn)鏡像有指定的安全級別的漏洞禁止運行。
(3)發(fā)現(xiàn)鏡像內(nèi)有指定某CVE漏洞禁止運行。
(4)發(fā)現(xiàn)鏡像內(nèi)有木馬病毒禁止運行。
(5)發(fā)現(xiàn)鏡像內(nèi)有特定的軟件包版本禁止運行。
(6)發(fā)現(xiàn)鏡像內(nèi)有非信任鏡像禁止運行。
(7)發(fā)現(xiàn)鏡像內(nèi)有私有證書禁止運行。
此次構(gòu)建的全生命周期的容器安全防護體系,與現(xiàn)有PaaS平臺無縫集成,實現(xiàn)容器鏡像安全、容器網(wǎng)絡(luò)安全、容器應(yīng)用安全的全生命周期防護。應(yīng)用效果如下:
(1)細粒度的資產(chǎn)管理:支持對PaaS平臺資產(chǎn)進行精確識別和動態(tài)感知,讓保護對象清晰可見;
(2)防止不安全鏡像分發(fā)到生產(chǎn)環(huán)境:實時了解鏡像倉庫中的安全風(fēng)險,包括鏡像漏洞、病毒、敏感信息,消除潛在的安全風(fēng)險;
(3)監(jiān)控容器隔離失效,包括CPU、內(nèi)存、磁盤異常使用告警;
(4)已知逃逸漏洞逃逸監(jiān)測,如cve-2019-5736runc漏洞逃逸;
(5)監(jiān)容器中發(fā)生的異常行為監(jiān)測,如反彈shell、敏感信息讀取、特權(quán)容器啟動等;
(6)容器安全基線檢查,包括主機安全配置、docker守護進程配置、docker守護文件配置、容器鏡像和構(gòu)建文件、容器運行時保護、docker安全操作、docker集群配置;
(7)docker、k8s生命周期安全審計,包括容器、POD創(chuàng)建、運行、停止、銷毀等生命周期;
(8)主機和容器內(nèi)shell命令執(zhí)行安全審計;
(9)容器關(guān)鍵文件審計,如:/etc/docker、/usr/sbin/runc。