云虚拟化安全攻防实践(txt+pdf+epub+mobi电子书下载)


发布时间:2020-08-16 14:09:46

点击下载

作者:唐青昊,毛大鹏

出版社:电子工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

云虚拟化安全攻防实践

云虚拟化安全攻防实践试读:

前言

在过去数年中,云计算给互联网带来了巨大变革,在可预见的五年中,云计算依然会影响互联网领域的方方面面。全社会对公有云和私有云的大规模应用,使得过去分散的数据存储和代码运算在云计算场景下更为集中,因此保证云计算平台的安全稳定运行就成为各个云服务供应商的基本诉求。

在云计算平台所面临的各种安全风险中,来自于虚拟机内部的威胁一直被忽视。这种类型的威胁通常会导致云计算平台的内部网络被侵入、核心数据被窃取,甚至会导致该云计算平台的众多租户受到影响。为了应对这种来自于云虚拟化领域的威胁,美国的Google公司、Microsoft公司,以及中国的奇虎360公司、阿里巴巴集团、腾讯公司在过去的两年时间中都投入了安全团队进行研究并不断公开最新成果。通过这些公司的共同投入,云虚拟化安全的价值被更多的公司所认可,可喜的是众多云供应商已经开始采购云虚拟化安全的企业级防御产品。

作为云虚拟化安全攻防研究项目的直接参与人员,在过去两年中,我看到有更多的国际大型安全会议开始接受与云相关的议题,也看到了在Pwn2Own这个安全界的奥运会比赛中加入了虚拟化平台攻击项目。这些正在发生的变化不断验证虚拟化安全对云生态安全的重要性。因此,对于云计算生态中的从业人员、安全行业的从业人员,以及关注互联网历程的每一个人,了解云虚拟化安全将是有趣的且是有必要的。《云虚拟化安全攻防实践》这本书中包含了在2015—2017年我在多个国际安全会议上分享的议题,以及我在完成Pwn2Own 2017 VMware Workstation比赛的过程中积累的方法。相信这些核心内容可以帮助读者快速了解云虚拟化安全的精髓。

本书的前6章由唐青昊完成,第7章由毛大鹏完成。本书的第1章介绍了虚拟化技术的基础概念;第2~6章分别对Docker、VMware Workstation、QEMU和KVM、Xen、Hyper-V这几种主流的虚拟化系统的脆弱性进行了分析;第7章介绍了虚拟化系统的防御技术。本书不但为行业从业人员准备了大量深入而精彩的虚拟化系统代码分析、漏洞代码分析,而且为毫无云计算基础的读者提供了相当篇幅的分析方法介绍、基础工具介绍。希望这种深浅搭配的内容可以满足读者的需求。

在本书成书之际,感谢为本书面世而不辞辛劳的郑柳洁编辑,感谢提出云计算安全方向的奇虎360公司技术总裁谭晓生先生,感谢一直以来在背后提供支持的家人。唐青昊  第1章 认识Hypervisor

作为云生态的核心,Hypervisor使人类具备了对计算机硬件资源更细粒度的掌控能力。在Hypervisor被应用之前,服务器都是由操作系统中的进程直接使用CPU、内存、硬盘等硬件资源的,由于企业业务划分及地域性因素,绝大多数的计算或者存储资源未被100%使用,造成极大的浪费。Hypervisor的出现,一举解决了这个问题,通过在过去分散的服务器中部署Hypervisor,将全部硬件资源进行集约化管理。假设有一台配置24核心、128GB内存、12TB硬盘的服务器,在部署单机版本Hypervisor之后,可以根据业务用途切分成尽可能多的虚拟机,如32台配置4GB内存、200GB硬盘的虚拟机。Hypervisor自20世纪70年代开始出现在学术论文中,历经在大型机、PC、服务器上多年的技术演进,目前体系已经相当完善。

读者可通过本章了解云计算的起源、Hypervisor在云计算场景中扮演的角色,Hypervisor的分类,以及Hypervisor所使用到的虚拟化技术。在后续章节中将对各主流Hypervisor进行安全性分析。1.1 云计算的起源

