Docker安全性分析及安全防护_第1页
Docker安全性分析及安全防护_第2页
Docker安全性分析及安全防护_第3页
Docker安全性分析及安全防护_第4页
Docker安全性分析及安全防护_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Docker平安性分析及平安防护李俊灏【摘要】伴随着云计算的开展,Docker容器技术以其轻量级和高性能的优势迅速取得了广泛的市场应用。Docker具有共享内核的特性,这带来了一些平安上的问题。本文从平安隔离、资源限制、内容信任和内核平安防护四个维度对Docker的固有平安特性进行了阐述,分析实际应用过程中可能存在的七大平安风险,并提出针对性的防护建议。【关键字】虚拟化;容器;Docker;平安;风险;威胁;平安防护中图分类号:TP309文献标识码:A文章编号:2095-2457202120-0240-002DOI:10.19694/j ki.issn2095-2457.2021.20.112

2、0引言近年來,伴随着云计算的迅猛开展,虚拟化技术得到了广泛的应用,以满足云计算环境对密集计算、灵活扩展以及平安可靠的需求。当前主流的虚拟化技术可以分为两类,分别是基于虚拟机的虚拟化技术hypervisor-based和基于容器的虚拟化技术container-based。相较而言,虚拟机技术在平安隔离方面更胜一筹,而容器技术那么具备轻量而高效的优势。Docker开源容器工程在2021年一经推出便备受瞩目,短短几年里迅速成为了容器虚拟化领域的主流方案。本文从平安角度出发,详细分析了Docker本身的平安特性,并对可能存在的平安风险提出了针对性的平安防护建议。1Docker概述Docker致力于提供

3、一整套从开发、交付到运行的一体化应用解决方案。Docker的成功绝非偶然,2021年Docker工程启动的时候,容器技术已经有了十余年的开展,在前辈LXCLinuxcontainer的根底上,Docker带来了全新的特性:提供了能够简单而平安的创立和控制容器的接口,提供了一次打包、随处运行的便利,实现了相比其它技术更高的硬件资源利用效率,以及与第三方工具配合工作以简化管理部署流程的能力。Docker基于CS架构设计,主要组件包括Dockerclient、Dockerdaemon、Dockerregistry三局部。Dockerdaemon是Docker的功能核心,它负责侦听DockerAPI请

4、求并管理Docker对象,比方镜像image、容器container、网络和卷volume。一个Dockerdaemon还可以与其它Dockerdaemon通信来实现效劳管理。Dockerclient是Docker为用户提供的操作接口,可通过该接口输入命令完成对镜像、容器、仓库的操作。一个Dockerclient可同时与多个Dockerdaemon进行通信。Dockerregistry用于存储Docker镜像。DockerHub是一个公开的Dockerregistry,默认配置下,Docker会在DockerHub上查找所需的镜像。通过使用DockerDatacenterDDC内含的Docke

5、rTrustedRegistryDTR组件,任何人都可以搭建私有的Dockerregistry。2Docker平安特性2.1平安隔离虚拟化技术在多租户环境下必须首先解决平安隔离的问题,Docker借助Linux内核的namespace命名空间功能和Cgroups机制来实现平安隔离。以下从进程、文件系统、设备、进程间通信IPC、网络等5个方面来评估Docker平安隔离的实现程度。2.1.1进程隔离Docker通过PIDnamespace来实现进程隔离,从而让运行中的容器无法感知到运行在其它容器或者宿主机上的进程。PIDnamespace具有层次结构,父namespace可以感知到子namespa

6、ce中的进程,反之或平级之间那么不行,这就保证了宿主机系统进程可以控制容器进程,但容器进程却无法感知宿主机或者其它容器上的进程。另外,容器中的进程编号PID都是独立的,这样每个容器都可以有PID为1的类init进程,当发现异常时,只要管理员结束掉这个类init进程,这个容器就被彻底的关闭了。2.1.2文件系统隔离Docker通过mountnamespace来实现容器间的文件系统隔离,让各个容器以及宿主机上的文件系统挂载操作保持独立且互不干扰。但需要注意的是,为了保证容器内的正常操作,宿主机上的一些特殊目录例如/sys、/proc/sys、/proc/sysrq-trigger、/proc/ir

