游贵荣, 陈 杰, 乐宁莉
(福建商学院信息技术中心,福州350012)
信息安全与国家安全休戚相关,2017 年《中华人民共和国网络安全法》的施行,国家对网络空间信息安全的重视达到前所未有的高度。高校作为培养网络安全人才的主要阵地[1],为跟上信息安全技术日新月异发展的步伐,需不断进行网络安全人才培养模式改革与机制创新。国家相关教育机构也对改革进行引导,为满足实践教学的需要,资助建设虚拟仿真实验教学平台,引入各大安全服务厂商承办各类信息安全竞赛。如近几年来在全国各地如火如荼举办的夺旗赛(Capture The Flag,CTF),旨在检验信息安全人才培训模式的成效与发掘信息安全优秀人才。
将CTF引入信息安全专业教学,可提高学生的学习兴趣与实战性,但厂商所提供的CTF教学平台普遍价格偏高,对于多数非“双一流”建设的应用型高校来说是一项资金负担,且平台的复杂度与封闭性不利于维护和扩展,对厂商的售后维护依赖性较强。针对此问题,本文提出利用Docker容器构建轻量级网络安全攻防服务平台(Platform as a Service,PaaS)的解决方案,利用高校已有的云平台资源,通过微服务(microservice)的方式整合师生身份认证、资源调度与分发等功能,为学生提供一个贴近实战的教学实践平台。
信息安全涉及技术面非常广,根据中国信息安全测评中心提供的注册信息安全专业人员(Certified Information Security Professional,CISP)知识体系大纲[2],CISP认证对信息安全技术主要考核的内容有:密码技术、访问控制技术,网络、操作系统(OS)、数据库和应用软件安全,以及安全攻防和软件安全开发等。CTF赛的主要内容也包括:网络信息嗅探、欺骗,漏洞的扫描、利用与修补,密码破解,逆向工程,WEB 攻防,安全加固等[3]。因网络安全实验本身具有的复杂性、破坏性和不可逆性等特点,采用真实硬件设备来构建网络安全攻防教学实践平台明显不现实,故普遍采用虚拟仿真的方式。常见的有:PC 机虚拟机(Virtual Machine,VM)方案、云平台VM方案和安全厂商专业方案3 种,各方案实现方式与优缺点见表1。
表1 常见网络安全虚拟仿真实现方式对比
以上3 种方案各具特色,PC机虚拟机方案无须额外投入建设成本;云平台VM 与安全厂商专业方案有利于提高资源的利用率与共享,便于学生远程开展实验和充分利用碎片化的时间进行学习[4];安全厂商专业方案是在开源Openstack[5-6]云平台基础上进行二次开发与封装,使用和维护简单,但总体部署效率都较低,扩展性较差。
传统重量级PaaS平台使用硬件虚拟化技术,创建的每个VM都包含一个完整的OS。针对不同的运行环境需要,可利用VM模板,先克隆出基础系统后进行定制。虽然每个VM 可保存增量快照,但无法在现有快照的基础上简单扩展出新的VM,只能复制整个VM,不仅浪费存储空间,而且部署效率低。
大数据的迅猛发展、云平台的深入应用,传统的应用程序框架从最初的单一应用(All-in-One)发展到垂直(Vertical)应用、分布式的弹性(Elastic)应用、到目前热门的微服务架构。云平台中的应用需要考虑可移植、依赖、集群、负载均衡及快速部署等因素,以实现高性能、高可用。传统基于VM的PaaS 平台已逐渐无法满足新的需求,基于容器虚拟化的轻量级PaaS平台应运而生。主流容器虚拟化技术主要有LXC、Open VZ、Docker与Rocket/Rkt 4 种。
Linux容器(LinuX Containers,LXC)是一种OS 级别的虚拟化技术[7],可在OS 层级为进程提供虚拟的执行环境,一个虚拟的执行环境就是一个容器。LXC作为Linux内核的功能,主要有下面3 个核心的技术。
(1)Cgroups。控制组(Control groups,Cgroups)是Linux内核提供的一种可以限制、记录、隔离进程组使用物理资源的机制。LXC 主要通过cgroup 实现对于资源的管理和控制。
(2)Namespace。命名空间(Namespace)提供一个进程相互隔离的独立网络空间,不同容器的进程pid可相同且不相互影响,也可共享底层的计算和存储资源。
(3)Rootfs/Chroot。Chroot 通过创建一个虚拟的根目录文件系统,实现不同容器的虚拟文件系统相互隔离,并共享底层的文件系统。
OpenVZ[8]是基于Linux内核和作业系统的OS 级虚拟化技术,互联网上众多虚拟专用服务器(Virtual Private Server,VPS)主机就是采用此技术。OpenVZ可将一台服务器分割成多个VPS,每个VPS 都可分配独立公网IP 地址、OS、内存、CPU 资源、系统配置等,用户可自行安装程序与重启。OpenVZ 作为一个系统容器运行环境,可引导一个完整的系统映像,其高效设计与轻量级处理损耗,是运行应用服务和实时数据生产型服务器虚拟化的最佳选择。
Docker作为一个基于LXC 技术的开源应用容器引擎,于2013 年发布,在LXC 基础上重新进行封装,设计目标是快速构建、交付和运行分布式应用[9]。开发者可将应用及其相关依赖包打包到一个可移植的容器中,因Docker 采用分层镜像机制,使得部署与运维工作较为简单,且启动速度快、占用资源少、移植性更强。近年来Docker发展很快且开启了商业化之路,目前分为企业商用版和社区免费版,基于Docker 容器技术的生态圈已基本形成。
Rocket应用容器项目于2014 年发布,后改名为Rkt[10]。Rkt与Docker 类似,但其更加专注于解决安全、兼容、执行效率等方面的问题,如Rkt 在下载和运行镜像前,需要将镜像发布者的签名信任添加到本地信任列表中。
传统重量级PaaS 平台,由于构建复杂度较高,与云计算中的基础设施即服务(Infrastructure as a Service,IaaS)和软件即服务(Software as a Service,SaaS)相比,明显发展滞后。Docker 自诞生以来,到目前为止已形成事实上应用交付的标准,有业界人士也认为Docker的出现催生了新一代的PaaS[11]。
尽管Docker本身已有较为出色的用户体验,但其毕竟就是一个虚拟化工具,缺乏与之匹配的编排和易用性服务,要实现PaaS 平台的易用性,还需要很多组件的支持。Kubernetes(简称K8s)作为一个开源的容器集群管理系统,提供了容器部署运行、资源调度、服务发现、负载均衡与动态伸缩等功能,可作为Docker的调度与维护层。对于构建微服务应用来说,基于K8s及Docker容器的分布式系统支撑平台是目前的主流方案[12]。因K8s的安装和部署都较复杂,不利于推广。RKE(Rancher K8s Engine)的出现,改变了此现状。RKE 是一个用Go 语言编写的K8s 简易安装程序,能给普通用户带来很好的K8s安装、部署体验,且Rancher本身就是一个开源的企业级全栈化容器部署及管理平台,通过它可以管理Docker 集群,实现集群的高可用性。Rancher 的易用性与极致用户体验,使得它作为一个管理K8s平台工具,深受用户青睐。
文献[13]中对Docker、OpenVZ 与Rkt 虚拟化性能进行了测试比较,得出Docker 的高效性、快速性较好,但隔离性较弱的结论,适合对快速性和高效性有高要求的PaaS场景。根据网络安全攻防平台的具体要求,采用Docker 容器技术,在K8s 集群的基础上构建轻量级PaaS 平台是比较合适的选择,它易于构建隔离、标准化运行环境,且横向扩展方便[14]。
本研究设计并实现的轻量级PaaS平台,是在现有云计算基础设施上创建主机集群,将用于各种攻防场景的容器镜像组置于集群中的私有容器仓库中,以微服务的方式对外提供统一的Web 访问入口。该平台从下至上主要包括资源层、容器层、接口层和业务层,平台逻辑结构如图1 所示。
图1 轻量级PaaS平台结构图
(1)资源层。通过整合IaaS 平台中的计算、存储与网络资源,在X86 裸机或VM 中部署Docker 环境,用Rancher 来管理K8s 集群,为网络安全攻防平台提供基础资源支撑。因OS 漏洞挖掘实验环境无法使用容器进行模拟,只能由VM来完成。
(2)容器层。容器层主要包括支持PaaS 平台的代理、认证、缓存、消息队列、持久化、日志等服务,以及支持各种网络安全攻防场景的容器镜像组。编排一个网络安全攻防场景可能需要多个容器服务组成,图2所示为一个典型的Web 攻防场景所需的容器组合。HTML5 的普及,使得应用程序Web 化的趋势越来越明显,为便于网络用户使用不同类型终端访问,此场景中用户以Web方式访问K8s提供的代理服务,登录到容器内部私有网络中的Jumpserver 堡垒跳板机,由该跳板机提供的Web Terminal 方案来访问场景中的各种虚拟主机;这些虚拟主机使用K8s的虚拟软件定义网络(Software Defined Networking,SDN)交换机接入到容器内部私有网络;Quagga 路由组件则用来模拟Internet网络环境,并将带漏洞的靶机连接起来。不同场景的容器组可利用K8s的Namespace命名空间进行隔离。为加快场景部署,这些容器镜像组都事先存入本地私有容器仓库。
图2 攻防场景容器组示意图
(3)接口层。将容器层中提供的各种微服务,按资源表征状态转移(Resource Representational State Transfer,REST)API 方式进行封装和定义。REST 是Roy Fielding博士所提出来的一种软件架构风格[15],REST风格的Web服务通过一个简洁清晰的URI来提供资源链接,并使用JavaScript 对象标记来传递数据。因REST模式的Web 服务简单先进,Docker、K8s 与Rancher也都提供REST API,其中Rancher 是对K8s的REST API进行了重新封装。对于平台用户来说,直接使用REST API 仍有较大困难,一般还需要在此基础上进行UI与接口的二次开发。
(4)业务层。以Web 服务方式提供给用户与管理人员的门户,通过对服务的调度与编排、组合和控制,实现网络攻防场景的部署、切换、用户访问控制,以及VM主机的管理等功能。利用自动化脚本实现一键部署高可用、高可靠、高性能的网络攻防平台。
互联网上有众多现成用于快速部署攻防测试环境的VM镜像,如:开放式Web应用程序安全项目(Open Web Application Security Project, OWASP[16])、metasploitable、Kioptix 等。这些早期以VM 方式发布的系统,多数是基于Linux 系统,易于进行Docker 移植。随着Docker生态系统的完善,越来越多的系统将以Docker容器镜像的方式发布,且Docker容器仓库中的共享镜像资源更新也很快。
用于网络安全攻防的组件主要分为3 类:一是用于构建网络环境,二是预设漏洞的靶机,三是用于渗透测试的安全攻击工具。常用组件列表见表2。
表2 常用网络安全攻防组件列表
为验证上述轻量级网络安全攻防平台能否满足日常教学与实践需要,设计相关测试实验,并进行性能分析。
本测试环境采用一台机架服务器作为宿主机,利用vSphere ESXi 6.0 虚拟出4 个Linux VM作为Docker容器主机,并构建具有3 个节点的K8s 容器集群。据VMware官方提供的测试报告[17],在vSphere的VM中部署Docker二次虚拟化对应用程序性能的影响不大,最大计算性能损耗为5%。具体环境配置见表3。
(1)容器部署时间。网络攻防环境的部署所花费的时间,与需要启动容器的数量、容器中运行的服务与容器镜像的大小有关。本文根据班级人数30、50、100(对应小班、中班、大班)的实验需求(每人启动一个靶机容器)进行部署测试,所用容器镜像(存于本地私有仓库)见表4。
表3 测试环境配置
表4 容器镜像大小
统计部署时间的方法采用在容器启动后,执行脚本访问指定Web 服务器来记录时间戳。开始部署的时间戳与Web服务器记录的时间戳之间的间隔,即为部署所耗费的时间。测试结果见图3。
图3 容器部署启动所耗费时间
由图3 可知,容器启动速度很快,总体上容器启动时长与容器镜像大小成正比。若节点主机已存在镜像的部分分层文件,镜像文件大的容器,启动速度不一定会很慢。正常部署一个满足100 用户的攻防环境在几分钟内就可完成,相比于启动一个重量级的VM 就需要花几分钟来说,部署效率优势明显。
(2)容器资源利用率。此测试环境启动一个web-dvwa带漏洞Web靶机容器,设置该容器的内存预留为128 MiB(MiB 为K8s 内存资源的计量单位,1 MiB =220Byte),CPU 预留为300 milli-CPUs(K8s CPU资源的计量单位为“毫核”,millicores),不限制内存与CPU 的使用,即允许容器使用超出预留资源的设定值。使用Linux 压力测试工具ab,对靶机进行模拟DoS攻击,攻击时长为120 s,用于测试并发访问对容器资源的开销,内存与CPU使用峰值测试结果如图4所示。由图4 可见,容器资源的利用率基本上随并发访问量的增长而增大,也存在一定的波动现象。在实际使用中,可通过Rancher的UI界面随时调整容器实例数量,以满足并发访问的需要。
图4 并发访问对容器资源利用率影响
(3)容器自动扩展压力测试。当K8s 开启水平Pod 自动缩放(Horizontal Pod Autoscaling,HPA)功能后,可实现支持服务的容器水平自动伸缩(增减容器数量)。本测试容器镜像采用web-dvwa,将其配置成支持HPA的一个Web 服务,为容器内存预留为128 MiB、最大限制为256 MiB,为CPU 预留100 milli CPUs、最大限制为300 milli CPUs,最小容器实例数为1,最大容器实例数为10,内存与CPU 利用率阈值为70%。利用Tsung[18]压力测试工具来模拟真实环境下用户的Web请求,压力测试持续10 分钟,每秒钟产生50 个模拟用户,每个用户访问10 个URL 连接。测试容器实例数量随负载波动的情况,测试结果见图5。
图5 工作负载对容器实例数量的影响
图5 表明,开启HPA功能后,随着用户并发数(即工作负载)的增加,当容器资源利用率超过事先设定的阈值时,K8s会自动创建新的容器,以实现弹性伸缩功能。新增容器的数量与用户并发数之间基本上呈线性关系。
以上测试实验表明,轻量级网络安全攻防平台在环境部署的效率方面优势明显,对系统资源的消耗较少,体现其轻量性,且对于某些要求并发访问、资源消耗较大的场景,可以利用平台的HPA 机制,实现资源的弹性伸缩。通过平台测试实验,验证了该平台的可用性,可实现教学、实践场景的快速部署。
本文分析了现有网络安全攻防平台常见的3 种构建方案及其优缺点,阐述了目前主流轻量级PaaS平台技术的常用架构,重点探讨了利用开源Docker、Kubernetes、Rancher及相关网络安全攻防组件来实现轻量级网络安全攻防平台的方法。通过相关实验测试,此平台能够满足日常教学与实践需要,性能良好、可扩展性强且建设成本相对廉价,具有较好的应用前景。不足之处是Docker 容器的OS 依赖于宿主机,无法模拟带有漏洞的某个OS 版本,只能模拟具体有漏洞的组件,此不足可用重量级VM来弥补。另外,尽管Rancher管理平台提供了较为人性化的图形操作界面,其应用商店也在逐步完善,但K8s 平台本身比较复杂,要深入了解并应用此PaaS 平台,对平台管理员的专业知识掌握程度要求较高。