摘 要: 為了在互聯網平臺上提供可信計算" 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