7、q以及/proc/bus等并不受namespace限制,换句话说,容器内可以直接访问这些宿主机目录。为了降低该问题导致的风险,Docker做了两点限制:1容器对这些特殊的目录没有写入权限。2移除容器的CAP_SYS_ADMIN能力,从而使容器内无法重新挂载这些特殊目录。此外,由于多个容器可以共用同一个镜像,每个容器在运行过程中都会生成私有的数据,为了最大化的重用资源,Docker使用了COW写时拷贝技术和unioFS文件系统,在只读文件系统上为每个容器叠加一层可写入文件系统,保证不同容器的数据操作完全独立,互不影响。2.1.3设备隔离Docker利用Cgroups来控制容器可访问的设备,并阻止

8、容器内的进程创立新的设备节点。另外,Docker在挂载时使用了nodev选项,这样即便在镜像中创立了设备节点,容器中也同样无法使用这些节点来与内核通信。需要指出的是,以上均假设容器未运行在“特权模式下,以“特权模式启动的容器可以访问所有设备。2.1.4进程间通信隔离Docker通过IPCnamespace来实现进程间通信隔离,不同的IPCnamespace中的进程无法互相通信,Docker为每个容器都分配了一个IPCnamespace,以此来保证容器之间的进程通信隔离。2.1.5网络隔离Docker通过networknamespace来为每个容器分配了一块独立的网络协议栈,使每个容器都有自己的

9、IP地址、路由表以及网络设备等。为了实现容器间以及容器与宿主机间的网络通信,默认情况下Docker会在宿主机上创立一个虚拟以太网网桥docker0,所有容器的eth0接口均通过一定的方式与该虚拟网桥相连,以此来实现网络通信。由于默认情况下虚拟网桥不进行包过滤,这会造成一定的平安风险。2.2資源限制拒绝效劳DoS是最常见的攻击方式之一,通过控制某些进程去消耗系统的所有资源,从而破坏其他进程的正常运行。在容器环境下,所有容器共享内核资源,如果未作限制,一旦某个容器被攻击者以一定方式控制,宿主机资源将很可能被消耗殆尽。为了防范DoS,每个容器的可用资源必须受到合理的限制。Docker借助linux的

10、Cgroups来实现这种限制,以控制单个容器可用的CPU、内存和磁盘I/O等资源,从而确保每个容器获得公平的资源份额,并防止任何容器消耗所有资源。2.3内容信任Docker内容信任DCT提供了在与远程Dockerregistry数据通信过程中使用数字签名的能力,这些签名可被用来验证镜像的发行方以及数据的完整性。通过DCT,镜像发布者可以对其镜像进行签名,而镜像使用者可以确保他们使用的镜像已签名。2.4内核平安防护确保内核平安和利用内核提供的平安技术进行自身平安加强都是Docker平安的重要方面,Docker在这方面也做了很多整合工作,主要是通过采用能力机制capabilities、Seccom

11、psecurecomputingmode平安特性、强制访问控制MAC对容器的权能和系统调用进行限制;通过利用内核相关平安模块Iptables、Trafic、controller来加强自身网络平安,以及通过利用内核相关完整性保护技术确保镜像和系统的完整性等;通过已有平安框架Grsecurity/PAX等对内核进行平安强化。3平安风险及防护建议3.1宿主机及内核平安3.1.1风险描述Docker引擎及容器都运行在宿主机上,一旦宿主机被攻破,Docker的平安便无从谈起。3.1.2防护建议1做好访问控制及通信加密。2保证系统和软件包括docker本身能够得到及时的更新。3尽量使用最小化系统,比方Co

