威胁隔离!用SELinux保护虚拟化
虚拟化被认为是计算机技术发展史中的一次技术革命,它在资源分配,系统管理,电力和制冷成本节省,按需扩大或收缩资源等方面表现出极大的优势,虽然人人都在谈虚拟化,人人都准备用上虚拟化,但一直伴随虚拟化挥之不去的阴影 - 安全问题 - 又让无数人望而却步。虚拟化安全性如何?
当攻击者攻破虚拟机,接管了虚拟机的所有控制权后会发生什么?如果系统管理程序(Hypervisor)存在bug又会发生什么?
在未虚拟化之前,我们隔离了服务器,攻击者攻破一台服务器后,他只能控制那一台服务器,这时攻击者必须采取网络攻击,攻击网络内的其它服务器,才有可能拿到其它服务器的控制权。系统管理员有很多工具检测和保护网络攻击,如防火墙,网络流量分析工具,入侵检测工具等。
虚拟化后,在同一台物理主机上运行了多个服务(应用程序),如果虚拟机被攻破,攻击者只需要破坏系统管理程序,就可以达到破坏所有服务的目的。如果系统管理程序存在漏洞,攻击者可以接管主机上托管的所有虚拟机,甚至可以向主机能直接访问的虚拟机镜像写入恶意代码。
听起来非常恐怖吧,现在的问题是如果真发生这种情况时该如何处置,攻击者对系统管理程序的漏洞兴趣越来越浓,前不久Xen系统管理程序就已经被攻破了。——51CTO王文文:VMware的产品中同样出现过类似问题,而现在他们已经在采用RSA的身份认证技术来缓解虚拟数据中心威胁了。那如果不使用身份认证技术的话,我们看看本文中SELinux的保护方式。
现在我们来看看Fedora 11中的libvirtd/qemu/kvm,libvirtd启动所有虚拟机,所有虚拟机都以独立的进程运行,虚拟镜像被保存为一个文件或类似逻辑卷和iSCSI目标的设备。
SELinux真的有用么?
SELinux标记进程,文件和设备,同时负责定义被标记进程,文件和设备之间互操作的规则,通过SELinux可以减小系统管理程序漏洞引起的影响范围。
如果你阅读过Xen漏洞文档,你一定知道如何绕过RHEL 5中SELinux保护机制,攻击者知道标记为xend_t的xen进程可以读/写所有用fixed_disk_device_t标记的固定磁盘,通过写物理磁盘,攻击者可以绕过SELinux的限制。我给RHEL 5上的Xen编写策略时,最初要求管理员将Xen镜像设备卷标记为xen_image_t,Xen开发人员认为这对管理员的管理来说太困难了,可能会导致许多故障,我们没有时间制作管理工具使其自动化,大家都认为在这个例子中可用性比安全更重要,我不得不同意他们的意见。
在Fedora 11中,James Morris,Daniel Berrange和我以及其它共事者给libvirt增加了SELinux支持,形成了sVirt,我们给libvirt增加了一个插件架构,默认启用了SELinux保护,理论上你可以使用其它安全架构。libvirt动态地标记镜像文件,并用正确的标记启动虚拟机,管理员不必记住给镜像文件和设备设置的标记,在F11中,默认所有虚拟机都使用svirt_t type类型标记,所有镜像文件都使用svirt_image_t类型标记。
SELinux策略规定svirt_t进程可以读/写svirt_image_t文件和设备。
这种保护允许我们保护主机不受任何虚拟机的侵害,虚拟机只能与正确标记的文件和设备交互,被攻破的虚拟机不能访问我的home目录,即使虚拟机以root权限运行。
但这种类型的保护不能阻止一个虚拟机攻击另一个虚拟机,我们需要一种方法使用相同的类型标记域和镜像文件,与此同时,停掉虚拟机1,以svirt_t类型运行,攻击虚拟机2,虚拟机2也将以svirt_t类型运行。
多类别安全(Multi Category Security,MCS)保护
我们在开发RHEL 5时,我们增加了MCS支持,包括给SELinux上下文增加第四个字段。
最开始在RHEL 4中,SELinux上下文只有三个字段:“用户:角色:类型”,在RHEL 5中,SELinux上下文字段增加到四个:“用户:角色:类型:MLS”,例如,home目录中的文件可能被标记为system_u:system_r:user_home_t:TopSecretRecipe,MLS标记定义了一个敏感级别(s0-s15)和数据分类(c0.c1023),这个例子中的TopSecretRecipe是类似s15:c0.c36这样的字段的人文翻译,MLS标记允许MLS机器不仅可以基于它的使用者标记文件,在这个例子中是user_home_t,也可以根据敏感性和内容的本身属性进行标记,如TopSecretRecipe。
这个字段仅在MLS策略中使用,我们尝试在默认策略(targeted)中使用它,只定义一个敏感级别(s0),允许管理员定义分类,我们把它叫做多分类安全(MCS),旨在让管理员和用户可以基于文件内容的自身属性进行标记,如system_u:object_r:database_t:PatientRecord可能是一个包含病人记录的数据库,遗憾的是,由于种种原因,MCS未被广泛使用。
但我们在开发sVirt时,我们认识到可以使用MCS隔离两个相同SELinux类型(svirt_t)的虚拟机,我们设计libvirt分配一个不同的随机选择的MCS标记给每个虚拟机及其关联的虚拟镜像,libvirt保证<
新文章:
- CentOS7下图形配置网络的方法
- CentOS 7如何添加删除用户
- 如何解决centos7双系统后丢失windows启动项
- CentOS单网卡如何批量添加不同IP段
- CentOS下iconv命令的介绍
- Centos7 SSH密钥登陆及密码密钥双重验证详解
- CentOS 7.1添加删除用户的方法
- CentOS查找/扫描局域网打印机IP讲解
- CentOS7使用hostapd实现无AP模式的详解
- su命令不能切换root的解决方法
- 解决VMware下CentOS7网络重启出错
- 解决Centos7双系统后丢失windows启动项
- CentOS下如何避免文件覆盖
- CentOS7和CentOS6系统有什么不同呢
- Centos 6.6默认iptable规则详解