專利名稱:用于計算設備的安全模型的方法和系統的制作方法
技術領域:
本發明一般涉及一種操作系統軟件。更具體地說,本發明涉及一種在計算設備的圖形子系統中實現安全模型及其實施的軟件。
背景技術:
圖形子系統和操作系統通常允許外部應用和插入式部件在它們的環境中運行,其中所述外部應用和插入式部件通常由第三方開發者(諸如應用程序員)和其它不完全可信賴的來源所制作。這通常提高了對于本系統的安全關注。如果第三方部件制造得較差,從而具有嚴重的缺陷,則在操作系統環境內運行所述第三方部件會引起嚴重或致命的錯誤狀態。如果第三方部件是惡意的(諸如病毒),則它會企圖竊取敏感數據或執行破壞性操作。一些操作系統無法實施保護以不受編寫較差或惡意的代碼的危害,所以,當運行代碼時,所述操作系統盲目地“信任”所述代碼是編寫良好并且無危害的。
然而,優選的是,原本的系統會預防外部缺陷或惡意代碼損害或滲入所述系統。許多現代系統采用將進程用作保護單元的做法;例如,如應用程序的第三方部件可各自在它們自己的進程中運行。在所述模型中,允許代碼在它自己的進程內做任何它想做的事情,但是進程之間的邊界在硬件級別實施。由系統向每個進程提供特定的一組許可,以訪問所述進程外部的服務,將在每個進程內運行的代碼限制于所述進程被準予許可的那些外部操作。在超過一定級別的復雜程度的操作系統中,這種將進程用作保護單元的處理可以說是幾乎普遍存在的。
將進程用作保護單元來實現足夠的安全措施需要用于將代碼和部件劃分到進程中的策略和相關方法,以及用于向所述進程準予許可的策略和相關方法。
用于將代碼劃分到進程中的策略和方法很重要,這是因為所述策略在可由系統控制和操作的部件之間建立邊界。如果部件A和部件B在相同的進程中,則無法保證系統能夠向每一部件提供保護,以保證它不受另一部件中的缺陷或惡意內容的危害。例如,部件A中的代碼可訪問部件B中的代碼或數據,同時訪問部件B的敏感數據。類似地,如果部件B請求并獲得對于外部資源C的訪問,則系統實際上將對所述資源的訪問給予在與部件B相同的進程中運行的所有代碼。然而,如果部件A和部件B在不同的進程中運行,則系統能夠可靠地保護其中一個部件的代碼和數據不受另一部件中的缺陷或惡意代碼的危害,并且能夠可靠地將許可準予所述部件中的一個部件,而不把它準予另一個部件。
一種用于保護系統不受部件的缺陷或惡意動作的危害并保護部件不受其它部件部分的缺陷或惡意動作的危害的簡單通用技術將每個新例化的部件放入它自己的單獨的進程中。例如,對于每個將被運行的應用,創建新的進程并把所述應用放入其中,通過安全進程邊界將所述應用與其它第三方部件以及系統部件分離。然而,存在與每個進程有關的大量開銷。其包括與創建和消除進程有關的存儲器和處理時間,以及與在進程內通信所需的處理相比,用于沿著進程邊界發送消息所需的額外處理。因此,為每個新應用創建進程是效率非常低的。通常,部件將具有表示它們自己對于特定系統操作而言是可信賴的證明(諸如不能由惡意冒名頂替者逼真地復制的密碼簽名)。在其它情況下,可將兩個或更多的部件看作對于彼此而言是可信賴的,但是它們對于敏感系統服務而言不是可信賴的(例如,可由相同的第三方發行人或發售者對部件A和部件B兩者進行密碼地簽名,但是系統自身并不必信任所述發行人),在這種情況下,最好是將所述兩個部件都放入單個的進程。將這些可信賴的對象均劃分到它們自己的進程中會非常浪費系統資源,并且會降低系統的整體性能。
用于將許可準予進程的策略和方法很重要,這是因為在進程內運行的代碼僅可在系統準予代碼這樣做的許可的情況下訪問所述進程外部的資源。如果將代碼劃分到進程中的過程建立了“規則”(即,這種部件僅可訪問那些在相同進程中可用的其它部件),則將許可準予進程的過程建立了對所述規則的“例外”(即,除了這些特定的系統服務,所述進程中運行的代碼有進行使用的許可)。在許多系統中,這是使用用于存儲所有安全認識、訪問控制數據等的中央存儲庫來實現的。例如,如果系統服務需要處理請求,它可詢問中央授權機構請求者是否具有訪問所述服務的許可。這一設計需要對所有全系統安全策略、安全的部件和實現所述策略的中央授權機構之間的數據和策略副本的大量集中認識,以及中央授權機構和系統中的對象之間的固定通信,這兩者在動態、可升級、開放系統中都是不合乎需要的。
此外,在多數系統中,以相對于進程靜態的方式對這種許可進行定義和追蹤。例如,在這樣的系統中,將部件設計為存在于它自己的專門進程中,并且所述部件將聲明對所述進程的約束,而不是對部件的約束。在將部件更加動態地劃分到進程中的系統中,優選的是,在部件級別定義安全策略。這將允許使用每個部件的信息較好地作出劃分決定,并將允許可共同操作的部件的網絡以分布方式定義它們的安全策略,從而大大消除了對集中式以及與它有關的額外開銷的需要。
本領域需要的是這樣一種方法,通過所述方法,可基于系統自身和在其中運行的彼此相關的部件的安全要求將部件劃分到進程中,從而,可在最小化與進程和交叉進程邊界有關的低效率的同時實現期望的保護。此外,在存在第一方法并且基于動態標準將部件分布到進程中的環境中,所需要的是這樣一種方法,所述方法允許由在系統中運行的部件以分布方式定義安全策略,二者都用于將劃分決定通知給進程,并且允許以輕便和可升級的方式實施對應用特定的安全策略。
發明內容
本發明另外的特點和優點將在下面的描述中進行闡述,并將部分地通過所述描述變得明顯,或者將通過本發明的實施而被了解。可通過在所附權利要求中具體指出的方法、手段及其組合來實現和獲得本發明的特點和優點。通過下面的描述和所附權利要求,本發明的這些和其它特點將變得更加清楚,或者可通過在這里闡述的本發明的實施來了解本發明的這些和其它特點。
本發明解決現有技術中對改進的系統和方法的需要,所述系統和方法用于在計算設備的圖形子系統和操作系統中提供對象的安全模型以及模型的實施。本發明包括下述系統、方法和計算機可讀介質,其結合對于對象接口的使用以及使用作為對象周圍的保護邊界使用進程所實現的動態保護域的安全實施,利用性能模型來提供對于對象和部件的安全和訪問控制。
本發明的方法方面涉及一種統一、流線的和靈活的用于創建對象的過程,所述對象包含它們自己的安全策略,并且當基于它們特定的安全需要例化它們時,將它們放入保護域中。所述方法將進程邊界用作用于實施安全模型的主要安全邊界或保護邊界。安全模型利用大多數對象模型允許對象具有接口的事實。對象的接口用于確定調用者對象能夠訪問什么。因此,存在對象的性能到接口的映射。對象基于由調用者對象進行的調查和調用者察覺到的內容來確定調用者對象被準予什么權利。調用者的調查確定調用者被準予對象的哪些其它方面。
在本發明的一方面中,描述了一種用于在計算設備的操作系統中控制對于對象的訪問的方法。目標對象的接口從察覺到所述接口的存在的外部對象接收調用。在目標對象,基于第一調用來確定外部對象是否可訪問目標對象的其它接口。基于所述確定準予對其它對象的訪問。
在本發明的另一方面中,描述了一種在計算設備操作系統中保護對象的方法。確定對于對象的訪問約束。識別具有與第一對象的訪問約束相應的安全簡檔的保護域。隨后將對象放入保護域中。
為了描述可獲得本發明的上述以及其它優點和特點的方式,將通過參照在附圖中示出的本發明的特定實施例來提供對以上簡要描述的本發明的更加具體的描述。應理解,這些附圖僅描述本發明的典型實施例,因此并不認為其限制本發明的范圍,將通過使用附圖以附加的特征和細節描述和解釋本發明,在附圖中圖1是示出根據本發明優選實施例的用于移動或手持設備的操作系統的圖形子系統部件的兩個方面的示圖;圖2是根據本發明優選實施例的具有用戶界面元素、顯示服務器進程和視圖層次的移動設備的顯示器的示圖;圖3A和圖3B是渲染(render)流對象、命令的樣本流以及渲染流分支的示圖;圖4是根據本發明優選實施例的顯示服務器部件和它們與視圖層次以及物理屏幕的關系的示圖;圖5是根據本發明優選實施例的視圖對象和所選擇的用于與其它視圖通信的各種接口的示圖;圖6是根據本發明優選實施例的將性能映射到接口的進程的流程圖;圖7是示出進程中的對象以及實現動態保護域的進程之間的通道的示圖;圖8是在動態保護域中例化新的對象的進程的流程圖;以及圖9是根據本發明的計算設備的基本部件的框圖。
具體實施例方式
以下將詳細討論本發明的各個實施例。盡管討論了特定實現,但是應理解,這樣做只是為了示例的目的。本領域的技術人員將認識到在不脫離本發明的精神和范圍的情況下,可使用其它部件和配置。
本發明提供用作操作系統的圖形子系統的系統、方法和計算機可讀介質,所述操作系統主要在移動和手持設備上使用,但是也可在附圖所示的任何計算設備上運行。其它計算設備的示例包括筆記本計算機、輸入板、各種互聯網應用、以及膝上型和桌上型電腦。在優選實施例中,圖形子系統在諸如組合蜂窩式電話和PDA的手持移動計算設備上運行。
圖1是示出在本發明優選實施例中的操作系統10的圖形子系統100的兩個主要方面。所述兩個方面是繪圖(或渲染)模型方面102和傳送方面104。通常,圖形子系統是操作系統的部件,其與圖形和顯示硬件連接,向應用和系統軟件提供到所述硬件和到與圖形有關的服務的訪問,并潛在地對到多個應用之間的圖形硬件的訪問進行復用。
繪圖模型方面102定義高度表現的語言。它允許圖形子系統程序員使用包括路徑填充和劃線的原始繪圖命令來描述圖像,并應用彩色、混合、剪貼等的調整。將渲染明確地建模為目標區域內的每個像素的值的清晰度。繪圖語言提供少量的圖元以修改當前像素值,所述圖元包括兩種基本類型的圖元參數繪制操作(路徑定義)和光柵繪制操作(位塊傳送(blitting))。通過合成多個操作來實現更復雜的渲染。本發明的渲染模型的其它性能包括任意路徑填充、alpha混合、消除混疊、任何二維和彩色空間轉換、線性彩色漸變、帶有可選雙曲線縮放的位圖渲染、基于區域的剪貼和普通彩色調整(從Boolean剪貼到空間彩色調整)。可從低端設備中去除繪圖模型的部件。例如,可去除部件,從而不支持普通彩色調整、消除混疊或其它這種在小功率硬件上計算花費較高的操作。另一方面,可將模型配置為得益于全三維硬件加速器。繪圖模型方面102還定義由客戶機用來表示繪圖語言中的命令的繪圖API。
傳送方面104能夠將繪圖命令從它們通過對繪圖API的調用被表示的地方,諸如客戶機進程內,傳送到它們被執行的地方,典型地在服務器進程內。傳送方面104解決異步操作問題。例如,它解決以下的問題由顯示服務器控制的屏幕或顯示器如何能夠復用繪圖并更新來自不同客戶機進程的命令,并且如果顯示服務器確定合成的圖像將相同,則可選地不按照順序執行所述命令。
由顯示服務器的多個同步客戶機發出的繪圖命令通常不是嚴格按照順序排列的,即,它們通常可按照不同的順序執行,并獲得與按照由客戶機指定的順序執行它們時相同的圖像。例如,在優選實施例中,圖形子系統100的傳送方面104和繪圖模型方面102負責保證關于以A到B到C的順序指定的繪圖命令組A、B和C,A必須在C之前執行,但是應允許B在任何時間繪圖,其中,C中的命令覆蓋由A繪制的區域,并且B繪制不受A或C影響的區域。這在以下情況中非常有用A、B和C由不同的客戶機進程發出,負責A的客戶機較慢,被阻止或者已經崩潰,而負責B的客戶機準備好繼續處理。傳送方面104還使得顯示服務器能夠與視圖的分布式層次通信,其中,每個視圖具有屏幕的特定部分的部分或全部所有權,所述特定部分即為顯示器的所述部分中的實際像素。
圖2是示出移動設備的顯示器204、顯示服務器進程202和視圖層次206的示圖,其中,所述顯示器具有元素204a、204b和204c。顯示服務器進程202控制在屏幕204上顯示的用戶界面的圖形特點,即,顯示哪些元素以及如何顯示它們。顯示服務器202與包括多個視圖的視圖對象層次206通信,所述多個視圖按照與根視圖208的父子關系排列,根視圖208可區別于其它視圖的地方在于它是與顯示服務器直接通信的唯一視圖。傳送方面104使得顯示服務器202能夠對來自潛在地分布于不同客戶機進程的不同視圖的繪圖命令進行復用,并按照適當的順序或按照顯示服務器確定為合適的順序來執行它們。
使用起傳遞通道作用的對象將繪圖命令從客戶機視圖傳送到負責圖形渲染的顯示服務器。這些稱為渲染流的對象是傳送方面104的特點。圖3A是渲染流對象302和命令304的樣本流的示圖。渲染流302將命令304從一個或多個客戶機進程中的一個或多個客戶機(諸如視圖)傳送到服務器進程中的顯示服務器。在優選實施例中,渲染流302是由顯示服務器202例化的對象,并執行為單向管道,所述單向管道將命令從客戶機視圖中它們被表示的地方傳送到顯示服務器中它們被執行的地方。客戶機視圖和顯示服務器可在不同的進程中,或者假設在必要的情況下采取了適當的安全措施,或者如果已知系統部件是可信賴的,則所述客戶機視圖和顯示服務器可在相同的進程中分離。在優選實施例中,當沿著進程邊界傳送時,在將在渲染流中表示的繪圖命令傳送到顯示服務器之前,對其進行緩沖,以獲得更高的效率。可存在多個從視圖到顯示服務器的活動渲染流。
所有類型的繪圖命令可在渲染流302中傳送。在優選實施例中,例如moveto、lineto、closepath、fill<color>、stroke<color>等的命令類似于Postscript命令。在優選實施例中,渲染流有助于以一個方向傳輸命令或諸如像素、調整數據等的任何其它數據。典型地不需要直接響應的命令最適合使用渲染流進行傳送。
繪圖模型方面102可獨立于任何渲染流來實現它的功能。例如,如果繪圖命令的目的地是本地的,諸如位圖,而不是手持設備的屏幕,則繪圖模型不需要使用渲染流(盡管它會使用傳送方面104的其它特點)。在繪圖模型獨立于渲染流工作的情況下,使用相同的繪制模型API。然而,取決于具體情況,可理解將命令渲染到本地表面,或者可將其傳送到其它地方的顯示器。
在優選實施例中,當顯示服務器要求客戶機視圖刷新屏幕時,發生由客戶機視圖進行的繪圖。當負責屏幕上的特定區域的像素的視圖無效或“變臟”或由于任何原因需要重新繪制的時候,進行上述處理,所述原因例如,在發生某些動作或狀態改變之后,其中,所述動作或狀態改變的發生改變了一個或更多可視部件的外觀,或向層次添加了視圖或從中去除了視圖。響應于更新事件,視圖將繪圖命令發送到顯示服務器,從而所述服務器可根據所述命令改變那些像素。在優選實施例中,這是視圖可繪制到屏幕的唯一機制。
包括由顯示服務器進行的請求和客戶機產生的合成的繪圖的事件的序列被稱為更新周期。顯示服務器通過將更新事件發送到根視圖來啟動這種周期,所述根視圖隨后如所需要的那樣在整個視圖層次中分布所述事件,以啟用視圖進行繪圖,并組成最終的圖像。當顯示服務器工作在與一個或更多客戶機視圖不同的進程或設備中,或者當存在相對于彼此異步操作并結合在相同視圖層次的多個視圖系統時,在更新周期期間使用渲染流將渲染命令從客戶機視圖傳送到所述顯示服務器。如下所述,這些結合的視圖系統通過使用視圖布局根對象而相對于彼此異步。
本發明的圖形子系統允許通過每個視圖在單個視圖系統內的層次中同步跟隨它的前輩的繪圖來順次執行更新,或者通過相對于彼此異步操作的多個系統并列地執行更新。以上處理能夠實現部分原因是由于渲染流到分支的能力。分支是這樣一種過程,通過該過程,創建支流或分支渲染流,并將其傳遞到兒子視圖以在該兒子選擇的某后面的點進行繪圖(即,相對于執行分支操作的父親視圖異步),同時,繼續同步地使用原始渲染流或父親渲染流以傳送由父親視圖表示的隨后的繪圖命令。
圖3B示出渲染流分支。例如,包括層次206中的一個或更多視圖的客戶機進程可具有它想要在屏幕上繪制的應用用戶界面。顯示服務器基本控制將什么顯示在屏幕上,客戶機視圖具有描述期望的圖像所需要的信息,所以,顯示服務器需要用來從所述視圖接收繪圖命令的渲染流。在優選實施例中,顯示服務器例化渲染流并將其連同更新事件一起傳遞給根視圖208,啟動了更新周期。將繪制應用的影響所必需的命令分為三個序列A、B和C,通過組成應用的視圖的子集來產生每個序列。產生序列A并將其放入原始渲染流306中,其后,從原始渲染流306中分出渲染流308,并將其給予產生序列B的視圖的子集,所述序列B將用于表示和傳送這些命令。接著,產生序列C并將其放入原始渲染流306中。由此,在組A中的命令被表示(盡管可能已經進行緩沖但是還沒有必然被傳送)之后但是組C中的第一命令被表示之前的某個時刻,從渲染流306分出渲染流308。在渲染流306中傳送的數據包括來自序列A的命令、渲染流308的標記、以及來自序列C的命令。渲染流308中的命令來自序列B,當這一渲染流將繪圖命令返回到顯示服務器時,它使用標記B來識別自身。
分支的每個動作造成由顯示服務器重新排序的可能性。因此,在所述方案中,分支已造成渲染流308中的命令可與渲染流306中的命令同時執行或不同順序執行的可能。可使用多個處理器或硬件加速器來使用實際的并列執行,或者可通過對發送到單個圖形加速器的命令重新排序來達到更大的效率。顯示服務器并列地從渲染流306和308接收這些命令,并基于命令被表示的順序和命令之間的依賴關系來決定將執行所述命令的實際順序。
圖4是顯示服務器部件和它們與視圖層次以及物理屏幕的關系的示圖。顯示服務器202控制屏幕,并且是具有到屏幕的直接訪問的唯一實體。將圖形驅動器分為兩個部件驅動器402,其提供到圖形硬件寄存器的完全訪問并駐留在I/O子系統或主機操作系統的內核中;圖形加速器404,其駐留在顯示服務器202中,并提供到幀緩沖器的映射存儲器的訪問,以及到由圖形加速硬件實現的任何圖形功能的訪問。顯示服務器包括圖形加速器;低級別渲染406(也稱為mini-GL),其負責區域填充和像素操作;以及高級別渲染器408,其提供存儲器緩沖管理,繪制諸如劃線的路徑處理,渲染狀態管理等。
顯示服務器202僅具有一個視圖,即,根視圖208的明確認識。在顯示服務器看來,根視圖208負責處理整個屏幕的事件(包括輸入和更新事件)。在簡單的設備上,根視圖實際上可以是唯一的視圖。如果存在僅使用一個視圖的單個進程并且沒有視圖的重新排序,則設計的復雜程度銳減為顯示服務器和視圖層次之間的簡單代碼路徑,這對于較弱的硬件非常高效。在具有更高級的硬件和用戶界面的設備上,根視圖將它對于處理的更新和輸入事件的責任分布到視圖的層次。
圖5是基本視圖對象502的示圖,視圖對象502具有三個分離的界面,稱為IView 504、IViewParent 506和IViewManager 508。所述視圖層次通過訪問彼此上面的所述界面的層次內的父親和兒子的相互作用來工作。IView 504允許處理視圖的核心狀態和特性,并且允許將其自身添加到另一視圖作為兒子,諸如兒子視圖510。IView 504是父親在它的兒子上看到的界面。通過每個父親視圖訪問它的兒子的IView 504界面,輸入、更新、布局和其它事件類型沿著從顯示服務器到葉視圖的層次向下傳播,所述視圖依次(同步或異步地)訪問它們自己的兒子的IView 504界面,依此類推。IViewParent 506界面是兒子在它的父親上看到的界面,諸如父親視圖512,并且其可用于沿著所述層次向上傳播事件,諸如無效事件或對于將被執行的布局的請求。IViewManager 508是兒子視圖將在它的父親上用來處理它的同輩的界面,或者是第三方代碼段用來向視圖添加兒子或從中去除兒子的界面。
實施視圖層次的弱耦合部分原因是由于將所述界面中的特定界面對于訪問特定的其它界面的調用者隱藏起來。例如,用于視圖的默認安全策略(其可由每個視圖隨意地推翻)是最初給予它的父親的IViewParent 506界面的兒子不能將IViewParent 506轉換為IView 504界面。視圖自身存儲諸如空間2D變化的狀態,所述狀態將應用于所述視圖的繪圖,對它的父親的引用等。
在圖6和圖7中描述類似于性能的安全模型,其在一組活動對象之間建立對等式信任網絡。所述安全模型允許系統中的每個對象聲明它自己的安全策略,并允許通過由每個單獨的對象應用每個策略來隱含地動態建立信任網絡。
性能安全模型基于一組簡單的原理。其中的首要原理是最小權力原理,其規定如果對象僅需要訪問資源(或性能)A,以便執行它的任務,則應給予它僅對于A的訪問,而不給予,例如,對于如B和C的任意其它性能的訪問。此外,如果對象確定它需要性能D,則它必須明確地使用另一性能來請求D,所述另一性能允許并可準予所述請求。
許多對象模型和面向對象的編程語言允許使用它們定義的對象暴露或公開在其上工作的一個或更多定義好的接口。對象公開的每個接口定義一組可被發送到對象的消息,或可在其上調用的方法。在多數基于接口的對象模型中,想要使用對象的客戶機必須首先通過檢查所述對象并請求期望的接口來獲得對所述對象的接口的引用,然后進行方法調用或將消息發送到所述接口。這種接口通常是準予對所述對象的訪問的最小粒度。
在本發明的優選實施例中,通過以下操作來定義并實現安全策略請求使用所述對象的已知的定義好的接口來進行對給定接口的對象的任何請求,在這種關于使用哪個接口進行請求的請求的時間通知對象,允許每個對象在各種因素中基于正使用哪個接口進行請求來自定義它們公開的接口,并且當由另一進程或裝置內的對象引用或使用所述接口時(換言之,當沿著安全邊界對接口執行方法調用或消息傳遞時),將每個對象接口映射到它自己的類似于性能的安全通信通道。
當對象(“調用者”對象)想要請求另一對象(“被調用者”對象)的接口B時,必須使用調用者已經通過某種方式獲得的所述被調用者的某接口A來進行請求。例如,可在通過創建對象創建接口A的時候將其提供給所述調用者,或者可通過調用者與另一對象的相互作用來請求所述接口A。所述被調用者對象將接收對于B的請求,并將在使用接口A進行所述請求的時候被通知。基于這一認識,關于被調用者是否實現接口B,以及被調用者想要定義的任何其它策略,被調用者可決定是否向調用者提供其所請求的接口B。
此外,使用接口進行的其它調用或交換的消息(即,那些不執行接口檢查請求的)可自身返回由被調用的對象或任何其它對象公開的接口。通過每個這種相互作用,即,明確的接口檢查或由一個對象與另一對象共享對第三方的接口的引用,對等對象的網絡中的信任網絡被漸進和動態地定義。這種信任網絡定義給定對象所許可的操作的范圍。例如,如果調用者對象引用被調用者對象的接口A,則它可容易地獲得對被調用者上的任何其它接口的訪問(因此應看作訪問被調用者上的任何其它接口),所述調用者對象可通過接口A進行接口請求來獲得對上述任何其它接口的訪問,并且其可訪問所述被調用者可訪問并可通過A變得可用的其它對象上的接口。
每個對象所作出的關于如何,何時以及與誰共享它自己的接口或另一對象的接口的決定取決于特定對象實現,并且可依賴于所述對象決定考慮的任意數量的因素。在本發明的優選實施例中,用于確定調用者可成功請求被調用者的哪些接口的主要或唯一因素僅僅是使用哪個接口進行請求。盡管可由任何特定對象使用諸如密碼簽名、密碼保護和用于檢驗的其它因素來建立基于特定情況需要的專門規則,但是使用這些類型的因素將需要聯系中央授權機構或者將需要將對調用者執行的特定測試以確定調用者是否具有必要的許可。如果對象在它的接口之一上得到調用,則所述對象由于調用對象首先已引用所述接口而知道所述調用對象具有進行此次調用的授權或許可。在任何給定對象的優選實施例中,關于哪個接口用于請求另一接口的認識是確定哪些接口響應于所述請求而被暴露,并由此建立信任網絡所需要的所有信息。因此,使用中央授權機構對每個對于對象接口的調用進行恒定許可檢查是不必要的。
可通過將對象的功能分為接口來建立安全策略,所述接口定義按照訪問服務所需要的許可的級別或類型分組的服務的類別。例如,對象可具有準予最小訪問的接口,并可將這一性能給予不能必然地完全信任的對象,并且所述對象可將準予對所有性能的全部訪問的其它接口給予可信任的其它對象。
如圖5所示,在優選實施例的示例中,圖形視圖對象具有三個接口IViewManager、IViewParent和IViewChild。這種視圖的層次通過在訪問彼此上的這些接口的層次之內的父親和兒子的相互作用進行操作。
視圖的默認安全策略(可由每個視圖對象按照期望來推翻)是IViewManager和IViewParent(即使由對象實現)均暴露于使用接口IView進行的任何請求,但是所述IView對于使用另外兩個接口進行的任何請求而言是隱藏的(即,使用IViewManager或IViewParent接口對于IView接口的請求將失敗),并且IViewParent對于IViewManager而言是隱藏的。換言之,使用IView接口請求視圖的接口的調用者將能夠獲得IViewParent和IViewManager兩者,使用IViewParent請求接口的調用者將能夠獲得IViewManager,通過IViewManager請求接口的調用者將得不到另外的接口。
所述接口中的每一個準予獲得對它的引用的任何對象特定的一組許可,設計這一默認視圖安全策略是基于以下假設視圖本質上擁有它的兒子并能夠按照期望來處理它們,但是兒子通常不能夠直接控制或處理它的父親。父親具有每個兒子的IView接口,由此可完全控制每個兒子,這是因為它可訪問兒子的所有已知接口。但是,因為當兒子視圖添加到層次時,僅將它的父親的IViewParent接口給予它,所以它不能夠獲得父親的IViewParent接口,IViewParent接口將允許它例如,移動它的父親或調整父親的大小,并且兒子視圖也不能夠獲得諸如對它的父親的父親的引用的其它信息。這使得兒子對于層次中它之上的視圖僅能夠給予間接影響,如同通過受限的IViewParent接口提供的影響。對于具有特定需要的特定對象,父親視圖可決定是否響應于在IViewParent接口上進行的請求提供IViewManager接口,這將影響準予或拒絕給予它的兒子用于獲得直接訪問以處理它的同輩的許可。這一許可可以在某些情況下起到作用,而在其它情況下沒有意義,所以每個對象可按照它覺得適宜的方式來推翻默認策略。
遵守這一策略將允許視圖層次在保持安全性的同時,不需要專用接口,就可以在許多進程間交互,并以統一的方式沿著層次向上和向下傳播消息。
圖6是根據本發明的優選實施例的對象基于接口調用確定安全訪問的進程的流程圖。在步驟602,目標對象在它的接口之一從外部對象接收調用。例如,目標接口可具有三個接口A、B和C,每一個準予對目標對象的功能的不同程度的訪問。接口A準予最高程度的訪問,而接口C準予最低程度的訪問。在步驟604,目標對象通過檢查它自己的安全策略來確定是否允許外部對象訪問其它接口。在優選實施例中,目標對象不使用存儲系統中所有對象的安全數據的中央授權機構來進行檢查。如果外部對象在接口A上進行調用,則目標對象可確定外部裝置可訪問接口B和C。在步驟606,目標對象將訪問準予外部對象以允許它訪問如在步驟604確定的其它接口。
以上描述的是對象如何運作并在不考慮它們所存在的進程的情況下定義安全策略。例如,調用者和被調用者對象可處于相同或不同的進程中。在寫代碼的時間或定義安全策略的時間,不必要知道對象在各個進程中分布的策略或模式。寫代碼時假設將由系統可靠地實施如通過接口檢查定義的對象之間的隱含安全策略。
然而,以上描述僅提供了用于定義安全策略的機制。存在實施這種模型的各種方法,包括存儲器保護和基于語言的安全。在優選實施例中,一種這樣的實施方法將必須保護的對象彼此分離,以進入分開的進程。
在本發明的優選實施例中,當一個進程中的對象獲得不同進程(相同裝置或不同裝置上的)中的對象上的接口時,建立這些進程之間的安全通道,并將其與所述接口引用關聯。對于一個進程中的特定對象上的每個單獨的接口,如果另一進程包含持有所述接口上的引用的對象,則在所述一個進程和所述另一進程之間存在單獨的安全通道。這一安全通道用于將特定接口上的消息和方法調用從一個進程發送到另一進程,并將任何結果值返回到調用者。這示于圖7中。因此,如果進程704中的對象702具有接口706,并且由進程710中的對象708和進程718中的對象712、714和716持有對對象706的引用,則存在兩個安全通道進程704和進程710之間的一個安全通道720,以及進程718和進程704之間的另一安全通道722。對于來自相同遠程進程的給定對象上的給定接口的所有調用或相互作用將通過相同的安全通道進行路由。
每當第一次與特定遠程進程共享接口時,按照需要隨選地創建這些安全通道。使用這些安全通道允許確保對象當請求從遠程進程到達時,授權調用者通過具有對接口的引用來進行請求,并且可以可靠地識別進行請求的所述接口。只有當如圖7中的虛線所示,在兩個通信對象之間存在進程邊界時,才創建安全通道。如果對象想要調用相同進程中的另一對象,則直接引用并調用所述對象,而不需要使用安全通道。這使得對象之間的本地通信的情況非常快速。
當由對象本身建立的安全策略(如上詳述)總是有效時,將對象分離到不同的進程,即,由此實施用于在它們之間交換消息、數據和接口引用的安全管道的使用,是一種實施安全策略的可靠方式。目的是保護對象不受惡意或錯誤代碼的危害,并保護現有對象不受惡意或錯誤代碼的危害。但是實施安全策略會牽扯到大量的性能和存儲器使用。例如,如果給予系統中的每個對象它自己的進程,則結果產生的額外開銷將是不可接受的。然而,在基于進程并使用硬件存儲器保護實現的實施方案中,如果對于系統中的每個對象均需要安全策略的嚴格實施,則需要這么做。因此,令人滿意的情況僅當這種實施被認為是必要的時,才引用這些策略的實施。
有各種理由可認為安全策略的實施不必要。例如,如果在對象的網絡之內彼此相互作用的所有部件由相同的發售者制造,則它們將對于彼此構成惡意危害的可能性很小,因此,不需要將它們彼此保護。另一示例是具有相同安全約束和許可的兩個或更多其它方面不相關的對象(諸如不處理敏感或私人數據的兩個普通的第三方應用)。在以上兩種情況中,將一組對象聚集成普通進程與每個對象具有一個進程相比將大大減少存儲器額外開銷,并且對象本身將能夠非常有效地相互作用,而不需要創建用于在接口之間路由消息的安全通道。例如,當沒有因為信任的覆蓋擴展到由相同發售者公開的所有對象而推翻這種劃分時,進行這種劃分是非常明智的。
在本發明的優選實施例中,通過允許系統在創建時間將對象分配到稱為動態保護域的不同域中,來選擇性地實施安全模型。這示于圖8中。在步驟802,調用者確定它需要例化新的對象。設計對象例化功能,其中,調用者請求例化或創建對象,如步驟804所示。請求設置以下內容,在系統確定為最適當的動態保護域內創建正例化的對象。在步驟806,例化功能基于由系統中的活動對象聲明的諸如安全約束和要求的各種安全因素來創建對象,以及所述系統愿意進行的關于安全相對于性能以及最佳資源利用的任何折衷選擇。在步驟808,將對象放入現有動態保護域或新的保護域中,以通過進程的優選實施例來實現。如果認為必要的話,系統還可創建新的動態保護域,以主管新創建的對象。
從所述例化功能返回的對象可以是對在遠程保護域中創建的遠程對象上的接口的引用(例如,如果新創建的對象需要訪問創建者沒有訪問的許可的敏感數據),或者它可以是相同進程內的本地對象(例如,如果新創建的對象由創建者已經聲明它信任的公開者進行密碼地簽名)。因為創建者使用上述討論的接口抽象功能,所以它不需要根據結果產生的對象是本地創建還是遠程創建的來有區別地知道或運作。用于作出這些決定的約束、策略和要求是特定的實現,并且可隨著不同的裝置變化。在本發明的優選實施例中,將動態保護域實現為進程。
基于保護策略將對象聚集為保護域,但是在仍舊遵守所述策略的同時將所述對象放置為盡可能地“靠近”調用者或調用者指定的代表。換言之,如果在不違背安全考慮的情況下可將對象創建于與它相互作用的那些對象相同的進程中,則就按此處理。
在優選實施例中,在視圖層次,父親視圖可例化“插入式”兒子視圖對象,而不需要具有所述部件進行什么操作或發售者向其提供什么的先驗認識。基于父親、父親的進程、系統和兒子的安全約束和策略,系統可確定是否將兒子部件載入父親的進程(其將允許最大性能),是否創建用于兒子生存的新的進程(其將提供最大保護),是否將所述新的兒子放入恰好符合兒子的安全需要并且不包含持有私人信息的對象的某些其它的現有進程(這將提供父親和系統的良好的安全級別以及強健性,同時不需要全新的進程來僅服務于單個的兒子視圖對象)。例如,這允許視圖層次脫離協同運作的第三方代碼段而動態地被建立,不需要任何一個部件已知層次配置,但是仍舊允許在表示需要保護的那些部件之間保持所述的保護。
因為上述本發明的一實施例涉及硬件設備或系統,所以以下討論與計算設備有關的基本部件。
圖9和相關的討論意在提供對于可實現本發明的適當的計算環境的簡要和總體描述。盡管不是必需的,但是至少部分在諸如程序模塊等由個人計算機或手持計算設備執行的計算機可執行指令的一般情形中描述本發明。通常,程序模塊包括例行程序、對象、部件、數據結構等,它們執行特定任務或實現特定抽象的數據類型。此外,本領域的技術人員將認識到,可以用其它計算機系統配置來實施本發明,所述計算機系統配置包括手持設備、多處理器系統、基于多處理器或可編程的消費電子設備、網絡PC、迷你計算機、大型計算機、通信設備、蜂窩式電話、輸入板等。還可在由通過通信網絡鏈接的遠程處理設備來執行任務的分布式計算環境中實施本發明。在分布式計算環境中,程序模塊可位于本地和遠程存儲裝置設備中。
參照圖9,實現本發明的示例性系統包括通用計算設備9,其包括中央處理單元(CPU)120、系統存儲器130和系統總線110,其將包括系統存儲器130的各種系統部件連接到CPU 120。系統總線110可以是以下幾種總線結構中的任何一種,包括存儲器總線或存儲控制器、外圍總線、以及使用各種總線結構中的任何一種的本地總線。系統存儲器130包括只讀存儲器(ROM)140和隨機存取存儲器(RAM)150。基本輸入/輸出(BIOS)包含有助于在諸如啟動期間幫助在個人計算機9內的部件之間傳送信息的基本例程,并存儲在ROM140中。計算設備9還包括用于讀出和寫入數據的諸如硬盤驅動器160的存儲設備。所述存儲設備可以是磁盤驅動器160或光盤驅動器,其中,磁盤驅動器用于從可移除磁盤讀取或向其寫入,光盤驅動器用于從諸如CD ROM或其它光介質的可移除光盤讀取或向其寫入。驅動器和有關計算機可讀介質提供計算機可讀結構、數據結構、程序模塊和計算設備9的其它數據的非易失性存儲器。
盡管這里描述的示例性環境使用硬盤、可移除磁盤和可移除光盤,但是本領域的技術人員應理解,在示例性操作環境中還可使用可存儲計算機可訪問的數據的其它類型的計算機可讀介質,諸如磁帶、閃速存儲卡、數字視頻盤、Bernoulli盒式磁帶、隨機存取存儲器(RAM)、只讀存儲器(ROM)等。
圖9還示出與總線110通信的輸入設備160和輸出設備170。輸入設備160操作為多媒體數據或其它數據的源,輸出設備170包括顯示器、揚聲器、或部件的組合作為多媒體數據的目的地。設備170還可表示從諸如視頻攝錄機的源設備160接收并記錄數據的記錄設備。通信接口180還可提供與計算設備9的通信方式。
可認識到,提供硬件部件的上述描述僅作為示例。例如,基本部件可在桌上型計算機和手持或便攜式計算設備之間變化。本領域的技術人員可理解如何基于實施本發明的硬件設備(或聯網的計算設備的組)來修改或調整基本硬件部件。
本發明的范圍之內的實施例還可包括用于攜帶或具有存儲其中的計算機可執行指令或數據結構的計算機可讀介質。這種計算機可讀介質可以是通用或專用計算機可訪問的任何可用的介質。作為示例,但并非限制,這種計算機可讀介質可包括RAM、ROM、EEPROM、CD-ROM或其它光盤存儲器、磁盤存儲器或其它磁存儲設備、或用于攜帶或存儲期望的程序代碼方式的其它任何介質,其中,所述程序代碼方式的形式為計算機可執行指令或數據結構。當通過網絡或另一通信連接(硬連線、無線或其組合)將信息傳送或提供到計算機時,計算機適當地將所述連接看作計算機可讀介質。因此,可適當地將任何這種連接稱為計算機可讀介質。上述內容的組合應包括在計算機可讀介質的范圍之內。
計算機可執行指令包括,例如,指令和數據,其促使通用計算機、專用計算機或專用處理設備執行特定功能或功能組。計算機可執行指令還包括有單機或網絡環境中的計算機執行的程序模塊。通常,程序模塊包括例程、程序、對象、部件和數據結構等,其執行特定任務或實現特定的抽象數據類型。計算機可執行指令、有關的數據結構和程序模塊表示用于執行這里公開的方法的步驟的程序代碼方式的示例。這種可執行指令或有關數據結構的特定順序表示用于實現以這樣的步驟描述的功能的相應動作的示例。
本領域的技術人員將認識到,可在具有多種類型的計算機系統配置的網絡計算環境中實施本發明的其它實施例,所述計算機系統配置包括個人計算機、手持設備、迷你處理器系統、基于微處理器或可編程的消費電子設備、網絡PC、迷你計算機、大型計算機等。還可在分布式計算機環境中實施實施例,在所述分布式計算機環境中,由通過通信網絡鏈接(通過硬連線鏈接、無線鏈接或通過它們的組合)的本地和遠程處理設備執行任務。在分布式計算環境中,程序模塊可位于本地和遠程存儲器存儲設備中。
盡管上述描述會包含特定細節,但是不應在任何方面將它們解釋為限制權利要求。本發明的所描述的實施例的其它配置是本發明的范圍的一部分。例如,對象可使用除對象模型的接口之外的性能可匹配的特點。在另一示例中,可通過除進程之外的諸如存儲器保護或基于語言的安全的系統部件來定義保護域。因此,應僅由所附權利要求及其等同物,而不是任何給出的具體示例來限定本發明。
權利要求
1.一種用于在操作系統中控制對于對象的訪問的方法,所述方法包括從外部對象接收對于目標對象的第一接口的調用;在目標對象,基于所述對于第一接口的調用來確定外部對象是否可訪問目標對象的其它接口;以及根據所述確定準予對所述其它接口的訪問。
2.如權利要求1所述的方法,其中,確定外部對象是否可訪問目標對象的其它接口的步驟還包括檢查包含在目標對象之內的安全策略。
3.如權利要求2所述的方法,其中,安全策略完全包含在目標對象之內。
4.如權利要求1所述的方法,還包括確定外部對象和目標對象是否操作于相同的進程中。
5.如權利要求1所述的方法,其中,確定外部對象是否可訪問目標對象的其它接口的步驟還包括當由外部對象請求第一接口時識別可被訪問的目標對象的其它接口。
6.如權利要求1所述的方法,還包括確定目標對象的第一進程。
7.如權利要求6所述的方法,還包括確定外部對象的第二進程。
8.如權利要求7所述的方法,還包括在目標對象和外部對象之間執行交叉進程通信。
9.如權利要求1所述的方法,還包括保護目標對象的每個接口的通道。
10.如權利要求1所述的方法,其中,確定外部對象是否可訪問目標對象的其它接口的步驟還包括分析目標對象之內的訪問約束。
11.如權利要求1所述的方法,還包括分析存儲在目標對象之內的接口訪問數據。
12.如權利要求1所述的方法,還包括確定目標對象和外部對象是否在相同的保護域中。
13.如權利要求12所述的方法,其中,保護域是進程。
14.如權利要求1所述的方法,其中,目標對象設置它自己的安全策略。
15.如權利要求1所述的方法,其中,確定外部對象是否可訪問其它接口的步驟還包括確定外部對象的性能。
15.如權利要求14所述的方法,還包括將外部對象的性能映射到目標對象的接口。
16.如權利要求1所述的方法,其中,使用相同的方法創建目標對象和外部對象。
17.如權利要求1所述的方法,其中,目標對象和外部對象是視圖層次中的視圖。
18.如權利要求17所述的方法,其中,視圖具有調用接口的父親、調用接口的兒子和管理接口的兒子。
19.一種用于在操作系統中控制對于對象的訪問的系統,所述系統包括配置為從外部對象接收對于目標對象的第一接口的調用的模塊;配置為基于在第一接口接收的所述調用來確定外部對象是否可訪問目標對象的其它接口的模塊;以及配置為根據所述確定準予對于所述其它接口的訪問的模塊。
20.一種用于在操作系統中控制對于對象的訪問的系統,所述系統包括用于從外部對象接收對于目標對象的第一接口的調用的裝置;用于在目標對象基于對于第一接口的所述調用來確定外部對象是否可訪問目標對象的其它接口的裝置;以及用于根據所述確定準予對于所述其它接口的訪問的裝置。
21.一種存儲用于控制計算機設備以在操作系統中控制對于對象的訪問的指令的計算機可讀介質,所述指令包括從外部對象接收對于目標對象的第一接口的調用;在目標對象,基于所述對第一接口的調用來確定外部對象是否可訪問目標對象的其它接口;以及根據所述確定準予對所述其它接口的訪問。
22.一種用于在計算機設備操作系統中保護對象的方法,所述方法包括確定第一對象的一個或更多訪問約束;識別具有與第一對象的一個或更多訪問約束相應的安全簡檔的保護域;以及將第一對象放入所述保護域中。
23.如權利要求22所述的方法,還包括使用相同的方法創建第一對象和第二對象。
24.如權利要求23所述的方法,其中,第一對象和第二對象可在兩個或更多保護域上透明地進行通信。
25.如權利要求22所述的方法,其中,保護域是進程。
26.如權利要求22所述的方法,還包括創建對象到對象的安全模型,其中,對象的安全約束包含在所述對象之內。
27.如權利要求22所述的方法,其中,識別保護域的步驟還包括嘗試識別相對于第一對象為本地的保護域。
28.如權利要求22所述的方法,還包括基于操作系統的安全要求創建進程。
28.如權利要求28所述的方法,還包括基于對象的安全策略將所述對象聚集在進程中。
29.一種用于在計算設備操作系統中保護對象的系統,所述系統包括用于確定第一對象的一個或更多訪問約束的裝置;用于識別具有與第一對象的一個或更多訪問約束相應的安全簡檔的保護域的裝置;以及用于將第一對象放入所述保護域中的裝置。
全文摘要
公開了用于計算設備圖形子系統中的安全模型及實施模式的系統、方法和計算機可讀介質。描述了統一、流線和靈活的創建對象的過程,對象包含其自己的安全策略且當基于特定安全需要例化時將其放入保護域。將進程邊界用作實施安全模型的主要安全或保護邊界。安全模型利用多數對象模型允許對象有接口的事實。對象接口確定調用者對象能訪問什么。有對象性能到接口的映射。對象基于調用者對象的調查和其對對象接口的認識來確定其被授予的權利。該調查確定調用者被授予的對象的其它方面。方法方面包括目標對象接口從察覺到接口的外部對象接收調用。在目標對象基于第一調用確定外部對象是否可訪問目標對象的其它接口。基于該確定準予對其它對象的訪問。
文檔編號G06F21/00GK1947081SQ200580012263
公開日2007年4月11日 申請日期2005年2月8日 優先權日2004年2月9日
發明者喬治·E·霍夫曼, 丹尼爾·K·漢克波恩 申請人:Palm源公司