早在2006年,亚马逊就推出了亚马逊云计算服务(AWS,Amazon Web Service),到2016年第四季度,该服务净销售额已经达到24亿美元。在过去的12年间(2006—2017年),云计算概念不断延展,深入各个领域的方方面面,从最初仅在美国顶级互联网公司中应用,发展到目前被全球政府、企业广泛接受。毫无疑问,围绕云计算概念,已经形成一个完整的生态系统。云计算生态的出现,是计算机技术变革和互联网商业模式发展的共同结果,符合人类对资源精细化管控的趋势。

本节将介绍构筑起目前市场格局的关键阶段和典型产品,帮助读者建立起对云计算生态的初步印象。1.1.1 分时计算

云计算具体依赖的底层架构均由已存在多年的技术演化而来。计算机在诞生之初,是非常昂贵的大型设备,在任何时间只能为单个用户运行单个程序。随着计算机运行速度的提升,同时支持多个用户的系统成为必然。20世纪60年代,分时计算的概念应运而生,即每个用户的程序的运行状态可以被实时保存,并按照时钟快速切换。分时计算的本质是将计算机资源作为基础设施,可以看作云计算的早期版本。1.1.2 虚拟化“虚拟化[1](Virtualization)”一词最早出现在20世纪60年代,指一种隐藏了物理特性的抽象的计算技术,也被称为“硬件虚拟化”“平台虚拟化”“服务器虚拟化”。控制虚拟化的软件被称为“虚拟机管理程序”(Hypervisor)。使用虚拟机管理程序可以在特定的硬件平台上创建模拟的计算机环境,即虚拟机(Virtual Machine),而特定的硬件平台被称为“宿主机”。一般情况下,在宿主机和虚拟机上均会运行操作系统软件,以方便操作计算资源。1.1.3 Web 2.0和分布式文件系统

Web 2.0的概念最早出现在21世纪初,相对于人们只能被动观看的Web 1.0网站,Web 2.0网站鼓励用户在虚拟社区中进行交互并创造内容,例如国内的新浪微博、百度百科就是典型的Web 2.0网站。

Web 2.0为互联网数据[2]带来了几何级数的增长,分布式文件系统被设计出来用于更方便地扩展存储。不同于NFS、Ext等本地系统,分布式文件系统通常使用网络协议进行文件块访问操作。分布式文件系统拥有和本地文件系统同样丰富的接口,可以实现对文件的枚举、读取、写入、删除等操作。1.1.4 云计算元年

2006年可以被视为云计算元年,2006年8月9日在搜索引擎战略会议(Search Engine Strategies Conference)中,谷歌公司CEO艾瑞克(Eric Schmidt)首次提出“云计算”一词,如图1-1所示。图1-1 艾瑞克首次提出“云计算”[3]

同年8月24日,亚马逊公司发布即将推出弹性计算云(Elastic Compute Cloud,EC2) beta版本的公告(如图1-2所示),标志着云计算概念第一次被应用在商业服务中。在这份公告中,“可伸缩的计算和存储”这个标志性的特点首次被提及。图1-2 亚马逊公司推出弹性计算云服务1.1.5 云计算在中国

中国最早进军云计算领域的大型互联网企业是阿里巴巴公司和新浪公司。2009年9月,阿里云在杭州成立,其云产品在2010年的“双11”在线购物促销活动中得到使用。同年11月,新浪公司推出云计算产品SAE(Sina App Engine),允许互联网产品的开发人员使用新浪提供的软件开发工具包开发网页程序。1.1.6 典型的云计算产品

目前构建云计算生态的关键产品占据了市场的绝大部分份额,它们的成长史就是并不长的云生态历史,它们的规划也是云计算生态将要到达的未来。

这些扮演关键角色的产品包括亚马逊公司的AWS,一款被全球广泛使用的公有云计算服务;NASA和Racespace共同发起的OpenStack项目,提供了开源的云计算管理平台;Docker公司的Docker产品,一款流行的开源应用容器引擎;传统PC巨头微软公司推出的公有云平台Azure和个人虚拟系统产品Hyper-V;VMware 公司推出的面向私有云的ESXi/ESX产品和个人虚拟系统VMware Workstation产品。下面来详细介绍这些产品。

