首页 > 代码库 > 云计算的安全挑战—虚拟化安全
云计算的安全挑战—虚拟化安全
本文内容分为安全策略和虚拟化安全管理,重点讲介绍虚拟化安全
0x01 实施安全策略
安全策略是有效的安全防御机制的基础,公司如果在没有创建安全策略、标准、指南、流程等基础的情况下,首先实现了技术解决方案,会导致安全控制机制目标不集中
下图是安全策略的层析结构关系:
策略通常被认为是最高层的文档,而标准、流程和指南则是较低层次的组成元素,当然这并不是说较高层次的策略就更重要,而是 说它应该在流程最初阶段创建,这样能对后面的细节元素有指导作用
1. 策略的高级管理声明:在所有策略最先创建的,是一种通用的、高层策略,用于承认计算资源对业务模型的重要性,授权和管 理较低层次的标准、流程、指南的定义
2. 管制策略:公司为满足法律、法规和其他法律要求所必须实现的安全策略
3. 咨询策略:非强制性但强烈推荐实施的安全策略
4. 信息策略:用于向用户提供信息,策略阅读对象可以是内部或外部群体
0x02 虚拟化安全管理
2.1 虚拟化背景知识
一个新技术,只有完全发展并实现以后,才能彻底了解其所带来的风险,虚拟化技术也不例外
虚拟化总的来说可以分为四类:
type1: 全虚拟化环境,虚拟机运行在与硬件直接交互的虚拟机监控器VMM上
type2: 同样是全虚拟化环境,不过虚拟机运行在宿主操作系统而不是VMM上
type3:办虚拟化环境,通过消除一些全虚拟化环境的模拟操作从而获得更佳性能
type4:包括HVM[Hybrid Virtual Machine]和硬件辅助技术
虚拟化管理角色则分为三类:
虚拟化服务器管理员:负责安装和配置ESX服务器硬件、存储、物理和虚拟网络、服务控制台及管理应用程序
虚拟机管理员:负责创建和配置虚拟机、虚拟网络、虚拟机资源和安全策略、创建管理员、维护虚拟机等
来宾管理员:负责管理来宾虚拟机、连接虚拟机、增加系统更新、管理操作系统
2.2 虚拟化面临的威胁
事实上虚拟化系统一方面面临所有系统上都有的威胁,另一方面还有一些特有的威胁和脆弱性,虚拟机环境常见的一些漏洞如下:
(a) 共享剪切板:该技术能在虚拟机与宿主机之间进行数据交换,同时也未不同安全域中虚拟机恶意程序提供了数据传输方法
(b) 击键记录:对于支持击键记录和屏幕更新在虚拟终端进行数据传递的虚拟机技术,可以利用来对虚拟机内部加密终端传输监控
(c) 宿主机对虚拟机的监控:由于进出虚拟机的所有网络数据包都会经过宿主机,因此宿主机基本上可以完全控制虚拟机
(d) 对其他虚拟机的监控:如果虚拟机平台使用了将虚拟机与宿主机进行连接的虚拟交换机,就要可能使用ARP攻击等技术嗅探其他机器发生的数据包
(e) 虚拟机后门:虚拟机和宿主机之间的后面和隐秘通道同样十分危险
为了应对虚拟化安全风险,如下五条安全法则值得参考并实践:
rule1: 所有现存的对操作系统的攻击以完全相同的方式在运行
rule2:对于系统风险而言,虚拟机控制器引入了新的威胁因素
rule3: 在虚拟机中是实现功能隔离和内容隔离可以降低风险
rule4:将功能和资源集中在一个物理平台上会增加风险
rule5:在不可信宿主机上包含可信虚拟机比在可信宿主机上包含不可信虚拟机风险更高
虚拟机的威胁级别可分为三级:
异常终止:虚拟机进入死循环,管理员无法对其访问,可用性被破坏
部分受损:恶意进程能干扰虚拟机管理器,对监测点资源进行破坏
全部受损:虚拟机被完全控制,直接在宿主机上使用更高权限执行非授权命令
虚拟机管理器的安全风险:
hypervisor(虚拟机管理器)是虚拟机的一部分,支持宿主机资源共享和虚拟机隔离,因此hypervisor能提供的隔离能力和自身的安全性很大程度上决定了虚拟机的安全性
a. 恶意虚拟机管理器:hypervisor不论对宿主机还是虚拟机系统都有很大程度的控制,而一个针对它的rootkit可以启动恶意的rogue hypervisor及创建隐通道向系统中导入非授权代码,还可以将自身插入内存中并将主机曹组系统降格为虚拟机
b. hypervisor的外部修改:入股hypervisor自身安全防护性较差,则外部入侵者可以通过hypervisor直接对虚拟机进行修改
c. 虚拟机逃逸:攻击者通过逃脱hypervisor从而在虚拟机的物理主机上执行任意代码
关于虚拟机逃逸技术,可以参考:
CLOUDBURST A VMware Guest to Host Escape Story, Blackhat 2009
Pentesting Virtualization, Blackhat 2010
Virtunoid: A KVM Guest ! Host privilege escalation exploit,Blackhat 2011
Advanced Exploitation of Xen Hypervisor Sysret VM Escape Vulnerability, VUPEN,2012
在CLOUDBUSRT一文中,利用的是虚拟机中显示设备SVGA Ⅱ[Super Video Graphics Array]。在VMware中,虚拟GPU使用仿真PCI设备的形式,设备驱动会提供给常用的Guest虚拟机[Windows下支持3D加速],一个用户级的设备仿真程序负责处理对PCI配置和SVGA设备I/O空间的访问。下图分别为SVGA的架构和虚拟图形栈:
内存映射I/O:内存映射I/O(MMIO)和端口映射I/O(PMIO)是实现CPU和外设输入/输出的两个补充方法
a. 每个I/O设备都监管CPU的地址总线并响应任何分配给设备的地址空间的访问
b. 端口映射I/O对执行I/O使用一个特殊的CPU指令类
下面左图为简化的I/O关系图,右图为SVGA设备的属性:
SVGA FIFO:SVGA设备异步地通过为上锁的FIFO序列处理命令,这个序列会占据大量FIFO内存区域[若干M]。在为加速的2D渲染下,FIFO命令用于标记帧缓存[Frame Buffer]中发生改变的区域,在3D渲染下FIFO则扮演体系结构无关的SVGA 3D渲染协议的传输层。
利用SVGA进行虚拟机逃逸分为2D和3D两个层面,这里只简单讲一下2D层面的一些东西,3D层面的可以去看看CLOUDBURST A VMware Guest to Host Escape Story
SVGA的2D操作有许多命令,以复制命令SVGA_CMD_RECT_COPY为例,它可以将帧缓存中一个矩形从x1,y1复制到x2,y2处,虽然也有边界检查,但是可以bypass,成 功bypass后就成了如下图所示的情况:
越过边界后可以使用SVGA任意读写,其基础是Guest机可以在帧缓存中进行读写操作,而帧缓存又被映射到 了主机的内存中。SVGA_CMD_RECT_COPY的bug意味着我们可以copy主机进程内存到Frame Buffer中 并对它进行读操作 [默认可以无限制读取],还可以将数据写入帧缓存中并copy到主机进程的内存中 [默认受 限的任意写], 只能写到frame buffer之前的页中,有些情况下可以利用,取决于帧缓存前映射的是什么
SVGA_CMD_DRAW_GLYPH:该命令将符号[glyph]画到帧缓存中,前提是svga.yesGlyphs=”TRUE”, 这里glyph被复制的地方没有进行对x,y的边界检查
在帧缓存被映射到主机内存中的情况下,SVGA_CMD_DRAW_GLYPH的bug便意味着:
我们可以在主机进程内存中的任何地方写入任意数据——写地址是frame buffer基址的相对地址 [在ESX中十 分稳定,还可以结合SVGA_CMD_RECT_COPY使用],完全exploitable
SVGA FIFO的3D操作问题详见上文所引用之文档,现在看一下具体利用的流程:
Step1:泄露主机中Frame Buffer的基址,进一步的数据泄露都和它有关
Step2:获取VMware的版本指纹,通过PE/ELF头知道
Step3:Exploit,Leak/Overwrite/Trigger/Leak/Overwrite/Trigger --done!
从这里得出的结论是虚拟机并不能作为一个附加安全层,一个正确的bug,如能导致信息内存泄露、内存读写,ASLR等防护机制都能被突破
在Pentesting Virtualization中,作者对虚拟化的攻击分为侦查、攻击和pwn三个阶段,还提供了一个Metasploit中的工具VASTO
在侦查阶段首先需要判断是否处在虚拟机中,如果是在本地则很容易通过Mac地址和查看进程得知,如果是远程侦查则需要想办法知道Hypervisor在哪,获取网络服务和指纹信 息。对于虚拟机版本vmware_version,可以通过SOAP API调用获得,这在大多数VMware产品中都是适用的:
[...] <RetrieveServiceContent xmlns=\"urn:internalvim25\"> <_this type=\"ServiceInstance\"> ServiceInstance </_this> </RetrieveServiceContent> [...]
攻击的整个过程参照下右图的五个步骤:
首先,客户端自动更新的特性使得要获取client.xml:
<ConfigRoot>
<clientConnection id = "0000"> <authdport>902</authdport> <version>3</version> <patchVersion>3.0.0</patchVersion> <apiVersion>3.1.0</apiVersion> <downloadUrl>https://*/client/VMware-viclient.exe</downloadUrl> </clientConnection> </ConfigRoot>
还可以利用vmware_vilurker的vilurker模块实现代码执行,可以作为一个中间人攻击的代理
CVE-2009-3733使得可以以root身份进行路径遍历,读取任意文件,案例可见乌云:乐视网路径遍历
另外在这个5元组过程中还可以进行会话窃取,端口扫描等...CVE-2010-0686...CVE-2010-2667...
2.3 虚拟机的安全忠告
如下是一些对绝大多数计算机系统都有效的安全机制,对虚拟化系统而言仍是最佳实践
a) 宿主机操作系统安全加固:使用强密码、禁用不必要的服务和程序、对访问实施完整的认证、具备独立防火墙、经常升级打补丁
b) 限制对物理主机的物理访问:机房做隔离和严格访问控制、BIOS中除主硬盘外禁止从其他设备其他、对外部接口进行控制...balabala...
c) 使用加密通信:HTTPS、VPN、TLS、SSH...
d) 禁用后台任务:当出现资源竞争时禁用、限制低优先级进程或迁移到其他服务器
e) 更新补丁:及时更新和打补丁,由于打了补丁后需要重启系统,而且可能会产生不可预计的后果,最好了解一下这些最新补丁相关信息
f) 对虚拟机进行周边防御:虚拟机同样需要部署防火墙和入侵检测系统
g) 实现文件完整性检查 --Tripwire
h) 维护备份——镜像备份
2.4 虚拟机相关安全技术
a. 虚拟机加固 >> (1) 对虚拟机资源消耗进行限制 (2) 合理配置虚拟网卡和存储 (3) 禁用或移除不必要的设备与服务 (4) 确保通过虚拟网络设备进行的共享组件得到足够的隔离与保护 (5) 为虚拟化基础设施保存细粒度的、详细的审计日志
b. 虚拟机管理器安全加固 >> 重点关注hypervisor
c. 监控器的根安全 >> 确保监控器的安全,使虚拟机客户环境中不存在权限级别允许其对主机系统进行干扰
d. 每个虚拟机中只实现一个主要功能
e. 对虚拟机端口进行防火墙防护
f. 加固主机域
g. 为机密虚拟机使用独立网卡
h. 断开不使用的设备
I. 其他标准或指南
Virtualization Security and Best Practices VMware Infrastructure 3 Security Hardening Virtual Machine Security Guidelines
http://csrc.nist.gov http://www.sans.org