主机虚拟化安全
1 主机虚拟化技术概述
1.1 基本概念
- 虚拟化:
- 维基百科:一种资源管理技术,将计算机的各种实体资源予以抽象、转换后呈现出来,并可供分区、组合为一个或多个电脑配置环境;
- 开放网格服务体系:是对一组类似资源提供的通用抽象接口集,进而隐藏了属性和操作间的差异;
- IBM:是资源的逻辑表示,不受物理限制的约束;
- 小结:对各种物理资源和软件资源的抽象利用;硬件资源(CPU、内存、网络)、软件资源(操作系统、应用程序);用户在虚拟环境下可以实现与真实环境下相同的功能或部分功能;
- 主机虚拟化:一种虚拟化实现方案,将主机资源分配到多台虚拟机;
- 增强IT资源的灵活性
- 降低管理成本
- 提高运行效率
- 物理主机:由物理硬件(CPU、内存、I/O设备)所组成的物理机器
- 虚拟化层软件:又称Hypervisor或者VVM(Virtual Machine Monitor),主要功能:
- 调度和管理物理主机的硬件资源;
- 分配资源给虚拟机
- 管理虚拟机与物理机之间的资源访问和交互
- 虚拟机:运行在虚拟化层软件之上的各个客户机操作系统
1.2 主机虚拟化实现方案
业界主流公司的方案如下:
1.2.1 VMware Workstation
VMware Workstation:基于主机的虚拟产品,可以运行在各种主流操作系统,主要功能包含:
- 内核VMM:负责虚拟机的创建管理等核心工作;可以直接控制处理器内存,或者管理VM与主机通信来完成虚拟机I/O等特殊命令;
- 虚拟机扩展驱动VMX:运行在Ring0特权级,辅助VMM完成虚拟机操作系统触发的I/O操作;
- VMware应用程序:运行在Ring3特权级,人机界面
启动过程:
VMX驱动将VMM加载到核心区域,并赋予VMM和VMX驱动Ring0特权级。其特点如下:
- 虚拟机操作系统能够探测到VMX和VMware应用程序,但无法感知到VMM;
- 当虚拟机内的应用程序执行计算时,虚拟机可以获得处理器的控制权,程序直接在处理器硬件上执行
- 当虚拟机执行I/O操作或者执行敏感指令时,VMM模块会捕获这些指令并将处理器切换到VMM控制模式,在主机环境中由VMX模块或VM应用模拟执行I/O,必要时由主机操作系统触发真实I/O
总结:
因为I/O是由虚拟机操作系统引发,因此执行结果将通过VMM传递回虚拟机。所以结果如下:
- 虚拟机的处理器和内存调用基本是靠硬件实现,执行效率高;
- I/O操作虚拟环境切换,导致虚拟机I/O性能较低;
1.2.2 Microsoft Virtual PC
与VMware Workstation类似,但是缺点比较多,如下所示:
- 不支持Windows以外的操作系统;
- 不能修改已赋予虚拟机使用的虚拟硬件设备,不支持SCSI设备
特殊功能:
- 允许用户撤销在虚拟磁盘中所做的操作,使虚拟机恢复先前的状态;
1.2.3 Xen
Xen采用半虚拟化技术,需要对操作系统进行修改才能与虚拟机监视器协同工作,优点就是无需硬件支持就能以较高效率实现虚拟化。
- 虚拟机被称作Domain
- Domain 0是一个管理域
- 可以直接访问硬件资源
- VMM运行在Ring 0上;Domain 0内核运行在Ring1上,可以为VMM提供扩展服务
- 负责向其他Domain提供虚拟机硬件资源
- 作为整个系统的管理平台,可以通过超级调用(Hypercalls,类似于操作系统中的系统调用),且可以集中在一个队列中统一处理,提高系统处理速度;
- Domain U 普通虚拟机:
- 不能访问自身之外的任何硬件资源,包括VMM拥有的硬件资源;
- 可以通过Hypercalls向VMM申请各种硬件服务,如内存更新、Domain 0支持、处理器状态等;
1.2.4 KVM
KVM和Xen是两个比较接近的开源虚拟化实现方案,主要特点如下:
- KVM是一个Linux内核核心模块
- 充分利用了Linux进程调度算法和内存管理技术
- 任何Linux内核性能的改进或版本提升均可直接应用于KVM虚拟化实现方案中,使得KVM虚拟机获得性能上的提高;
- KVM充分利用了Linux内核模块简单而高效的特点;
- 修改KVM模块无需重新编译linux内核,只需在Linux中重新加载修改后的KVM模块;
1.3 主机虚拟化特性
虚拟化技术应运而生的原因:
- 高性能的物理硬件产能过剩
- 老旧硬件产能过低
- 为硬件资源合理分配和使用
主机虚拟化带来的挑战:
- 如何合理分配一台物理主机的资源给多个虚拟机
- 如何确保多个虚拟机的运行不发生冲突
- 如何管理一个虚拟机和其拥有的各种资源
- 如何使用虚拟化系统不受硬件平台的限制
主机虚拟化特性:
- 多实例
- 隔离性
- 封装性
- 高性能
1.4 主机虚拟化的关键技术
1.4.1 CPU虚拟化
CPU虚拟化是VMM的核心部分,由于内存和I/O操作的指令都是敏感指令,因此对于内存虚拟化和I/O虚拟化的实现都是依赖于CPU虚拟化而完成的。
- 敏感指令:指原本需要在操作系统最高特权级别下执行的指令,不能在虚机内执行,需交由VMM处理
- CPU虚拟化化的目的:让虚机执行的敏感指令能够触发异常而陷入到VMM中,并通过VMM进行模拟执行
虚拟化层需要对虚机进行管理和控制,如果虚拟化层运行在Ring0特权级上,那么客户操作系统只能运行在低于Ring0的特权级别。客户机操作系统中的某些特权指令(中断处理或内存管理指令),如果么有运行在Ring0特权级,会出现语义冲突导致指令不能够正常执行。针对该问题有如下两种解决方案:
- 全虚拟化(Full-virtualization):
- 采用二进制动态代码翻译技术(Dynamic Binary Translation)
- 非敏感指令有虚拟机直接执行
- 敏感指令则通过陷入虚拟机监视器进行指令转换后再执行
- 不需要对客户机操作系统进行修改,可适配多种类型的操作系统
- 指令的动态转需要一定的性能开销
- 半虚拟化(Para-virtualization):
- 通过对客户机操作系统进行修改来解决虚拟机敏感指令不能正常执行的问题,将敏感指令替换成对底层虚拟化平台的超级调用
- 其性能开销小玉全虚拟化
- 因为修改了客户机的操作系统,使得客户机操作系统能够感知到自己处于虚拟环境中,不能够保证虚拟机监视器对虚拟机的透明性
- 对客户机操作系统版本有一定的闲置,降低了客户机操作系统与虚拟化层之间的兼容性
- 硬件辅助虚拟化:
- 通过硬件来辅助完成CPU虚拟化
- Intel的虚拟化技术:Intel VT
- 扩展了一套虚拟机扩展指令集(Virtual Machine Extensions)用于虚拟化环境的相关操作
- 将处理器运行模式分为:
- 根模式:虚拟化层
- 非根模式:客户机操作系统
- 两种模式都具备从Ring0 到 Ring3的四个特权级
- 很好的保留了全虚拟化和半虚拟化的优点,同时又弥补了两者的不足
- AMD的虚拟化技术:AMD-v
1.4.2 内存虚拟化
虚拟机看到的物理内存是经过虚拟机监视器进行管理的“虚拟”物理内存,内存的类型分为如下三种:
- 虚拟机逻辑内存
- 虚拟机物理内存
- 真实物理机内存
同理这三种内存地址空间也分别称为:
- 虚拟机逻辑地址
- 虚拟机物理地址
- 机器地址
虚拟机逻辑地址与真实物理机的机器地址之间的映射是通过内存虚拟化中的内存管理单元来完成的,内存虚拟化的主要方法有两种:
- 影子页表法:
- 客户机操作系统内存管理单元:管理者虚拟机操作系统页表(虚拟机逻辑地址与虚拟机物理机地址的映射)
- 虚拟机监视器内存虚拟化管理单元:为每一台虚拟机管理维护了一套影子页表(虚拟机物理地址与物理机机器地址的映射)
- 客户机操作系统页表发生改变时,在虚拟机的监视器中维护的页表也会随之更新,如同它的影子
- 页表写入法:
- 每当客户机操作系统新创建一个页表时,虚拟机监视器也创建一套与当前页表相同的页表
- 客户机操作系统对它自身所维护的这套页表进行写操作时,将会产生敏感指令并由虚拟机监视器剥夺客户机操作系统对其页面的写操作权限
- 虚拟机监视器对客户机操作系统页表进行更新,使得客户机操作系统能直接从它的页表当中读到真实物理主机的机器地址
- 综上所述:
- 影子页表法是一个虚拟机逻辑地址->虚拟机物理地址->物理机机器地址的二级映射关系
- 页表写入法是一个从虚拟机逻辑地址到物理机器地址的一级映射关系
- 也表输入法在虚拟机监视器中需要不断的维护和管理这张表,使客户机上面的程序能直接访问到合适的地址
1.4.3 I/O虚拟化
- 为了真实主机上多台虚机能够复用有限的外设资源,需要虚拟机监视器通过I/O虚拟化来对这些资源进行有效管理
- 通过截获客户机操作系统对外部设备的访问请求
- 通过软件模拟的方式来模拟真实的外设资源
- 模拟出来的虚拟设备可以有效地模拟物理设备的动作,并将虚机的设备操作转移给物理设备,同时将运行结果返回给虚拟机
- 虚拟机只能察觉到虚拟化平台提供的模拟设备,而不能直接对物理外设进行访问
- 优点就是虚拟机不会依赖于底层物理设备的实现
- I/O虚拟化的实现主要有如下三种方式:
- 全设备模拟:
- 可以模拟一些主流的I/O设备
- 客户机操作系统执行I/O访问请求,都会陷入虚拟机监视器中,与i/O设备进行交互
- 客户操作系统->客户设备驱动->虚拟设备->I/O堆栈->物理设备驱动->物理设备
- I/O堆栈
- 主要提供虚拟机I/O地址到物理机地址的地址转换
- 处理虚拟机之间的通信
- 复用从虚拟机到物理设备I/O请求
- 提供企业级I/O特性
- 半虚拟化
- 代表是Xen虚拟化解决方案中实现I/O虚拟化的方式
- 组成部分:
- 前端驱动:运行在Domain U(其他虚拟机),管理客户机操作系统的I/O请求
- 后端驱动:运行在Domain 0(特权域), 管理真实的I/O设备并复用不同虚拟机的I/O数据
- 前后端共享内存交互
- 优点:相比于全设备模拟,可以获得更好的设备性能
- 缺点:会带来更高的CPU开销
- 直接I/O虚拟化:
- 直接让虚拟机方位设备硬件
- 能获得近乎物理主机访问设备的硬件性能,且CPU开销不高
- 主要用于大型主机的网络虚拟化方面,通过直接I/O虚拟化来为虚拟机分配独立的物理网络接口设备,以提高其网络交互能力
- 成本要求高,在商业大规模推广方面仍面临许多挑战
- 全设备模拟:
1.4.4 虚拟机实时迁移
实时迁移是指保证虚拟机上服务正常运行的同时,使虚拟机在不同的物理主机上进行迁移。
- 整个迁移过程需要保证虚拟机是可用的
- 整个迁移过程快速且平滑
- 整个迁移过程对用户透明,用户几乎不会察觉到虚拟机产生的任何差异
实时迁移的作用:
- 实现服务器的在线维护
- 在线升级
- 动态负载均衡
1.5 主机虚拟化的优势
有了虚拟化技术,一些基础设备可以被资源化,经过抽象后提供给上层的计算单元,使得上层计算单元以为自己运行在独立的内存空间中,享有独立的网络、存储资源用于服务;且以下特性带来的具体优势:
- 分区特性可以使得各种硬件资源被合理,高效的划分给不同的虚拟机
- 隔离特性使得多个不同虚拟机在同一主机上互不影响计算的效果
- 封装特性使得虚拟机更方便的迁移和备份
- 独立于硬件特定使得虚拟机的配置更加方便
虚拟化的市场发展被分为了四个阶段:
- 降低成本
- 提高使用效率
- 提高灵活性
- 更好的使IT配合业务
总而言之,主机虚拟化的优势主要体现在两个方面:
- 增加硬件利用率:传统物理服务器的CPU的利用率一般在10%以下,偶尔会出现CPU利用高峰;虚拟化后的宿主机CPU的利用率可维持在55%~80%,相较于传统极大提高了CPU的利用率
- 提高生产率:
- 部署一个新的服务器,传统的服务器架构,3-10天进行硬件采购(已经是最快的速度),48小时进行设备上架到系统部署;虚拟化架构,23天完成资源审批,5~10分钟内(理想化)完成一个系统的部署
- 硬件的维护:传统服务器架构,需要1~3小时进行窗口维护,数天至数周进行变更管理准备;采用虚拟化架构后,通过虚拟化技术实现零宕机的硬件升级;
服务器虚拟化是虚拟化技术中出现时间最早的技术分支,也是最为成熟的领域。讲一个服务器虚拟化成若干服务器使用。服务器虚拟化技术的多实例、强隔离、高性能、封装好等特性保证了它能有效的运用在实际的环境中,主要优点可总结如下:
- 降低运营成本:通过功能强大的虚拟化环境管理工具,降低人工干预频率,降低IT基础设施的运营成本
- 提高应用兼容性:虚拟化技术所具有的封装和隔离特性使管理员仅需构建一个应用版本,即可将其发布到被虚拟化封装后的不同类型的平台上
- 加速应用部署:服务器虚拟化后,部署一个应用只需几分钟或十几分钟,不需人工干预,缩短部署时间,降低人工成本
- 提高服务可用性:服务器虚拟化技术可以方便的对运行中的服务器进行快照并备份成虚拟化镜像文件,支持虚拟化技术动态的迁移和恢复,提供了服务的可用性
- 提升资源利用率:多台服务器整合到一台服务器上,提高了物理服务器的利用率
- 动态调度资源:服务器虚拟化支持实时迁移,方便资源整合和动态调度。同事数据中心统一的资源池,使数据中心管理员可以灵活地调整分配资源
- 降低能源消耗:可以将原来各个服务器上的应用整合到少数几台服务器上,通过减少运行的服务器数量,降低能源消耗
2 主机虚拟化的主要威胁
- 虚拟机之间的安全威胁
- 传统网络是从客户端发起访问到服务器的纵向流量结构,纵向流量必然经过外置的硬件安全防护机制(防火墙)
- 虚拟化后,纵向的流量依然可以进行安全防护和业务隔离
- 不同的是在虚拟环境下存在多租户服务模型,多个虚拟机可以在同一台物理机上交互数据从而产生横向流量,这些数据不经过外置的硬件安全防护机制
- 管理员无法对这些横向流量进行有效监控或者实施高级安全策略,如(入侵防御规则或防火墙规则)
- 虚拟化厂商在服务器Hypervisor层集成虚拟交换机的特性,可以实现一些基本的访问允许或拒绝规则,但很难集成更高级的安全监测防护引擎来检测虚拟机之间的流量漏洞攻击行为
- 多个虚拟机共享硬件资源你,且虚拟机横向流量又不被外部感知的情况下,一台虚拟机受到攻击后,宿主机乃至整个网络都会遭受严重威胁
- 虚拟机与宿主机之间的安全威胁
- 宿主机是虚拟机的物理基础,虚拟主机与宿主机共享硬件
- 宿主机的安全至关重要,一旦宿主机被控制,利用宿主机的高特权级,攻击者可以对同一宿主机的任意虚拟机进行有效攻击
- 攻击者可通过提升重要的访问权限,以使其可以访问宿主机的本地网络和相邻系统
- 虚拟机控制中心的安全威胁
- 通过虚拟机控制中心,管理员可以管理不同位置上的虚拟机;
- 虚拟机控制中心对其管理的所有虚拟机拥有高级别访问控制权限,所以确保虚拟机控制中心的安全非常总要
- 虚拟机蔓延(泛滥)及管理疏漏的隐患
- 虚拟机在完成工作后被丢弃,也不关闭,也不删除
- 长期处于无人看管状态,虚拟机一旦形成蔓延趋势,就会造成巨大浪费
- 口令的时限、漏洞的出现等问题都会成为虚拟机管理的安全隐患
- 虚拟机出现后,安全管理上会变得更为繁琐。虚拟机口令、宿主机口令、虚拟机控制中心口令、虚拟机漏洞、宿主机漏洞等每个细节都不能忽视
- 在部署虚拟机时使用连续IP地址,主机、虚拟机管理口令相同,这些看似方便的管理方式,会在未来带来较大麻烦
通常对虚拟机的攻击方式是以下一种或多种方式的结合:
- 社会工程:通过各种社交渠道获得有关目标的结构、使用情况、安全防范措施等有用信息从而提高攻击成功率
- 口令破解:攻击者可通过获取口令文件,然后运用口令
- 地址欺骗:攻击者通过伪装成被信任的IP地址等方式来骗取目标的信任
- 连接盗用:在合法的通信连接建立起来以后,攻击者可通过阻塞或摧毁通信的一方来接管已经认证建立起来的连接,从而假冒被接管方与对方通信
- 网络窃听:网络的开放性使攻击者可通过直接或间接窃听获取所需信息
- 数据篡改:攻击者可通过截获并修改数据或重放数据等方式破坏数据的完整性
- 恶意扫描:攻击者可编制或使用现有扫描工具发现目标的漏洞,进而发起攻击
- 破坏基础设施:攻击者可通过破坏DNS或路由信息等基础设施,使目标陷于孤立
- 数据驱动攻击:攻击者可通过释放病毒、特洛伊木马、数据炸弹等方式破坏或遥控目标
- 服务拒绝:通过控制其他主机发起攻击,使目标瘫痪,如发送大量的数据洪流阻塞目标
2.1 虚拟机信息窃取和篡改
- 虚拟机信息主要包括:
- 镜像文件:
- 易于分发和存储
- 需要防止其未经授权的访问、修改和重置
- 一个镜像文件越长时间没运行,就会在在它再一次加载时出现越多的脆弱点,因此要检查所有的镜像,以确保长时间未运行的镜像文件也定期更新
- 当用户和管理者可以创建自己的镜像文件时,跟踪这些镜像文件也很麻烦,镜像可能没做到适当的防护,尤其在没有可参照的安全基线的时候,会增加被攻陷的风险
- 另一个潜在问题就是镜像文件的增殖即无序蔓延,没有任何安全考虑创建很多没必要的镜像文件。
- 多余的镜像文件都会成为一个潜在的攻击点
- 每一个镜像文件都需要独立的安全性维护工作,加大了安全维护的工作量
- 组织应该减少建造、存储和使用不必要的镜像
- 实施完善的镜像管理流程
- 通过管理流程来管理镜像尤其是服务器镜像的创建、安全性、分发、存储、使用、退役和销毁工作
- 快照
- 组织同样需要考虑快照的管理
- 在某些情况下,组织机构会规定不允许存储快照,因为被恶意软件感染的系统在后期恢复快照时,有可能重新加载恶意软件
- 镜像文件:
- 虚拟机无论在静止还是运行状态都有被窃取或篡改的脆弱漏洞
- 对于镜像和快照来说最大的安全性问题
- 他们像物理硬盘一样包含敏感数据
- 与硬盘相比更易移动
- 所以更应重视镜像或快照的数据的安全性
- 快照比镜像具有更大的风险:
- 快照包含在快照生产时的RAM内存数据,
- 甚至包含从没有存在硬盘上的敏感信息
2.2 虚拟机逃逸
正常的情况下,一个程序运行在虚拟机里,应该无法影响其他虚拟机。但是由于技术的限制或虚拟化软件的一些bug,在某些情况下,虚拟机里运行的程序会绕过隔离限制,进而直接运行在宿主机上,这就是虚拟机逃逸。
虚拟逃逸造成的影响包括:
- 因为宿主机特权地位,出现虚拟机逃逸会使整个安全模型完全崩溃
- 对Hypervisor和宿主机都具有极大威胁
- Hypervisor:
- 攻击者可能获得Hypervisor的所有权限
- 攻击者可以截获该宿主机上其他虚拟机的I/O数据流,并加以分析获得用户的相关数据
- 进一步针对用户个人敏感信息的攻击
- 甚至关闭或删除某个作为基本运行的虚拟机,造成基本服务的中断
- 宿主机:
- 攻击者有可能获得宿主机操作系统的全部权限
- 攻击者可以对宿主机的共享资源进行修改或替换,使得该宿主机上的所有虚拟机访问到虚假或篡改的资源,从而对其他虚机进行攻击;
- 由于攻击者获得最高权限,则可以修改默认用户的基本信息,并降低虚拟机监视器的稳定性,使得其上所有虚拟机都丢失重要的信息
- Hypervisor:
- 虚拟机逃逸攻击,尚没有很好的安全对策,主要是针对云计算服务方给出一些安全防范建议:
- 及时发现漏洞、打漏洞补丁
- 使用强制访问控制措施限制客户虚拟机的资源访问权限
- 及时度量Hypervisor完整性
- 以上建议并不能真正解决虚拟机逃逸攻击带来的危害,针对虚拟机逃逸漏洞,还是应该采用纵深防御的安全防护方法,从攻击检测、预防、避免攻击蔓延和Hypervisior完整性防护等多个方面,并结合可信计算技术,建立一个多层次的安全防护框架。
2.3 Rookit攻击
Rootkit:完全控制主机并拥有了管理员权限被称为“root”了主机,然后能有“root”一台主机并不意味着能持续的控制它,管理员完全能够发现主机遭受入侵并采取应对措施,Rootkit的含义就是“能维持root权限的一套工具”
- 一种特殊的恶意软件
- 在安装目标上隐藏自身及制定的文件、进程和网络链接等信息
- 通常与木马、后面等其他恶意程序结合使用,持久并毫无察觉的驻留在安装目标上
- 对系统进行操纵,并通过隐秘渠道收集数据
- 并不一定用于获得系统root的权限,主要作用是:
- 隐藏自己的踪迹
- 保留root访问权限
- 入侵方式:
- 第一步:通过密码猜测或者密码强制破译的技术获得系统的访问权限
- 第二步:进入系统后,若未获取root权限,通过某些安全漏洞获得系统的root权限
- 第三步:在侵入的主机中安装Rootkit后门,通过后门检查系统是否有其他用户登录,如果只有自己,攻击者则开始着手清理日志中的有关信息,隐藏入侵踪迹
- 第四步:通过Rootkit的嗅探器获得其他系统的用户和密码之后,利用这些信息侵入其他系统
- 三个特征:
- 隐藏
- 操纵
- 收集数据
- 发现系统存在Rootkit之后,能够采取的补救措施也较为有限,最好的应对方法就是擦除并重新安装系统,虽然方法很严厉,但是这是得到证明的唯一可以彻底删除Rootkit的方法
2.4 分布式拒绝服务攻击
分布式拒绝服务攻击(DDoS)是在传统的DoS攻击基础上产生的一类攻击方式,单一的DoS攻击一般采用一对一的方式,当攻击目标的各项性能指标(CPU、内存和网络带宽)不高时,效果是明显的,但是随着计算机与网络技术的发展,计算机的各项性能大幅提升,同时又出现了千兆级别的网络,这使得DoS攻击能力明显力不从心,因此分布式拒绝服务(DDoS)应运而生。
在低网速时代,黑客占领攻击用的傀儡机,总会优先考虑离目标网络距离近的机器,因为经过路由器的跳数少、效果越好;而现在电信骨干节点之间的连接都是以G为级别,这使得攻击可以从更远的地方或者其他城市发起,傀儡机位置可以分布在更大的范围,选择起来更灵活,攻击者也因此拥有更多的傀儡机,攻击规模可以比从前更大。
DDoS攻击的后果主要有:
- 目标机上存在大量等待的TCP连接;
- 网络中充斥大量无用的数据包,且源地址为假
- 制造高流量无用数据,造成网络拥塞,使受害主机无法正常和外界通信
- 利用受害主机提供的服务或传输协议上的缺陷,反复高速的发出等待服务的请求,目标机无法及时处理所有的正常请求
- 严重时使目标机死机
2.5 侧信道攻击
侧信道攻击是由Kocher等人于1996年首先提出,针对密码算法实现的一种攻击方式:
- 当密码算法具体执行时,执行过程中可能泄露与内部运算紧密相关的多种物理状态信息,如下:
- 声光信息
- 功耗
- 电磁辐射
- 运行时间等
- 这些通过非直接传输途径泄露出来的物理状态信息被研究人员称为侧信道信息(Side-Channel Information , SCI)
- 攻击者通过测量采集密码算法执行期间产生的侧信道信息,再结合密码算法的具体实现,就可以进行密钥的分析与破解
这种利用侧信道信息进行密码分析的攻击方法被称为侧信道攻击,
针对侧信道攻击,安全芯片可以提供大量的解决方案,如采用混淆时序、能耗随机等手段使黑客无从辨别,也就难以解密。
3 主机虚拟化安全的解决方案
主机虚拟化安全解决方案需要从不同层面解决。
3.1 虚拟化安全防御架构
如上图所示,可以从物理硬件到宿主机、虚拟监视器再到虚拟机的安全加固方案,从而增强虚拟化环境的安全性,一定程度上抵御虚拟化平台的攻击威胁。
- 物理资源层:
- 通过可信计算技术来保证主机硬件(BIOS、操作系统引导程序等)的安全性
- 通过宿主机安全安全机制来保障宿主机操作系统的安全可靠
- 虚拟化层:
- 通过Hypervisor安全机制确保虚拟机监视器的安全运行
- 通过虚拟机自省技术实现在Hypervisor中监测虚拟机的行为
- 通过虚拟机隔离机制和虚拟机安全监控来确保虚拟机安全稳定运行
随着虚拟可信计算技术的发展,可以为每个虚拟机配置一个虚拟可信根,通过虚拟可信根来保障虚拟机的安全运行
3.2 宿主机安全机制
入侵者如果能够访问物理宿主机,就可以对虚拟机展开各种形式的攻击:
- 不能录虚拟机的情况下,直接使用宿主机操作系统特定的热键来杀死虚拟机进程
- 监控虚拟机资源使用情况
- 关闭虚拟机
- 暴力删除虚拟机
- 利用软驱、光驱、USB、内存盘等窃取存储在宿主机操作系统中的虚拟机镜像文件
- 在宿主机中使用网络嗅探工具捕获网卡中进出的流量
- 通过分析和篡改达到窃取虚拟机数据或破坏虚拟机通信的目的
防止虚拟机遭受攻击、保护宿主机安全,目前完善且行之有效的安全机制绝大多数传统计算机系统已经具备,如:
- 入侵检测
- 物理完全
- 操作系统安全
这些传统的安全技术对于虚拟机和宿主机系统依然有效。
以入侵检测为例,在对宿主机进行安全防护方面,根据检测对象的不同可以部署不同类型的入侵检测系统以进行针对性的检测,如HIDS、NIDS。
3.3 Hypervisor安全机制
Hypervisor:
- 虚拟化平台核心
- 位于虚拟化架构的中间层
- 负责虚拟机的运行维护、资源分配
- 为虚拟机提供基本硬件设施的虚拟和抽象
Hypervisor的主流技术包括VMware、Xen、KVM、Virtual Box等。
- 利用Hypervisor的恶意攻击(虚拟机逃、VMBR[virtual-machine based rootkit])逐渐增加
- Hypervisor代码量增加、功能更加复杂,安全漏洞也会随之增加
如今业界研究重点主要分为两个方面,即Hypervisor自身安全加固和Hypervisor防护能力提升。
3.3.1 Hypervisor自身安全加固
-
在通用安全计算机系统中,TCB(Trusted Computing Base,可信计算机)构成计算机系统安全的基础
- 自身具有高度的可靠性
- 可为整个系统(包括系统内核、敏感信息处理程序等)提供安全能保护
- 代码量越大、TCB越大,就可能带来更多的安全漏洞,降低自身安全性
(1) 构建轻量级Hypervisor
尽量简化Hypervisor的设计,降低其实现的复杂度,是Hypervisor自身安全加固的一个重要方向
- 只提供最低限度得到硬件抽象接口的功能,容易保证Hypervisor自身的安全性
- 构建轻量级的Hypervisor的研究中,主要应该包括以下几个方面:
- 精简Hypervisor代码,尽量简化功能,减少代码中存在的漏洞
- 为虚拟机提供良好的隔离性,防止恶意虚拟机利用Hypervisor的漏洞威胁其他虚拟机
- 增强虚拟机中I/O操作的安全性,I/O操作虚拟机需要与外部设备进行加护,Hypervisor需要对其进行模拟,若模拟操作出现问题,则影响整个平台所有的虚拟机
典型的轻量级Hypervisor应用有:
- Trustvisor:
- 利用硬件虚拟化的支持,构造了一个具有特定功能的轻型Hypervisor,代码量约一万行,大大降低了TCB的规模
- 功能方面,也尽量简化,引入了程序逻辑片的概念,同时设计了安全客户模式、传统客户模式和主模式,为程序逻辑片建立安全的隔离环境,保障了应用程序安全敏感片段和具有机密性、完整性需求的数据
- Secvisor
- cloudvisor
目前构建轻量级Hypervisor的主要方法:
- 构建专用Hypervisor
- 将Hypervisor管理功能和安全功能分离
主要难点在于分离之后如何继续保持Hypervisor的特性和功能,这是需要进一步研究的课题
(2)保护Hypervisor的完整性
另一个重要方向是利用可信计算技术,对Hypervisor的完整性进行度量和报告,保证Hypervisor的可信性。主要技术包括两个部分:
- 完整性度量:
- 最重要的是可信链关系的构建
- 比如在系统启动时刻,从可信度度量根开始,逐级度量硬件平台、操作系统、应用程序等
- 完整性验证
- 将完整性度量结果进行数字签名后提供给远程验证方
- 远程验证方利用传递来的信息验证计算机系统的可信性,
这种方式可以从根本上提高虚拟化平台的安全性和可信性,保护Hypervisor的完整性,确保Hypervisor安全可信。
3.3.2 提高Hypervisor的防护能力
上述的构建轻量级的Hypervisor或是利用可信计算技术保护Hypervisor的完整性,技术实现难度均较大,有些甚至需要对Hypervisor进行修改,不适用于虚拟化大规模部署的环境。利用传统的安全防护技术,增强Hypervisor的防御能力将更加容易实现:
(1)构建虚拟防火墙
- 目前的流量访问和隔离情况:
- 虚拟机之间的流量在同一个虚拟交换机和端口组上传输时,网络流量不经过物理网络,只经过物理主机内部的虚拟网络。
- 物理防火墙只能保护连接到物理网络中的服务器和设备,而虚拟网络流量在物理防火墙保护区域之外,
- 因此物理防火墙难于保护使用虚拟流量通信的虚拟机
- 可以结合使用虚拟防火墙和物理防火墙解决
- 利用虚拟机防火墙可以查看虚拟网卡的网络流量
- 对虚拟级之间的虚拟网络流量进行监控、过滤和保护
(2)主机资源合理分配
默认情况云平台上所有的虚拟机对物理机提供的资源具有相同的使用权限,若没有有效的管理,则某些虚拟机可能会占用过的的资源导致其他虚拟机资源匮乏,影响其他虚拟机正常运行。解决从两个方面:
- 一方面通过有效的管理机制保证优先级高的虚拟机能够优先访问宿主机资源
- 一方面将主机资源划分为不同的资源池,使虚机只能使用所在资源池中的资源,降低资源抢占带来的风险
(3)细粒度的权限访问控制
普通用户如果具备了管理员权限,可能进行如下操作威胁云平台安全:
- 重新配置虚拟机
- 改变网络配置
- 窃取数据
- 改变其他用户权限
有必要细粒度的分配用户的权限,确保用户只能获取其所需的权限,降低特权操作给Hypervisor带来的安全风险。
3.4 虚拟机隔离机制
虚拟化出现之前,计算机之间的访问只能是通过网络实现,安全机制基本上是网络层面的防护。
虚拟化出现之后,一个物理节点部署有上百或更多虚拟机,这些虚拟机使用的都是Hypervisor提供的虚拟资源,硬件资源由所有虚机共享使用。一台虚拟机可能通过某种方式访问本来属于另一台虚拟机的资源,从而给云用户带来安全威胁。如果无法检测和分析这种攻击行为就会给云平台造成严重的威胁。
3.4.1 同一宿主机的虚拟机之间的隔离
(1)Hypervisor提供的安全隔离机制
- 虚拟机对宿主机就是一个普通进程
- Hypervisor保证每一个进程都有自己独立的虚拟地址空间
- 不同进程的虚拟地址空间互不打扰,从而保证虚拟机之间不会相互影响
- 恶意用户利用Hypervisor漏洞突破逻辑隔离的限制,就可以访问不属于自己的资源
- 可以通过Hypervisor自身安全加固或提高Hypervisor防护能力的方式确保Hypervisor提供的安全隔离机制正常运行
(2)sVirt标签技术
- sVirt标签技术本质上是selinux系统对进程的强制访问控制策略
- 虚拟机本身是宿主机中作为一个进程存在,sVirt就是把这种强制访问控制应用到了虚拟机上
- 虚拟机和镜像文件以及其他所需资源的标签是一一对应的,其他的虚拟机没有权限访问
- 这种方式需要在宿主机中配置Selinux策略,而策略的编写以及部署对运维人员是很大挑战
3.4.2 不同宿主机的虚拟机之间的隔离
不同宿主机的虚机之间的隔离实际上就是通过物理主机之间的隔离,这种隔离其实就是传统的物理隔离,由于虚拟机之间的访问必须要通过网络,一般会采取划分VLAN、设立防火墙等技术保证虚拟机之间的隔离。
3.5 虚拟可信计算技术
虚拟可信计算技术将可信计算的思想与虚拟技术结合,通过可信计算技术保障虚拟化平台的安全
3.5.1可信计算概述
可信计算就是在进行运算的同时进行安全防护,使计算结果总是和预期的一样,计算过程可测可控、不被干扰,从而保证平台的可信。实现方式如下:
- 可信计算以TPM或者TCM硬件芯片为可信根
- 可信根中存储原始度量值,这个度量值基于硬件保护,恶意程序无法篡改
- 从可信度量根开始,由系统加电层层度量,形成一条完整的可信链,直到整个计算机操作系统成功启动
从工作方式上看:
- 操作系统启动过程中的度量为静态度量,用于保证操作系统基础环境的完整可信
- 与之相对的动态度量,用于保证操作系统及应用程序在运行过程中的安全可靠
可信计算平台包括以下几个部分:
-
硬件TPM
- TPM芯片是可信计算平台的信任根(可信存储根和可信报告根)
- 一方面存储度量值
- 一方面向上层提供安全性报告
- 之所以选择芯片:
- 一方面因为硬件芯片处理速度快,能提高效率
- 另一方面因为只要是软件就有漏洞,就有被绕过或者利用的可能,硬件可以较好的保障安全性
- 其结构包括:
- I/O部件:
- 完成总线协议的编码和译码
- 实现TPM与外部的信息交换
- 密码协处理器:用来实现加密、解密、签名和验证签名的硬件加速
- HMAC引擎:是实现基于SHA-1的Hash函数消息认证码HMAC的硬件引擎
- SHA-1引擎:是Hash函数SHA-1的硬件执行引擎
- 密钥生产器:用于产生RSA密钥对
- 随机函数发生器:TPM内置的随机源,用于生成随机数
- 电源检测部件:管理TPM的电源状态
- 执行引擎:包含CPU和响应的嵌入式软件,通过软件的执行来完成TPM的任务
- 非易失性存储器:主要用于
- 存储嵌入式操作系统及其文件系统
- 存储密钥、证书、标识等重要数据
- 是用于TPM内部工作的存储器
- I/O部件:
- 采用密码算法采用RSA密码算法,也允许使用ECC或者DSA等密码算法
- TPM芯片是可信计算平台的信任根(可信存储根和可信报告根)
-
可信软件栈(TSS)
可信软件栈是可信计算平台上TPM的支撑软件,主要功能为操作系统和应用软件提供使用TPM的应用接口
-
可分为如下层:
- TSS服务提供层(TCG Service Provider,TSP):主要作为本地与远程应用的可信代理
- TSS核心服务层(TCG Core Service,TCS):用于提供公共服务的集合
- TSS设备驱动库(TCG Device Driver Library,TDDL):负责与TPM的交互
各个层次都定义了规范化的接口,结构如下图:
- 内核模式进程:核心软件是TPM设备驱动程序模块,直接驱动TPM的软件模块,由TPM的签入式操作系统确定
- 用户模式进程:核心软件是TSS设备驱动程序接口(TDDI)和TSS核心服务接口(TCSI)
- TDDI:是一个与TPM设备驱动程序进行交互的API库,以方便与TPM交互
- 如向TPM发送数据或者从TPM接收数据
- 查询TPM的状态等
- TSS核心服务(TCG Core Service,TCS):主要个功能是管理TPM的资源
- 上下文管理
- 密钥和证书管理
- 事件管理
- TPM参数块产生等
- 用户程序层:核心软件是TSS服务提供者(TCG Service Provider,TSP)
- 给应用提供最高层的API函数
- 以共享对象和动态链接库的方式被应用程序调用
- 是应用程序可方便的使用TPM
-
工作流程如下:
- 应用程序将数据和命令通过TSS服务提供的接口发给TSS服务提供者
- TSS服务提供者处理后通过TSS核心服务接口再传给TSS设备驱动接口
- TSS设备驱动接口处理后传给TPM设备驱动程序
- TPM设备驱动程序处理并驱动TPM
- TPM给出的响应反向经TPM设备驱动程序、TSS设备驱动程序接口、TSS核心服务接口、TSS服务提供者传给应用程序
-
信任根和信任链机制
信任根是可信计算机系统的基点
-
根据TCG定义,一个可信计算平台必须包含三个信任根:
- 可信度量根:
- 对计算平台的可信性进行度量
- 是对平台进行可信度量的基点
- 可信存储根:
- 对度量的可信值进行存储
- 是平台可信性度量值的存储基点
- 可信报告根:
- 当访问客体询问可信状态时提供报告
- 平台向访问客体提供平台可信性状态报告的基点
- 可信度量根:
这一机制称为度量存储报告机制
可信链传递如下图所示
- 度量
- 可信计算技术以BIOS Boot Block和TPM芯片为根,
- 其中BIOS Boot Block是可信度量根RTM
- TPM芯片是可信存储根RTS和可信报告根RTR
- 从BISO Boot Block出发,经过BIOS,到OSloader,再到OS,构成了一条信任链
- 沿着这个信任链,一级度量一级,从而确保整个平台系统资源的完整性
- 对信任链的度量采用度量其中软硬件程序数据完整性的方法:
- 对系统数据完整性的度量,采用密码学Hash函数来检测系统的数据完整性是否受到破坏
- 需要系统处于良好状态时(通常系统初始化完成时),以其Hash值作为度量基准值并将其进行安全存储
- 在系统启动时,重新计算Hash值,并与基准值比较,如果不同,系统完整性被破坏
- 存储
- TPM芯片只保留了有限的存储空间
- 为了节省存储空间,TPM采用了一种扩展计算Hash值的方式来进行信任链的度量,通过一个平台配置寄存器(Plat configure Register, PCR)来迭代计算存储存储信任链中各对象的Hash值,即将现有值与新值相连,再次计算Hash值并被作为新的度量值存储到平台配置寄存器PCR中
$$
PCR.hashValue_i = Hash(PCR.hashValue_{i-1}||NewValue)
$$
- 除了PCR值,还将各种资源的配置信息和操作记录作为日志存储到磁盘中,磁盘空间大且便宜可以记录较为详细的日志
- 存储在PCR中的Hash值与存储在磁盘中的日志是互相关联印证的
- PCR在TPM芯片内部,安全性高
- 日志在磁盘上,安全性低
- 但彼此关联印证关系,即时攻击者篡改了磁盘上的度量日志,通过TPM中的PCR值也可以发现这种篡改
- 报告:
- 在完成度量和存储之后,客体需要访问时,可以提供报告,供访客判断平台的可信状态
- 向访客提供的报告内容包括PCR值和日志
- 为了确保报告内容的安全,还必须采用加密,数字签名和认证技术,即平台远程证明
-
度量存储报告机制
- 确保自身可信
- 并向外提供可信服务的一项重要机制
3.5.2 虚拟可信计算
- 可信计算技术能够保障物理计算平台的可信性
- 在可信计算技术的基础上,将可信计算芯片虚拟化,即产生了虚拟可信计算技术
- 虚拟可信计算技术可为每个虚拟机维护一个虚拟的TPM(即vTPM)
- 随着虚拟的启动,以vTPM为可信根,层层度量,建立可信链,保障虚拟机的可信性
虚拟可信计算基本框架如下所示:
- 通过软件构建了vTPM组件
- 每个与其对应的vTPM组件就是其物理TPM设备
- 在这个“TPM”基础上,在VM中可以像使用硬件TPM一样完成可信计算功能
- 为了保证vTPM的可信性,需要建立从硬件TPM到vTPM间的可信链,保证二者之间的可信关联
3.6 虚拟机安全监控
云管理方要尽可能的获取更多的关于VM运行状态的信息,从而保证每一台虚拟机健康运行,继而保证整个云计算平台的安全可靠。云用户也需要了解自己虚拟机的运行状态。因此虚拟机监控是必不可少的。
3.6.1 安全监控架构研究
目前存在两种主流的虚拟机安全监控架构:
- 基于虚拟机自省技术的监控架构,即将监控模块放在Hypervisor中,通过虚拟机自省技术对其虚拟机进行检测
- 基于虚拟划的安全主动监控架构,通过在被监控的虚拟机中插入一些钩子函数(hook),从而截获系统状态的改变,并跳转到单独的安全虚拟机中进行监控管理
3.6.2 安全监控的分类
从虚拟机安全监护实现的角度来看,基于虚拟化安全监控的相关研究可以分为两大类:
- 内部监控
在虚拟机中加载内核模块来拦截目标虚拟机的内部事件,而内核模块的安全通过Hypervisor来进行保护
-
典型代表系统是:Lares和SIM,如下是Lares内部监控系统的架构
- 安全工具部署在一个隔离的虚拟机中,该虚拟机所在的环境在理论上被认为是安全的,称为**安全域**。如:Xen的管理虚拟机
- 被监控的客户操作系统运行在目标虚拟机内,该目标系统部署一种至关重要的工具-钩子函数,用于拦截某些事件
- 进程创建
- 文件读写等
- 由于客户操作系统不可信,这些钩子函数需要特殊保护,钩子函数在加载到客户操作系统时,向Hypervisor通知其占据的内存空间,使Hypervisor中的内存保护模块能够根据钩子函数所在的内存页面对其进行保护
- Hypervisor还有一个跳转模块,作为目标虚拟机和安全域之间通信的桥梁
- 为了防止攻击者篡改,钩子函数和跳转模块必须是自包含的,不能调用内核的其他函数,同时必须简单,方便内存保护模块保护
-
优势:
- 事件截获在虚拟机中实现,可以直接获取操作系统的语义,减小了系统开销
-
劣势:
- 需要在客户操作系统中插入内核模块,造成对目标虚拟机的监控不透明
- 钩子函数也需要Hypervisor提供足够的保护以防止客户端修改
- 内存保护模块和跳转模块与目标虚拟机操作系统类型及版本紧密相关,不具有通用性,
- 限制了内部监控机构的进一步研究和使用
-
外部监控
通过Hypervisor对目标虚拟机中的事件尽心拦截,从而在虚拟机外部进行检测
典型代表系统是:Livewire,如下是Livewire外部监控系统的架构
- 相同的是:外部监控架构中安全工具和客户操作系统的部署和内部监控一样,分别位于两个彼此隔离的虚拟机中,增强了安全工具的安全性
- 不同的是:外部监控架构的监控点部署在Hypervisor中,它不仅是安全域中的安全工具和目标虚拟机之间的通信的桥梁,还用于拦截目标虚机中发生的时间,并重构出高级语义,然后传递给目标虚拟机
- 因为Hypervisor位于目标虚拟机的底层,监控点可以观测到目标虚拟机的状态(如CPU的信息、内存页面),所以安全工具能够对目标虚拟机进行检测
- 两种基本功能;
- 事件拦截:拦截虚拟机中发生的某些事件,从而触发安全工具对其进行检测;因为Hypervisor在虚拟机下层只能获取低级语义,而监控工具是针对操作系统层的语义,两者存在语义鸿沟;
- 语义重构:由低级语义(二进制)重构出高级语义(操作系统级语义),与客户操作系统的类型和版本密切相关,且目前没有一种完全之策彻底解决语义重构的问题
-
虽然这两种监控方式都能很好的实现虚拟机安全监控,但是还有如下两个方面的不足:
- 通用性问题:
- 单个物理机可能同时运行多个虚拟机,每个虚拟机的操作系统可能不一样(Linux、Windows等),监控工具需要对各种不同类型的虚拟机进行有效的监控
- 目前所有的监控工具都是针对特定类型的客户操作系统实现特定的安全功能,以下情况监控工具就会失效:
- 某个物理节点上创建一个新的虚拟机
- 从另外一个物理节点上迁移新的虚拟机
- 以上情况说明现有的监控工具不能满足监控通用性的要求,构建通用的安全监控机制十分必要;
- 虚拟机监控与现有安全工具融合的问题:
- 传统环境下,为了提高计算系统的安全性,研究中开发了大量的安全工具;
- 虚拟化环境下基于Hypervisor可以更好的监控虚拟机内部运行状态,传统的安全工具无法直接使用
- 为了更好的利用已有的安全 工具,基于虚拟化的安全监控需要与现有的安全 工具进行有效的融合:
- 利用语义恢复来实现从二进制语义到系统级语义的转换
- 安全工具提供标准的调用接口,使安全工具直接或者稍作修改来适应与虚拟机计算环境
- 语义恢复给安全工具带来了额外的性能开销,为了使安全监控具有更大的使用价值,研究者需要考虑在语义信息的全面性和系统开销之间进行综合权衡
- 通用性问题:
3.7 虚拟机自省技术
基于虚拟机监视器具有较高的权限、较小的可信基以及良好的隔离性,将安全工具部署在虚拟机监视器中,来对虚拟机进行监控,将会很大程度提高安全工具本身的安全性。虚拟机自省(Virtual Machine Introspection,VMI)使这个设想成为可能。
3.7.1 虚拟机自省概述
虚拟机自省是通过获取虚拟机所依托的物理硬件级别的状态(如物理内存页、寄存器)和事件(如中断、内存读取),推导甚至控制虚拟机内部行为。这种技术在如下方面得到广泛应用:
- 恶意软件分析
- 入侵检测系统
- 内存取证
早期通过在虚拟机中直接安装监控程序,对虚拟机的运行状态进行监控,这种方法监控程序易收到攻击。
为了降低监控程序受攻击的可能性,监控程序开始以驱动的形式部署到虚拟机的内核。后来人们意识到可以将监控程序部署在VMM中对虚拟机进行监控,并且有诸多好处。
3.7.2 虚拟机自省的实现方式与难点
虚拟机自省以是否需要在虚拟机中安装代理或者对虚拟机监视器进行修改分为 两大类:
- 第一大类有三种实现方式:
- 直接在虚拟机中安装监控代理
- 监控代理以内核驱动的方式安装在虚拟机内核中
- 通过陷阱、断点或者回滚等和钩子函数相似的机制来实现虚拟机自省
[图片上传失败...(image-f7e2bd-1568812948113)]
- 第二大类虚拟机无需在被监控虚拟机中安装任何代理,直接在虚拟机监视器上利用虚拟机自省工具获得被监控虚拟机的内部运行信息进行监控
- 缺点:
- 没有安装代理的方式详细
- 需要进行语义重构
- 从虚拟机外部直接获取虚拟机内部信息都需要面对语义鸿沟
- 语义鸿沟是指从低级数据源中解读出高级语义信息的问题
- 这个问题成立虚拟机自省技术面临的一个大难题
- 优点:
- 安全性高
- 消耗资源更少
- 逐渐成为一种趋势
4 小结
- 虚拟化技术是云计算的基础支撑技术,主机虚拟化安全是衡量晕计算服务安全能力的重要考核指标
- 做好主机虚拟化安全,需要掌握如下好知识:
- 主机虚拟化的特性
- 关键技术及对应的技术优势
- 主机虚拟化面临的主要威胁,以及对应的解决方法
- 主机虚拟化安全涉及的知识面广,需要综合采取技术、管理、运维等手段统筹考虑,并对系统中各个层次的组件做严密防护,才能保障虚拟化系统的安全性