《电子技术应用》
您所在的位置:首页 > 可编程逻辑 > 业界动态 > 基于和欣Domain的可配置安全语义沙箱模型

基于和欣Domain的可配置安全语义沙箱模型

2008-04-10
作者:余明冈1,陈 榕1,张艺濒2

  摘 要: 为了在互联网平台上提供可信计算" title="可信计算">可信计算环境,首先引入了和欣Elastos Domain模型和CAR AOP技术,并在比较了以往传统平台上的一些沙箱模型之后,结合CAR AOP动态多面聚合技术,在和欣网络操作系统上设计并提出了可配置" title="可配置">可配置安全语义模块级沙箱模型,使用户可以灵活控制代码的运行,同时使可疑代码的隔离环境透明化。
  关键词: 面向方面编程 和欣Domain 动态聚合 沙箱隔离


  自Unix发布以来,操作系统一直延用着面向单机的设计模型。随着网络时代的来临,信息技术正面临“以机器为中心”向“以网络为中心” 的转变,SOA协议框架[1]也就应运而生并得到广泛应用。而实现网络服务和移动计算的关键技术是面向构件、中间件的编程技术,以及一整套的运行环境、开发环境等平台技术。
  此外,移动代码[2]已成为构成Internet运行环境的常用构件,这使Internet受到越来越大的威胁。这些恶意移动代码的攻击特征归纳起来主要有五种:读文件;写文件;主动执行程序;访问禁用端口;读写系统设备。现在针对一些恶意移动代码的保护措施(如防火墙和实时病毒监控技术)从一定程度上缓解了移动代码的威胁,可一旦出现一种能绕过这些技术的识别和监控的新特征的病毒、木马或者蠕虫,伪装成授权用户对数据进行感染和破坏,传统操作系统仍将束手无策。
  所以无论从应用需求还是安全运行的角度,传统操作系统模型已经难以应付目前新运行环境的诸多问题。为了在SOA框架下实现以服务的安全性、可用性和服务质量保证(QoS)为核心的高可信计算,本文根据和欣Domain模型[3]和恶意代码的一般特征,在和欣新一代网络操作系统上引入了面向方面的沙箱模型,提出了动态可配置的安全语义控制方法,隔离运行移动构件。
1 和欣网络操作系统
  和欣网络操作系统Elastos所提供的功能模块全部基于CAR(Component Assembly Run-Time)构件技术[3],即可拆卸的构件。应用系统可以按照需要来剪裁组装,或在运行时动态加载" title="加载">加载必要的构件。和欣网络操作系统主要由灵活内核[3]、构件支持模块和系统服务器组成。
  灵活内核主要分为4大部分:硬件抽象层、内存管理、任务管理(支持多Domain,多线程)、Domain间通信[3]IDC(Interdomain Communication)等基本功能。构件支持模块通过内核中的IDC部分的协助对CAR构件提供支持,实现构件运行环境。系统服务器在体系结构中以动态链接库的形式存在,主要提供文件系统" title="文件系统">文件系统、设备驱动等系统服务。
  灵活内核并非传统意义上的微内核或宏内核,用户可以根据运行时的需求,自主选择将操作系统的某些系统服务构件(文件系统、图形系统等)运行于内核地址空间或用户地址空间。用户可以根据系统的自身需求决定和欣内核的版本。
1.1 Domain模型和原理
  Domain模型是沙箱隔离技术的基础,其概念被和欣Elastos引入操作系统以替代Unix提出的进程概念,虽然二者有某些程度上的相似性。最主要的两个特点是:
  (1)所有的应用不再以可执行程序出现,而是通过CAR构件程序集(如动态链接库)的形式在Domain提供的环境中由Domain的客户宿主(Client Host)或者服务宿主(Server Host)运行。
  (2)无论目标域Server Domain在本地还是在远端,跨域调用完全对应用透明,由宿主决定是用本地IDC传输还是用TCP/IP协议封装的远程IDC传输。
  Domain默认维护着一个独立的地址空间和线程池。Client Host会主动从线程池中分配线程从程序集的入口地址开始执行,而Server Host则不会主动执行,仅对Client Host发送的请求进行响应,分配池内的线程以提供服务。一旦线程池中的空余线程分完,Domain宿主会自动创建新线程。
  在实际应用中,构件程序集往往既作为Server为其他Client提供服务,又依赖其他Server提供的服务。这种角色的区别没有技术的其他变化,它们仍然运行在Server Domain中。
