3.1 云存储虚拟化技术
最早的虚拟化技术可以追溯到20世纪60年代的IBM M44/44X[1]以及IBM 360/370系列主机[2-4],它们最初是用来解决IBM第三代架构和操作系统中多道程序的弱点。近几十年来,虚拟化技术取得了飞速的发展,已经在服务器虚拟化、桌面虚拟化、应用虚拟化中得到了广泛的应用,可以支持各类安全计算平台[5],[6]、内核调试[7],[8]、服务器加固[9],[10]、移动平台[11],[12]以及多操作系统[13]等。
通常,虚拟化服务是在客户操作系统和底层硬件之间的软件层中实现的。该软件层接收来自操作系统的请求,执行相关指令,并且将结果返回给操作系统。这一层通常称为虚拟机监视器(Virtual Machine Monitor,VMM)[14],可以实现各项任务之间的隔离。
虚拟化技术还可以用于系统安全防护。由于VMM的权限高于客户操作系统的权限,因此VMM可有效发现与防御客户操作系统内核中的恶意行为。Overshadow[15]、InkTag[16]、TrustPath[17]以及AppShield[18]等,都是在x86平台上使用虚拟化技术保护系统安全的重要工作。
本章重点介绍云存储环境下的虚拟化技术,本节将对云存储虚拟化技术的基本概念、分类以及虚拟化给云存储带来的安全挑战进行分析与介绍。
3.1.1 虚拟化技术概述
云计算与云存储依赖虚拟化技术实现各类资源的动态分配、灵活调度、跨域共享,从而极大地提高资源利用效率,并使得IT资源能够真正成为公共基础设施,在各行各业得到广泛应用。
维基百科对虚拟化的定义为:虚拟化是将计算机物理资源如服务器、网络、存储资源及内存等进行抽象与转换后,提供一个资源的统一逻辑视图,使用户可以更好地利用这些资源。这些资源的新的虚拟视图不受原物理资源的架设方式、地理位置或底层资源的物理配置的限制。
因此,可以说虚拟化是一种整合或逻辑划分计算、存储以及网络资源来呈现一个或多个操作环境的技术,通过对硬件和软件进行整合或划分,实现机器仿真、模拟、时间共享等[19]。通常虚拟化将服务与硬件分离,使得一个硬件平台中可以运行以前要多个硬件平台才能执行的任务,同时每个任务的执行环境是隔离的。虚拟化也可以被认为是一个软件框架,在一台机器上模拟其他机器的指令[20]。
目前广泛使用的虚拟化架构主要有两种类型,根据是否需要修改客户操作系统,分为全虚拟化(Full Virtualization)和半虚拟化(Para-Virtualization)。全虚拟化不需要对客户操作系统进行修改,具有良好的透明性和兼容性,但会带来较大的软件复杂度和性能开销。半虚拟化需要修改客户操作系统,因此一般用于开源操作系统,可以实现接近物理机的性能。两种虚拟化技术的基本结构如图3-1所示。
图3-1 虚拟化平台的两种基本结构
在两种基本结构中,虚拟机监视器(Virtual Machine Monitor,VMM)或虚拟机管理程序(Hypervisor)是虚拟化的核心部分。VMM是一种位于物理硬件与虚拟机之间的特殊操作系统,主要用于物理资源的抽象与分配、I/O设备的模拟以及虚拟机的管理与通信,可以提高资源利用效率,实现资源的动态分配、灵活调度与跨域共享等。早在1974年,Popek等人[21]就提出了VMM的3个本质特征。
(1)VMM提供了与原机器本质上相同的程序执行环境。
(2)运行在该环境中的程序的性能损失很小。
(3)VMM拥有对系统资源的完全控制。
为了提高性能,只有特权指令需要通过VMM来执行,所有非特权指令都直接在硬件上执行。这些特权指令通常是访问硬件组件或改变系统关键数据结构的指令。处理器需要在管理模式中运行,从而能够执行这些特权指令。
在全虚拟化架构中,VMM直接运行在物理硬件上,通过提供指令集和设备接口来提供对上层虚拟机的支持。全虚拟化技术通常需要结合二进制翻译[22-24]和指令模拟[25-28]技术来实现。大多数运行在客户操作系统中的特权指令被VMM捕获,VMM在这些指令执行前捕获并模拟这些指令。对于一些用户模式下无法被捕获的指令,将通过二进制翻译技术处理。通过二进制翻译技术,小的指令块被翻译成与该指令块语义等价的一组新的指令。
在半虚拟化架构中,VMM作为一个应用程序运行在客户操作系统上,利用客户操作系统的功能实现硬件资源的抽象和上层虚拟机的管理。半虚拟化技术需要对客户操作系统进行修改,特权指令被替换为一个虚拟化调用(Hypercall)来跳转到VMM中。虚拟域可以通过Hypercall向VMM申请各种服务,如MMU(Memory Management Unit,内存管理单元)更新、I/O处理、对虚拟域的管理等。VMM为客户操作系统提供了一些系统服务的虚拟化调用接口,包括内存管理、设备使用及终端管理等,以确保全部的特权模式活动都从客户操作系统转移到VMM中。
硬件辅助虚拟化是全虚拟化的硬件实现。由于虚拟化技术应用广泛,主流硬件制造商在硬件层面提供了虚拟化支持,例如Intel的VT[29]、AMD-V[30]和ARM的VE(Virtualization Extension)[31]。当客户操作系统执行特权操作时,CPU自动切换到特权模式;完成操作后,VMM通知CPU返回客户操作系统继续执行当前任务。硬件虚拟化已被广泛应用于服务器平台。
硬件辅助虚拟化不同于半虚拟化需要对操作系统进行修改,同时也不需要二进制翻译和指令模拟技术,因此比全虚拟化和半虚拟化技术效率都要高。而半虚拟化技术通过改变客户操作系统的代码来避免调用特权指令,从而减少了二进制翻译和指令模拟带来的动态开销,因此通常半虚拟化比全虚拟化速度更快。但是半虚拟化需要维护一个修改过的客户操作系统,因此也将带来一定的额外开销。
在虚拟化系统中,有一个特权虚拟域Domain 0。它是虚拟机的控制域,相当于所有VMs中拥有root权限的管理员。Domain 0在所有其他虚拟域启动之前要先启动,并且所有的设备都会被分配给这个Domain 0,再由Domain 0管理并分配给其他的虚拟域,Domain 0自身也可以使用这些设备。其他虚拟域的创建、启动、挂起等操作也都由Domain 0控制。此外,Domain 0还具有直接访问硬件的权限。Domain 0是其他虚拟机的管理者和控制者,可以构建其他更多的虚拟域,并管理虚拟设备;它还能执行管理任务,比如虚拟机的休眠、唤醒和迁移等。
在Domain 0中安装了硬件的原始驱动,担任着为Domain U提供硬件服务的角色,如网络数据通信(DMA传输除外)。Domain 0在接收数据包后,利用虚拟网桥技术,根据虚拟网卡地址将数据包转发到目标虚拟机系统中。因此,拥有Domian 0的控制权限就控制了上层所有虚拟机系统,这也致使Domain 0成为攻击者的一个主要目标。
Xen是由英国剑桥大学计算机实验室开发的一个开放源代码虚拟机监视器,它在单个计算机上能够运行多达128个有完全功能的操作系统。Xen把策略的制定与实施分离,将策略的制定,也就是确定如何管理的相关工作交给Domain 0;而将策略的实施,也就是确定管理方案之后的具体实施,交给Hypervisor执行。在Domain 0中可以设置对虚拟机的管理参数,Hypervisor按照Domain 0中设置的参数去具体地配置虚拟机。
作为云计算与云存储平台的支撑技术,虚拟化为云存储带来极大的优势。
(1)利用虚拟化技术,云存储资源以服务的方式提供给用户,可以极大地提高资源利用效率,从而降低成本,节约能源消耗。
(2)可以实现资源的动态分配与灵活调度,从而可以根据实际需要实时进行配置,可满足不断变化的业务需求。
(3)可以利用专业的安全服务提高安全性。个人用户很难有专业的安全知识,但云服务提供商可以提供专业的安全解决方案。
(4)使得云存储具有更高的可扩展性,可动态调整资源粒度,并动态进行扩展。
(5)更强的互操作性,云存储可以实现平台无关性,也可以满足各种接口和协议的兼容性。
(6)云服务提供商具备实现容灾备份的条件,可以改善灾难恢复效率。
3.1.2 虚拟化技术分类
按照被虚拟资源的类型,虚拟化技术可分为存储虚拟化、网络虚拟化、服务器虚拟化、桌面虚拟化和应用虚拟化。
1. 存储虚拟化
存储网络工业协会(Storage Networking Industry Association,SNIA)对存储虚拟化的定义如下。
(1) The act of abstracting, hiding or isolating the internal function of a storage (sub) system or service from applications, compute servers or general network resources for the purpose of enabling application and network independent management of storage or data.(通过对存储(子)系统或存储服务的内部功能进行抽象、隐藏或隔离,使存储或数据的管理与应用、服务器、网络资源的管理分离,从而实现应用和网络的独立管理。)
(2) The application of virtualization to storage services or devices for the purpose of aggregating, hiding complexity or adding new capabilities to lower level storage resources. Storage can be virtualized simultaneously in multiple layers of a system, for instance to create HSM-like systems.(对存储服务或设备进行虚拟化,能够在对下一层存储资源进行扩展时进行资源合并、降低实现的复杂度。存储虚拟化可以在系统的多个层面实现,比如建立类似于分级存储管理(Hierarchical Storage Management, HSM)的系统。)
存储虚拟化旨在将具体的存储设备或存储系统与服务器操作系统分离,通过对具体存储设备或存储系统进行抽象,形成存储资源的逻辑视图,为存储用户提供统一的虚拟存储池。存储虚拟化可以屏蔽存储设备或存储系统的复杂性,简化管理,提高资源利用效率;特别对于异构的存储环境,可以显著改善资源的管理成本,向用户提供透明的存储访问。
存储虚拟化包括以下3种方式。
(1)基于主机的存储虚拟化:采用基于软件的方式实现资源的管理。由于不需要任何额外硬件,实现简单,设备成本低。但由于管理软件在主机上运行,会占用主机的计算资源,扩展性相对较差;同时,可能由于不同存储厂商软硬件的兼容性带来互操作性转换开销。
(2)基于存储设备的存储虚拟化:通过设备自身的功能模块实现虚拟化。对于用户来说,配置与管理简单,用户也可以与存储设备提供商协调管理方法。但由于不同存储厂商功能模块的差异,对于异构的网络存储环境,会带来额外的管理成本。
(3)基于网络的存储虚拟化:在网络设备上实现存储虚拟化功能。该方式也存在异构操作系统和多供应商存储环境之间的互操作性问题。
2. 网络虚拟化
网络虚拟化是指对网络设备进行虚拟化,即对传统的路由器、交换机等设备进行扩展,在一个物理网络上模拟出多个相互隔离的逻辑网络,使得不同用户使用独立的网络资源时间片,从而提高网络资源利用效率,实现弹性的网络。
网络虚拟化采用基于软件的方式,从物理网络元素中分离网络流量。通常包括虚拟局域网和虚拟专用网。虚拟局域网可以将一个物理局域网划分成多个虚拟局域网,也可以将多个物理局域网的节点划分到一个虚拟局域网中,使得虚拟局域网中的通信类似于物理局域网,并对用户透明;虚拟专用网对网络连接进行了抽象,允许远程用户连接单位内部的网络,感觉就像在单位网络中一样。
网络虚拟化平台不仅可以实现物理网络到虚拟网络的“一虚一”映射,也能实现物理网络到虚拟网络的“多虚一”“一虚多”映射。此处的“一虚多”是指单个物理交换机可以虚拟映射成多个虚拟租户网中的逻辑交换机,从而被不同的租户共享;“多虚一”是指多个物理交换机和链路资源被虚拟成一个大型的逻辑交换机,即租户眼中的一个交换机可能在物理上由多个物理交换机连接而成。
欧洲电信标准组织(ETSI)从服务提供商的角度还提出了网络功能虚拟化(Network Functions Virtualization,NFV),一种软件和硬件分离的架构,利用虚拟化技术将网络节点的功能分成几个功能模块,然后以软件的方式实现,使得网络功能不再局限于硬件架构。文献[32]对网络功能虚拟化技术进行了综述,详细分析并比较了典型的解决方案,总结了它们的优势与开销。
3. 服务器虚拟化
服务器虚拟化是指将虚拟化技术应用在服务器上,将服务器物理资源抽象成逻辑资源,让用户不再受限于物理资源。服务器虚拟化的逻辑结构如图3-2所示。
图3-2 服务器虚拟化的逻辑结构
服务器虚拟化主要分为3种:“一虚多”“多虚一”和“多虚多”。“一虚多”是指一台服务器被虚拟成多台服务器,即将一台物理服务器分割成多个相互独立、互不干扰的虚拟环境;“多虚一”就是多台独立的物理服务器被虚拟为一台逻辑服务器,使多台服务器相互协作,处理同一个业务;“多虚多”则是将多台物理服务器虚拟成一台逻辑服务器,然后再将其划分为多个虚拟环境,即多个业务在多台虚拟服务器上运行。
常用的服务器虚拟化平台包括VMware的vSphere、微软的Hyper-V、剑桥大学的Xen、Qumranet公司的KVM等。
4. 桌面虚拟化
桌面虚拟化是指将计算机的终端系统(也称为桌面)进行虚拟化,用户可以通过任何设备,在任何地点、任何时间通过网络访问属于个人的桌面系统。
桌面虚拟化可以实现多种方式接入,支持个性化桌面、支持多虚拟机、支持主流操作系统、支持网络存储空间的动态分配,使桌面系统的灵活性、安全性、可控制性和可管理性得到了保障。但从虚拟化桌面系统的整体安全角度来看,在接入、传输、管理与服务、数据存储和用户等各个方面,都会产生安全风险,忽略任何一个细节都会导致全局的安全问题。
5. 应用虚拟化
应用虚拟化是指将应用程序从底层操作系统分离出来,支持虚拟桌面与应用软件虚拟化间的无缝集成。应用虚拟化为应用程序提供了一个虚拟的运行环境,把应用对底层的系统和硬件的依赖抽象出来,可以解决版本不兼容的问题。
应用虚拟化把应用程序的人机交互逻辑与计算逻辑分离开来。在用户访问一个虚拟化后的应用时,用户计算机只需要把人机交互逻辑传送到服务器端,服务器端便会为用户开设独立的会话空间,应用程序的计算逻辑在这个会话空间中运行,然后把变化后的人机交互逻辑传送给客户端,并且在客户端相应设备展示出来,从而使用户获得如同运行本地应用程序一样的访问感受,因此极大地方便了应用程序的部署、更新和维护。
应用虚拟化通常采用“沙盒”技术实现安全性,它在计算机系统内部构建了一个独立的虚拟空间,当发现程序的可疑行为时让程序继续运行,直至确定为病毒才终止,然后执行“回滚”机制,将病毒的痕迹和动作抹去,将系统恢复到正常状态。由于病毒一直是在虚拟空间运行,所以不会对真实的计算机系统产生破坏。
3.1.3 虚拟化带来的安全挑战
虚拟化技术可以极大地提高资源利用效率、节约社会资源与能源,这与当前全球倡导的节能减排、绿色环保、保护生态、节约资源、改善环境、构建人与自然和谐的地球系统不谋而合。
尽管虚拟化技术有很多优势,但是也带来了很多的安全问题。因为云存储中的虚拟化技术是建立在网络服务之上,因此所有网络安全问题在云存储中都存在。本章主要讨论虚拟化技术本身带来的安全问题。虚拟化技术带来的安全挑战总结如下。
(1)在虚拟化环境下,不同虚拟主机间的网络及逻辑边界被模糊化,传统互联网环境下的网络防火墙、网络入侵检测防护技术失去了作用。实现虚拟机间高效的安全隔离是一大安全挑战。
(2)虚拟化环境下,“一虚多”“多虚多”导致攻击者可以利用已有的虚拟主机使用权限,对同一虚拟化平台和网络上的其他虚拟主机进行非法访问、嗅探和攻击等。实现虚拟机间高效的认证与访问控制是一大安全挑战。
(3)虚拟化平台在传统的“网络—系统—应用”的架构上增加了虚拟机监视器(VMM)或虚拟机管理程序(Hypervisor),从而增加了一层软件栈,其软件本身存在的安全漏洞以及增加的攻击点,会导致更多的安全风险。因此,如何更加精确、有效地配置与管理VMM或Hypervisor的特殊权限是一大安全挑战。
(4)虚拟化平台下存在的安全漏洞及网络入侵在不同虚拟机之间容易扩散,导致单台虚拟机的安全问题可能影响整个虚拟化平台。如果虚拟机隔离不当,就有可能出现非法访问其他虚拟机或窃听虚拟机间通信的情况。如何有效限制各类攻击的扩散及最小化影响相邻虚拟机是一大安全挑战。
(5)当某一虚拟存储资源被一个虚拟机使用过后并重新分配给其他虚拟机时,新的虚拟机可能获取前一虚拟机的数据,从而导致数据泄露风险。如何有效限制同一虚拟资源被重复利用时带来的安全风险是一大安全挑战。