分类: LINUX
2010-05-21 17:50:32
Qubes充分利用了虚拟化技术(基于安全虚拟机Xen),所有用户应用程序都运行在AppVM(基于Linux的轻量级虚拟机)中,彼此隔离。而联网代码使用 IOMMU/VT-d放在一个非特权虚拟机中,在特权域 (dom0) 中没有任何联网代码。许多系统级组件放在沙盒中,以避免互相影响。
Qubes允许用户自己定义许多安全域(用轻量级虚拟机实现),比如“个人”、“工作”、 “购物”、“银行”等,彼此隔离。另外,也支持各安全域之间复制-粘贴和文件共享。每个AppVM都是由TemplateVM创建的,他们以只读模式和模板共享根文件系统,所以每个AppVM仅需要存储自己的私有数据的磁盘空间,同时还可以通过运行TemplateVM中的升级进程升级所有AppVMs的软件,当然必须先停止所有的AppVMs。
该系统的主要是由VMs构成的,Qubes架构优化了硬盘(将来也会考虑内存)的使用,所以可以同时允许运行许多虚拟机(应用程序有很多的缘故)而不浪费磁盘空间,因为文件共享机制允许VM间重用绝大多数文件系统而不降低安全隔离属性。
Intel VT-d 和TXT 技术允许创建安全的驱动域,这样能够把系统攻击surface降到最小。一般可以把系统使用的VM按照两个策略分类:
AppVMs,用于不同的应用,如邮件客户端,web浏览器,等
SystemVMs (或称为ServiceVMs)主要用来提供 system-wide services, 如: networking 和disk storage.
该项目通过利用裸虚拟监视器(XEN)的隔离能力和硬件虚拟化技术(Inetl VT-d和TXT)构建一个桌面和笔记本用的安全操作系统。
当前桌面系统主要安全问题就是不能有效地隔离各种程序,主要是由于目前的操作系统架构设计问题(包括过于复杂的OS API,非安全的GUI设计,还有最关键问题:monolithic kernel architecture)所以说基于目前这种非安全的系统架构很难实现真正的安全操作系统。而通过Qubes系统我们最大可能的重用现有的系统构造块,特别是XEN虚拟监视器,并且在硬件虚拟化的支持下大大简化了虚拟监视器的代码,便于创建更robust的系统配置,例如使用驱动域( 也就是说把硬件相关的如networking 代码完全隔离出去)。
Qubes安全模型:虚拟机(VMS,也叫域)是Qubes系统安全模型主要的构造块,Qubes系统主要的工作就是隔离不同的VMs。从一个用户的角度日常使用中可能会需要分配以下几个域:
Random域,用来日常使用,例如安装非可信应用程序,由于该域没有敏感数据,所以不会有潜在的安全隐患。
Socila域:邮件,blog,twitter,facebook,等
Shopping域:在线购物等
Bank域:这个就不用我说了吧
Corporate域 :VPN等
(注:各种不同的域可以分级Non Restricted ,Restricted,Confidential,Top Secret)
另外还有一些专用的安全域,如网络虚拟域(由于网络世界充满未知,所以把所有网络相关代码放到一个非特权的域中,对于保证系统安全有很重要的影响)。
另外为了管理和定义这些虚拟机,Qubes提供了一个安全的GUI子系统,可以显示不同的应用程序,即使他们不在同一个VM中,但并未降低系统的隔离性,用户可以在不同域间拷贝复制和交换文件。在桌面应用环境中安全的GUI起着非常重要的角色,例如用户可能在邮件(Socila域)中收到一个不明的网络连接,他如果不了解该连接的真实可靠性就可以从这个VM中复制到Random域中,这样不管这个网站是否安全都不会破坏系统的安全性。
系统架构:
Qubes架构优化了硬盘(未来还要优化内存)的使用,所以不需要同时在系统中运行N多的VMs(太浪费硬盘空间)。文件系统共享机制允许域间重用大多数文件系统,不必考虑安全隔离的属性。IntelVT-d和TXT技术允许创建安全的驱动域,所以能最小化系统attack surface.同样存储设备可以放到存储域中,包括硬盘,USB,DVD等,并且借助文件系统加密、签名和可信启动技术,对于存储域的威胁不会影响到系统其他部分。
从整体上可以把域分为AppVMs和SystemVMs(或者叫Services Vms)。
Qubes系统主要的功能就是提供对于不同域间的不同应用程序的无缝整合,便于用户透明的使用所有的应用程序,不用去管到底哪个应用跑在哪个VM中。还一个关键的功能就是提供 near-native的性能,让用户使用是感觉不到AppVMs对应用程序的影响(但我在实际使用中碰到过内存不够的问题,相信以后的发布版中应该会解决这个问题)。
Qubes第一版假设所有的AppVMs都是跑在Linux系统中,但并不是说Qubes系统不支持在其他OS,如Windows中使用AppVMs。
Qubes主要是为使用虚拟机节省硬盘空间,所以所有的AppVMs都是基于同一个系统(目前是Linux),共享同一个只读文件系统,并且只需要为用户和每个域的设置分配一些磁盘空间, 每一个VM不必使用整个OS镜像。为了解决这个问题,Qubes架构引入了dedicated storage domain,把所有的磁盘和文件系统存储相关的代码放到这个“沙盒”中,这样即使这些部分受到攻击也不会影响系统其他部分。
在通常的系统上(如windows和Linux),核心的网络代码,包括网卡驱动和不同的协议栈都是运行在内核中,所以潜在的网络代码bug会导致整个系统受到威胁。在Qubes架构中会尽量减少这种问题带来的威胁,所以整个网络代码(包括驱动和协议栈)都被移到一个非特权域(Network 域)中。 Network 域直接访问网络设备,这是由intel VT-d技术提供的,这样一来所有对于 Network 域的攻击不会对其他域造成威胁。另外所有的安全敏感的应用可以使用加密保护的网络协议,如SSL、VPN、SSH。
复杂的文件共享机制(如 copy-on-write文件系统)需要后台的代码支持,为了减轻这个问题,文件系统共享代码,后台代码,以及磁盘驱动和栈,都移除到 专用的非特权域,storage域中。同样storage域可以直接访问磁盘控制器,也是由intel VT-d技术提供支持的。
另外,存储域可以访问USB和CD/DVD controllers,允许处理所有的可移动设备。所以对于移动设备的安全问题同样也被限制在VM中。
存储域最大的难题在于如何保证它安全性,Qubes架构是利用加密文件系统解决的,所以存储域不能读其他域的敏感信息,更不能够修改共享的根文件系统。另外通过使用intel TXT技术保护系统启动代码,使得即使存储域被挟持,最坏也就使系统或该VMs不能启动,但不至于威胁到整个系统(如安装后门,rootkit,或者偷取数据)。
GUI域(Dom0)是唯一直接访问图形设备的,包括输入设备,运行X server和Window Manager(管理应用程序启动和关闭并操作他们的windows)。GUI域一个最常用的应用就是Application Viewer(a little stub application :XEN术语),他用来启动和显示某个AppVM中实际的应用程序。AppViewer为用户提供一个系统中执行的应用程序的视图,而实际上他们是隔离在各个AppVM中。
由于GUI域是安全敏感的,所以目前还不确定是否要把他放到Dom0外的一个GUI子系统中。Qubes系统第一版中把GUI域作为管理域(Dom0),将来或许会从Dom0移除出去。
一口气说了这么多,快受不了了,不如赶紧使用一下吧,我刚刚使用过,还在摸索阶段,今后后不断的分析出来,大家拭目以待吧。