王 歡
(中國移動通信集團安徽有限公司,安徽 合肥 230000)
此次項目構建全生命周期的容器安全防護體系的意義如下:
(1)防止不安全的鏡像分發到生產環境:通過構建自動化的容器鏡像安全掃描系統,及時了解容器鏡像的安全風險,消除潛在的安全風險。
實時了解鏡像倉庫中的安全風險,防止不安全的鏡像分發到生產環境;
提供容器鏡像的敏感信息掃描,防止密鑰、數據庫密碼等敏感信息泄露;
持續跟蹤最新的漏洞和病毒,當最新安全通告公布后,自動測試受影響的所有容器鏡像,幫助安全團隊對新增風險作出快速響應。
(2)防止容器逃逸:通過構建容器運行時安全檢測體系,提升公司PAAS的安全防護水平,防止黑客入侵、挖礦等,對公司商譽造成影響。
提供容器配置基線檢測:能夠對Docker和K8s配置合規進行檢測,防止由于配置不當造成的黑客入侵;
容器運行時入侵檢測:檢測容器隔離失效、容器內部的異常行為等,防止容器被入侵,容器逃逸發生;
容器安全審計:監控容器的創建、運行、停止銷毀等動作;監控主機和容器內部的shell命令執行;監控容器關鍵文件、配置的訪問、修改。防止容器被入侵后的跟蹤溯源。
針對容器出現的風險和威脅,傳統防護手段已經失效,縱觀容器的生命周期,容器存在的三個形態為:模板、鏡像和容器。應用容器是由模板文件先進行編譯成鏡像,鏡像通過運行變更成容器,最終容器方式運行其中的應用。在整個容器的安全生命周期中,通過采用自動檢測、自動分析、自動處理的方式來防御整個容器生命周期中所遇到的安全威脅。

圖1 防護模型圖
安徽移動在“全生命周期的容器安全防護體系”的建設過程中,對容器全生命周期涉及到的各個環節,通過一套容器安全管理平臺對容器鏡像文件的制作過程、容器運行的過程以及容器內應用進行全自動的安全檢測、預警與防護。
每個容器鏡像都是由一系列的“鏡像層”組成,需要對其解包后安全分析掃描以發現安全漏洞。從cve漏洞、木馬病毒、可疑歷史操作、敏感信息泄漏以及是否是可信任鏡像等多個維度對鏡像文件進行深度分析。鏡像檢測的核心是已知系統cve檢測。掃描器獲取到鏡像后,將它分離成相應的層和軟件包。然后這些軟件包將與多個cve數據庫的名稱和版本進行對比,從而判定是否存在漏洞。而對鏡像中的文件進行分層提取后,同時逐層進行惡意代碼檢測。主要檢測webshell和木馬病毒。檢測方式分別如下:
(1)模糊哈希。
(2)yara規則。
(3)機器學習的CNN-Text-Classfication分類算法。
通過模糊哈希算法來匹配docker鏡像中的文件內容,對于可疑的文件進行打分。同時使用病毒引擎,進行惡意代碼識別,還使用CNN-Text-Classfication分類算法對文件進行檢測。三種檢測方法都有相應的權重,最終會根據打分結果來判斷文件是否是木馬病毒文件。
通過對鏡像文件進行解包后,從manifest.json中讀取歷史操作信息。將歷史操作信息發送到掃描器分析層,進行安全分析,對于可疑歷史操作會進行標注并觸發報警。
通過manifest.json讀取layer信息。對layer信息進行分析,提取layer中文件內容,對證書格式文件進行內容匹配。檢測是否存在信息泄露風險。
對鏡像的證書標簽和倉庫來源進行可信檢測,以排除從不可信的倉庫或者直接安裝的容器鏡像。
容器運行入侵檢測核心是eBPF核心虛擬機,eBPF支持在用戶態將C語言編寫的一小段“內核代碼”注入到內核中運行,注入時要先用llvm編譯得到使用BPF指令集的elf文件,然后從elf文件中解析出可以注入內核的部分,最后用bpf_load_program方法完成注入。用戶態程序和注入到內核中的程序通過共用一個位于內核中map實現通信。為了防止注入的代碼導致內核崩潰,eBPF會對注入的代碼進行嚴格檢查,拒絕不合格的代碼的注入。
支持CIS容器安全基線標準,掃描包括主機安全配置、docker守護進程配置、docker守護文件配置、容器鏡像和構建文件、容器運行時保護、docker安全操作、docker集群配置等。當發現有安全問題的容器鏡像時,防護容器可以通過禁止其運行來達到防護的效果,支持鏡像運行的安全策略如下:
(1)發現鏡像以root用戶運行禁止運行。
(2)發現鏡像有指定的安全級別的漏洞禁止運行。
(3)發現鏡像內有指定某CVE漏洞禁止運行。
(4)發現鏡像內有木馬病毒禁止運行。
(5)發現鏡像內有特定的軟件包版本禁止運行。
(6)發現鏡像內有非信任鏡像禁止運行。
(7)發現鏡像內有私有證書禁止運行。
此次構建的全生命周期的容器安全防護體系,與現有PaaS平臺無縫集成,實現容器鏡像安全、容器網絡安全、容器應用安全的全生命周期防護。應用效果如下:
(1)細粒度的資產管理:支持對PaaS平臺資產進行精確識別和動態感知,讓保護對象清晰可見;
(2)防止不安全鏡像分發到生產環境:實時了解鏡像倉庫中的安全風險,包括鏡像漏洞、病毒、敏感信息,消除潛在的安全風險;
(3)監控容器隔離失效,包括CPU、內存、磁盤異常使用告警;
(4)已知逃逸漏洞逃逸監測,如cve-2019-5736runc漏洞逃逸;
(5)監容器中發生的異常行為監測,如反彈shell、敏感信息讀取、特權容器啟動等;
(6)容器安全基線檢查,包括主機安全配置、docker守護進程配置、docker守護文件配置、容器鏡像和構建文件、容器運行時保護、docker安全操作、docker集群配置;
(7)docker、k8s生命周期安全審計,包括容器、POD創建、運行、停止、銷毀等生命周期;
(8)主機和容器內shell命令執行安全審計;
(9)容器關鍵文件審計,如:/etc/docker、/usr/sbin/runc。