1.2 CAR AOP基本思想
  CAR AOP机制[4]使用户能够在完全不用修改源代码的情况下简单而方便地动态聚合两个CAR构件类,从而生成一个具有两个CAR构件类的所有接口实现的新构件类。CAR AOP技术由Aspect对象、动态聚合和对象环境等技术组成。Aspect对象是实现动态聚合的必要条件,动态聚合[5](或织入weave)和拆卸是本文沙箱模型实现安全语义动态可配置的关键技术。
  Aspect对象属于必须实现特殊基接口IAspect的特殊构件类,其特征是只有Aspect对象才可被其他构件对象聚合, 同时它也可以聚合其他Aspect对象。Aspect构件类对一般CAR构件对象基接口IObject的实现仅做简单的转接。如果Aspect对象被其他构件对象聚合,对IObject的方法调用则会被委托给外部对象。外部对象保存Aspect对象的IAspect的接口指针,用于Aspect对象真正的接口查询,类似于MS COM的非委托接口聚合模型。
  动态聚合是通过接口基类IObject的Aggregate方法,帮助外部对象得到指向Aspect对象的指针,帮助被聚合的Aspect对象得到指向外部对象的指针,从而使CAR构件对象具有聚合其他Aspect对象的能力。CAR构件的聚合和拆卸简单而灵活,可随时聚合随时拆卸。在2.3节将详细介绍用动态聚合技术实现安全语义可配置。关于对象环境,详见参考文献[5]
2 基于Domain的AOP沙箱模型
2.1 沙箱分类及相关概念

  沙箱模型根据监控粒度可以分为程序级沙箱和模块级沙箱。
  程序级沙箱监控整个程序的系统调用,以对系统实施保护,这就要求对各种不同的传统操作系统平台进行扩展。Jain K.和Sekar R.[6]提出了一种在Unix操作系统上系统调用、隔离的通用框架。他们的框架针对不同系统模块要进行替换,这对于Windows、Unix和Solaris等固定内核的操作系统及其不同版本来说,修改费用会非常高。和欣操作系统的灵活内核则可以利用构件固定的接口自描述信息自动加载替换更新之后的系统构件库。尽管和欣具有这种灵活性,但这种对程序模块不加区分的监控方法会降低系统服务对可信代码的运行性能。
  模块级沙箱的主要优点是可以针对代码的可信度有区别地动态绑定监控策略。所以下面主要讨论模块级沙箱,根据主程序和加载代码的域空间的异同它又可以分为同域沙箱和异域沙箱。
  同域沙箱模型的提出主要是出于性能优化的考虑,因为同一地址空间的接口调用要明显快于跨域调用。为了隔离运行,该模型仍然需要在同域地址空间将主程序和被加载代码的空间隔离。Robert W.和Steven L.等提出利用分段机制将不安全代码加载到同一线性地址空间的独立段中,通过自定义编译器声明规定的五个对外禁用的寄存器来检查可疑代码的段标识符的段匹配,采用这种技术[7](Segment Matching)可以限制跨段非法读写,只允许不安全代码通过安全RPC对外通信。
  这种技术最明显的特征就是平台相关,对于一些不提供分段机制的平台(例如ARM体系结构以及寄存器数目有限的平台),实现起来就非常困难,因此不适于异构的网络系统平台。而且安全策略比较简单、固定、不能实现灵活的保护。
