作者:郑晓蒙
本文将尝试从容器技术的实现方法人手,分析云计算环境下使用容器技术所造成的信息安全风险,并试着针对这些风险给出相应的对策。
1容器技术概述
1.1容器技术及其实现
容器技术本质上是虚拟化技术的一种,属于操作系统级别的虚拟化。同传统硬件虚拟化技术不同,容器技术并不模拟硬件,而是在特定操作系统内核的支持下对主机系统的CPU、内存、磁盘、网络等资源进行分配,形成一个个容器,每个容器都可以被视为独立的操作系统实例,从而实现不同操作系统实例上应用程序之间的隔离,并共享容器主机资源,达到类似硬件虚拟化的效果。同传统硬件虚拟化不同,同一主机上的容器只能使用相同的系统内核,因此无法实现跨操作系统的资源共享。容器技术在各个操作系统平台上都有相应的产品,如LXC(Linux Containers).OperVZ、FreeBSD Jail、Solaris Containers以及支持多个系统平台的Virtuozzo、VServer等。
不同的容器技术的实现方法也有所区别,概括起来有以下几种实现方式。
1) chroot方式
在Linux系统和UNIX系统中,文件系统拥有一个唯一的根目录“/”,系统中的所有运行时库和应用程序都从根目录中派生出来,chroot工具可以针对不同用户改变根目录的实际位置(例如,可将目录/home/userl/fakeroot设置为针对userl的根目录,此时该用户的程序和运行时库都将依赖于这个目录下的相应位置而非真实系统中的位置。一般情况下userl也无法跳出目录/home/userl/fakeroot对真实系统中的其他文件进行操作),从而实现运行环境和文件资源的隔离。FreeBSD Jail[1]基本是基于chroot方式实现的。
2)容器虚拟层方式
在内核之上建立一个容器虚拟层,将整个操作系统环境容器化,利用命名空间和标记等方式对进程、用户、CPU时间片、内存页面、网络流量、系统文件等系统资源进行划分和过滤,使不同容器内的进程只能使用被分配给容器的系统资源对容器内部的文件进行操作,从而实现容器间的资源隔离与安全隔离。Solaris Containers和VServer等都以这种方式实现。
3)基于操作系统内核功能的方式
Linux内核通过namespace功能实现进程隔离,通过cgroup功能实现资源的隔离和统计。目前基于操作系统内核功能实现的容器技术主要为LXC。
1.2容器技术优势
同传统硬件虚拟化相比,容器技术具有以下优势。
1)系统架构简单高效
容器技术与传统硬件虚拟化系统架构比较如图1所示。
从图l可以看出,使用容器技术的主机比使用硬件虚拟化技术的主机具有更少的系统层次且具有唯一的操作系统内核,因此应用程序指令到机器指令的转换层级更少,统一的系统缓存和进程调度效率更高。
2)存储和内存需求小
容器技术并不需要在容器中构建一个完整的操作系统,只需要应用程序文件及所需的运行时库文件就可正常工作。而在基础镜像和写时复制技术的帮助下,容器甚至不需保存应用程序本身,因此与传统虚拟机GB的存储需求相比,容器以MB计算的存储需求要小得多。同样,由于已不再需要加载完整操作系统内核所需的内存和交换空问,因此在运行时容器所占用的内存资源也较少,几乎不占用多余的内存。
3)部署启动速度快
部署一个容器可以从基础镜像直接构建,避免了传统虚拟机部署时克隆磁盘或安装操作系统的步骤,大大缩短了部署时间。由于避免了传统虚拟机加载内核完成系统初始化的繁琐程序,因此在启动速度上也具有先天的优势。
4)运行性能好
根据研究,容器技术在计算效率、内存访问、磁盘I/O、网络I/O方面的性能普遍好于传统硬件虚拟化,高负载下的扩展性能也存在优势,如图2所示。
基于以上原因,同样的主机使用容器技术可以比使用传统硬件虚拟化技术承载更多的虚拟机(或容器),而这就意味着同样业务量的云计算服务可以使用更少的基础设施,以及更加低廉的维护和管理成本。
1.3云时代的高级容器技术
传统容器技术产品由于出现于云计算概念之前,无法满足自动化部署、动态迁移、标准化管理等云计算关键需求,因此一直未在云计算领域得到大规模使用,但是容器技术的强大优势促使云计算服务商不断投入,开发适合云时代的高级容器技术,目前出现的有Docker、LXD、Rocket以及DrawBridge等,其中最流行的就是Docker技术。
Docker是一个开源的高级容器管理引擎,可以将任何应用打包、部署和运行在轻量级容器中。一个Docker容器完成打包后可以不经过修改就直接运行于任何Docker环境,实现一次开发、随处部署、任意迁移,而Docker技术提供的一系列工具可以很方便地实现容器打包、部署和迁移的自动化,这一特性正是其区别于传统容器技术并得以在云时代流行的关键。
Docker最早由PaaS提供商dotCloud于2013年开源,由于其深度契合云时代对容器技术的需求,在业内得以快速传播,并在2014年实现爆发式发展。目前该技术已得到IBM、Google、亚马逊、RedHat、VMware和微软等重量级云计算企业的大力支持,纷纷宣布在自己的操作系统、虚拟机或是云计算平台中支持Docker。在国内,百度、腾讯、搜狐、中科院软件所等企事业单位也在积极参与Docker的应用和开发。可以预见,以Docker为代表的云时代容器技术凭借其巨大的技术优势将逐渐替代传统硬件虚拟化技术,成为云计算基础环境实施的主流技术方案。
2云计算环境使用容器技术的信息安全风险分析
2.1现有云计算安全技术体系
云计算基础设施的构建是以传统IT基础设施为基础,因此云计算安全技术体系离不开传统安全技术的支持。但云计算中虚拟化技术的大量使用要求在传统安全技术的基础上应用适应虚拟化工作方式的云计算特有的安全技术。现有云计算安全技术体系如图3所示。
从图3可以看出,传统安全技术仍然在云计算安全技术体系中居于主导地位,是实现云计算信息安全的必要条件。而云计算特有的安全技术是当前技术发展的热点,现有云计算安全技术主要包括以下方面。
1)宿主机安全
由于宿主机对运行其上的虚拟机具有绝对的操作权限,一旦宿主机被攻破,所有虚拟机都将面临危险,因此保护宿主机安全是整个云计算信息安全的关键环节。
目前云计算宿主机主要有两种部署形式,一种是安装全功能的操作系统(如Windows Server、Rad HatEnte,rprise Linux等),宿主机在承载虚拟机运行的同时自己也可以执行应用程序,此时可将宿主机视为传统型网络服务器,传统服务器安全技术(如防火墙、入侵检测、访问控制等)仍然是安全可靠的。另一种部署方式是安装虚拟主机专用操作系统(如VMware ESXI、Windows Hyper-V Server等),此时宿主机只用于承载虚拟机,自己并不具备运行应用程序的条件,因此像防病毒软件等很多传统安全方法都无法使用,但由于此种宿主机功能单一所以漏洞很少,在合理配置的前提下配合防火墙等其他传统安全技术也能保证安全。
2)虚拟机隔离
同传统服务器不同,同一宿主机上的虚拟机共享本地资源,并不具备天然的隔离性。虚拟机的安全隔离主要为内存隔离和I/O隔离,此功能目前主要在Hypervisor中实现。
3)虚拟机加固
虚拟机加固包括安全更新、反病毒扫描等。虽然单一虚拟机的加固和传统服务器加固并无不同,但在虚拟化环境下大量虚拟机同时进行安全更新或同时进行反病毒扫描很容易引起宿主机系统资源耗尽而宕机,同时长时间不在线的虚拟机可能因无法及时获得安全更新而暴露系统漏洞,因此在虚拟化环境中部署专用的安全更新和反病毒虚拟设备是十分必要的。
4)虚拟机安全监控与审计
目前虚拟机安全监控与审计主要有内部监控和外部监控两种方式。内部监控是指在被监控的目标虚拟机中加载监控代理,将目标虚拟机的状态与系统操作截获,并发送到安全虚拟机或管理域中的安全监控程序,再根据安全策略进行不同处理,从而实现对目标虚拟机的安全监控与审计。外部监控是利用Hypervisor的功能截获目标虚拟机的CPU、内存页面、I/O访问等信息与系统操作,发送到安全虚拟机或管理域中的安全监控程序,从而实现对目标虚拟机的安全监控与审计。
5)虚拟网络安全防护与入侵检测
同一宿主机上的虚拟机之间网络通信一般只通过虚拟交换机进行,并不会出现在物理网络中,此时传统的网络安全防护与入侵检测方法将不再发挥作用,需要使用虚拟网络安全防护与入侵检测技术加强虚拟机信息安全。
目前对虚拟网络流量进行防护与检测主要有两种方法。一种方法是通过专门的虚拟机配合虚拟交换机进行虚拟网络流量的防护与检测。另一种方法是通过重定向虚拟网络流量到外部网络交换机上,并使用传统安全设备对这部分流量进行防护与检测,以节省宿主机计算资源。
2.2容器技术环境下信息安全风险分析
由于现有的云计算信息安全技术主要针对的是传统硬件虚拟化,而容器技术与传统硬件虚拟化又存在本质上的区别,因此在云计算环境大量应用容器技术将会带来新型的信息安全风险。
1)容器提权风险
在容器技术环境下,容器内部的进程实际上就是容器主机的进程,一旦容器内部进程通过某种方式获得了超级用户权限,此时该进程实际上就获得了整个容器主机的超级用户权限,可以对容器主机和同主机的其他容器执行任意操作。
2)容器逃逸风险
容器内部的文件系统实际上是容器主机文件系统的一部分,容器理论上是可以遍历容器主机文件系统的。实际上已经有研究表明,可以利用容器漏洞遍历并读取容器主机文件,获取敏感信息。
3)单一系统内核的风险
在传统云环境下可以通过Hypervisor监控具体虚拟机行为,而在容器技术环境下,由于容器和内核之间没有中间层,所以只靠现有信息安全技术无论是针对云环境还是针对传统主机都无法对具体容器行为进行安全监控与审计。
4)容器间通信的风险
逻辑上传统虚拟机之间进行通信仍然通过网络进行,需要虚拟交换机进行网络交换。但容器间通信除使用网络之外,同一主机上的容器间还可能通过其他方式进行通信(例如,Docker就可以将多个容器连接在一起使用,此时容器间的通信不通过网络进行),此种情况下现有信息安全技术将无法对容器间通信进行防护与检测,形成信息安全风险。
5)容器基础镜像风险
现代容器技术普遍使用只读基础镜像构造容器,同一基础镜像可能被大量容器共享使用。虽然一般上认为基础镜像是安全的,但是这一点并不能得到保证。即使基础镜像确实是安全的,也并不能防止被篡改的可能。目前尚无对基础镜像安全与否的判断或检测标准,也缺乏相应的技术产品,一旦容器的基础镜像中被植入恶意代码,会给以其为基础的容器带来巨大的信息安全风险。
3解决对策
针对上述信息安全风险,本文尝试给出以下解决对策
1)对容器主机进行加固 (1)减少容器主机本身的漏洞。作为云基础设施的容器主机应避免直接运行应用程序,而是将应用程序全部容器化。这样容器主机本身可以实现功能最小化,从而显著减少漏洞数量。例如,专用操作系统CoreOS、Fedora Atom、Windows Nano Server就是非常好的选择。
(2)加强容器主机权限控制。避免赋予容器超级用户权限,使用SELinux、AppArmor、Crsecurity/PaX或类似的强制访问控制技术隔离容器超级用户,强制限制容器对主机资源的访问。
(3)加强容器主机资源隔离。为容器主机自用的磁盘、内存、交换分区等划定单独区域,容器设为只读模式,有必要时还可以通过加密等手段彻底屏蔽容器无需访问的部分。
2)加强容器间隔离
可以将容器分成不同的安全组,尽量把属于不同安全组的容器部署到不同的容器主机上。对于安全要求高的容器可以通过加密数据存储和内存页面的方式防止非法访问。
3)容器基础镜像安全管理
建立可信基础镜像源,对原始基础镜像进行充分的扫描与检测,确信不包含恶意代码后进行数字签名防止篡改。及时对基础镜像进行安全更新,确保可信源中的基础镜像不包含已知漏洞。加强基础镜像生命周期管理,及时删除不再使用的基础镜像。
4)容器安全监控与审计
扩展容器主机的进程监控和日志功能,使其能够对不同容器进行区别,并发送给专门的监控与审计程序。监控与审计程序可以部署在经过特别加固的容器中,能根据安全策略识别其他容器的非法操作,及时做出阻塞进程、报警等响应并记录日志以备审计。
5)容器安全防护与入侵检测
类似安全监控与审计,可以在安全容器中部署安全防护与入侵检测程序,通过扩展内核进程间通信功能和网络功能使容器间通信全部通过安全容器进行,达到安全防护效果。
4结束语
与传统硬件虚拟化技术相比,以Docker为代表的高级容器技术在管理和运维方面存在着巨大的优势,其在云计算领域广为流行已是不争的事实。然而由于信息安全技术的滞后性,目前在云计算环境大规模使用容器技术尚面临较大的信息安全风险。因此在建设云计算服务时,应在效益和安全之间做好权衡,在安全性要求高的场合尽量避免使用容器技术。同时随着信息安全技术的发展,针对容器技术的安全产品将会越来越成熟,使用容器技术所面临的安全风险最终是能够达到可控程度的。
5摘要:
近两年来以Docker为代表的高级操作系统容器技术得到迅猛发展,越来越多的企业参与容器技术的开发与应用,其在云计算基础设施和服务中的部署量也是逐年增加,可以说已经引发了信息技术的新一轮革命。然而因为云计算安全技术具有相对滞后性,目前尚无法对云计算容器进行有效监控和防护,因此现阶段在云计算环境中使用容器技术必将面临巨大的信息安全风险。文章尝试从容器技术的实现方法入手,对云环境中使用容器技术的信息安全风险进行分析,并给出相应的对策。