亚马逊公司提供的AWS是世界上最早发布、最早投入使用的公有云服务平台,它的中文官网地址是https://aws.amazon.com/cn/,网站首页如图1-3所示。图1-3 AWS官网部分截图

AWS对云计算的定义是,一种通过互联网交付的IT资源与应用交付方式[4]。基于这个定义,在AWS的漫长发展历史中,所提供的关键服务包括Amazon Elastic Compute Cloud(简称EC2,2006年8月发布的资源可延展的虚拟计算服务)、Amazon Simple Storage Service(简称S3,2006年3月发布的云存储服务)和其他服务,涉及负载均衡、数据库、数据分析、应用服务、管理部署、容器等领域。EC2部署了大量定制后的 Xen虚拟机,从而可以帮助用户在短短几分钟内创建虚拟机(在AWS中称为instance,即实例)。EC2使用两种不同类型的数据存储方式,分别是本地存储和网络存储。S3是AWS解决海量数据存储的关键产品,用户可以通过网络接口访问S3。S3在稳定性和持久性方面性能卓越,发布至今,累计传输了达万亿规模的对象数据。AWS改变了传统的IT业务模式,将自建软硬件设施转化为购买在线服务。AWS的一大特点是按需付费,即用即付。AWS的定价方式和水电费相似,客户只需为所使用的服务付费,这样就省去了购买服务器、软件许可或者租赁设施的费用。