2.2 建立模块级异域沙箱模型
  本文提出的模块级异域沙箱模型的基本原理是:将移动构件与授权客户程序的运行空间Domain隔离,加载构件前检查代码的危险操作,加载时根据构件的数字签名制定安全策略,生成独立的AOP沙箱宿主来动态监控和限制可信或可疑移动构件的运行。
  模块级异域沙箱模型主要由4部分组成:模块加载器(Module Loader)、代码检查器(Code Verifier)、信任管理器" title="管理器">管理器(Trust Control Manager)和沙箱宿主(Sandbox Host)。它们分别在加载时和运行时检查和监控移动构件对文件系统和网络端口等系统资源的访问。
  (1)模块加载器:是整个沙箱模型的驱动引擎。当客户程序或者系统需要请求加载某个移动构件时,可根据请求元数据中的URL定位构件的网络位置,由缓冲管理器下载到磁盘或者Flash,并调用信任管理器检查该构件的数字签名的可信度来制定安全策略(如果高度可信,将直接加载运行),然后在加载时通过代码检查器扫描代码的危险操作。如果代码通过检查,加载器根据安全策略利用AOP技术,将信任管理器中监控方面类或组合动态聚合或多面聚合到Domain宿主生成沙箱宿主,完成加载任务。
  (2)代码检查器:根据不同的安全语义,检查构件代码是否通过立即寻址模式或PC相关(Pc-Related)控制转换指令非法读写禁用地址空间,是否对数组越界访问。由于沙箱宿主会根据元数据在运行时校验参数和结果类型,所以代码检查器不必做这方面的检查。
  (3)信任管理器:首先检查被加载代码加密的数字签名判断是由哪个机构或个人开发或签发的,然后在用户预设或者系统默认的信用列表中找出信任级别和对应的安全策略,供加载器和检查器参考。安全策略代表代码检查的预设级别和预先定制的各种监控方面(Monitoring Aspect)及其各种组合。信用管理器维护一个监控方面库,用户可以扩展或者更新这个方面库。图1中将其放在内核以外是为了减少对内核的改动,同时减少许可的内核调用以尽量降低系统风险。如果需要考虑性能优先,则在系统布署期可以将其部分或全部定制到内核空间。


  (4)沙箱宿主:由于危险操作仍然可能躲过静态代码的检查,所以沙箱宿主的动态监控成为用户态沙箱隔离的最后一道关键屏障。沙箱宿主为可疑代码虚拟外部运行环境,在本域生成所有被请求外部对象(包括系统对象,程序对象)的动态代理,针对利用列集/散集包装的所有跨域调用特别是系统调用(如读取或修改文件、加载其他恶意代码)以及寄存器跳转执行流进行动态监控和限制,并根据接口自描述元数据检查外传参数或结果的类型和大小以防止目标堆或目标栈的溢出。图1中的所有点划线箭头即为代码的受控调用,代表沙箱宿主可以根据安全策略有选择性地对这些调用直接返回异常。由模块加载器动态生成的Domain宿主原型,根据加载请求的不同,既可以是Client Host也可以是Server Host。
2.3 动态聚合实现沙箱宿主可配置
  首先,沙箱宿主通过EzAggregate方法聚合某个监控策略,即Aspect构件,获得并保存Aspect构件的IAspect接口指针,用于Aspect对象的真正接口查询。其中,受控接口、Aspect监控类和沙箱宿主的CAR文件声明如图2。


  然后,通过和欣CAR编译器生成CPP文件和头文件,再将Aspect构件的方法实现添加到CPP文件的代码框架中。
  接着,Aspect构件的IObject接口成员指针指向沙箱宿主。因此,对宿主未监控的接口调用在QueryInterface方法中被转接到Aspect构件的相应接口,经过有选择性地检查后,再调回至原宿主接口。该过程对受控程序集透明,如图3所示。另外Aspect构件没有IID,所以也对上层程序集透明。
  沙箱宿主对象往往需要动态聚合多个监控策略,这种技术称为多面聚合[4](Multi-Aspect Aggregating)。实现中,宿主对象只要创建多个不同策略的Aspect对象并多次调用EzAggregate方法使宿主对象以挂接到聚合链表的方式聚合多个Aspect对象,并重新计算聚合后的引用计数。动态拆卸监控策略则是聚合转接的还原逆过程,匹配的Aspect对象,从聚合链表上断开自己并维持剩余聚合链,还原聚合时,Aspect对象完全转嫁给外部沙箱宿主的引用计数。


  综上所述,本文创造性地提出了一种基于和欣Domain模型和动态代理机制的沙箱模型,并利用CAR AOP的动态聚合技术实现沙箱模型的安全语义动态灵活配置。针对通常的移动代码都是以ActiveX控件等的形式出现,特别是应用程序逐渐由可执行模块形式转变为构件程序集形式,这种可动态配置的沙箱模型所提供的虚拟运行环境比传统的可执行程序运行环境能够更透明、更灵活地监控来自网络的可疑程序集安全运行,在和欣构件化网络操作系统上提供了一种新的可信计算方案。
参考文献
1 THOMAS ERL.Service-oriented architecture(SOA):concepts,technology and eesign.Upper Saddle River:Prentice Hall PTR,August 2005:167~378
2 Roger Grimes.Malicious mobile code:virus protection for Windows.Sebastopol:O′Reilly & Associates Inc.,August 2001:24~253
3 科泰世纪科技有限公司.和欣2.0 资料大全.上海:科泰世纪科技有限公司,2005:6~24
4 黄凯峰.CAR 2.0技术指南.上海:科泰世纪科技有限公司,2005:1~21
5 Robert E Filman,Tzilla Elrad,Siobhan Clarkl.Aspect-oriented software development.Massachusetts:Addison-Wesley,2004:58~171
6 R.Sekar.User-level infrastructure for system call Interposition: a platform for intrusion detection and confinement.The Network and Distributed System Security Symposium,2000;(2):4~10
7 R Wahbe,S Lucco,T E Anderson.Efficient software-based fault isolation.In:Proceedings of the 14th ACM Symposium on Operating Systems Principles,December 1993:203~206

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。