專利名稱:為計算過程授予最小特權(quán)訪問的制作方法
為計算過程授予最小特權(quán)訪問背景設(shè)備可被配置成具有控制對資源、應(yīng)用程序等等的訪問的安全基礎(chǔ)結(jié)構(gòu)。當(dāng)前在 移動設(shè)備上,基于代碼標(biāo)識,向單個應(yīng)用程序指派信任。安全基礎(chǔ)結(jié)構(gòu)確定什么應(yīng)用程序可 以在設(shè)備上運(yùn)行,什么應(yīng)用程序可以被鎖定,什么應(yīng)用程序可以在什么上下文中運(yùn)行,以及 這樣的應(yīng)用程序可以訪問什么資源。當(dāng)前信任級別包括對于未經(jīng)簽名模塊的“受信任”、“普 通”,以及“不受信任”??梢岳檬苄湃蔚淖C書或鏈接到受信任證書存儲的證書來對應(yīng)用程 序或模塊進(jìn)行簽名。在此情況下,該模塊被視為受信任的,且如此,該模塊中的任何代碼都 具有對系統(tǒng)上的全部特權(quán)API和資源的權(quán)限。信任決定基于調(diào)用者的應(yīng)用程序信任級別。然而,上文所提及的當(dāng)前安全模型存在多個問題。當(dāng)線程跨系統(tǒng)中的多個受保護(hù) 的服務(wù)器庫(PSL)服務(wù)器遷移時,調(diào)用鏈中的立即調(diào)用進(jìn)程具有訪問系統(tǒng)資源的許可是可 能的,但是,對整個調(diào)用鏈上下文的檢查可能揭示資源不應(yīng)該是可被訪問的。如果安全決 定始終只基于立即調(diào)用者的上下文,則這樣的安全無法實施。同樣,當(dāng)前安全模型不允許模 仿其中低特權(quán)應(yīng)用程序調(diào)用系統(tǒng)服務(wù)的不同身份,其中,系統(tǒng)服務(wù)被要求基于調(diào)用者的上 下文或者其自己的上下文來處理請求。更進(jìn)一步地,對于異步訪問請求,當(dāng)前安全模型不提 供在其中調(diào)用者上下文可能不是完全可用的輔助線程中進(jìn)行安全檢查。正是基于這些及其他考慮才作出了本發(fā)明。
發(fā)明內(nèi)容
提供本發(fā)明內(nèi)容是為了以精簡的形式介紹將在以下具體實施方式
中進(jìn)一步描述 的一些概念。本發(fā)明內(nèi)容并不旨在標(biāo)識出所要求保護(hù)的主題的關(guān)鍵特征或必要特征,也不 旨在用于幫助確定所要求保護(hù)的主題的范圍。提供了通過考慮當(dāng)前線程的身份以及當(dāng)前線程的調(diào)用鏈上下文來作出安全決定, 以默認(rèn)地啟用最小特權(quán)的各實施例。捕捉當(dāng)前線程上下文,并創(chuàng)建其副本,以供用來異步地 執(zhí)行安全檢查。系統(tǒng)中的每一線程都具有相關(guān)聯(lián)的身份。最初,從父進(jìn)程導(dǎo)出此身份。然 而,在線程生存期內(nèi),此標(biāo)識可能基于線程的任何模仿而變化。通過閱讀下面的“具體實施方式
”并參考相關(guān)聯(lián)的圖形,這些及其他特點(diǎn)和優(yōu)點(diǎn)將 變得顯而易見。應(yīng)該理解,前面的一般性的說明和下面的詳細(xì)描述只是說明性的,不會對如 權(quán)利要求所述的本發(fā)明形成限制。附圖簡述
圖1示出了根據(jù)本發(fā)明的一個實施例的安全標(biāo)識符(SID) 100 ;圖2示出了根據(jù)本發(fā)明的一個實施例的安全令牌結(jié)構(gòu)200的布局;圖3示出了根據(jù)本發(fā)明的一個實施例的安全描述符布局300的簡化視圖;圖4示出了根據(jù)本發(fā)明的一個實施例的訪問控制列表(ACL)400 ;圖5示出了根據(jù)本發(fā)明的一個實施例的訪問控制條目(ACE)500的結(jié)構(gòu);圖6示出了根據(jù)本發(fā)明的一個實施例的安全描述符(SD)600的結(jié)構(gòu)布局;圖7示出了根據(jù)本發(fā)明的一個實施例的線程700的令牌列表布局;
圖8示出了根據(jù)本發(fā)明的一個實施例的PSL調(diào)用800中的線程的調(diào)用堆棧列表;圖9是示出了根據(jù)本發(fā)明的一個實施例的線程900的模仿列表和調(diào)用堆棧列表之 間的鏈接的框圖;圖10示出了根據(jù)本發(fā)明的一個實施例的消息隊列系統(tǒng)1000 ;圖11示出了其中可以實現(xiàn)本發(fā)明的各實施例的計算環(huán)境。
具體實施例方式各實施例提供一安全基礎(chǔ)結(jié)構(gòu),該安全基礎(chǔ)結(jié)構(gòu)可以被配置成在現(xiàn)有操作系統(tǒng)上 運(yùn)行以控制什么資源可以被應(yīng)用程序訪問,以及應(yīng)用程序可以調(diào)用什么API。通過考慮當(dāng)前 線程的身份以及當(dāng)前線程的調(diào)用鏈上下文來作出安全決定,以默認(rèn)地啟用最小特權(quán)。捕捉 當(dāng)前線程上下文,并創(chuàng)建其副本,以用于異步地執(zhí)行安全檢查。系統(tǒng)中的每一線程都具有相 關(guān)聯(lián)的身份。最初,從父進(jìn)程導(dǎo)出此身份,但是,在線程生存期內(nèi),此身份可能基于線程執(zhí)行 的任何模仿而變化。各實施例不僅分析什么調(diào)用或應(yīng)用程序正在請求什么,而且還分析調(diào)用來自哪 里。各實施例還可以為系統(tǒng)提供開放的安全基礎(chǔ)結(jié)構(gòu),如此,最終用戶或最終操作員可以安 裝可能不處于他們自己的控制之下的不同應(yīng)用程序。如此,系統(tǒng)中的所有線程都可以默認(rèn) 地以最小的特權(quán)運(yùn)行,以基于線程被從線程沒有權(quán)限訪問的資源不正確地訪問來防止安全 問題發(fā)生。相反地,分析對特定資源的訪問、當(dāng)前線程上的所有調(diào)用者,以確保每一調(diào)用者 和線程可以訪問該資源。只有在每一調(diào)用者和線程都可以訪問該資源的情況下才給予調(diào)用 者對該資源的訪問。本發(fā)明的各實施例可以使用提供安全基礎(chǔ)結(jié)構(gòu)的數(shù)據(jù)結(jié)構(gòu)來實現(xiàn),該安全基礎(chǔ)結(jié) 構(gòu)用于控制哪些資源可以被應(yīng)用程序訪問以及應(yīng)用程序可以調(diào)用什么API。該數(shù)據(jù)結(jié)構(gòu)包 括下列元素安全標(biāo)識符(SID)、安全令牌、安全描述符(SD)、訪問控制列表(ACL),以及訪 問控制條目(ACE)。圖1示出了根據(jù)本發(fā)明的一個實施例的安全標(biāo)識符(SID) 100。SID 100是一可變 長度數(shù)據(jù)結(jié)構(gòu)110,其在系統(tǒng)內(nèi)定義唯一 ID,并指定特定線程正在在什么帳戶上運(yùn)行。SID 100也可以被視為看起來象一用戶帳戶。例如,當(dāng)某人登錄到計算機(jī)上時,可以使用適當(dāng)?shù)?登錄口令來訪問各種用戶帳戶。用戶帳戶標(biāo)識登錄到計算機(jī)的人。SID 100只是標(biāo)識線程 或過程的帳戶。SID 100只在特定設(shè)備內(nèi)是唯一的。然而,本領(lǐng)域技術(shù)人員將在分析此處對 本發(fā)明的各實施例的描述之后認(rèn)識到,可以使用全局安全標(biāo)識符。在臺式機(jī)上,可以向單個用戶帳戶、某些系統(tǒng)帳戶、以及某些用戶組指派SID 100。 注意,例如,WINDOWS CE操作系統(tǒng)中的帳戶不一定與關(guān)于臺式機(jī)WINDOWS 操作 系統(tǒng)中所使用的有相同的定義。盡管如此,本領(lǐng)域的技術(shù)人員將理解什么構(gòu)成帳戶。此處, 假設(shè)SID 100為映射到帳戶數(shù)據(jù)庫中的條目的跨整個操作系統(tǒng)——例如WINDOWS CE 操作系統(tǒng)——的唯一標(biāo)識符。帳戶數(shù)據(jù)庫中的條目指定向特定帳戶指派什么基本和擴(kuò)展特 權(quán)(也叫做SID)。圖2示出了根據(jù)本發(fā)明的一個實施例的安全令牌結(jié)構(gòu)200的布局。使用安全令牌 200來定義一組身份和指派給那些身份的特權(quán)集合。通常,安全令牌200與諸如進(jìn)程、線程、 同步之類的運(yùn)行時對象相關(guān)聯(lián),并與消息隊列中的單個消息相關(guān)聯(lián)。安全令牌200包括用于標(biāo)識結(jié)構(gòu)的版本202、標(biāo)記204、偏移量206,立即組207的數(shù)量和組ID的總數(shù)208的字 段。安全令牌200的結(jié)構(gòu)還可以存儲主要擁有者SID 210、組SID 212、基本特權(quán)214和擴(kuò) 展特權(quán)216。主要210和組212SID定義與具有此安全令牌200的對象相關(guān)聯(lián)的身份?;?14 和擴(kuò)展216特權(quán)定義對于與此安全令牌200相關(guān)聯(lián)的對象允許什么特權(quán)?;咎貦?quán)214是 對安全令牌200中指定的身份有效的一組特權(quán)。類似地,擴(kuò)展特權(quán)216是為安全令牌200 中的SID列表定義的自定義特權(quán)?;景踩钆平Y(jié)構(gòu)200具有指向安全令牌200的擴(kuò)展(可選)數(shù)據(jù)的偏移量指針 206,如與此安全令牌200相關(guān)聯(lián)的主要210和組212SID,以及與此安全令牌200相關(guān)聯(lián)的 擴(kuò)展特權(quán)216。安全令牌200中的每一單個SID 210,212用于AccessCheck API(訪問檢 查)調(diào)用中,以確定給定安全令牌200是否具有對已指定了其SD的對象的所需訪問權(quán)。同 樣,安全令牌200中的基本[[212]] 214和擴(kuò)展[[214] ] 216特權(quán)用于I^rivilegeCheck API 調(diào)用中,以確定給定安全令牌200是否具有所需的特權(quán)。將參考對此處所描述的令牌API 的討論來比較詳細(xì)地討論API和安全令牌200的使用。創(chuàng)建帳戶的字符串表示,并將該字符串表示映射到用于安全令牌結(jié)構(gòu)200中的雙 字。然后,安全令牌200是與系統(tǒng)中的讀取線程相關(guān)聯(lián)的對象。因此,每一線程都以特定安 全令牌200為開始。安全令牌200包括具有身份列表的基本令牌結(jié)構(gòu)220,這些身份表明此 特定線程屬于帶有特定帳戶ID的特定腔室(chamber),還表明該線程是某些組的成員。每 一安全令牌200通過設(shè)置來表示。如此,安全令牌結(jié)構(gòu)包括結(jié)構(gòu)和多個設(shè)置。第一設(shè)置是 擁有者設(shè)置。這意味著,唯一 ID被給予系統(tǒng)中的每一腔室或系統(tǒng)中的每一帳戶。然后,可 以有零個或多個組成員資格,組帳戶ID。這些都在擴(kuò)展令牌數(shù)據(jù)222中給出。臺式機(jī)的安全令牌結(jié)構(gòu)是類似的。例如,可以有為重置臺式機(jī)而定義的特權(quán)或為 安裝驅(qū)動程序而定義的特權(quán)。如此,如果一特定調(diào)用者具有特定特權(quán)設(shè)置,那么,只有該調(diào) 用者才可以進(jìn)行該API調(diào)用,且只有該調(diào)用者才可以重置設(shè)備或安裝驅(qū)動程序。這些是特 定特權(quán)?;咎貦?quán)可以只是一個雙字,由此它連接到基本特權(quán)[[212]]214,于是,可以有任 意數(shù)量的擴(kuò)展特權(quán)[[214]] 216,它們是擴(kuò)展令牌數(shù)據(jù)222的一部分??梢杂性S多特權(quán)214,216,但是,特權(quán)214,216工作的方式與對于資源進(jìn)行訪問檢 查的方式完全相同。如此,如果特定API要求特定特權(quán)或要求特定調(diào)用者具有特定特權(quán),那 么,聯(lián)系鏈中的每一調(diào)用者都必須具有該特定特權(quán)。只有在所有調(diào)用者序都具有該特權(quán)的 情況下才允許調(diào)用經(jīng)過。每一令牌都應(yīng)該具有至少與基本令牌結(jié)構(gòu)220同樣多的信息。擴(kuò)展令牌結(jié)構(gòu)222是可選設(shè)置。如此,作為示例,帳戶可以是一個或多個組的成 員。因此,它具有可變大小,即,大小不是固定的,而基本令牌結(jié)構(gòu)大小是固定的。安全令牌 200與每一進(jìn)程相關(guān)聯(lián),于是,進(jìn)程中的每一線程都在開始時接收或復(fù)制該安全令牌200。 隨著安全令牌200遷移到不同服務(wù)器,安全令牌200可以改變。遷移的安全令牌200與服 務(wù)器的安全令牌相交。實際數(shù)據(jù)結(jié)構(gòu)不會改變。圖3示出了根據(jù)本發(fā)明的一個實施例的安全描述符布局300的簡化視圖。安全描 述符300是用于將許可與資源相關(guān)聯(lián)的數(shù)據(jù)結(jié)構(gòu)。對于特定資源,安全描述符300定義什 么帳戶具有對該資源的什么訪問權(quán)限,并定義涉及該特定對象的所有規(guī)則。通常,對象的安 全描述符300定義擁有者SID 320、組SID 330,以及相關(guān)聯(lián)的ACL 3400
由于所有這些都是可選條目,因此,SD 300被定義為具有在結(jié)構(gòu)的末尾列出的擁 有者SID 320 JiSID 330,以及ACL 340的可變大小結(jié)構(gòu)。在SD結(jié)構(gòu)300中提供了版本字 段310和標(biāo)記字段312,以指定什么值被包括在SD 300中。還提供了字段314,用于定義SD 結(jié)構(gòu)300的總大小。安全令牌(S卩,在圖2中,200)和安全描述符300之間的關(guān)系確定對訪問權(quán)限的控 制。當(dāng)一線程訪問資源時(例如,創(chuàng)建照片,創(chuàng)建文件,例如,/Vind0WS/myph0t0S/),[[。]] [[該]],該調(diào)用最終進(jìn)入服務(wù)器,且服務(wù)器確定調(diào)用者是否具有訪問此資源的權(quán)限。服務(wù) 器構(gòu)建定義從該調(diào)用訪問資源的權(quán)限的安全描述符300。因此,一旦服務(wù)器具有標(biāo)識誰可以 訪問此資源的安全描述符300,則,服務(wù)器就查看調(diào)用者的安全令牌(S卩,在圖2中,200),并 確定調(diào)用者的身份。然后,服務(wù)器試圖確定在安全描述符中所定義的身份是否位于ACE中 的一個里。如果在安全描述符中所定義的身份位于ACE中的一個里,則服務(wù)器確定對于該 身份有什么訪問權(quán)限。如果該身份的訪問被拒絕,那么,該調(diào)用被拒絕。如果該身份的訪問 權(quán)限是讀取,那么,只為此調(diào)用者給予讀取權(quán)限。因此,必須使用安全令牌來標(biāo)識調(diào)用和接收該調(diào)用的特定資源之間的交集,并且 必須確定該身份在安全描述符300中具有什么權(quán)限。在一個操作系統(tǒng)內(nèi),可以提供很多個 帳戶ID。開始在進(jìn)程內(nèi)運(yùn)行的每一線程都將繼承具有該進(jìn)程的帳戶ID的令牌。隨著線程 對服務(wù)的不同域進(jìn)行調(diào)用,令牌被更新。圖4示出了根據(jù)本發(fā)明的一個實施例的訪問控制列表(ACL)400。ACL 400是訪問 控制條目(ACE)集合,其中包括ACE頭部420,422,以及與ACE相關(guān)聯(lián)的SID430,432。ACE 標(biāo)識為給定SID定義了什么訪問權(quán)限。在圖4中,ACL 400包括修訂版字段402、未使用的 字段404,定義結(jié)構(gòu)406的總大小的字段,定義ACL 408結(jié)尾處的ACE的數(shù)量的字段和第二 未使用的字段410。由于ACE的數(shù)量未預(yù)先定義,因此,ACL 400是可變長度結(jié)構(gòu)。每一 ACE都指定帳戶ID以及該帳戶ID對該對象具有什么權(quán)限。例如,一個特定 ACE可以帳戶ID獲得,其中,權(quán)限是對于該特定對象進(jìn)行只讀。另一特定ACE可以是帳戶 ID管理員訪問讀/寫,其提供所有不同ACE的集合,且這些ACE中的每一個為特定帳戶定義 為此資源指定了什么權(quán)限。在臺式機(jī)上,ACE為每一個條目提供不同訪問權(quán)限。不同訪問權(quán)限包括允許、拒絕, 以及審核。在WINDOWS CE操作系統(tǒng)中,對于給定ACE授予權(quán)限。當(dāng)在ACL中沒有帶有 所需訪問屏蔽的ACE時,默認(rèn)返回是“拒絕”。圖5示出了根據(jù)本發(fā)明的一個實施例的訪問控制條目(ACE)500的結(jié)構(gòu)。每一 ACE 500都定義什么類型的權(quán)限被此ACE 510允許以及允許給哪一個身份(由SID給出)520。 由于SID 520是可變長數(shù)據(jù)項,因此,ACE 500也是可變長度結(jié)構(gòu)。與ACE 500相關(guān)聯(lián)的SID 數(shù)據(jù)520在ACE結(jié)構(gòu)500的末尾處開始。ACE 500還包括標(biāo)記530的字段、用于標(biāo)識結(jié)構(gòu) 532的總大小的字段和屏蔽字段534。圖6示出了根據(jù)本發(fā)明的一個實施例的安全描述符(SD)600的結(jié)構(gòu)布局。安全 描述符(SD)600包括頭部610。SD頭部610標(biāo)識SD 600的版本、標(biāo)記和大小。接下來,SD 600包括擁有者安全標(biāo)識符(SID)620和組安全標(biāo)識符(SID)630。其余的數(shù)據(jù)構(gòu)成訪問控 制列表(ACL) 640。ACL 640包括ACL頭部642和一個或多個訪問控制條目(ACE) 650。ACL 頭部642標(biāo)識ACE 650的版本、大小和數(shù)量。每一 ACE 650都包括ACE頭部652和相關(guān)聯(lián)的安全標(biāo)識符(SID)肪4。根據(jù)本發(fā)明的一個實施例的安全基礎(chǔ)結(jié)構(gòu)是當(dāng)創(chuàng)建進(jìn)程或線程時通過安全描述 符、安全標(biāo)識符、訪問控制列表和訪問控制條目來提供的。例如,進(jìn)程令牌是不可改變的,是 在創(chuàng)建進(jìn)程時指派的。默認(rèn)地,如果沒有提供安全性,則所有進(jìn)程都被平等地對待(對于令 牌特權(quán)),且向進(jìn)程指派預(yù)先定義的系統(tǒng)令牌。這是未啟用安全性的系統(tǒng)上的默認(rèn)行為。在 這樣的系統(tǒng)中,信任邊界是用戶模式和內(nèi)核模式之間的過渡點(diǎn)。進(jìn)程令牌可以潛在地是多個數(shù)據(jù)點(diǎn)的組合,諸如·將映射到帳戶數(shù)據(jù)庫中的ID的Exe證據(jù)(路徑、散列、證書)?!魯?shù)據(jù)庫中的給定帳戶的基本特權(quán)·帳戶數(shù)據(jù)庫中的給定帳戶的擴(kuò)展特權(quán)·基于調(diào)用者令牌的組ID的列表作為給定可執(zhí)行程序的證據(jù)的第一信息段是由安全加載器組件確定的,且超出了 本文檔的范圍。出于此特征的目的,假設(shè)證據(jù)映射到帳戶數(shù)據(jù)庫中的ID。由此,OS將從帳 戶數(shù)據(jù)庫中的帳戶信息創(chuàng)建令牌。當(dāng)創(chuàng)建進(jìn)程時,此令牌與進(jìn)程對象相關(guān)聯(lián),并在進(jìn)程的生 存期內(nèi)保持不變。當(dāng)創(chuàng)建線程時,創(chuàng)建線程令牌,并將其與線程對象相關(guān)聯(lián)。默認(rèn)地,線程令牌與同 線程的擁有者進(jìn)程相關(guān)聯(lián)的令牌相同。進(jìn)程令牌和線程令牌之間的主要區(qū)別是,線程令牌 可以在線程的生存期內(nèi)變化,而進(jìn)程令牌在進(jìn)程的生存期內(nèi)保持不變。例如,線程令牌可以 在下列情況下變化·對樽仿給定令牌的調(diào)用這將把調(diào)用線稈的活動令牌改變?yōu)閭魅胝{(diào)用以進(jìn)行模 仿的安全令牌?!€原先前樽仿的調(diào)用這將把線稈令牌更新為樽仿調(diào)用之前的令牌?!﹂追庐?dāng)前講稈的調(diào)用這將把當(dāng)前線稈令牌更新為當(dāng)前活動講稈的令牌。 線程從API調(diào)用返回在API調(diào)用返回時,內(nèi)核將自動地刪除與線程從其返回的 PSL上下文相關(guān)聯(lián)的所有線程令牌。在此情況下,與線程相關(guān)聯(lián)的當(dāng)前令牌也被更新到API 調(diào)用之前的令牌。圖7示出了根據(jù)本發(fā)明的一個實施例的線程700的令牌列表布局。為管理給定線 程的多個令牌,提供了令牌列表700。令牌列表700是與線程相關(guān)聯(lián)的所有令牌的鏈接列 表。線程的當(dāng)前活動令牌710始終是在令牌列表700的前頭的令牌節(jié)點(diǎn)。換言之,令牌列 表700的行為就象LIFO(后進(jìn)先出)隊列(也叫做堆棧)一樣,其中,列表中最后添加的令 牌是線程的當(dāng)前令牌。對當(dāng)前線程的所有訪問和特權(quán)檢查是只使用該特定令牌和該線程的 當(dāng)前上下文來處理的。此外,當(dāng)線程從API調(diào)用返回時,內(nèi)核自動地刪除由關(guān)于受保護(hù)的服 務(wù)器庫(PSL)712的上下文中的模仿調(diào)用來添加到此列表的任何令牌節(jié)點(diǎn)。此自動還原防 止了 API調(diào)用上的任何特權(quán)泄漏。在操作系統(tǒng)中,例如,在WINDOWS CE中,線程可以通過過渡到處理相對應(yīng)的 API調(diào)用的服務(wù)器進(jìn)程來進(jìn)行API調(diào)用。由于每一線程都具有相關(guān)聯(lián)的令牌——該令牌帶 有為該令牌定義的一組身份/特權(quán),API服務(wù)器需要考慮該線程的當(dāng)前特權(quán)來決定在當(dāng)前 線程上是否允許API調(diào)用。API服務(wù)器可以用來完成API調(diào)用的可能的令牌有兩個 調(diào)用者的令牌在此情況下,API服務(wù)器調(diào)用CeAccessCheck(GetCurrentToken(),...)(Ce訪問檢查(獲得當(dāng)前令牌(),...)。如果API調(diào)用是從高特權(quán)腔室到低特權(quán)腔 室,則這種情況將是潛在的安全風(fēng)險。實際上,沒有高或低特權(quán)的概念。然而,出于此討論 的目的,假設(shè)高特權(quán)腔室具有低特權(quán)腔室的所有特權(quán)以及某些附加特權(quán)?!ぎ?dāng)前講稈令牌在此情況下,API服務(wù)器調(diào)用CeAccessCheck(ImpersonateCurre ntProcessO,. . .)(Ce訪問檢查(模仿當(dāng)前進(jìn)程(),...),其中,當(dāng)前線程的令牌被更新到 當(dāng)前進(jìn)程(API服務(wù)器的令牌)。如果API調(diào)用是從低特權(quán)腔室到高特權(quán)腔室,則這種情況 將是潛在的安全風(fēng)險。每一線程開始時都以擁有者進(jìn)程令牌720為開始。因此,在圖7的底部列出了擁 有者進(jìn)程令牌720,圖7示出了線程700的令牌布局。線程可以從不同的調(diào)用者或從消息隊 列異步地接收令牌。然后,此時線程希望基于該令牌訪問資源。線程不希望使用進(jìn)程令牌, 而是希望改變其身份。如此,線程可以調(diào)用和模仿API中的一個,這將令牌推到令牌列表的 頂部。因此,每當(dāng)線程調(diào)用和模仿令牌時,該令牌變?yōu)榱斜淼捻敳?。在圖7中,所模仿的令 牌730被示為在擁有者進(jìn)程令牌720的上面。在圖7中,示出了一連串N個所模仿的令牌 730-750。對照頂部令牌750,S卩,在當(dāng)前令牌710內(nèi),檢查線程訪問的任何資源。每當(dāng)調(diào)用 模仿時,模仿令牌750始終與擁有者進(jìn)程令牌720相交。如此,每當(dāng)線程訪問資源時,擁有 者進(jìn)程令牌720必須在該資源上展現(xiàn)訪問權(quán)限,且剛剛模仿的令牌750也必須具有對該資 源的訪問權(quán)限。以此方式,線程可以在它過渡到不同服務(wù)器時對不同服務(wù)器進(jìn)行API調(diào)用。 此外,如果在聯(lián)系鏈上有任何服務(wù)器,則所有服務(wù)器都必須具有對該資源的訪問權(quán)限。如果驗證了所有三個檢查,則允許對線程的訪問。重要的是,此進(jìn)程不同于提供單 個特權(quán)。例如,如果動作只基于當(dāng)前令牌750,并且如果當(dāng)前令牌750碰巧具有較高的特權(quán), 那么,這將是特權(quán)的提升。相反,如果動作只基于調(diào)用者的令牌720,那么它已經(jīng)從高特權(quán)服 務(wù)器遷移到低特權(quán)服務(wù)器。如此,在這兩種情況下,當(dāng)由于可能的特權(quán)提升而只使用單個特 權(quán)時,會產(chǎn)生安全風(fēng)險。一旦完成API調(diào)用,并返回API調(diào)用,就利用在服務(wù)器中執(zhí)行的任何模仿還原令 牌,以防止任何特權(quán)迭代的泄漏。如此,當(dāng)API調(diào)用返回時,即使服務(wù)器忘記還原它模仿的 令牌,服務(wù)器也自動地還原。以此方式,當(dāng)API調(diào)用返回該令牌時,客戶機(jī)也將始終還原到 它在API調(diào)用之前的任何模樣。正如您可以看到的,如果我們只使用調(diào)用者的線程令牌或只使用當(dāng)前進(jìn)程線程令 牌,則會有安全問題。為解決此問題,我們建議,當(dāng)檢查給定線程對于一個資源的訪問時,要 考慮下列各項·與線程的當(dāng)前令牌相關(guān)聯(lián)的所有身份都應(yīng)該具有對資源的訪問權(quán)限?!づc當(dāng)前線程調(diào)用堆棧(直到模仿邊界)中的所有腔室相關(guān)聯(lián)的所有身份都應(yīng)該 具有對資源的訪問權(quán)限?!づc為該線程保存的上下文相關(guān)聯(lián)的所有身份都應(yīng)該具有對資源的訪問權(quán)限。此 檢查主要是在代表除調(diào)用線程以外的不同線程中的調(diào)用者執(zhí)行訪問檢查時使用。此改變將影響如何對于給定線程和對象檢查訪問權(quán)限/特權(quán)。為使代碼獲得對任 何對象的訪問,線程的當(dāng)前令牌750和API服務(wù)器的令牌(即,擁有者進(jìn)程/線程令牌720) 兩者都應(yīng)該具有對該對象的訪問。為使代碼獲得任何特權(quán),線程的當(dāng)前令牌750和API服
權(quán)利要求
1.一種包括可執(zhí)行指令的計算機(jī)可讀介質(zhì),當(dāng)執(zhí)行所述可執(zhí)行指令時,提供用于控制 相關(guān)聯(lián)的主體對資源的訪問的安全基礎(chǔ)結(jié)構(gòu),通過提供用于為相關(guān)聯(lián)的主體定義唯一標(biāo)識符并用于指定與所述相關(guān)聯(lián)的主體相關(guān)聯(lián)的 帳戶的安全標(biāo)識符100 ;將所述唯一標(biāo)識符映射到帳戶數(shù)據(jù)庫中的條目,以便確定指派給所述安全標(biāo)識符100 的基本214和擴(kuò)展216特權(quán);隨著所述相關(guān)聯(lián)的主體的遷移,累積相關(guān)聯(lián)的主體的標(biāo)識210,212 ; 創(chuàng)建用于基于所述對指派給所述安全標(biāo)識符100的基本214和擴(kuò)展216特權(quán)的確定, 來定義一組身份210,212和指派給所述一組身份的特權(quán)集合的安全令牌200 ;以及通過對所述相關(guān)聯(lián)的主體的所有所述累積的身份210,212和所述特權(quán)214,216的集合 求交集來確定所述相關(guān)聯(lián)的主體的訪問特權(quán)。
2.如權(quán)利要求1所述的計算機(jī)可讀介質(zhì),其特征在于,所述相關(guān)聯(lián)的主體包括進(jìn)程或 進(jìn)程的線程。
3.如權(quán)利要求1所述的計算機(jī)可讀介質(zhì),其特征在于,所述確定所述相關(guān)聯(lián)的主體的 訪問特權(quán)214,216還包括捕捉所述當(dāng)前相關(guān)聯(lián)的主體的調(diào)用鏈上下文以及分析所述當(dāng)前 相關(guān)聯(lián)的主體,以在賦予對所述資源的訪問之前驗證所述調(diào)用鏈中的每一累積的身份210, 212和每一相關(guān)聯(lián)的主體都具有對所請求資源的訪問,由此默認(rèn)地啟用最小特權(quán)。
4.如權(quán)利要求1所述的計算機(jī)可讀介質(zhì),其特征在于,所述安全令牌200和所述安全描 述符300之間的關(guān)系確定對由相關(guān)聯(lián)的主體對所請求資源的訪問權(quán)限的控制。
5.如權(quán)利要求1所述的計算機(jī)可讀介質(zhì),其特征在于,所述確定訪問特權(quán)214,216使 用安全令牌200中的每一安全標(biāo)識符100來確定安全令牌是否請求訪問由安全描述符300 所指定的資源,僅當(dāng)在所述聯(lián)系鏈中的每一調(diào)用者都具有準(zhǔn)許訪問所請求資源的特權(quán)時才 準(zhǔn)許對所述所請求資源的訪問。
6.如權(quán)利要求1所述的計算機(jī)可讀介質(zhì),其特征在于,還包括 構(gòu)建定義對所述資源的訪問權(quán)限的安全描述符300 ;根據(jù)所述安全令牌200標(biāo)識所述相關(guān)聯(lián)的主體;確定所述安全描述符300中定義的所述身份320,330是否被包括在所述安全描述符中 的訪問控制條目500中;基于所述訪問控制條目來確定對所述身份可用的訪問權(quán)限;以及 根據(jù)所述確定的訪問權(quán)限來向給所述身份320,330賦予訪問權(quán)限。
7.如權(quán)利要求1所述的計算機(jī)可讀介質(zhì),其特征在于,還包括在安全令牌列表700中維 護(hù)與相關(guān)聯(lián)的主體有關(guān)的所有令牌200的列表,其中,當(dāng)前活動令牌710始終在所述安全令 牌列表的前頭,對所述當(dāng)前相關(guān)聯(lián)的主體的所有訪問和特權(quán)檢查是使用所述當(dāng)前活動安全 令牌710和所述相關(guān)聯(lián)的主體的當(dāng)前上下文,通過將相關(guān)聯(lián)的主體請求訪問的資源與位于 所述安全令牌列表700的所述前頭的當(dāng)前活動安全令牌進(jìn)行比較來處理的。
8.如權(quán)利要求1所述的計算機(jī)可讀介質(zhì),其特征在于,還包括在客戶機(jī)1020側(cè),在消息 隊列中寫入相關(guān)聯(lián)的主體的安全上下文,在服務(wù)器1030側(cè),從所述消息隊列中異步地檢索 所述相關(guān)聯(lián)的主體的所述安全上下文,通過復(fù)制要模仿的所述相關(guān)聯(lián)的主體的所述檢索到 的安全上下文來模仿所述相關(guān)聯(lián)的主體。
9.如權(quán)利要求1所述的計算機(jī)可讀介質(zhì),其特征在于,還包括當(dāng)與相關(guān)聯(lián)的主體的當(dāng) 前安全令牌710相關(guān)聯(lián)的所有身份210,212都具有對請求的資源的訪問、所述與當(dāng)前相關(guān) 聯(lián)的主體的調(diào)用堆棧800中的所有腔室相關(guān)聯(lián)的所有身份都具有對所述請求的資源的訪 問、以及與所述相關(guān)聯(lián)的主體的所保存的上下文相關(guān)聯(lián)的所有身份都具有對所述所請求的 資源的訪問時,準(zhǔn)許對所述所請求的資源的訪問。
10.如權(quán)利要求1所述的計算機(jī)可讀介質(zhì),其特征在于,還包括將安全聯(lián)系存儲在脫機(jī) 數(shù)據(jù)庫中以便進(jìn)行脫機(jī)處理。
11.一種安全基礎(chǔ)結(jié)構(gòu),包括用于為相關(guān)聯(lián)的主體定義唯一標(biāo)識符并用于指定與所述相關(guān)聯(lián)的主體相關(guān)聯(lián)的帳戶 的安全標(biāo)識符100 ;用于基于對指派給所述安全標(biāo)識符100的基本214和擴(kuò)展216特權(quán)的確定來定義一組 身份和指派給所述一組標(biāo)識的特權(quán)集合的安全令牌200 ;用于定義具有對所請求資源的訪問的帳戶以及與所述進(jìn)程有關(guān)規(guī)則的安全描述符;以及訪問控制列表400,所述訪問控制列表包括用于標(biāo)識安全標(biāo)識符100的訪問權(quán)限的至 少一個訪問控制條目500。
12.如權(quán)利要求11所述的安全基礎(chǔ)結(jié)構(gòu),其特征在于,所述安全令牌200包括用于標(biāo)識 所述結(jié)構(gòu)的版本202、標(biāo)記204、偏移量206,立即組的數(shù)量207和組標(biāo)識符的總數(shù)208的字段。
13.如權(quán)利要求12所述的安全基礎(chǔ)結(jié)構(gòu),其特征在于,所述安全令牌200還包括主要擁 有者安全標(biāo)識符210、組安全標(biāo)識符212、基本特權(quán)214和擴(kuò)展特權(quán)216。
14.如權(quán)利要求13所述的安全基礎(chǔ)結(jié)構(gòu),其特征在于,所述主要210和組212安全標(biāo)識 符定義所述安全令牌200的相關(guān)聯(lián)的主體的身份。
15.如權(quán)利要求13所述的安全基礎(chǔ)結(jié)構(gòu),其特征在于,基本特權(quán)214包括對在所述安全 令牌200中指定的所述身份有效的一組特權(quán)。
16.如權(quán)利要求13所述的安全基礎(chǔ)結(jié)構(gòu),其特征在于,擴(kuò)展特權(quán)216包括為所述安全令 牌200中的安全標(biāo)識符100定義的自定義特權(quán)。
17.一種用于向相關(guān)聯(lián)的主體準(zhǔn)許最小特權(quán)訪問的方法,包括提供用于為相關(guān)聯(lián)的主體定義唯一標(biāo)識符并用于指定與所述相關(guān)聯(lián)的主體相關(guān)聯(lián)的 帳戶的安全標(biāo)識符100 ;將所述唯一標(biāo)識符映射到帳戶數(shù)據(jù)庫中的條目,以便確定指派給所述安全標(biāo)識符100 的基本214和擴(kuò)展216特權(quán);隨著所述相關(guān)聯(lián)的主體的遷移,累積相關(guān)聯(lián)的主體的身份210,212 ; 創(chuàng)建用于基于所述對指派給所述安全標(biāo)識符100的所述基本214和擴(kuò)展216特權(quán)的確 定來定義一組身份210,212和指派給所述一組身份的特權(quán)集合的安全令牌200 ;以及通過對所述相關(guān)聯(lián)的主體的所有所述累積的身份210,212和特權(quán)214,216的集合求交 集來確定所述相關(guān)聯(lián)的主體的訪問特權(quán)。
18.如權(quán)利要求17所述的方法,其特征在于,所述確定所述相關(guān)聯(lián)的主體的訪問特權(quán) 214,216還包括捕捉所述當(dāng)前相關(guān)聯(lián)的主體的調(diào)用鏈上下文以及分析所述當(dāng)前相關(guān)聯(lián)的主體,以在準(zhǔn)許訪問所述資源之前驗證所述調(diào)用鏈中的每一累積的身份210,212和每一相關(guān) 聯(lián)的主體都具有所述所請求資源的訪問,由此默認(rèn)地啟用最小特權(quán)。
19.如權(quán)利要求1所述的方法,其特征在于,還包括在客戶機(jī)1020側(cè),在消息隊列中寫入相關(guān)聯(lián)的主體的安全上下文,在所述服務(wù)器1030側(cè),從所述消息隊列中異步地檢索所述相關(guān)聯(lián)的主體的所述安全 上下文,通過復(fù)制要模仿的所述相關(guān)聯(lián)的主體的所述檢索到的安全上下文來模仿所述相關(guān)聯(lián) 的主體。分析所述復(fù)制的安全上下文750以構(gòu)建定義對所述請求的資源的訪問權(quán)限的安全描 述符300 ;根據(jù)所述安全令牌200標(biāo)識所述相關(guān)聯(lián)的主體;確定所述安全描述符300中所定義的所述身份320,330是否被包括在所述安全描述符 中的訪問控制條目500中;以及基于所述訪問控制條目500來確定對所述身份320,330可用的訪問權(quán)限。
20.如權(quán)利要求1所述的方法,其特征在于,還包括當(dāng)與相關(guān)聯(lián)的主體的當(dāng)前安全令牌 710相關(guān)聯(lián)的所有身份210,212都具有對所述請求的資源的訪問、所述與當(dāng)前相關(guān)聯(lián)的主 體的調(diào)用堆棧800中的所有腔室相關(guān)聯(lián)的所有身份都具有對所述請求的資源的訪問、以及 與所述相關(guān)聯(lián)的主體的所保存的上下文相關(guān)聯(lián)的所有身份都具有對所述所請求的資源的 訪問時,準(zhǔn)許訪問所述所請求的資源。
全文摘要
各實施例提供可以被配置成在現(xiàn)有操作系統(tǒng)上運(yùn)行的安全基礎(chǔ)結(jié)構(gòu),以控制什么資源可以被應(yīng)用程序訪問,以及應(yīng)用程序可以調(diào)用什么API。通過考慮當(dāng)前線程的身份以及當(dāng)前線程的調(diào)用鏈上下文來作出安全決定,以默認(rèn)地啟用最小特權(quán)。捕捉當(dāng)前線程上下文,并創(chuàng)建其副本,以供用于異步地執(zhí)行安全檢查。系統(tǒng)中的每一線程都具有相關(guān)聯(lián)的標(biāo)識。為獲取對特定資源的訪問,分析當(dāng)前線程上的所有調(diào)用者,以確保每一調(diào)用者和線程可以訪問該資源。只有在每一調(diào)用者和線程都可以訪問該資源的情況下才向調(diào)用者給予對該資源的訪問。
文檔編號G06F15/16GK102112990SQ200980124867
公開日2011年6月29日 申請日期2009年6月24日 優(yōu)先權(quán)日2008年6月27日
發(fā)明者A·R·瓦爾斯, A·羅杰斯, B-M·謝, C·R·喬丹, M·G·萊昂斯, N·L·科爾斯, S·R·謝爾, U·R·桑達(dá)蒂, Y·格帕蘭 申請人:微軟公司