Docker镜像安全监测模型研究与设计
2023-06-15苏桐
苏桐
摘 要: Docker作为如今被大量使用的新型虚拟化技术,其镜像的安全性是Docker安全中最脆弱的一个环节,但尚无全面有效的措施对镜像进行全方位的安全监测。本文根据Docker镜像文件存在的主要安全问题,研究并设计Docker镜像安全监测模型MDIS(monitor Docker image security),从镜像漏洞、恶意脚本、历史行为、敏感信息及可信度量等多个方面对镜像安全性进行监测和评估,力求提升生产环境中Docker镜像的安全性,提前检测和发现威胁,保障系统安全。
关键词: Docker; 安全监测; 镜像扫描; 可信度量
中图分类号:TP309 文献标识码:A 文章编号:1006-8228(2023)06-25-04
Design of the Docker image security monitoring model
Su Tong
(Fuzhou University Zhicheng College, Fuzhou, Fujian 350001, China)
Abstract: As a new virtualization technology widely used today, the security of its images is one of the most vulnerable links in Docker security, but there are no comprehensive and effective measures to monitor the security of images in an all-round way. In this paper, according to the main security issues of Docker image files, we study and design the Docker image security monitoring model MDIS (monitor Docker image security), which detects and evaluates image security from multiple aspects such as image vulnerabilities, malicious scripts, historical behavior, sensitive information and trust measurement. It strives to improve the security of Docker images in the production environment, detect and discover threats in advance, and ensure system security.
Key words: Docker; security monitoring; image scanning; trust measurement
0 引言
隨着云计算的广泛运用,采用lxc虚拟化的Docker成为被各大企业大量应用的技术。Docker通过与linux宿主机共用内核的机制实现轻量化的操作系统及容器化运行环境,具备秒级启动和大规模可伸缩性等特性。Docker利用Cgroups以及namespace机制实现容器与主机、容器与容器间的隔离,在一定程度上保障了容器运行环境的安全性[1]。但同时,作为对于运行容器至关重要的Docker镜像而言,由于目前各厂商镜像仓库中的镜像来源复杂、标准不一、缺乏有效的镜像监管,且Docker特殊的镜像生成方式具有一定的脆弱性,导致了镜像源存在安全风险,问题镜像会给生产环境带来较大的安全威胁。传统edr无法解决镜像安全问题,现有的镜像扫描工具往往存在扫描类型不足,问题覆盖不全面,无法系统性解决镜像扫描及存储等问题,因此,本文针对现有状况,提出了基于主机的Docker镜像安全解决方案,研究并设计针对Docker镜像安全的监测模型MDIS(monitor Docker image security),进一步提升镜像使用的安全性。
1 Docker镜像分析
镜像文件是容器启动及运行所依赖的必要文件,其中包含了容器运行所需的文件系统及内容等要素,其与Dokcer容器中的配置共同构成了容器的运行环境rootfs。容器的每次生成都是在静态镜像的基础上启动和运行,并在顶层加入可写层[2],实现写时复制。
由于Docker采用的是UnionFS联合文件系统,其镜像具有分层的特性,每个镜像层的层文件都包含了不同的信息,多个layer层共同组成镜像文件[3]。当宿主机上有多个镜像文件时,不同的镜像文件可以共享相同的基础镜像层,如Centos、Nginx、MySQL等常用镜像,当需要修改镜像时,只需要修改上方叠加层的文件,基础镜像依然可以被继承使用。对于容器而言,镜像文件的安全性具有至关重要的影响。
2 镜像安全威胁分析
2.1 镜像CVE安全漏洞
由于目前各大公开镜像仓库存在众多个人及厂商上传的镜像,类型多样,来源复杂,缺乏统一有效的安全标准,因此镜像的安全性问题成为了影响容器安全的首要问题。不论是官方还是第三方镜像仓库,镜像层中包含的基础镜像如Centos、Redis、Nginx等常用组件由于版本落后或缺少补丁等问题,都可能存在CVE安全漏洞,造成安全风险[4]。一旦多个镜像共享使用同一个有漏洞的基础镜像,安全风险将会进一步扩大。
安全厂商Federacy此前曾在现存的一百三十三个公开镜像仓库中抽选了九十一个公开仓库进行检测,根据报告显示,其中24%的Docker镜像包含中危及以上漏洞,高位漏洞占总漏洞比重高达11%[5]。具体镜像漏洞率如图1所示。
2.2 镜像恶意程序
云原生技术的发展以及Docker容器化部署方式的普及,使得许多黑产从业者瞄准了这一新兴领域,通过制作并上传包含Webshell、勒索病毒和挖矿病毒等问题的镜像至镜像仓库,对下载并运行镜像的单位造成安全威胁。同时,如果镜像制作者的本地开发环境或引用的开源代码存在恶意脚本/病毒,也可能在打包镜像过程中被无意带入,使得使用者承受安全风险。
根据安全公司Kromtech发布的报告,有黑客将包含挖矿木马的镜像上传至公开鏡像仓库,一旦用户拉取并运行镜像将会在容器中生成Python反向Shell,并暴露挖掘程序,此事件造成了较大危害,其中涉及MySQL、tomcat等在内的常用镜像[6]。
2.3 镜像历史行为及敏感信息
由于镜像通常是根据Dockerfile脚本进行封装或采用commit操作从现有容器直接创建镜像,因此镜像仓库中的镜像可能包含了危险的Dockefile脚本,或是带有之前开发者的可疑历史操作等。用户在拉取镜像并运行生成容器后,发布者的可疑历史操作可能导致系统被执行了不安全的命令,存在潜在安全风险。镜像生成时的权限配置不当、通用弱口令及原始环境敏感信息等的暴露也可能给镜像用户带来配置层面上的安全威胁[7]。
2.4 镜像篡改伪造
由于在生产环境中存在内网横向渗透导致宿主机失陷的问题,可能造成宿主机上的镜像文件被篡改伪造并隐匿运行恶意脚本。同时,容器与宿主机间共享内核的机制和权限配置不当等问题也可能导致容器隔离性减弱,攻击者可以获取容器最高权限,实施容器逃逸,并篡改宿主机镜像[8]。很多使用者在镜像被拉取到本地进行安全检测后,在启动前往往不会进行镜像的二次可信校验,一旦镜像在本地存储期间被中途植入恶意脚本并启动运行,就将对内网环境造成较大的安全危害。
3 监测模型架构
针对镜像可能存在的安全问题,监测模型采用静态扫描技术与可信度量技术相结合的方式,对用户从远程拉取的镜像进行深层扫描和监测。当新镜像到达本地后,一方面,针对新镜像解压并读取分层信息,对其中的文件进行扫描,将镜像层文件中的软件包与本地漏洞库进行比对,找出其中存在的CVE安全漏洞,并采用病毒引擎与模糊哈希算法进行恶意程序扫描。另一方面,将对镜像的历史操作做出分析,判断其中存在的风险行为,以及镜像层文件中存在的弱口令、证书密钥等敏感信息并给出扫描报告。
同时,监测模型将采用改进的哈希算法计算镜像文件的哈希值并存入可信度量数据库中,此后每次检测到镜像启动前,将对本地镜像进行可信度量,判断原镜像文件是否遭到非法篡改,并做出反馈。MDIS模型架构如图2所示。
4 MDIS模型主要模块
4.1 镜像CVE安全漏洞扫描
镜像是由众多Layer分层构成的文件,当用户拉取镜像到本地后,通过读取其中的manifest文件可以获取镜像的Layer清单以及Layer层的digest,从而定位镜像层文件的存储地址,再通过解压镜像生成分层索引列表,并对Docker结构文件进行提取。
漏洞扫描模块先根据各个Linux发行版本文件的路径遍历查找,探测基础镜像层的发行版本,如UbuntuPrecise系统版本文件路径为/etc/lsb-release,Alpine系统版本文件路径为/etc/Alpine/release,通过遍历所有可能的系统版本文件路径,查找到相应版本文件则停止并记录版本信息,再通过对应版本的rootfs根文件系统默认路径查找并读取相应软件包清单信息,如Centos的软件包清单文件位于/var/lib/rpm/packages中,ubuntu及Debian的软件包清单文件位于var/lib/dpkg/status,通过读取对应目录下的文件得到相应软件包及版本号,并将其与本地CVE漏洞库比对,得到命中的软件包CVE安全漏洞,生成漏扫报告。
由于CVE漏洞库是不断更新的,漏洞扫描模块将定期对扫描过的旧镜像层再次扫描,以发现潜在的新漏洞。鉴于各单位进行容器化部署的内网环境不同,对安全漏洞的处理方式也不相同,因此允许设置漏洞白名单,对白名单中的CVE漏洞不进行扫描,方便用户根据需求个性化排查重点漏洞。镜像CVE安全漏洞扫描流程如图3所示。
4.2 镜像恶意程序扫描
在漏洞扫描后,通过读取镜像层文件内容,对Docker镜像进行进一步的恶意程序扫描。由于攻击者可能对恶意文件加壳,改变文件的编码和哈希值,以逃避扫描引擎的检测,因此使用简单哈希散列算法进行匹配无法准确识别恶意文件,存在较大漏报概率。
恶意程序扫描模块采用模糊哈希算法与病毒引擎分析两种方式相结合来综合评估镜像文件的安全性,以提高识别准确率。首先通过接口调用病毒引擎实现文件扫描,若检测到恶意文件则向公开病毒库提取病毒样本,再使用ssdeep对可疑文件进行模糊哈希运算并与病毒样本文件的模糊哈希值进行匹配,判断是否属于恶意文件[9]。之后会将两种检测方法的结果进行比对,若二者检测结果一致判定为恶意程序,则向用户做出提示。
4.3 镜像历史行为及敏感信息扫描
镜像历史行为及敏感信息扫描对于识别镜像的安全性具有重要参考价值。由于多数镜像是通过Dockerfile脚本生成的,Dockerfile中包含了大量开发者构建镜像时所采用的镜像操作指令如ADD、COPY以及启动容器所执行的命令如CMD等[10],其中可能包含了可疑行为、不规范语句、权限配置不当以及密码泄露等问题。
历史行为及敏感信息扫描模块在扫描时将采用docker image history命令调取生成镜像的Dockerfile历史操作,并传输至分析层,分析层采用hadolint
同时,扫描模块通过读取layer层文件及Docker日志等内容,采用正则表达式对关键字符串进行匹配,包括password、secret、key、token、access等,以及证书格式文件包括后缀名为pfx、pem、key、jks等文件,分析是否存在敏感信息泄露问题。具体实现过程中可以进一步细化关键词,形成规则库,如关键词key可再细分为alicloud_access_key、amazon_secret_access_key、aos_key、api_key、cattle_access_key、cache_s3_secret_key等,以便于提供详细报告。
4.4 镜像可信度量
镜像存储过程中的篡改监测是生产环境中很容易被忽视的一点,可信度量能够降低由于宿主机失陷而导致镜像被篡改运行的风险。以overlay2存储驱动为例,Docker镜像的layer层元数据和layer层文件分别保存在docker/image/overlay2/layerdb和docker/overlay2/{cache-id}/diff中,當用户使用Pull、build等命令拉取或封装镜像后,将触发可信度量动作。可信度量模块将对镜像的layer层元数据以及layer层文件分别进行一次SHA-384运算,得到两组度量值。此后对两组度量值进行拼接,再进行一次SHA-384运算,得到最终的可信度量值,存入数据库。当镜像启动前,可信度量模块会运用相同算法对存储在本地的镜像文件进行两轮哈希散列值计算,读取数据库中的度量值与本地镜像哈希散列值进行校验,若二者一致,则判断镜像完整,若二者不一致,将提示使用者镜像被非法篡改。可信度量流程如图4所示。
5 结束语
随着容器化部署方式的广泛普及,Docker镜像也面临着较大的安全挑战。本文根据镜像的分层机制和主要风险,从镜像的漏洞、恶意程序、历史行为、敏感信息及存储的可信度量等多个方面设计MDIS监测模型,全方位地对镜像进行深层扫描及监测,兼顾原始镜像安全和镜像本地存储安全环节,提升镜像安全监测的全面性。随着对Docker安全问题研究的深入,安全监测模型在容器进程可信监测、容器逃逸监测等方面仍有很大的优化和拓展空间。
参考文献(References):
[1] 李俊灏.Docker安全性分析及安全防护[J].科技视界,2019
(20):240-241,201
[2] 丁攀,张小梅,郭新海,等.云原生中的容器技术及其安全配置
规范[J].信息通信技术,2021,15(4):59-64
[3] 邢德奇,傅康平,李华夏.“云-边”协同场景的Docker镜像仓
库设计[J].电子技术与软件工程,2022(3):1-4
[4] 邵思思,李奎,尧海昌,等.一种基于深度学习的Docker风险
预测方法研究[J].南京邮电大学学报(自然科学版),2021,41(2):104-112
[5] James Sulinski. Docker image vulnerability research[J].
Federacy Research,2017,3(13):1-3
[6] 吕彬,徐国坤.Docker容器安全性分析与增强方案研究[J].
保密科学技术,2021(1):15-22
[7] 王杰,巨汉基,杜跃,等.基于Docker容器行为分析的安全
隔离系统[J].浙江电力,2022,41(5):96-102
[8] 边曼琳,王利明.云环境下Docker容器隔离脆弱性分析与
研究[J].信息网络安全,2020,20(7):85-95
[9] 吴悠漾,孟祥兆,田颖.基于模糊哈希的恶意代码检测[J].
信息系统工程,2017(1):62
[10] 欧阳桂秀.Dockerfile文件构建云计算镜像的研究[J].信息
记录材料,2020,21(12):226-228