Docker容器安全管控技术研究

2020-12-30 04:01苏军
网络安全技术与应用 2020年11期
关键词:镜像虚拟化漏洞

◆苏军

操作系统、网络体系与服务器技术

Docker容器安全管控技术研究

◆苏军

(菏泽学院 山东 274000)

开发者可以利用Docker容器技术将应用和运行环境打包成镜像,使应用程序可以在宿主机中独立运行,具有更高的运行效率和资源利用率。但是其在安全性方面还有很大的不足。本文对Docker容器在镜像安全、运行安全和入侵检测等方面的风险进行了分析,并探讨了具有针对性的安全管控技术。

Docker;容器;虚拟化

Docker容器是一个开源的应用容器引擎,可以让开发人员将开发的应用和依赖包打包在一起,然后发布到安装有Docker引擎的服务器上[1]。Docker容器不依赖任何开发语言和操作系统,解决了部署环境依赖问题,是一种轻量级的虚拟化技术,性能开销极低,极大地提高了开发者的工作效率,在数据中心等云部署领域中得到了广泛的应用。

由于Docker容器是应用于基础设施和运行平台之间的一种虚拟化技术,容器的运行需要设计从镜像到运行整个过程的安全方案[2],过程中存在镜像源安全性、运行安全、容器入侵等安全性问题,这是传统的网络安全方案不能解决的。

1 Docker容器安全问题

1.1 镜像源安全

Docker官方镜像仓库为Docker Hub,仓库内有应用的官方来源,同时也允许第三方组织和个人上传已经配置的应用[3]。这在带来便捷性的同时,也存在一定的安全风险。如开发人员编写的代码存在漏洞,被植入木马,Dockerfile添加恶意脚本等。当入侵者攻击并控制宿主机上的容器以后,可利用容器为跳板对宿主机进行攻击[4]。

1.2 容器运行安全

除了镜像自身安全性问题,不安全的运行环境同样会给Docker的使用带来风险。如Linux或Windows系统存在漏洞等。另外Docker在平台运行时重要的系统文件并没有实现平台与容器完全隔离,容器可以获取到这些信息并造成信息外露,被攻击者所利用。

1.3 容器网络安全

由于Docker采用桥接模式,和宿主机直接相连,容器内部的数据可以通过桥接网络到达容器的默认网关。攻击者可以利用有漏洞的或设置后门的容器对宿主机内的其他容器进行信息收集,发起容器入侵、DoS攻击等。

2 Docker容器安全管控

2.1 镜像安全检测

(1)镜像漏洞扫描

由于镜像中的系统内核和应用可能包含漏洞,使用前需要对镜像进行漏洞扫描。客户端完成镜像制作,将镜像上传仓库以后,可以使用支持镜像分析的开源项目Clair进行漏洞扫描。

Clair针对用户上传镜像的URL和客户端的Token等参数向仓库下载镜像层,校验每层的Parent Name,读取镜像层的文件内容,遍历文件目录,查找操作系统的文件路径,获取系统版本信息,提取镜像中已安装的软件包信息。

Clair将得到的镜像层信息存入PostgreSQL数据库,然后将当前镜像系统和软件包版本信息与保存有漏洞信息的CVE数据库进行比对,输出包含漏洞信息的结果。

(2)镜像恶意代码扫描

Clair可以利用CVE漏洞库扫描Docker镜像的漏洞,但是如果攻击者使用无漏洞的官方镜像,然后在镜像安装木马和后门,Clair就不能检测到安全威胁。针对这种情况,可以使用Anchore_Engine来对Docker镜像进行安全扫描。Anchore_Engine可以提供对Docker镜像检查、分析和认证的服务。在运行环境中部署Anchore_Engine,可以在容器注册中心下载并分析容器镜像,并可以根据用户需求的策略对镜像进行评估,执行安全性、合规性和最佳实践检查。

Anchore_Engine可以通过Docker容器镜像的方式独立或交互式运行,也可以在Kubernetes、Docker Swarm和Amazon ECS等容器业务平台上运行,通过RESTful API为集成组件嵌入现有的容器监控和控制框架。

与Clair不同的是,Anchore_Engine重点在于对镜像的审计,有着很强的镜像解析能力,对镜像提取尽量多的元数据,并可对镜像进行自定义策略评估。

(3)镜像人工检测

Docker镜像是容器的模板,涉及的攻击范围非常广,而且有的安全风险很难被Clair和Anchore_Engine扫描器所发现,所以Docker镜像扫描不能完全保障Docker镜像的安全性,可以结合人工检测的方法,如使用“Docker inspect”和“Docker history”等命令查看镜像的信息,对Dockerfile进行分析等。

2.2 Docker容器资源隔离

完成镜像检测以后,容器的运行则需要安全控制,资源隔离在实现轻量级虚拟化的服务的同时,也提高了容器之间的安全性,可通过namespace来实现,包括Mount、UTS、IPC、PID、Network和User。

(1)Mount

