《Docker容器安全性解决方案》由会员分享,可在线阅读,更多相关《Docker容器安全性解决方案(20页珍藏版)》请在金锄头文库上搜索。
1、Docker 容器安全性解决方案目录一、从虚拟化安全到容器安全 31、传统虚拟化技术 32、容器技术 3二 Docker容器安全风险分析 71、镜像安全风险 72、容器虚拟化安全风险 103、网络安全风险 13三、Docker容器安全机制与解决方案161、容器虚拟化安全 163、容器网络安全 27四、总结 30Docker是目前最具代表性的容器技术之一,对云计算及虚拟化技术产生了颠覆性的影响。本文对Docker容器在应用中可能面临的安全问题和风险进行了研究,并将Docker容器应用环 境中的安全机制与相关解决方案分为容器虚拟化安全、容器安全管理、容器网络安全三部分进 行分析一、从虚拟化安全到容
2、器安全1、濮虚拟化技术虚拟化技术是实现硬件基础设施资源的充分利用、合理分配和有效调度的重要技术手段。例如, 在基于OpenStack的典型IaaS服务中,云服务提供商可通过搭建设备集群建立资源池,并将 服务器、存储和网络等底层资源进行弹性虚拟化提供给租户。传统虚拟化技术以虚拟机为管理单元,各虚拟机拥有独立的操作系统内核,不共用宿主机的软件系统资源,因此具有良好的隔离性,适用于云计算环境中的多租户场景。2、容器技术容器技术可以看作一种轻量级的虚拟化方式,将应用与必要的执行环境打包成容器镜像,使得 应用程序可以直接在宿主机(物理机或虚拟机)中相对独立地运行。容器技术在操作系统层进 行虚拟化,可在宿
3、主机内核上运行多个虚拟化环境。相比于传统的应用测试与部署,容器的部 署无需预先考虑应用的运行环境兼容性问题;相比于传统虚拟机,容器无需独立的操作系统内 核就可在宿主机中运行,实现了更高的运行效率与资源利用率。Docker是目前最具代表性的容器平台之一,它模糊了传统的IaaS和PaaS的边界,具有持续部署与测试、跨云平台支持等优点。在基于Kubernetes等容器编排工具实现的容器云环境中, 通过对跨主机集群资源的调度,容器云可提供资源共享与隔离、容器编排与部署、应用支撑等 功能。Docker容器技术以宿主机中的容器为管理单元,但各容器共用宿主机内核资源,分别通过Linux系统的Namespac
4、es和CGroups机制实现资源的隔离与限制。1、Namespaces为了保证容器进程之间的资源隔离,避免相互影响和干扰,Linux内核的Namespaces (命名空间)机制提供了 UTS、User、Mount、Network、PID、IPC等命名空间实现了主机名、用 户权限、文件系统、网络、进程号、进程间通信等六项资源隔离功能。通过调用clone()函数并传入相应的系统调用参数创建容器进程,可实现对应资源内容的隔离,具体情况如表1所示。表1 : Namespaces隔离机制命名空间系统调用参数隔离内容Linux内核版本UTSCLONE_NEWUTS主机名和域名2.6.19IPCCLONE_
5、NEWIPC信号量、信息队列和共享内存2.6.19PIDCLONE_NEWPID进程编号2.6.24NetworkCLONE_NEWNET网络设备、网络栈、端口等2.6.29命名空间系统调用参数隔离内容Linux内核版本MountCLONE_NEWNS挂载点(文件系统)2.4.19UserCLONE_NEWUSER用户和用户组3.8对于某个进程而言,可通过查看/proc/PID/ns文件,获取该进程下的命名空间隔离情况,如 图1所示。其中,每一项命名空间都拥有一个编号对其进行唯一标识,如果宿主机中两个进程 指向的命名空间编号相同,则表示他们同在一个命名空间之下。cgroup egroup:40
6、26531835J ipc - 工口c:4026531339Jtinr. - mm i H036531B40 net - nes4026531957 pid - pid:(402$531S3 user - user:1QZ6531037 uts0Z653193B图1 :进程命名空间2、CGroupsCGroups( Control Groups,控制组)机制最早于2006年由Google提出,目前是Linux内 核的一种机制,可以实现对任务组(进程组或线程组)使用的物理资源( CPU、内存、I/O等) 进行限制和记录,通过多种度量标准为各个容器相对公平地分配资源, 以防止资源滥用的情况。在实际
7、应用中,CGroups会为每个执行任务创建一个钩子,在任务执行的过程中涉及到资源分 配使用时,就会触发钩子上的函数并对相应的资源进行检测,从而对资源进行限制和优先级分 配。CGroups 提供了资源限制(Resource Limitation )、优先级分配(Prioritization )、资源统 计(Accounting)、任务控制(ControI)四个功能,包含 blkio、cpu、cpuacct、cpuset、 devices、freezer、memory、perf_event、net_cls、net_prio、ns、hugetlb 等子系统,每 种子系统独立地控制一种资源,可分别实现
8、块设备输入 /输出限制、CPU使用控制、生成CPU 资源使用情况报告、内存使用量限制等功能。几个主要子系统的具体功能如表2所示。表2 : CGroups子系统子系统功能blkio为块设备(如磁盘、固态硬盘等物理驱动设备)设定输入 /输出限制cpu通过调度程序控制任务对CPU的使用cpuacct生成任务对CPU资源使用情况的报告cpuset为任务分配独立的CPU和内存devices开启或关闭任务对设备的访问freezer挂起或恢复任务memory设定任务对内存的使用量限制,生成任务对内存资源使用情况的报告3、安全性传统虚拟化技术与Docker容器技术在运行时的安全性差异主要体现在隔离性方面,包括
9、进程 隔离、文件系统隔离、设备隔离、进程间通信隔离、网络隔离、资源限制等。在Docker容器环境中,由于各容器共享操作系统内核,而容器仅为运行在宿主机上的若干进程,其安全性特别是隔离性与传统虚拟机相比在理论上与实际上都存在一定的差距。二、Docker容器安全风险分析根据Docker容器的主要特点及其在安全应用中的实际问题,本文将Docker容器技术应用中可能存在的技术性安全风险分为镜像安全风险、容器虚拟化安全风险、网络安全风险等类型进行具体分析,如图2所示。辖器S全園险图2:容器安全风险分类1、镜像安全风险Docker镜像是Docker容器的静态表示形式,镜像的安全决定了容器的运行时安全。Do
10、cker容器官方镜像仓库Docker Hub中的镜像可能由个人开发者上传,其数量丰富、版本 多样,但质量参差不齐,甚至存在包含恶意漏洞的恶意镜像,因而可能存在较大的安全风险。具体而言,Docker镜像的安全风险分布在创建过程、获取来源、获取途径等方方面面。1、Dockerfile安全问题Docker镜像的生成主要包括两种方式,一种是对运行中的动态容器通过docker commit命令进行打包,另一种是通过docker build命令执行Dockerfile文件进行创建。为了确保最小 安装原则,同时考虑容器的易维护性,一般推荐采用Dockerfile文件构建容器镜像,即在基础 镜像上进行逐层应用
11、添加操作。Dockerfile是包含用于组合镜像命令的文本文件,一般由基础镜像信息( FROM )、维护者信 息(MAINTAINER )、镜像操作指令(RUN、ADD、COPY等)、容器启动时执行指令(CMD 等)四个部分组成,Docker可通过读取Dockerfile中的命令创建容器镜像。Dockerfile文件内容在一定程度上决定了 Docker镜像的安全性,其安全风险具体包括但不限 于以下情况:如果Dockerfile存在漏洞或被插入恶意脚本,那么生成的容器也可能产生漏洞或被恶意利用。 例如,攻击者可构造特殊的 Dockerfile压缩文件,在编译时触发漏洞获取执行任意代码的权 限。如
12、果在Dockerfile中没有指定USER,Docker将默认以root用户的身份运行该Dockerfile 创建的容器,如果该容器遭到攻击,那么宿主机的root访问权限也可能会被获取。如果在Dockerfile文件中存储了固定密码等敏感信息并对外进行发布,则可能导致数据泄露的风险。如果在Dockerfile的编写中添加了不必要的应用,如 SSH、Telnet等,则会产生攻击面扩大 的风险。2、镜像漏洞对于大多数一般的开发者而言,通常需要获取一系列基础镜像进行容器云的部署和进一步开发, 因此,基础镜像的安全性在一定程度上决定了容器云环境的安全性。镜像漏洞安全风险具体包括镜像中的软件含有CVE漏
13、洞、攻击者上传含有恶意漏洞的镜像等情况。 CVE 漏洞由于镜像通常由基础操作系统与各类应用软件构成,因此,含有CVE漏洞的应用软件同样也会 向Docker镜像中引入CVE漏洞。镜像的获取通常是通过官方镜像仓库Docker Hub或网易、阿里云等提供的第三方 镜像仓库。然而,根据对Docker Hub中镜像安全漏洞的相关研究,无论是社区镜 像还是官方镜像,其平均漏洞数均接近200个,包括nginx、mysql s redis在内的 常用镜像都含有高危漏洞。 恶意漏洞恶意用户可能将含有后门、病毒等恶意漏洞的镜像上传至官方镜像库。2018年6月,安全厂商Fortinet禾口 Kromtech在Doc
14、ker Hub上发现17个包含用于数字货币挖矿恶意程序的 Docker镜像,而这些恶意镜像当时已有 500万次的下载量。目前,由于 Docker应用在世界 范围内具有广泛性,全网针对 Docker容器的攻击很多都被用于进行数字货币挖矿,为攻击者 带来实际经济利益,损害Docker用户的正常使用。3、镜像仓库安全作为搭建私有镜像存储仓库的工具,Docker Registry的应用安全性也必须得到保证。镜像仓 库的安全风险主要包括仓库本身的安全风险和镜像拉取过程中的传输安全风险。仓库自身安全:如果镜像仓库特别是私有镜像仓库被恶意攻击者所控制,那么其中所有镜像的 安全性将无法得到保证。例如,如果私有
15、镜像仓库由于配置不当而开启了2357端口,将会导致私有仓库暴露在公网中,攻击者可直接访问私有仓库并篡改镜像内容,造成仓库内镜像的安 全隐患。镜像拉取安全:如何保证容器镜像从镜像仓库到用户端的完整性也是镜像仓库面临的一个重要 安全问题。由于用户以明文形式拉取镜像,如果用户在与镜像仓库交互的过程中遭遇了中间人 攻击,导致拉取的镜像在传输过程中被篡改或被冒名发布恶意镜像,会造成镜像仓库和用户双 方的安全风险。Docker已在其1.8版本后采用内容校验机制解决中间人攻击的问题。2、容器虚拟化安全风险与传统虚拟机相比,Docker容器不拥有独立的资源配置,且没有做到操作系统内核层面的隔 离,因此可能存在资源隔离不彻底与资源限制不到位所导致的安全风险。1、容器隔离问题对于Docker容器而言,由于容器与宿主机共享操作系统内核,因此存在容器与宿主机之间、容器与容器之间隔