Docker是一种开源的基于LXC的应用容器引擎,因其轻量、弹性伸缩、快速部署、可移植等优势,在大型互联网企业中被广泛应用。随着Docker技术的发展与普及,其带来安全问题不容忽视。本文通过介绍Docker实现原理,对Docker所引入的安全脆弱性问题分析总结,对使用者在容器安全问题方面提供指导性建议。
简介
Docker的设计理念是“Build,ShipandRunAnyApp,Anywhere”,可实现对应用的封装、部署、运行等生命周期管理。应用通过镜像的方式部署于任何环境中,可避免各团队之间因沟通不畅产生的协作问题,Docker现已成为企业实现DevOps目标的重要工具。
基本概念
01.Docker镜像(Image)
Docker镜像是动态容器的静态表示,包括容器所要运行时所需的程序、库、资源以及相关配置。镜像不包含任何动态数据,其内容在构建之后不会被改变。一个运行着的Docker容器是一个镜像的实例,多个容器可以共用一个镜像。
Dockerfile是Docker用来构建镜像的脚本文件,包含自定义的指令和格式。用户可以用统一的语法命令来根据需求进行配置,在不同的平台上进行分发,简化开发人员构建镜像的复杂过程。
仓库(Repository)
仓库是集中存放镜像文件的场所,每个仓库中可包含多个具备不同标签的镜像。仓库类似于Git工具,当用户创建自己的镜像后可以上传到公有或私有的仓库,当需要使用时,从仓库下载过来即可。
容器(Container)
容器是Docker镜像创建的实例,是静态镜像的运行时的实体。其本质是一个与宿主机系统共享内核但与系统中的其他进程资源相隔离的进程,它可以被启动、停止、删除。容器中会运行特定的应用,包含代码和相关的依赖文件。每个运行着的容器都有一个可写层(writablelayer,也称为容器层containerlayer),它位于若干只读层之上。运行时的所有变化,包括对文件的写和更新,都会保存在这个层中。
02.Docker系统架构
Docker使用了传统的Client-Server架构,总架构如图1所示。用户通过Dockerclient与Dockerdaemon建立通信。Dockerdaemon是Docker最核心的后台进程,一般运行在宿主机之上,负责响应来自Dockerclient的请求,根据请求类型创建出指定的Job,完成构建、分发和运行Docker容器的工作。API负责提供进程交互的接口。Dockerdaemon、Dockerclient与API共同组成DockerEngine。Docker技术使用Docker镜像来创建实例容器。镜像可以从远程的仓库拉取,用户也可以上传镜像到仓库中。
图1Docker容器系统架构
容器技术风险
容器技术是一种新型的技术革命,不仅存在传统的主机安全问题,还带来了新型的安全威胁。本文主要介绍Docker容器技术引发的有别于传统安全的脆弱性。
01.镜像
容器基于容器镜像文件启动,镜像的安全将影响到整个容器的安全,为此RuiShu等人对镜像的安全漏洞进行调研,并在其《DockerHub安全漏洞分析》一文中给出了一份镜像的统计数据[2],数据如表1所示。
表1镜像中所含漏洞数量统计[2]
由数据可以看出,无论是社区镜像或官方镜像都有较多的漏洞。现总结容器镜像安全脆弱性如下:
表2镜像安全脆弱性
02.容器
基于镜像文件运行的容器是整个容器技术的核心,提供对外服务,与用户进行交互,此部分如不安全,将会对整个平台造成安全威胁,经调研其安全脆弱性如下:
表3容器安全脆弱性
03.容器网络
为了节约ip地址,Docker技术中网络多使用桥接方式进行连接。其在宿主机上创建一个虚拟的网桥Dokcer0,扮演了传统交换机的角色,在各个网络接口间自动的进行包转发,每创建一个新的容器,就为其增加一个虚拟网络接口,并将该网络接口连接到网桥Docker0,其脆弱性将会导致平台上其他用户的信息被泄漏甚至可用性被影响。可能存在的脆弱性如下:
表4容器网络安全脆弱性
04.容器机制
容器技术为容器的安全运行提供保障,如果此技术机制不安全,那么容器作为其中的一部分,则是在不知不觉中将所有信息暴露在外了。
表5容器机制安全脆弱性
总结
Docker技术带来的技术革命是让人惊喜的,运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度为Linux和WindowsServer应用发布新功能,但安全性是重要方面,是不得不考虑的问题。本文主要介绍了Docker技术存在的安全脆弱点,意欲抛砖引玉。Docker技术安全能力还有很大的改进空间。
参考文献
[1]浙江大学SEL实验室.Docker容器与容器云(第二版)[M].北京邮电大学出版社北京,2016(10):28
[2]ShuR,GuX,EnckW.AStudyofSecurityVulnerabilitiesonDockerHub[C]//ACMonConferenceonDataandApplicationSecurityandPrivacy.ACM,2017:269-280.
[3]CombeT,MartinA,PietroRD.ToDockerorNottoDocker:ASecurityPerspective[J].IEEECloudComputing,2016,3(5):54-62.
[4]GrattafioriA.UnderstandingandhardeningLinuxcontainers[J].Whitepaper,NCCGroup,2016.
[5]鲁涛,陈杰,史军.Docker安全性研究[J/OL].计算机技术与发展,2018(06):1-6[2018-05-09].http://kns.cnki.net/kcms/detail/61.1450.TP.20180224.1521.064.html.
[6]GaoX,GuZ,KayaalpM,etal.ContainerLeaks:EmergingSecurityThreatsofInformationLeakagesinContainerClouds[C]//Ieee/ifipInternationalConferenceonDependableSystemsandNetworks.IEEE,2017:237-248.
[7]LippM,SchwarzM,GrussD,etal.Meltdown.arXivpreprint[J].arXivpreprintarXiv:1801.01207,2018.
【本文为51CTO专栏作者“中国保密协会科学技术分会”原创稿件,转载请联系原作者】