12、reOS、RedHatAtomic、RancherOS等。4启用强制访问控制MAC,如Seccomp、AppArmor、SELinux等。3.2容器逃逸3.2.1风险描述容器逃逸指的是某个Docker容器绕过了隔离检查,访问到了宿主机的敏感信息或者取得了宿主机的控制权限。3.2.2防护建议1去除非必要的能力capabilities,例如CAP_SYS_ADMIN。2如无必要,不要以特权模式运行容器,必须这样做的情况下,要确认镜像来源可信。3.3镜像认证3.3.1风险描述默认情况下,Docker并不对镜像做认证和校验,从任何渠道获取的镜像都可以直接运行。如果无法保证镜像的发布者是可信的,并且镜像

13、在传递的过程中内容没有被篡改,那么就存在着镜像内容被恶意植入的风险。3.3.2防护建议1不使用未经验证的软件,不使用未在信任列表中的源。2强制使用镜像的签名验证机制。3.4容器资源滥用3.4.1风险描述一台宿主机上往往会同时运行数量庞大的容器群,虽然这是充分利用资源的一种表现,但同时也意味着更剧烈的资源竞争。如果资源使用上不加限制,那么很容易就能够发起一次拒绝效劳DoS攻击。常见的资源类型包括CPU、内存、存储、网络带宽、I/O带宽、交换文件等。3.4.2防护建议1虽然Docker默认情况下不做资源限制,但只要按需添加命令行参数就可以做到这一点。试着通过一系列的测试来确定正常情况下一个容器需要

14、的资源量范围,并以此为标准进行限制。2如果断定暂时不做实际限制,至少应该配置相关的监控和告警,在资源使用量超限时第一时间得到通知。3.5镜像内漏洞3.5.1风险描述每个Docker镜像常常被设计为实现某一功能的黑盒,在这种情况下如果容器运行时功能正常,使用者往往会忽略镜像中存在的平安问题。举例而言,一个Apache效劳器镜像内包含的Apache版本可能非常老旧,以至于存在大量的未修补漏洞,攻击者很容易利用这些的漏洞对效劳器发动攻击,并有可能进一步影响到整个容器甚至整个宿主机的平安。3.5.2防护建议1定期为镜像中的软件升级平安补丁,然后重新编译和发布新版本镜像。2尽量保持镜像功能单一,如果有可

15、能,将复杂功能的镜像拆分为多个单一功能的镜像。3定期进行平安扫描,并及时对扫描出的漏洞进行修补。3.6敏感信息3.6.1风险描述在Docker容器运行过程中,不可防止的会接收、保存和传递一些敏感信息,比方密钥、凭据和证书等。如果处理不得当的话,非常容易造成敏感信息的泄露。3.6.2防护建议1不通过环境变量传递敏感信息。2不将任何敏感信息保存在镜像中。3如有必要,部署一套Docker凭据管理软件。3.7运行时平安监控3.7.1风险描述即便做到了以上说到的每一条,平安风险仍然存在,比方攻击者利用的是使用者自身代码的漏洞或者0day漏洞。运行时的平安风险千变万化,必须要有动态的风险监测机制来发现问题

16、并及时处置。3.7.2防护建议1做好运行时平安的监控和告警。例如借助态势感知系统进行综合性的攻击和入侵预判。2非本地化的保存运行日志信息,以供事后追溯分析。4结束语通过对Docker固有平安特性的分析,能看到Docker的设计者为Docker创立了一整套的平安防护体系,能够较好的覆盖整个Docker应用生命周期。当然,默认配置下,Docker是存在一定的平安隐患的,通过启用镜像签名机制、限制容器资源使用、以非特权模式运行容器以及启用MAC方案等,Docker的平安能力将得到极大的提升。平安和效率在生产实践中始终是一对矛盾体,如何采取有效的管理手段,将Docker环境的风险暴露面降低到一个合理可接受的水平,这将是一个需要长期探讨和研究的课题。【参考文献】【1】谢超群.高校数据中心Docker容器应用的平安体系设计J.网络平安技术与应用

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论