Docker容器安全性分析( 二 )


安全性
传统虚拟化技术与Docker容器技术在运行时的安全性差异主要体现在隔离性方面,包括进程隔离、文件系统隔离、设备隔离、进程间通信隔离、网络隔离、资源限制等 。
在Docker容器环境中,由于各容器共享操作系统内核,而容器仅为运行在宿主机上的若干进程,其安全性特别是隔离性与传统虚拟机相比在理论上与实际上都存在一定的差距 。
Docker容器安全风险分析
根据Docker容器的主要特点及其在安全应用中的实际问题,本文将Docker容器技术应用中可能存在的技术性安全风险分为镜像安全风险、容器虚拟化安全风险、网络安全风险等类型进行具体分析,如图2所示 。

Docker容器安全性分析

文章插图
图2:容器安全风险分类
镜像安全风险
Docker镜像是Docker容器的静态表示形式,镜像的安全决定了容器的运行时安全 。
Docker容器官方镜像仓库Docker Hub中的镜像可能由个人开发者上传,其数量丰富、版本多样,但质量参差不齐,甚至存在包含恶意漏洞的恶意镜像,因而可能存在较大的安全风险 。具体而言,Docker镜像的安全风险分布在创建过程、获取来源、获取途径等方方面面 。
Dockerfile安全问题
Docker镜像的生成主要包括两种方式,一种是对运行中的动态容器通过docker commit命令进行打包,另一种是通过docker build命令执行Dockerfile文件进行创建 。为了确保最小安装原则,同时考虑容器的易维护性,一般推荐采用Dockerfile文件构建容器镜像,即在基础镜像上进行逐层应用添加操作 。
Dockerfile是包含用于组合镜像命令的文本文件,一般由基础镜像信息(FROM)、维护者信息(MAINTAINER)、镜像操作指令(RUN、ADD、COPY等)、容器启动时执行指令(CMD等)四个部分组成,Docker可通过读取Dockerfile中的命令创建容器镜像 。
Dockerfile文件内容在一定程度上决定了Docker镜像的安全性,其安全风险具体包括但不限于以下情况:
  • 如果Dockerfile存在漏洞或被插入恶意脚本,那么生成的容器也可能产生漏洞或被恶意利用 。例如,攻击者可构造特殊的Dockerfile压缩文件,在编译时触发漏洞获取执行任意代码的权限 。
  • 如果在Dockerfile中没有指定USER,Docker将默认以root用户的身份运行该Dockerfile创建的容器,如果该容器遭到攻击,那么宿主机的root访问权限也可能会被获取 。
  • 如果在Dockerfile文件中存储了固定密码等敏感信息并对外进行发布,则可能导致数据泄露的风险 。
  • 如果在Dockerfile的编写中添加了不必要的应用,如SSH、Telnet等,则会产生攻击面扩大的风险 。
镜像漏洞
对于大多数一般的开发者而言,通常需要获取一系列基础镜像进行容器云的部署和进一步开发,因此,基础镜像的安全性在一定程度上决定了容器云环境的安全性 。
镜像漏洞安全风险具体包括镜像中的软件含有CVE漏洞、攻击者上传含有恶意漏洞的镜像等情况 。
1、CVE漏洞
由于镜像通常由基础操作系统与各类应用软件构成,因此,含有CVE漏洞的应用软件同样也会向Docker镜像中引入CVE漏洞 。
镜像的获取通常是通过官方镜像仓库Docker Hub或网易、阿里云等提供的第三方镜像仓库 。然而,根据对Docker Hub中镜像安全漏洞的相关研究,无论是社区镜像还是官方镜像,其平均漏洞数均接近200个,包括Nginx、MySQL、redis在内的常用镜像都含有高危漏洞 。
2、恶意漏洞
恶意用户可能将含有后门、病毒等恶意漏洞的镜像上传至官方镜像库 。2018年6月,安全厂商Fortinet和Kromtech在Docker Hub上发现17个包含用于数字货币挖矿恶意程序的Docker镜像,而这 些恶意镜像当时已有500万次的下载量。目前,由于Docker应用在世界范围内具有广泛性,全网针对Docker容器的攻击很多都被用于进行数字货币挖矿,为攻击者带来实际经济利益,损害Docker用户的正常使用 。
镜像仓库安全
作为搭建私有镜像存储仓库的工具,Docker Registry的应用安全性也必须得到保证 。镜像仓库的安全风险主要包括仓库本身的安全风险和镜像拉取过程中的传输安全风险 。