Mount namespace通过隔离文件系统挂载点实现文件系统的隔离,不同的Mount namespace中的文件结构即使发生变化也不会相互影响。在部署Mount namespace时,会把当前的文件结构复制给新的namespace,里面的操作只影响内部的文件系统,实现了严格隔离。Mount在某些特殊情况下不能使用,比如父节点namespace中的进程挂载外部存储器,子节点namespace复制的目录结构就不能实现自动挂载。

(2)UTS

UTS namespace用来实现对容器主机名和域名的隔离,同时保存内核、版本和底层结构类型等信息。用户在容器中查看到的是当前容器的系统信息,而不能查看宿主机的系统信息。宿主机的内核通过UTS namespace对多个容器进行统一管理,来实现容器之间主机域名等信息的隔离。

(3)IPC

IPC namespace用来隔离进程间的资源,使容器进程之间无法通过信号量、共享内存和消息队列方式进行通信。容器进程运行时向宿主机申请IPC资源,包含系统IPC标识符和实现POSIX消息队列的文件系统。Docker利用IPC namespace可以实现容器和宿主机以及容器之间的IPC隔离。

(4)PID

PID namespace中的进程有独立的PID,包括容器中的PID和宿主机上的PID,namespace中的PID和宿主机无关,每个PID namespace都有自己的计数程序,并形成一个层级体系。父节点可以查看子节点进程,并可以通过信号等方式终止子节点的进程,而子节点看不到父节点的内容,从而实现了进程隔离,并有利于资源控制。

(5)Network

Network namespace实现网络资源的隔离,使得每个Docker容器拥有独立的网络设备、IP地址、IP路由表、/proc/net目录和端口号等。一个物理网络设备最多存在于一个Network namespace中,通过类似于管道的虚拟网络设备实现不同Network namespace之间通信。

(6)User

User namespace使不同的Docker容器有完全不同的uid和gid,可以在容器中创建root用户,而不需要在宿主机上创建。其中的Capability机制可根据特定用户的权限选择使用或禁止,进一步提高了容器的安全性。

2.3 Docker容器资源限制

Docker可以使用系统内核提供的Cgroup对宿主机的不同容器使用的资源进行审计,包括对CPU、内存等资源进行均衡配置,保证宿主机对容器服务的合法要求进行响应。Docker还可以针对容器创建对应的用户,使用quota技术对容器使用的磁盘存储进行配额限制。

在容器运行时,也可以启用SELinux强制访问控制,使容器只能访问运行任务所需的文件资源,从而对Docker容器访问宿主机的行为进行控制。

2.4 Docker容器入侵检测

容器运行时,要采取防范入侵措施,保证容器运行的安全性。可以采取对容器性能指标进行监控的方式来进行报警和应急响应。

全虚拟化容器是实现容器入侵检测的一种方案,包含传统单体应用和微服务架构应用。其中,微服务架构有着单个微服务启动快,易于开发维护,部分修改易部署等显著优点。

微服务架构包含了较多的Docker容器,网络结构相对复杂。使用Kubernetes可以对容器进行有效编排,其提供的原生网络策略NetworkPolicy可以提供IP/Port等级的网络隔离[5]。其中,在Web应用的认证鉴权方面可通过使用网关鉴权或服务自主鉴权模式降低容器之间互相恶意访问。同时,也可以在容器集群内部署网关容器和蜜罐容器对容器集群进行入侵防护。

另外,利用iptables隔离策略可以限制攻击者对宿主机的访问,利用Docker集群网络隔离策略防范攻击者窃听其他容器网络流量,网络流量可视化策略对指定的网络进行深度报文分析,这些策略对容器入侵可以起到重要的防范作用。

3 结束语

Docker容器技术在虚拟化、云计算、DevOps等领域得到越来越广泛的应用,但是在容器生命周期的各个阶段都可能会出现安全问题。本文针对这些安全问题进行了分析,并探讨了镜像安全检测、容器运行控制、容器入侵检测等技术。在以后的应用中,应进一步针对系统部署安全需求,定制安全策略,形成容器安全应用的最佳方案。

[1]杨保华,戴王剑,曹亚仑.Docker技术入门与实战[M].北京:机械工业出版社,2017.

[2]郭甲戌,胡晓勤.基于Docker的虚拟化技术研究[J].网络安全技术与应用,2017(10):28-29.

[3]王鹃,胡威,张雨菡.基于Docker的可信容器[J].武汉大学学报:理学版,2017,63(2):102-108.

[4]鲁涛,陈杰,史军.Docker安全性研究[J].计算机技术与发展,2018,28(06):115-120.

[5]刘渊,乔巍.云环境下基于Kubernetes集群系统的容器网络研究与优化[J].信息网络安全,2020(03):36-44.

猜你喜欢
镜像虚拟化漏洞
漏洞
镜像
基于selenium的SQL注入漏洞检测方法
基于OpenStack虚拟化网络管理平台的设计与实现
镜像
对基于Docker的虚拟化技术的几点探讨
H3C CAS 云计算管理平台上虚拟化安全防护的实现
漏洞在哪儿
镜像
浅谈虚拟化工作原理