OpenStack是一个以IaaS模式部署的开源云计算软件平台[5]。与AWS不同,OpenStack并不是付费的产品或者服务,并且可以在官网(https://releases.openstack.org/)获取全部代码。OpenStack软件由NASA参与推出,目标是帮助用户提供可以在标准硬件上运行的云计算服务。在2010年首次推出后,主流操作系统如Ubuntu Linux、Debian、SUSE、Red Hat、Oracle Solaris、Oracle Linux逐步将其引入。在OpenStack的架构(如图1-4所示)中,包含了极丰富的组件,提供计算、存储、网络、身份认证等服务。这些组件都有单独的项目代码名称。OpenStack的界面是由Web程序实现的,它的代码名称是Horizon。用户在Web界面进行操作即可管理整个云,如开启虚拟机、配置网络等。OpenStack的计算组件又称Nova,用于管理虚拟机,用户可以使用该组件对虚拟机进行开启、关闭、重启、暂停、迁移、销毁、配置调整等操作。网络组件的代码名称是Neutron,用户使用该组件的接口即可定义云环境的网络结构,包括配置路由、DHCP、DNS等。存储组件的代码名称是Swift,用于进行对象存储和检索,比如存储镜像或者进行卷的备份等。OpenStack项目聚合了众多的先进“大脑”,并且获得了包括Dell、Cisco等多家巨头的支持,提供了多种云基础组件和各类功能强大的辅助组件(包括负载均衡、消息队列、服务部署等),打造了一艘开源云计算平台的“航空母舰”,在整个云生态发展过程中占据不可或缺的位置。图1-4 OpenStack架构图

作为PC时代毫无争议的巨无霸,微软公司在云计算时代依然表现抢眼。2008年,微软即发布Azure服务进军云计算市场,2014年最终改名为Mircosoft Azure。Azure 在技术架构上是基于Mircosoft Hyper-V的。Hyper-V是微软云产品及云服务最核心的Hypervisor系统,最早出现在Windows Server 2008中。与微软以往的封闭风格略有不同的是,Hyper-V不但可以运行Windows操作系统的虚拟机,也在版本更迭的过程中支持一些Linux/UNIX操作系统。Hyper-V系统架构如图1-5所示[6]。Azure在计算、存储、数据库、网络、监控、安全这六个方面都提供了丰富的服务。其中包括许多具有特色的组件,如数据库方面的Azure DocumentDB,这是由微软实现的NoSQL产品,不同于主流的NoSQL产品MongoDB,DocumentDB以PaaS形式提供服务,而且借助Azure实现了优异的伸缩能力。Mircosoft Azure云服务,借助微软在x86平台积累的良好口碑,加上一如既往的卓越架构能力和产品互操作性,相信在云时代会延续霸主的角色。图1-5 Hyper-V系统架构图1.2 基础概念

在继续深入讲解云计算生态之前,读者需要先了解一些和云计算相关的术语,这些术语可以帮助读者快速地窥探到云计算行业的冰山一角。

1.云计算分类

典型的云计算服务模式包括:IaaS(Infrastructure as a Service,基础设施即服务),通过按时间或者用量的方式,为客户提供量身定制的CPU、内存、存储等计算资源;PaaS(Platform as a Service,平台即服务),提供Apache Httpd、Nginx等生产环境;SaaS(Software as a Service,软件即服务),提供具备企业流程管理、网站漏洞扫描等功能的在线应用。

2.关于私有云

私有云,指客户专属的云计算平台,一般是由企业的IT部门或第三方供应商搭建和维护的软硬件基础设施。其特点是企业可以充分掌控私有云中的计算资源、存储资源、管理权限等。

3.关于公有云

公有云,指由供应商搭建和维护,被众多客户通过互联网方式共同使用的软硬件设施。

4.关于宿主机和虚拟机

云计算服务依赖虚拟化技术,传统的服务器一台物理机对应一个操作系统;而使用虚拟技术的服务器,在一台物理机上可以运行多个相互隔离的操作系统,运行Hypervisor的被称为宿主机,运行其他操作系统的被称为虚拟机。

5.关于Hypervisor

Hypervisor,又称VMM(Virtual Machine Monitor,虚拟机管理程序),是一种创建和管理虚拟机的软件。虚拟机系统使虚拟机具备和普通服务器同样的硬件功能,如操作网络数据、文件存储、显示等。多台虚拟机的操作系统可以共享虚拟化硬件资源,并且互不干扰。Hypervisor的架构如图1-6所示,是一种典型的虚拟机、宿主机、虚拟机管理系统的层级关系。图1-6 Hypervisor架构图1.3 Hypervisor的分类

截至目前,主流的Hypervisor有Xen、KVM/QEMU、VMware Workstation、VMware ESXi、VMware Fusion、VirtualBox、Hyper-V等。可以按照多个维度对这些系统进行分类,通过这些维度,读者可以从多个侧面认识Hypervisor。这些分类没有严格的界定,同一个产品可能包括两种或多种类别的技术。大型软件公司的产品也会涵盖不同的类别,如VMware公司出品的VMware Workstation和VMware ESXi产品可以被分在不同的类别中。1.3.1 按照宿主机平台分类

根据Hypervisor所依赖的宿主机平台,可以分为两类:第一类Hypervisor可以在裸机上直接部署运行,如VMware ESXi;第二类Hypervisor可以运行在传统的操作系统上,如VMware Workstation可以运行在Windows操作系统上。1.3.2 按照是否修改虚拟机操作系统分类

根据虚拟机操作系统是否需要修改,可以将Hypervisor分为两类,分别是全虚拟化(Full Virtualization)和半虚拟化(Para Virtualization)。需要对虚拟机操作系统进行修改的被称为半虚拟化,如Hyper-V、Xen的半虚拟化模式;无须修改虚拟机操作系统即可运行的被称为全虚拟化,如VMware Workstation、VMware ESXi等。

全虚拟化使用了一种可以完全模拟底层硬件支撑虚拟机运行的技术[7]。实现全虚拟化的关键技术挑战虚拟机中的特权指令处理,这些特权指令处理不当会干扰到宿主机和其他虚拟机的正常运行。为了应对这个挑战,全虚拟化在处理虚拟机操作系统中运行的高权限指令时进行拦截和模拟操作,保证相关操作被隔离在当前虚拟机中。全虚拟化的优势是对虚拟机操作系统的适配更加简便,支持种类也会较多。

对比全虚拟化,使用半虚拟化的虚拟机,需要在操作系统中加入和Hypervisor协同的代码。由于半虚拟化无须进行捕获异常、翻译和模拟的过程,理论上处理性能将比全虚拟化高,其运行速度可接近裸机。

那么在虚拟机中,全虚拟化和半虚拟化设备有哪些不同呢?下面来观察普通PC、AWS Windows虚拟机、Hyper-V虚拟机中的设备管理器中的网卡设备情况,可以看到普通PC上网卡设备的属性信息中包含“资源”选项卡(如图1-7所示),AWS和Hyper-V的Windows虚拟机中没有“资源”选项卡,是半虚拟化设备(如图1-8和图1-9所示),VMware Workstation的Windows虚拟机中有“资源”选项卡,是全虚拟化设备(如图1-10所示)。图1-7 PC上的显卡设备信息图1-8 AWS的Windows Server 2016虚拟机网卡设备信息图1-9 Hyper-V的虚拟机网卡设备信息图1-10 VMware Workstation的虚拟机网卡设备信息1.3.3 其他类型的虚拟化

在虚拟化技术发展的漫漫历程中,不但有软件公司的积极进取,也能看到硬件公司参与的身影。硬件公司提出的虚拟化辅助解决方案,是借助硬件提升Hypervisor的性能和安全性。这里以Intel公司的产品为例。早在2005年,Intel公司就发布了具备硬件辅助虚拟化技术的早期CPU产品,以及影响深远的Intel-VT。Intel-VT包括三个部分,分别是处理器虚拟化技术Intel VT-x、芯片组虚拟化技术Intel VT-d和网络虚拟化技术Intel VT-c。其中Intel VT-d 是PCI passthrough类型设备模拟器的硬件基础。Intel-VT必须和多种硬件、软件搭配使用才能实现虚拟化的效果,目前VMware Workstation、KVM/QEMU、Xen等多种闭源或者开源的软件都支持Intel-VT。

操作系统层虚拟化是一种应用于服务器操作系统中的轻量级虚拟技术,这种技术并不能创建可以模拟硬件设备的虚拟机,但是可以创建多个虚拟的操作系统实例,从而隔离进程、文件系统、网络等。著名的Docker就属于操作系统层虚拟化的典型产品,在Docker容器中看到的设备信息和宿主机是完全一致的。1.4 虚拟化技术

在Hypervisor发展的近10年时间中,不断出现、不断消失的技术数不胜数。那么目前在主流的Hypervisor中,正在使用哪些技术,以及这些技术发展的方向又是什么呢?本节将对这些内容进行详细介绍。1.4.1 I/O虚拟化

在1.3.2节中,列举了多种类型的Hypervisor下的Windows虚拟机网卡,这些虚拟机中显示的网卡并不是真实的物理网卡,而是物理网卡对应的设备模拟器。设备模拟器使用到的关键技术是I/O模拟。

Hypervisor将物理网卡的实际功能赋予了同一台物理机上多台虚拟机中的设备模拟器,但是需要注意虚拟机中的网卡设备模拟器显示的种类信息可能与物理机中的网卡设备不一致(如图1-11所示)。图1-11 宿主机中的网卡设备信息和在该宿主机上运行的虚拟机中的网卡设备信息

I/O模拟可以按照实现方式进行分类,包括软件模拟方式、半虚拟化方式和passthrough方式。

1.软件模拟方式

最普遍的设备模拟器是直接模拟物理网卡的中断、DMA操作。当虚拟机中的设备驱动像操作物理网卡一样对特定的I/O端口和I/O内存进行读写时,Hypervisor捕获相关操作交由设备模拟器组件进行处理。这种方式的优点是可以模拟各种硬件,缺点是性能消耗较大。

2.半虚拟化方式

采用半虚拟化方式的虚拟机使用一套标准化接口访问宿主机硬件设备。通过这套接口,虚拟机在进行设备发现和资源分配时前后端相互感知,可以通过共享内存的方式进行信息传输。理论上可以达到比软件模拟更快的处理速度。

Virtio是Linux平台上的一种针对网络设备和磁盘设备的半虚拟化实现标准,它和Xen半虚拟化设备驱动及VMWare客户端工具相似。一个Virtio设备需要虚拟机系统的驱动支持才能正常运行,Virtio的运行框架如图1-12所示。使用Virtio的设备包括virtio-net、virtio-blk、virtio-vga等。在Virtio的实现中,使用到共享内存的处理方式,而且输入和输出使用了不同的数据描述符环形结构,相比单一缓存的方式更高效。图1-12 Virtio运行框架图

3.passthrough方式

与软件模拟及半虚拟化方式不同,采用passthrough方式的虚拟机可以借助CPU硬件特性(如Intel公司的VT-d技术,以及AMD公司的IOMMU技术)直接访问物理设备。在性能上,采用passthrough方式的性能损耗相对其他两者是最低的。图1-13展示了在软件模拟和passthrough方式下,虚拟机访问物理设备的过程。由于采用passthrough方式访问物理设备无须经过设备模拟器和Hypervisor层的设备驱动,因此其执行效率更高。图1-13 在passthrough方式(左)和软件模拟方式(右)下访问物理设备的过程示意图

passthrough的实现原理是,CPU硬件将设备物理地址映射到虚拟机操作系统,当虚拟机操作系统使用该设备时,和直接操作物理设备的行为一致。在安全性方面,在不同的虚拟机中同时操作同一个物理设备时,硬件架构需要对直接访问内存进行隔离。1.4.2 CPU虚拟化

现代计算机系统一般包括两个及以上的特权级别,隔离了操作系统层指令和应用层指令。该类计算机系统中包含可以操作关键系统资源的指令,该类指令被称为特权指令。特权指令只有在最高权限下才能正确执行,否则会触发异常并交由操作系统处理。

在虚拟化架构下,Hypervisor运行在最高权限下,虚拟机操作系统运行在非最高权限下。虚拟机操作系统的ring0权限变为ring1或者ring3权限。在虚拟机指令中,可以操作关键系统资源的被称为敏感指令。所有的特权指令都是敏感指令;反之不成立。图1-14展示了特权指令和敏感指令的关系。图1-14 特权指令和敏感指令的关系

如果一个系统中的所有敏感指令都是特权指令,那么该系统可以进行虚拟化。CPU虚拟化按照敏感指令的处理方式,可以分为指令模拟方式、半虚拟化方式和硬件辅助虚拟化方式。

1.指令模拟方式

常见的指令模拟方式包括多种技术:解释执行、代码扫描与修复、二进制代码翻译。

针对不同硬件体系的指令模拟一般使用解释执行技术,如在x86架构的宿主机上运行MIPS架构的虚拟机。解释执行技术的原理就是对虚拟机中运行的指令在Hypervisor中进行执行效果模拟。由于所有指令都需要模拟,因此执行效率较低。

针对相同硬件体系下的指令模拟使用代码扫描与修复技术,这种技术的原理是,非敏感指令直接在物理CPU上执行,敏感指令被陷入Hypervisor中,由Hypervisor模拟执行。代码扫描与修复技术的优势是比解释执行具有更高的执行效率。

与解释执行方式类似的是二进制代码翻译,其不同点在于二进制代码翻译只能处理相同体系结构下的虚拟机指令。二进制代码翻译将虚拟机中的应用层代码和内核层代码读入模拟器缓冲区,然后将这些指令翻译为不包含敏感指令和特权指令的x86指令,在应用层即可执行。

2.半虚拟化方式

相对于捕获加模拟的方式,Hypervisor还可以通过半虚拟化方式来处理虚拟机的特权指令。在这种方式中,需要修改虚拟机操作系统,将针对操作系统特权指令的相关操作改为调用Hypervisor Hypercall,从而使Hypervisor可以处理相关操作。使用Hypercall方式处理虚拟机特权指令的速度相比指令模拟方式更快,接近于物理机执行速度。

3.硬件辅助虚拟化方式

除上述指令模拟和半虚拟化方式外,也可以使用硬件辅助虚拟化方式实现虚拟机指令的正常执行。使用硬件辅助虚拟化方式需要在CPU、芯片组等硬件设备中加入针对虚拟化的设计,弥补了原有硬件体系不支持虚拟化的不足,简化了以软件方式虚拟化的过程,提升了虚拟机指令的执行效率。

Intel 公司的VT-x为虚拟机提供了硬件辅助虚拟化指令执行的模式,在这种模式下,全部敏感指令的行为都被重新定义,而不再以“陷入再模拟”的方式处理指令操作。VT-x引入了两种操作模式,分别是root操作和non-root操作模式。non-root操作是虚拟机运行所处的模式,在该模式下敏感指令触发的陷入称为VM-Exit。当这种陷入 发 生 时,CPU 从 non-root 切 换 到 root 操 作 模 式。Hypervisor 使 用VMLAUCH/VMRESUME可以发起VM-Entry,调度客户机运行,当VM-Entry发生时,CPU从root切换到non-root操作模式。同时VT-x提供了VMXON和VMXOFF指令来打开和关闭VMX操作模式。图1-15展示了Intel VT-x的处理方式。图1-15 Intel VT-x的处理方式1.4.3 内存虚拟化

普通操作系统的内存管理包含了虚拟地址和物理地址之间的映射关系。Hypervisor的内存管理更为复杂:虚拟机中的应用程序使用的是从0开始的连续的虚拟地址空间;虚拟机操作系统访问的是伪物理地址;同时Hypervisor也维护了一套关于伪物理地址和真实机器地址之间的映射关系。

MMU(Memory Management Unit,内存管理单元)是CPU中用来进行地址转换的元器件。在普通操作系统中,内存操作指令只需通过MMU的单次转换即可完成功能;然而在虚拟化架构下,必须经过Hypervisor额外的一次转换,因此效率较低。目前出现的MMU虚拟化方法包括Direct Page Table、Shadow Page Table和Extended Page Table(即EPT)。EPT的地址转换流程如图1-16所示。图1-16 EPT的地址转换流程

Shadow Page Table的方式是通过建立多层的页表定位虚拟机内存的。Intel VT-x的EPT(页表扩充技术)的核心是由硬件完成两层地址转换,Hypervisor提前将虚拟机的物理地址转换到机器地址的EPT页表放置在CPU中;在进行地址转换时,CPU自动查找映射页表完成虚拟机的虚拟地址到机器地址的转换。EPT方式使虚拟机的内存访问性能接近物理机。1.5 小结

本章从云计算理论的起源讲到云服务行业巨头,涵盖了云生态的基本概念和关键角色。希望这些内容可以使读者建立起对云生态的初步印象,并进入云安全这个全新的技术领域。

云生态的勃勃生机是建立在Hypervisor的稳定性和安全性基础之上的,而Hypervisor也经历了漫长的发展历程,才成长为目前的状态。在云安全的世界中,Hypervisor的安全风险频被曝光。针对这种风险的漏洞攻击会危害云计算系统的多个方面,包括宿主机被破坏、虚拟机信息泄露、黑客在Hypervisor的上下文执行恶意指令。相比传统的客户端软件漏洞、操作系统漏洞,Hypervisor软件漏洞在挖掘和利用过程中都更加复杂,对于云生态是一个崭新的攻击面。对于多种类型的Hypervisor安全漏洞的分析将是本书的重点。

在后续的章节中,将介绍多种Hypervisor的实现细节和典型漏洞,也将介绍对Hypervisor安全漏洞的防御方案。

本书涉及的Hypervisor包括Docker平台、VMware Workstation平台、QEMU和KVM平台、Hyper-V平台,这些都是目前世界上主流的私有云或者公有云业务平台。通过深入分析这些典型的云平台的漏洞安全攻防技术,推动整个云生态的安全建设,构筑未来互联网的安全基石。[1] 参考https://en.wikipedia.org/wiki/Hardware_virtualization[2] 参考https://en.wikipedia.org/wiki/Clustered_file_system[3] 引用自https://www.google.com/press/podium/ses2006.html[4] https://wenku.baidu.com/view/ef0bf608fab069dc51220152.html[5] 引用官网介绍[6] 图片引用自https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/reference/hyper-v-architecture[7] 参考https://en.wikipedia.org/wiki/Full_virtualization  第2章 Docker容器安全2.1 简介2.1.1 关于容器化技术

容器化,也被称为基于容器的虚拟化和应用容器化,是一种用于部署和运行分布式应用程序的操作系统级虚拟化方法。多个独立的系统(被称为容器)可以在同一个宿主机上,并且拥有单独的内核。可以把每个容器看作一个简易版的Linux环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序,每个容器之间都是相互隔离的。

虚拟机和容器是虚拟化技术的不同应用形态,相比于虚拟机,容器的特点是部署更加便捷,但隔离性相对较差。容器隔离独立的应用,并使用已经被容器引擎抽象化的操作系统资源。图2-1显示了虚拟机和容器在业务部署方式上的对比。图2-1 虚拟机和容器的业务部署层次对比2.1.2 关于Docker

Docker是一个开源的引擎,也是主流的容器解决方案。开发Docker的公司名称也是Docker。Docker公司创建于2013年,在过去的5年(2013—2017年)中发展迅速,先后和Red Hat、Azure、AWS开展了容器业务合作,并在2016年发布了Docker Cloud服务。

开发者使用Docker产品,通过简单的步骤,即可为Web程序或者后端程序创建一个能够隔离资源和随时可迁移的容器,并且在独立环境中生成的带有业务程序的容器可以在生产环境中批量部署。随着Docker产品日渐成熟,它已经被多数开发者所接受,并被应用在多种场景中。比如在快速迭代模式下对网站系统的自动化打包和部署;再比如开发者无须关心生产环境可能存在的差异,只需在生产环境中部署Docker容器即可。

Docker产品是目前使用较多的容器引擎。与其他Linux操作系统上的虚拟化解决方案(如OpenVZ、Linux-VServer、Solaris Containers、Virtuozzo)相比,Docker产品的使用更加便捷,并与一些常用的开源软件进行了集成,采用Client-Server的方式(架构如图2-2所示),减少了整体架构的复杂性。图2-2 Docker架构图

Docker容器解决方案拥有很多优势,比如它使用轻量级资源,容器在进程级别隔离并使用宿主机的内核,而不需要虚拟化整个操作系统;它具有可移植性——一个容器应用所需要的依赖都在容器中,使其可以在任意一台运行着Docker的主机上运行;它部署灵活,因此用Docker来部署程序或者服务时,开发者需要采用容器化设计,即所谓的SOA(Service Oriented Architecture,面向服务的架构)设计,这可以使后续的使用者更容易对组件进行扩展或者升级。2.1.3 名词解释

镜像文件,一个只读模板,可以用来创建Docker容器。

仓库(Repository),系统中存放镜像文件的位置。仓库和仓库注册服务器(Registry)容易被混为一谈,它们的实际关系是:仓库注册服务器上存放着多个仓库,每个仓库中又包含了多个镜像文件,每个镜像文件有不同的标签(Tag)。仓库可以分为公开仓库(Public)和私有仓库(Private)两种形式。

容器,从镜像文件创建的运行实例,Docker利用容器来运行应用。容器的状态包括运行、停止、删除、暂停,容器操作的事件包括创建、开始、死亡、暂停、删除等。Docker容器的生命周期如图2-3所示。图2-3 Docker容器的生命周期2.1.4 部署及配置

Docker可以被部署在多种操作系统中,本书的Docker环境是在Ubuntu 16.04.3 中部署的。使用Ubuntu进行部署的优势是相关安装包测试比较充分,可以保证软件包的可用性。Mac、Windows和其他一些Linux发行版本无法原生运行Docker,可以通过Hypervisor软件创建一个Ubuntu操作系统的虚拟机并在其中安装Docker。

在安装过程中,Ubuntu 16.04.3系统无须另外安装额外的依赖包。首先使用管理员账号登录Ubuntu 16.04.3系统,保证该管理员有root权限,或者可以执行sudo命令。安装步骤如下:(1)使用curl方式获取并安装Docker。注意:在普通权限下执行安装时会提示输入管理员密码。(2)确认Docker是否安装成功。下载一个测试用的镜像并启动一个容器运行hello命令,如果安装成功,则显示运行结果如图2-4所示。图2-4 测试Docker是否安装成功(3)检查所安装的Docker版本。这里显示的客户端和服务端版本是17.11.0-ce,命令执行结果如图2-5所示。图2-5 正确安装Docker后执行相关命令的结果(4)搜索Docker镜像。Docker提供了一个网站(https://hub.docker.com/)可以对镜像和应用进行搜索和下载(如图2-6所示)。读者也可以使用命令行工具来搜索镜像,如图2-7所示。图2-6 从网站搜索镜像图2-7 执行Docker搜索命令的结果(5)下载镜像。在Docker的hub网站上找到相关镜像后,可以根据其所提供的命令进行下载(如图2-8所示)。执行下载命令的结果如图2-9所示。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载