李春林,刘正军,王 冶,徐 锐
(网络空间安全四川省重点实验室,四川 成都 610041)
当前网络空间安全已经成为各国的发展重点,网络空间攻防博弈也已经从个人、团队等以盈利为目的发展为政治斗争[1]。为了提升网络攻防水平,美、英、日等国家纷纷建立网络安全实验平台开展网络攻防理论研究、网络设备测试等,当前比较著名的网络安全实验平台有美国的,National Cyber Range、Emulab,英国BreakingPoint和日本Starbed等[2-3]。网络安全实验平台的建设必须具备网络拓扑可重构、网络节点类型可定义、主机支持多配制多系统、虚拟网络能够重现真实网络环境等4项要求[4]。虚拟化技术和仿真技术由于较大程度满足上述要求,且具有较低的技术门槛和经费需求,使得一般的科院院所也有能力构建中小型的网络安全实验平台开展相关实验工作,因此被广泛用于网络安全实验平台中[5]。尤其在国内相关研究中,通过利用OpenStack等开源软件构建基于虚拟化技术的网络靶场、网络攻防实训平台成为众多高校科研院所的选择[6-8]。但基于OpenStack等虚拟化技术为网络安全实验平台存在两点不足,一是当实验环境需要部署大量业务时,通过基于虚拟机的业务部署存在部署慢、占用资源大的问题[9];另一个则是由于虚拟机运行需要占用较大的硬件资源[10]。
针对上述问题,陈一鸣提出一种基于Docker的漏洞验证框架的设计[11],以及谢睿等提出基于Docker的课程实验平台[12],这些方案通过将原来需要基于虚拟机的业务部署方式改为基于Docker进行部署,从而可以在单个虚拟机上动态部署多个业务,大大加快了部署时间减少了硬件资源消耗。但该方法在安全隔离方面,相比Kernel-based Virtual Machine(KVM)等虚拟化方案安全性较差,无法实现与宿主系统的高安全隔离[13]。因此,在实验平台中包含Docker宿主节点安全,以及如何从Docker宿主节点建立安全通道采集业务状态信息等实验数据都成为现有基于Docker业务部署方案需要解决的问题。
本文在现有基于Docker的业务部署方案基础上,针对其中的安全隔离、数据采集安全通道建立等问题,利用Kubernetes的Docker管理平台提出一种改进的网络安全实验平台构建方法。该方法基于多域安全隔离的思路,将实验平台划分基础资源域、实验数据域、业务管理域、实验场景域四个域,通过虚拟化技术将基础实验设施、业务镜像等基础资源与其他安全域进行逻辑,通过网络隔离保证基础资源域安全性;针对实验数据域需要采集实验场景中数据的取消,通过建立基于两级防火墙数据建立单向数据采集流的安全采集通道实施保护;业务管理域、实验场景域由于与安全实验联系紧密,具有较多的数据通道,因此仅在实验开始前建立,并在实验结束后删除,从而消除安全隐患。
基于Docker网络安全实验平台利用OpenStack等开源基础设施即服务(Infrastructure as a Service,IaaS)平台提供基础设施调度,并在此基础上基于Kubernetes等Docker管理平台实现业务部署,进一步考虑业务部署中对场景隔离、监控评估[14]等方面的需求,其系统构成如图1所示。
图1 基于Docker网络安全实验平台系统构成
图1 中包含了基于OpenStack的网络安全实验基础设施、基于Kubernetes的容器管理、业务镜像以及实验数据存储集群四个部分。
(1)OpenStack提供网络安全实验基础设施,以及通过虚拟化手段实现实验场景级隔离。针对不同的实验场景,通过加载不同Kubernetes主节点,为各场景建立独立的业务部署系统。
(2)Kubernetes为业务部署提供统一管理平台,实现业务的下发、部署、状态监控等概功能;
(3)业务镜像用于存放业务镜像,不同的实验平台景共享业务镜像;
(4)业务状态监控数据库用于存放各个业务运行状态数据,为实验数据提供业务状态级数据。
借鉴网络空间安全靶场设计中域的概念[1],按照安全等级将系统划分为基础资源域、实验数据域、业务管理域、实验场景域四个不同的安全域,他们之间的关系如图2所示。
图2 实验平台安全域划分
(1)基础资源域
其中基础资源具有最高的安全等级,为整个网络安全实验平台提供虚拟机、Docker镜像等公共资源。实验开始前,与业务管理域临时建立连接用于分配业务资源,实验开始后与其他域完全隔离。
(2)实验数据域
实验数据域用于采集存储实验数据,比如通过部署业务状态信息存储数据库存放业务运行状态等数据。该域中的数据用于支撑实验状态监控、实验评估等,因此数据会进入分析、评估等实验系统,其安全等级高于业务管理域和实验场景域;但其在实验过程中与业务管理和实验场景域存在数据通道,因此安全等级低于基础资源域。
(3)业务管理域
业务管理域指由各实验平台景中Kubernetes主节点构成的域,该节点负责从拉取业务镜像部署到实验环境,同时在实验过程中采集各个node的业务状态信息,供实验分析、评估使用。由于业务域中的节点在实验开始后,要从实验场景中采集数据,因此存在较高的安全溢出风险,其安全等级仅高于实验场景域,业务域中的Kubernetes各主节点之间彼此隔离,在相应的实验平台景完成实验后,随实验场景一起删除,消除安全隐患。
(4)实验场景域
实验场景域是网络安全实验开展的网络空间,所有实验业务均被部署在该域中,各个业务的安全漏洞等问题被充分暴露,因此具有最低的安全等级。任何安全实验结束后,所有业务节点均随着实验场景一起删除。
本节根据各个域的安全属性,对各个域之间的安全隔离关系进行说明,如图3所示。
图3 按区域隔离关系
在本方案中,基础资源域有最高的安全等级,其仅在实验开始前与业务域有数据交互,实验开始后与其他域网络逻辑隔离,具备最高等级安全保护;实验数据域与业务管理域之间通过防火墙进行隔离,通过会话控制、IP限制、端口控制等方式进行安全保护,安全防护低于基础资源域;业务管理域与实验数据域之间同样通过防火墙进行会话、IP限制、端口控制等方式进行安全保护。
在引入不同的安全域后,对本文给出一种如图4的改进安全实验平台系统架构。
图4 基于安全域的安全实验平台系统构成
在业务的具体部署中,每个业务基于场景进行隔离,每个场景内有一个Kubernetes主节点(master)和若干个node节点,主节点从业务镜像拉取相应的资源将业务部署到指定的虚拟机,具体过程如图5所示。
图5 业务部署过程
业务部署过程:
第一步:由实验平台发起业务部署请求,请求首先传递到OpenStack管理服务器,由管理服务器根据业务部署的场景,分配相应的虚拟机资源,首先生成一个包含Kubernetes主节点和多个node节点,业务部署基础环境,如图6所示。
图6 生成业务部署基础环境
第二步:Kubernetes主节点根据需要部署的业务,从业务镜像服务器获取相应的镜像资源,并将相应的业务部署到相应的node节点上,如图7所示。由于单个node可以部署多个业务,显著降低了虚拟的使用量,从而大大增加了资源利用率。
图7 生成业务部署虚拟机
第三步:在Kubernetes主节点和业务状态监控数据库之间建立数据连接,用于采集业务状态信息。同时,通过防火墙实施安全隔离,仅允许监控数据通过防火墙,从而实现监控数据与实验平台的安全隔离。
OpenStack通过创建虚拟机部署业务,各个docker运行在虚拟机之上,因此相比将docker直接部署到基础设施,由虚拟机提供了更高的安全隔离。同时,当实验结束后所有的虚拟机都会被删除,进一步确保了基础设施的安全性。从而有效弥补了现有docker环境安全性的不足。
对于基础资源域中的容器镜像资源,由于网络安全实验平台并不是真实业务环境,通过控制镜像服务器与Kubernetes主节点连接时间实现安全隔离。即将业务镜像拉取安排在实验开始前,一旦镜像下载完成立即断开业务镜像与实验管理域的连接,从而确保了安全性。
实验数据域中仅用于存储包括业务状态信息等实验数据,其安全威胁主要来自数据采集过程中,由业务管理域渗透过来的安全威胁。因此实验数据域和业务管理域之间通过增加防火墙进行安全隔离,且实验数据域的安全等级高于业务管理域,阻止任何从业务管理域发起的会话请求。
业务管理域中负责对实验场景中的业务进行部署和监控,因此和实验场景中存在大量的数据交互。其安全威胁主要来自两个方面:实验过程中通过业务管理和数据采集通道溢出的攻击;实验过程中不同场景之间通过业务管理域跳转的跨场景攻击溢出。
由于业务管理域必须直接与实验场景域交互,因此通过增加防火墙的手段,阻断除业务管理和采集数据通路以外的数据通道。
针对跨场景攻击溢出,通过为每个场景配置独立的Kubernetes主节点,阻断场景间的连接通路,从而可以消除安全风险。
实验场景域中开展各类网络安全实验,也是对实验平台造成安全威胁的源头。通过在实验开始前创建新的实验场景,实验完成后删除实验场景的方式进行管理。
数据采集通道横跨实验数据域、业务管理域和实验场景域三个域,是域间安全威胁传递的唯一通道。本文通过一种基于数据推拉的方式建立数据采集通道,其中实验数据域通过拉的方式从业务管理域获取数据,实验场景域通过推的方式发送数据,过程如图8所示。
图8 业务状态数据采集推拉过程
在实验过程中,由于各个节点业务状态变化的不一致,通过拉取方式难以实现获取效率与开销的平衡,因此实验场景中的node节点通过推的方式将业务运行状态发送给业务管理域中的Kubernetes主节点;而实验数据域仅需要跟业务域中的Kubernetes主节点进行通信,其开销远远小于Kubernetes主节点与nodes之间的开销,因此采用拉的方式获取数据。
由于采用不同数据获取方式,实验数据域采用拉的方式从业务管理域获取数据,其防火墙策略设置为阻止由业务管理域主动向实验数据域发起的会话请求;业务管理域和实验场景域之间则可以由实验管理域中的节点主动向业务管理域发起会话请求。
因此由实验场景域通过数据采集通道的攻击溢出在传播到业务管理域后,将难以进一步传递到实验数据采集域,从而确保采集通道的安全。
本方案提出一种改进的基于docker的网络安全实验平台构建方法,针对当前基于docker网络安全实验平台存在的实验安全隔离等问题,通过引入安全域,利用虚拟机安全隔离、防火墙等安全措施提出解决方案,通过安全性分析,本文提出的方案极大提高了网络安全实验平台的安全性。但该方案仍然面临虚拟机溢出攻击等风险,考虑到该系统面向网络安全实验,因此在设置实验场景时应予以充分考虑。