摘 要: 為了在互聯(lián)網(wǎng)平臺上提供可信計算" title="可信計算">可信計算環(huán)境,首先引入了和欣Elastos Domain模型和CAR AOP技術(shù),并在比較了以往傳統(tǒng)平臺上的一些沙箱模型之后,結(jié)合CAR AOP動態(tài)多面聚合技術(shù),在和欣網(wǎng)絡(luò)操作系統(tǒng)上設(shè)計并提出了可配置" title="可配置">可配置安全語義模塊級沙箱模型,使用戶可以靈活控制代碼的運行,同時使可疑代碼的隔離環(huán)境透明化。
關(guān)鍵詞: 面向方面編程 和欣Domain 動態(tài)聚合 沙箱隔離
自Unix發(fā)布以來,操作系統(tǒng)一直延用著面向單機的設(shè)計模型。隨著網(wǎng)絡(luò)時代的來臨,信息技術(shù)正面臨“以機器為中心”向“以網(wǎng)絡(luò)為中心” 的轉(zhuǎn)變,SOA協(xié)議框架[1]也就應(yīng)運而生并得到廣泛應(yīng)用。而實現(xiàn)網(wǎng)絡(luò)服務(wù)和移動計算的關(guān)鍵技術(shù)是面向構(gòu)件、中間件的編程技術(shù),以及一整套的運行環(huán)境、開發(fā)環(huán)境等平臺技術(shù)。
此外,移動代碼[2]已成為構(gòu)成Internet運行環(huán)境的常用構(gòu)件,這使Internet受到越來越大的威脅。這些惡意移動代碼的攻擊特征歸納起來主要有五種:讀文件;寫文件;主動執(zhí)行程序;訪問禁用端口;讀寫系統(tǒng)設(shè)備?,F(xiàn)在針對一些惡意移動代碼的保護措施(如防火墻和實時病毒監(jiān)控技術(shù))從一定程度上緩解了移動代碼的威脅,可一旦出現(xiàn)一種能繞過這些技術(shù)的識別和監(jiān)控的新特征的病毒、木馬或者蠕蟲,偽裝成授權(quán)用戶對數(shù)據(jù)進行感染和破壞,傳統(tǒng)操作系統(tǒng)仍將束手無策。
所以無論從應(yīng)用需求還是安全運行的角度,傳統(tǒng)操作系統(tǒng)模型已經(jīng)難以應(yīng)付目前新運行環(huán)境的諸多問題。為了在SOA框架下實現(xiàn)以服務(wù)的安全性、可用性和服務(wù)質(zhì)量保證(QoS)為核心的高可信計算,本文根據(jù)和欣Domain模型[3]和惡意代碼的一般特征,在和欣新一代網(wǎng)絡(luò)操作系統(tǒng)上引入了面向方面的沙箱模型,提出了動態(tài)可配置的安全語義控制方法,隔離運行移動構(gòu)件。
1 和欣網(wǎng)絡(luò)操作系統(tǒng)
和欣網(wǎng)絡(luò)操作系統(tǒng)Elastos所提供的功能模塊全部基于CAR(Component Assembly Run-Time)構(gòu)件技術(shù)[3],即可拆卸的構(gòu)件。應(yīng)用系統(tǒng)可以按照需要來剪裁組裝,或在運行時動態(tài)加載" title="加載">加載必要的構(gòu)件。和欣網(wǎng)絡(luò)操作系統(tǒng)主要由靈活內(nèi)核[3]、構(gòu)件支持模塊和系統(tǒng)服務(wù)器組成。
靈活內(nèi)核主要分為4大部分:硬件抽象層、內(nèi)存管理、任務(wù)管理(支持多Domain,多線程)、Domain間通信[3]IDC(Interdomain Communication)等基本功能。構(gòu)件支持模塊通過內(nèi)核中的IDC部分的協(xié)助對CAR構(gòu)件提供支持,實現(xiàn)構(gòu)件運行環(huán)境。系統(tǒng)服務(wù)器在體系結(jié)構(gòu)中以動態(tài)鏈接庫的形式存在,主要提供文件系統(tǒng)" title="文件系統(tǒng)">文件系統(tǒng)、設(shè)備驅(qū)動等系統(tǒng)服務(wù)。
靈活內(nèi)核并非傳統(tǒng)意義上的微內(nèi)核或宏內(nèi)核,用戶可以根據(jù)運行時的需求,自主選擇將操作系統(tǒng)的某些系統(tǒng)服務(wù)構(gòu)件(文件系統(tǒng)、圖形系統(tǒng)等)運行于內(nèi)核地址空間或用戶地址空間。用戶可以根據(jù)系統(tǒng)的自身需求決定和欣內(nèi)核的版本。
1.1 Domain模型和原理
Domain模型是沙箱隔離技術(shù)的基礎(chǔ),其概念被和欣Elastos引入操作系統(tǒng)以替代Unix提出的進程概念,雖然二者有某些程度上的相似性。最主要的兩個特點是:
(1)所有的應(yīng)用不再以可執(zhí)行程序出現(xiàn),而是通過CAR構(gòu)件程序集(如動態(tài)鏈接庫)的形式在Domain提供的環(huán)境中由Domain的客戶宿主(Client Host)或者服務(wù)宿主(Server Host)運行。
(2)無論目標(biāo)域Server Domain在本地還是在遠端,跨域調(diào)用完全對應(yīng)用透明,由宿主決定是用本地IDC傳輸還是用TCP/IP協(xié)議封裝的遠程IDC傳輸。
Domain默認(rèn)維護著一個獨立的地址空間和線程池。Client Host會主動從線程池中分配線程從程序集的入口地址開始執(zhí)行,而Server Host則不會主動執(zhí)行,僅對Client Host發(fā)送的請求進行響應(yīng),分配池內(nèi)的線程以提供服務(wù)。一旦線程池中的空余線程分完,Domain宿主會自動創(chuàng)建新線程。
在實際應(yīng)用中,構(gòu)件程序集往往既作為Server為其他Client提供服務(wù),又依賴其他Server提供的服務(wù)。這種角色的區(qū)別沒有技術(shù)的其他變化,它們?nèi)匀贿\行在Server Domain中。
1.2 CAR AOP基本思想
CAR AOP機制[4]使用戶能夠在完全不用修改源代碼的情況下簡單而方便地動態(tài)聚合兩個CAR構(gòu)件類,從而生成一個具有兩個CAR構(gòu)件類的所有接口實現(xiàn)的新構(gòu)件類。CAR AOP技術(shù)由Aspect對象、動態(tài)聚合和對象環(huán)境等技術(shù)組成。Aspect對象是實現(xiàn)動態(tài)聚合的必要條件,動態(tài)聚合[5](或織入weave)和拆卸是本文沙箱模型實現(xiàn)安全語義動態(tài)可配置的關(guān)鍵技術(shù)。
Aspect對象屬于必須實現(xiàn)特殊基接口IAspect的特殊構(gòu)件類,其特征是只有Aspect對象才可被其他構(gòu)件對象聚合, 同時它也可以聚合其他Aspect對象。Aspect構(gòu)件類對一般CAR構(gòu)件對象基接口IObject的實現(xiàn)僅做簡單的轉(zhuǎn)接。如果Aspect對象被其他構(gòu)件對象聚合,對IObject的方法調(diào)用則會被委托給外部對象。外部對象保存Aspect對象的IAspect的接口指針,用于Aspect對象真正的接口查詢,類似于MS COM的非委托接口聚合模型。
動態(tài)聚合是通過接口基類IObject的Aggregate方法,幫助外部對象得到指向Aspect對象的指針,幫助被聚合的Aspect對象得到指向外部對象的指針,從而使CAR構(gòu)件對象具有聚合其他Aspect對象的能力。CAR構(gòu)件的聚合和拆卸簡單而靈活,可隨時聚合隨時拆卸。在2.3節(jié)將詳細(xì)介紹用動態(tài)聚合技術(shù)實現(xiàn)安全語義可配置。關(guān)于對象環(huán)境,詳見參考文獻[5]。
2 基于Domain的AOP沙箱模型
2.1 沙箱分類及相關(guān)概念
沙箱模型根據(jù)監(jiān)控粒度可以分為程序級沙箱和模塊級沙箱。
程序級沙箱監(jiān)控整個程序的系統(tǒng)調(diào)用,以對系統(tǒng)實施保護,這就要求對各種不同的傳統(tǒng)操作系統(tǒng)平臺進行擴展。Jain K.和Sekar R.[6]提出了一種在Unix操作系統(tǒng)上系統(tǒng)調(diào)用、隔離的通用框架。他們的框架針對不同系統(tǒng)模塊要進行替換,這對于Windows、Unix和Solaris等固定內(nèi)核的操作系統(tǒng)及其不同版本來說,修改費用會非常高。和欣操作系統(tǒng)的靈活內(nèi)核則可以利用構(gòu)件固定的接口自描述信息自動加載替換更新之后的系統(tǒng)構(gòu)件庫。盡管和欣具有這種靈活性,但這種對程序模塊不加區(qū)分的監(jiān)控方法會降低系統(tǒng)服務(wù)對可信代碼的運行性能。
模塊級沙箱的主要優(yōu)點是可以針對代碼的可信度有區(qū)別地動態(tài)綁定監(jiān)控策略。所以下面主要討論模塊級沙箱,根據(jù)主程序和加載代碼的域空間的異同它又可以分為同域沙箱和異域沙箱。
同域沙箱模型的提出主要是出于性能優(yōu)化的考慮,因為同一地址空間的接口調(diào)用要明顯快于跨域調(diào)用。為了隔離運行,該模型仍然需要在同域地址空間將主程序和被加載代碼的空間隔離。Robert W.和Steven L.等提出利用分段機制將不安全代碼加載到同一線性地址空間的獨立段中,通過自定義編譯器聲明規(guī)定的五個對外禁用的寄存器來檢查可疑代碼的段標(biāo)識符的段匹配,采用這種技術(shù)[7](Segment Matching)可以限制跨段非法讀寫,只允許不安全代碼通過安全RPC對外通信。
這種技術(shù)最明顯的特征就是平臺相關(guān),對于一些不提供分段機制的平臺(例如ARM體系結(jié)構(gòu)以及寄存器數(shù)目有限的平臺),實現(xiàn)起來就非常困難,因此不適于異構(gòu)的網(wǎng)絡(luò)系統(tǒng)平臺。而且安全策略比較簡單、固定、不能實現(xiàn)靈活的保護。
2.2 建立模塊級異域沙箱模型
本文提出的模塊級異域沙箱模型的基本原理是:將移動構(gòu)件與授權(quán)客戶程序的運行空間Domain隔離,加載構(gòu)件前檢查代碼的危險操作,加載時根據(jù)構(gòu)件的數(shù)字簽名制定安全策略,生成獨立的AOP沙箱宿主來動態(tài)監(jiān)控和限制可信或可疑移動構(gòu)件的運行。
模塊級異域沙箱模型主要由4部分組成:模塊加載器(Module Loader)、代碼檢查器(Code Verifier)、信任管理器" title="管理器">管理器(Trust Control Manager)和沙箱宿主(Sandbox Host)。它們分別在加載時和運行時檢查和監(jiān)控移動構(gòu)件對文件系統(tǒng)和網(wǎng)絡(luò)端口等系統(tǒng)資源的訪問。
(1)模塊加載器:是整個沙箱模型的驅(qū)動引擎。當(dāng)客戶程序或者系統(tǒng)需要請求加載某個移動構(gòu)件時,可根據(jù)請求元數(shù)據(jù)中的URL定位構(gòu)件的網(wǎng)絡(luò)位置,由緩沖管理器下載到磁盤或者Flash,并調(diào)用信任管理器檢查該構(gòu)件的數(shù)字簽名的可信度來制定安全策略(如果高度可信,將直接加載運行),然后在加載時通過代碼檢查器掃描代碼的危險操作。如果代碼通過檢查,加載器根據(jù)安全策略利用AOP技術(shù),將信任管理器中監(jiān)控方面類或組合動態(tài)聚合或多面聚合到Domain宿主生成沙箱宿主,完成加載任務(wù)。
(2)代碼檢查器:根據(jù)不同的安全語義,檢查構(gòu)件代碼是否通過立即尋址模式或PC相關(guān)(Pc-Related)控制轉(zhuǎn)換指令非法讀寫禁用地址空間,是否對數(shù)組越界訪問。由于沙箱宿主會根據(jù)元數(shù)據(jù)在運行時校驗參數(shù)和結(jié)果類型,所以代碼檢查器不必做這方面的檢查。
(3)信任管理器:首先檢查被加載代碼加密的數(shù)字簽名判斷是由哪個機構(gòu)或個人開發(fā)或簽發(fā)的,然后在用戶預(yù)設(shè)或者系統(tǒng)默認(rèn)的信用列表中找出信任級別和對應(yīng)的安全策略,供加載器和檢查器參考。安全策略代表代碼檢查的預(yù)設(shè)級別和預(yù)先定制的各種監(jiān)控方面(Monitoring Aspect)及其各種組合。信用管理器維護一個監(jiān)控方面庫,用戶可以擴展或者更新這個方面庫。圖1中將其放在內(nèi)核以外是為了減少對內(nèi)核的改動,同時減少許可的內(nèi)核調(diào)用以盡量降低系統(tǒng)風(fēng)險。如果需要考慮性能優(yōu)先,則在系統(tǒng)布署期可以將其部分或全部定制到內(nèi)核空間。
(4)沙箱宿主:由于危險操作仍然可能躲過靜態(tài)代碼的檢查,所以沙箱宿主的動態(tài)監(jiān)控成為用戶態(tài)沙箱隔離的最后一道關(guān)鍵屏障。沙箱宿主為可疑代碼虛擬外部運行環(huán)境,在本域生成所有被請求外部對象(包括系統(tǒng)對象,程序?qū)ο螅┑膭討B(tài)代理,針對利用列集/散集包裝的所有跨域調(diào)用特別是系統(tǒng)調(diào)用(如讀取或修改文件、加載其他惡意代碼)以及寄存器跳轉(zhuǎn)執(zhí)行流進行動態(tài)監(jiān)控和限制,并根據(jù)接口自描述元數(shù)據(jù)檢查外傳參數(shù)或結(jié)果的類型和大小以防止目標(biāo)堆或目標(biāo)棧的溢出。圖1中的所有點劃線箭頭即為代碼的受控調(diào)用,代表沙箱宿主可以根據(jù)安全策略有選擇性地對這些調(diào)用直接返回異常。由模塊加載器動態(tài)生成的Domain宿主原型,根據(jù)加載請求的不同,既可以是Client Host也可以是Server Host。
2.3 動態(tài)聚合實現(xiàn)沙箱宿主可配置
首先,沙箱宿主通過EzAggregate方法聚合某個監(jiān)控策略,即Aspect構(gòu)件,獲得并保存Aspect構(gòu)件的IAspect接口指針,用于Aspect對象的真正接口查詢。其中,受控接口、Aspect監(jiān)控類和沙箱宿主的CAR文件聲明如圖2。
然后,通過和欣CAR編譯器生成CPP文件和頭文件,再將Aspect構(gòu)件的方法實現(xiàn)添加到CPP文件的代碼框架中。
接著,Aspect構(gòu)件的IObject接口成員指針指向沙箱宿主。因此,對宿主未監(jiān)控的接口調(diào)用在QueryInterface方法中被轉(zhuǎn)接到Aspect構(gòu)件的相應(yīng)接口,經(jīng)過有選擇性地檢查后,再調(diào)回至原宿主接口。該過程對受控程序集透明,如圖3所示。另外Aspect構(gòu)件沒有IID,所以也對上層程序集透明。
沙箱宿主對象往往需要動態(tài)聚合多個監(jiān)控策略,這種技術(shù)稱為多面聚合[4](Multi-Aspect Aggregating)。實現(xiàn)中,宿主對象只要創(chuàng)建多個不同策略的Aspect對象并多次調(diào)用EzAggregate方法使宿主對象以掛接到聚合鏈表的方式聚合多個Aspect對象,并重新計算聚合后的引用計數(shù)。動態(tài)拆卸監(jiān)控策略則是聚合轉(zhuǎn)接的還原逆過程,匹配的Aspect對象,從聚合鏈表上斷開自己并維持剩余聚合鏈,還原聚合時,Aspect對象完全轉(zhuǎn)嫁給外部沙箱宿主的引用計數(shù)。
綜上所述,本文創(chuàng)造性地提出了一種基于和欣Domain模型和動態(tài)代理機制的沙箱模型,并利用CAR AOP的動態(tài)聚合技術(shù)實現(xiàn)沙箱模型的安全語義動態(tài)靈活配置。針對通常的移動代碼都是以ActiveX控件等的形式出現(xiàn),特別是應(yīng)用程序逐漸由可執(zhí)行模塊形式轉(zhuǎn)變?yōu)闃?gòu)件程序集形式,這種可動態(tài)配置的沙箱模型所提供的虛擬運行環(huán)境比傳統(tǒng)的可執(zhí)行程序運行環(huán)境能夠更透明、更靈活地監(jiān)控來自網(wǎng)絡(luò)的可疑程序集安全運行,在和欣構(gòu)件化網(wǎng)絡(luò)操作系統(tǒng)上提供了一種新的可信計算方案。
參考文獻
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 科泰世紀(jì)科技有限公司.和欣2.0 資料大全.上海:科泰世紀(jì)科技有限公司,2005:6~24
4 黃凱峰.CAR 2.0技術(shù)指南.上海:科泰世紀(jì)科技有限公司,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