專利名稱:通過安全虛擬機器實施安全政策的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
所描述的技術(shù)一般涉及實施安全政策來阻擋計算機程序的不合需要的行為。
背景技術(shù):
諸如操作系統(tǒng)和文件系統(tǒng)等軟件系統(tǒng)提供了應(yīng)用編程接口,應(yīng)用程序通過其能夠訪問軟件系統(tǒng)的服務(wù)。應(yīng)用程序接口可向函數(shù)提供用于執(zhí)行制定服務(wù)的參數(shù)。例如,文件系統(tǒng)可具有用于創(chuàng)建文件的函數(shù)(也稱為“系統(tǒng)調(diào)用”)。該函數(shù)可具有指定要創(chuàng)建的文件的文件位置、文件名、文件類型、文件大小等的參數(shù)。當(dāng)應(yīng)用程序調(diào)用一函數(shù)時,它傳遞對應(yīng)于為該函數(shù)定義的形式參數(shù)的實際參數(shù)。函數(shù)可在實際參數(shù)上執(zhí)行某些核查,以確保它們是有效的。例如,創(chuàng)建文件函數(shù)可確保指定的文件類型是有效的。如果參數(shù)無效,則函數(shù)向應(yīng)用程序返回一出錯。
由于各種原因,軟件系統(tǒng)可以極其復(fù)雜。軟件系統(tǒng)可尋求與該軟件系統(tǒng)的所有現(xiàn)有版本后向兼容。在這一情況下,軟件系統(tǒng)可能需要支持現(xiàn)有版本的應(yīng)用程序接口的所有函數(shù)。由于通常向每一版本添加新函數(shù),因此函數(shù)的數(shù)量可能相當(dāng)大,并且其交互十分復(fù)雜。某些軟件系統(tǒng)也可包括由同一公司的不同部門或不同的公司開發(fā)的軟件組件。這些組件的交互也可以相當(dāng)復(fù)雜。
對軟件系統(tǒng)越來越重要的是確保其應(yīng)用編程接口對無意的誤用或有意的攻擊都不是易破壞的。軟件系統(tǒng)的一個易破壞性可以通過其應(yīng)用編程接口的參數(shù)。當(dāng)現(xiàn)有版本的函數(shù)與較新版本的函數(shù)組合時,并且當(dāng)集成來自不同開發(fā)者的組件時,由函數(shù)執(zhí)行的現(xiàn)有參數(shù)確認(rèn)可能不足以確保函數(shù)的正確行為。例如,由一個公司開發(fā)的文件系統(tǒng)的應(yīng)用編程接口可以與由另一公司開發(fā)的文件服務(wù)器集成、應(yīng)用編程接口的最大文件大小參數(shù)可以大于文件服務(wù)器支持的參數(shù)。在這一情況下,應(yīng)用編程接口可接受的文件大小可導(dǎo)致文件服務(wù)器的問題。作為另一示例,系統(tǒng)管理員可能希望進一步限制最大文件大小,但是系統(tǒng)管理員可能沒有可用的手段來實施該限制。
需要的是一種用于實施安全政策,尤其是為應(yīng)用程序接口的參數(shù)指定有效條件的安全政策的機制。
發(fā)明內(nèi)容
用于實施安全政策的方法和系統(tǒng)是由一安全虛擬機器提供的。該安全虛擬機器包括處理器引擎、指令存儲、數(shù)據(jù)存儲和指令指針。該安全虛擬引擎執(zhí)行使用從安全政策的高級語言表示所編譯的中間語言指定的安全程序。該安全程序被加載到指令存儲用于執(zhí)行。當(dāng)出現(xiàn)安全實施事件時,諸如調(diào)用應(yīng)用編程接口的函數(shù),將來自安全實施事件的數(shù)據(jù)儲存在數(shù)據(jù)存儲中,并且處理器引擎開始從指令存儲中取出并執(zhí)行用于安全程序的指令。指令指定了要采取的行動,以基于安全實施事件的數(shù)據(jù)實施安全政策。
圖1所示是一個實施例中安全系統(tǒng)的組件的框圖。
圖2所示是一個實施例中數(shù)據(jù)存儲的數(shù)據(jù)結(jié)構(gòu)的框圖。
圖3所示是一個實施例中安全虛擬機器的指令的布局的圖示。
圖4所示是一個實施例中加載程序組件的處理的流程圖。
圖5所示是一個實施例中系統(tǒng)調(diào)用截取組件的處理的流程圖。
圖6所示是一個實施例中安全虛擬機器的處理器引擎的處理的流程圖。
圖7所示是一個實施例中安全虛擬機器的解除引用(dereference)組件的處理的流程圖。
圖8所示是一個實施例中安全虛擬機器的求值測試組件的處理的流程圖。
圖9所示是一個實施例中安全虛擬機器的測試組件的處理的流程圖。
圖10所示是一個實施例中安全虛擬機器的匹配字符串組件的處理的流程圖。
圖11所示是一個實施例中安全虛擬機器的非測試(nontest)組件的處理的流程圖。
具體實施例方式
提供了一種在計算機系統(tǒng)中用于實施以安全虛擬機器的指令集編碼的安全政策的方法和系統(tǒng)。在一個實施例中,安全系統(tǒng)提供了一安全虛擬機器,它執(zhí)行以安全虛擬機器的指令集(即,中間語言)表達的安全程序。安全系統(tǒng)可包括一編譯器,它接受以高級語言表示的安全政策,并生成以安全虛擬機器的中間語言表達的安全政策表示的安全程序。安全系統(tǒng)在安全虛擬機器的指令存儲中儲存安全程序。當(dāng)發(fā)生安全實施事件時(即,需要核查一行動來確保它遵循安全政策),則安全虛擬機器使用來自安全實施事件的數(shù)據(jù)執(zhí)行來自其指令存儲的安全程序的指令,以實施該安全政策。如果安全實施事件表明正在試圖執(zhí)行不合需要的行為(如,可能會惡意利用操作系統(tǒng)的易破壞性的行動),則安全程序可阻擋該嘗試。在一個實施例中,安全系統(tǒng)的安全虛擬機器在操作系統(tǒng)的內(nèi)核模式中執(zhí)行,以標(biāo)識并防止應(yīng)用程序和外部系統(tǒng)對執(zhí)行安全系統(tǒng)的計算機系統(tǒng)執(zhí)行不合需要的行為的嘗試。
在一個實施例中,安全系統(tǒng)標(biāo)識由應(yīng)用程序向系統(tǒng)服務(wù)(如,文件系統(tǒng)和存儲器管理系統(tǒng))發(fā)出的系統(tǒng)調(diào)用的參數(shù)何時可能導(dǎo)致不合需要的行為。安全政策包含規(guī)則,其每一個規(guī)則都指定了基于系統(tǒng)調(diào)用的參數(shù)的條件,以及當(dāng)滿足該條件時要采取的行動。例如,當(dāng)用指定大于1GB的文件大小的參數(shù)發(fā)出一文件創(chuàng)建系統(tǒng)調(diào)用時,可滿足規(guī)則的條件。與該規(guī)則相關(guān)聯(lián)的行動可阻擋文件的創(chuàng)建。高級語言可以是基于XML的語言,并且每一規(guī)則可以由規(guī)則條件和行動標(biāo)簽來標(biāo)識。當(dāng)編譯以高級語言表示的安全政策規(guī)則時,將每一規(guī)則轉(zhuǎn)換成中間語言的指令以形成安全程序。例如,規(guī)則可被轉(zhuǎn)換成一系列指令。一個指令將系統(tǒng)調(diào)用與表明函數(shù)是“文件創(chuàng)建”的值進行比較,一個指令將文件大小參數(shù)與其值為1GB的常量進行比較,一個指令輸出指示來阻擋系統(tǒng)調(diào)用。
在一個實施例中,安全虛擬機器包括處理器引擎、指令存儲、指令指針和數(shù)據(jù)存儲。當(dāng)初始化安全虛擬機器來實施安全政策時,安全系統(tǒng)用實現(xiàn)安全政策的安全程序加載指令存儲。安全系統(tǒng)也將安全程序的數(shù)據(jù)加載到數(shù)據(jù)存儲中。當(dāng)接收系統(tǒng)調(diào)用時,安全系統(tǒng)將系統(tǒng)調(diào)用的參數(shù)(包括標(biāo)識系統(tǒng)調(diào)用的值)儲存在數(shù)據(jù)存儲中。安全系統(tǒng)也可將發(fā)出系統(tǒng)調(diào)用的進程的進程控制信息儲存在數(shù)據(jù)存儲中。安全系統(tǒng)初始化指令指針以指向安全程序的起始指令。處理器引擎通過取出并執(zhí)行由指令指針指向的起始指令來開始安全程序。所執(zhí)行的每一指令修改指令指針以指向要執(zhí)行的下一指令。指令引用數(shù)據(jù)存儲中的數(shù)據(jù)以實施安全政策。安全程序的執(zhí)行生成一輸出行動集,它指定了為實施安全政策而要采取的行動(如,阻擋系統(tǒng)調(diào)用)。
在一個實施例中,安全政策可包括要對其核查參數(shù)的每一系統(tǒng)調(diào)用的子政策。安全系統(tǒng)可將每一子政策編譯成一單獨的安全子程序,它可與其它安全子程序無關(guān)地加載到指令存儲中。每一子政策可對應(yīng)于單個系統(tǒng)調(diào)用的安全實施。安全系統(tǒng)可維護每一系統(tǒng)調(diào)用到指令存儲中的指令指針以及指向?qū)?yīng)的安全子程序的數(shù)據(jù)存儲中的數(shù)據(jù)的起始數(shù)據(jù)指針的映射。當(dāng)在系統(tǒng)調(diào)用上實施安全政策時,安全系統(tǒng)將指令指針初始化成對應(yīng)的起始指令指針,并將數(shù)據(jù)指針初始化成對應(yīng)的起始數(shù)據(jù)指針。安全子程序可使用與指令指針和數(shù)據(jù)指針有關(guān)的指令和數(shù)據(jù)引用技術(shù)。以這一方式,每一安全子程序的指令和數(shù)據(jù)都是可重定位的。在以下描述中,單個安全程序通過解碼每一系統(tǒng)調(diào)用并跳轉(zhuǎn)到適當(dāng)?shù)闹噶钗恢靡蕴幚碓撓到y(tǒng)調(diào)用,來處理所有的系統(tǒng)調(diào)用。本領(lǐng)域的技術(shù)人員可以理解,所描述的系統(tǒng)可適用于支持每一系統(tǒng)調(diào)用的子程序。
圖1所示是一個實施例中安全系統(tǒng)的組件的框圖。該安全系統(tǒng)包括在用戶模式100中執(zhí)行的某些組件,以及在內(nèi)核模式120中執(zhí)行的其它組件。政策編譯器102是在用戶模式中執(zhí)行的組件,以將政策存儲103的安全政策編譯成可由安全虛擬機器執(zhí)行的安全程序。內(nèi)核模式組件包括系統(tǒng)調(diào)用截取組件121、加載程序組件122和安全虛擬機器125。安全虛擬機器包括指令指針126、處理器引擎127、指令存儲128和數(shù)據(jù)存儲129。加載程序組件將由政策編譯器編譯的安全程序加載到安全虛擬機器的指令存儲中、將程序數(shù)據(jù)儲存到數(shù)據(jù)存儲中、并設(shè)置起始指令指針。系統(tǒng)調(diào)用截取組件截取由應(yīng)用程序101發(fā)出的系統(tǒng)調(diào)用,并將每一系統(tǒng)調(diào)用的參數(shù)和應(yīng)用程序的進程控制信息儲存到數(shù)據(jù)存儲中。在截取了系統(tǒng)調(diào)用并儲存了其參數(shù)之后,系統(tǒng)調(diào)用截取組件指令處理器引擎執(zhí)行指令存儲的安全程序。處理器引擎通過取出由指令指針指向的指令并執(zhí)行由指令指定的操作來執(zhí)行安全程序。操作包括將為實施安全政策而采取的行動儲存在數(shù)據(jù)存儲的輸出行動集中。在完成了安全程序的執(zhí)行以后,系統(tǒng)調(diào)用截取組件執(zhí)行輸出行動集的行動。
實現(xiàn)安全系統(tǒng)的計算裝置可包括中央處理單元、存儲器、輸入設(shè)備(如,鍵盤和定位設(shè)備)、輸出設(shè)備(如,顯示設(shè)備)和存儲設(shè)備(如,盤驅(qū)動器)。存儲器和存儲設(shè)備是可包含實現(xiàn)安全系統(tǒng)的指令的計算機可讀介質(zhì)。另外,數(shù)據(jù)結(jié)構(gòu)和消息結(jié)構(gòu)可通過諸如通信鏈路上的信號等數(shù)據(jù)傳輸介質(zhì)來儲存或發(fā)送??墒褂酶鞣N通信鏈路,如因特網(wǎng)、局域網(wǎng)、廣域網(wǎng)或點對點撥號連接。
圖1示出了其中可實現(xiàn)安全系統(tǒng)的合適的操作環(huán)境的一個示例。該操作環(huán)境僅是合適的操作環(huán)境的一個示例,并非暗示對安全系統(tǒng)的使用范圍或功能的任何局限。適合使用的其它眾所周知的計算系統(tǒng)、環(huán)境和配置包括個人計算機、服務(wù)器計算機、手持式或膝上設(shè)備、多處理器系統(tǒng)、基于微處理器的系統(tǒng)、可編程消費者電子設(shè)備、網(wǎng)絡(luò)PC、小型機、大型機、包括上述系統(tǒng)或設(shè)備的任一個的分布式計算環(huán)境等等。
安全系統(tǒng)可以在諸如由一個或多個其它設(shè)備執(zhí)行的程序模塊等計算機可執(zhí)行指令的一般上下文環(huán)境中描述。一般而言,程序模塊包括例程、程序、對象、組件、數(shù)據(jù)結(jié)構(gòu)等等,執(zhí)行特定的任務(wù)或?qū)崿F(xiàn)特定的抽象數(shù)據(jù)類型。通常,如各個實施例中所需要的,程序模塊的功能可以組合或分布。
圖2所示是一個實施例中數(shù)據(jù)存儲的數(shù)據(jù)結(jié)構(gòu)的框圖。該數(shù)據(jù)結(jié)構(gòu)包括文字?jǐn)?shù)據(jù)結(jié)構(gòu)201、動態(tài)數(shù)據(jù)結(jié)構(gòu)211、系統(tǒng)調(diào)用參數(shù)數(shù)據(jù)結(jié)構(gòu)221、進程控制塊數(shù)據(jù)接口231以及行動輸出集241。文字?jǐn)?shù)據(jù)結(jié)構(gòu)包括文字?jǐn)?shù)據(jù)表202和文字?jǐn)?shù)據(jù)存儲203。文字?jǐn)?shù)據(jù)表包含引用儲存在文字?jǐn)?shù)據(jù)存儲中的文字?jǐn)?shù)據(jù)的固定大小的條目。“文字?jǐn)?shù)據(jù)”指對于當(dāng)前加載的安全政策的生命周期恒定不變的安全程序的數(shù)據(jù)。文字?jǐn)?shù)據(jù)只能通過加載新的安全政策來改變。動態(tài)數(shù)據(jù)結(jié)構(gòu)具有與文字?jǐn)?shù)據(jù)結(jié)構(gòu)相似的組織,但是它儲存“動態(tài)”數(shù)據(jù)而非“文字?jǐn)?shù)據(jù)”。“動態(tài)數(shù)據(jù)”指可在不加載新安全政策的情況下修改的安全程序的數(shù)據(jù)。例如,動態(tài)數(shù)據(jù)可包括免除安全政策的應(yīng)用程序名。文字和動態(tài)數(shù)據(jù)表的每一條目指向?qū)?yīng)的數(shù)據(jù)存儲中的數(shù)據(jù)。文字和動態(tài)數(shù)據(jù)存儲的數(shù)據(jù)以自描述格式來表示。該格式包括數(shù)據(jù)類型和數(shù)據(jù)大小信息。在一個實施例中,安全虛擬機器支持布爾型、整型、字符串和原始二進制(也稱為“二進制大對象(blob)”)數(shù)據(jù)類型,以及整型、字符串和二進制大對象的數(shù)組。指令使用對文字和動態(tài)表的索引而引用文字和動態(tài)數(shù)據(jù)。當(dāng)執(zhí)行指令時,安全虛擬機器通過檢索索引的條目并使用其值作為指向文字或動態(tài)數(shù)據(jù)存儲中的數(shù)據(jù)項的起始的指針,來對到文字和動態(tài)表的索引解除引用。由于數(shù)據(jù)是自描述的,因此可確定數(shù)據(jù)的類型和大小。系統(tǒng)調(diào)用參數(shù)數(shù)據(jù)結(jié)構(gòu)包括字符串表222、整型表223和原始二進制表224。系統(tǒng)調(diào)用的參數(shù)依照其數(shù)據(jù)類型儲存在這些表中。進程控制塊數(shù)據(jù)結(jié)構(gòu)是包含了對安全虛擬機器可用的每一條進程控制信息的條目的表。在一個實施例中,進程控制信息包括應(yīng)用程序標(biāo)識符和線程標(biāo)識符。行動輸出集可以是一組行動標(biāo)記,它在執(zhí)行安全程序的過程中生成,并表明為在系統(tǒng)調(diào)用上實施安全政策而采取的行動。行動可包括阻擋系統(tǒng)調(diào)用和通知用戶。
圖3所示是一個實施例中安全虛擬機器的指令的布局的圖示。每一指令包括操作字段310、參數(shù)1字段320、真分支字段330、假分支字段340和參數(shù)2字段350。參數(shù)1字段引用與系統(tǒng)調(diào)用相關(guān)聯(lián)的數(shù)據(jù)(即,儲存在系統(tǒng)調(diào)用數(shù)據(jù)結(jié)構(gòu)中或進程控制數(shù)據(jù)結(jié)構(gòu)中),參數(shù)2字段引用與安全程序相關(guān)聯(lián)的數(shù)據(jù)(即,直接數(shù)據(jù)或儲存在文字或動態(tài)數(shù)據(jù)結(jié)構(gòu)中的數(shù)據(jù))。操作字段包括參數(shù)2描述符311(“m”)和操作碼312。參數(shù)2描述符指定了如何解釋參數(shù)2。參數(shù)2可包含直接數(shù)據(jù)、對動態(tài)數(shù)據(jù)的引用或?qū)ξ淖謹(jǐn)?shù)據(jù)的引用。當(dāng)指定引用時,安全虛擬機器在執(zhí)行指令的操作之前對參數(shù)2解除引用。操作碼標(biāo)識了如下文更詳細(xì)定義的指令的操作。參數(shù)1字段包含參數(shù)1描述符321(“s”)和索引322。參數(shù)1描述符表明參數(shù)1是涉及系統(tǒng)調(diào)用參數(shù)還是涉及進程控制信息。如果參數(shù)1描述符指示系統(tǒng)調(diào)用參數(shù),則索引的較高位指定了是要索引系統(tǒng)調(diào)用參數(shù)數(shù)據(jù)結(jié)構(gòu)的字符串表、整型表還是原始二進制表,而較低位指示了表的索引的條目。如果參數(shù)1描述符指示進程控制信息,則索引指示特定的進程控制信息。真分支字段和假分支字段包含偏移,它根據(jù)該指令的條件碼被求值為真還是為假來指定要執(zhí)行的下一指令。該偏移被添加到當(dāng)前指令指針,以指向要執(zhí)行的下一指令。
表1和2示出了一個實施例中安全虛擬機器的指令。指令可被分類為在數(shù)據(jù)上執(zhí)行測試的指令和不執(zhí)行測試的指令。表1示出了非測試指令。
表1
表2示出了測試指令。該模式指令可定義用于比較兩個字符串的正則表達式,它可用于文件名的通配符類型比較(如,“*.DAT”)。
表2
圖4所示是一個實施例中加載程序組件的處理的流程圖。當(dāng)要將安全程序加載到安全虛擬機器中時,調(diào)用該組件。安全程序包含虛擬指令、文字?jǐn)?shù)據(jù)塊和動態(tài)數(shù)據(jù)塊。文字?jǐn)?shù)據(jù)塊包括文字?jǐn)?shù)據(jù)表的信息,后面跟隨文字?jǐn)?shù)據(jù)存儲的信息。組件將文字?jǐn)?shù)據(jù)塊復(fù)制到在起始位置處開始的文字存儲中。組件然后將該基本位置添加到文字?jǐn)?shù)據(jù)表中的每一偏移,以將偏移轉(zhuǎn)換成指針。組件以類似的方式處理動態(tài)數(shù)據(jù)塊。虛擬指令包含與文字存儲和動態(tài)存儲有關(guān)的偏移。在塊401,組件識別文字存儲內(nèi)的起始位置,并復(fù)制在該起始位置開始的安全程序的文字?jǐn)?shù)據(jù)塊。在塊402,組件將起始位置添加到文字?jǐn)?shù)據(jù)表的每一偏移,以將安全程序的偏移轉(zhuǎn)換成指針。在塊403,組件標(biāo)識動態(tài)存儲內(nèi)的起始位置,并復(fù)制在該起始位置處開始的安全程序的動態(tài)數(shù)據(jù)塊。在塊404,組件將起始位置添加到動態(tài)數(shù)據(jù)表的每一偏移,以將安全程序的偏移轉(zhuǎn)換成指針。在塊405,組件將安全程序的虛擬指令復(fù)制到指令存儲,然后完成。
圖5所示是一個實施例中系統(tǒng)調(diào)用截取組件的處理的流程圖。當(dāng)系統(tǒng)調(diào)用被截取時調(diào)用該組件。該組件初始化系統(tǒng)調(diào)用參數(shù)數(shù)據(jù)結(jié)構(gòu)以及進程控制數(shù)據(jù)結(jié)構(gòu),然后啟動安全虛擬機器。該組件也可提供一指令的指令指針,該指令用于啟動執(zhí)行來處理系統(tǒng)調(diào)用。當(dāng)使用安全子程序時,該組件可具有系統(tǒng)調(diào)用到起始指令指針和指向該系統(tǒng)調(diào)用的文字和動態(tài)數(shù)據(jù)結(jié)構(gòu)的起始數(shù)據(jù)指針的映射。加載程序組件可被多次調(diào)用,以加載安全程序的不同子程序用于處理不同的系統(tǒng)調(diào)用。由于指令和數(shù)據(jù)是基于偏移的,指令和數(shù)據(jù)可被儲存在指令存儲和數(shù)據(jù)存儲的下一可用位置。在塊501,組件將當(dāng)前指令指針設(shè)為安全程序的起始指令指針,并將行動輸出集復(fù)位成初始狀態(tài)(如,空)。在塊502-504,組件循環(huán)將系統(tǒng)調(diào)用的參數(shù)儲存到系統(tǒng)調(diào)用參數(shù)數(shù)據(jù)結(jié)構(gòu)中。在塊502,組件選擇系統(tǒng)調(diào)用的下一參數(shù)。在判別塊503,如果已選擇了系統(tǒng)調(diào)用的所有參數(shù),則組件在塊505繼續(xù),否則組件在塊504繼續(xù)。在塊504,組件將所選擇的參數(shù)儲存在系統(tǒng)調(diào)用參數(shù)數(shù)據(jù)結(jié)構(gòu)的適當(dāng)表中,然后循環(huán)到塊502以選擇系統(tǒng)調(diào)用的下一參數(shù)。在塊505-507,組件循環(huán)將進程控制信息儲存在進程控制數(shù)據(jù)結(jié)構(gòu)中。在塊505,組件為發(fā)出系統(tǒng)調(diào)用的進程選擇下一進程控制信息。在判別塊506,如果已選擇了所有的進程控制信息,則組件在塊508繼續(xù),否則組件在塊507繼續(xù)。在塊507,組件將所選擇的進程控制信息儲存到進程控制數(shù)據(jù)結(jié)構(gòu)中,然后循環(huán)到塊505以選擇下一進程控制信息?;蛘撸c使用并初始化內(nèi)部進程控制數(shù)據(jù)結(jié)構(gòu)相反,安全系統(tǒng)可在需要時直接從進程控制塊檢索進程控制信息。本領(lǐng)域的技術(shù)人員可以理解,進程控制塊由操作系統(tǒng)在創(chuàng)建進程時創(chuàng)建。在塊508,組件啟動安全虛擬機器以在截取的系統(tǒng)調(diào)用上實施安全政策。在由安全虛擬機器完成了安全程序的執(zhí)行之后,組件執(zhí)行行動輸出集的行動。
圖6所示是一個實施例中安全虛擬機器的處理器引擎的處理的流程圖。處理器引擎基于截取的系統(tǒng)調(diào)用而初始化系統(tǒng)調(diào)用參數(shù)存儲、運行安全虛擬機器、并執(zhí)行輸出行動集的行動。在塊601-607,處理器引擎循環(huán)加載并執(zhí)行儲存在指令存儲中的安全程序的指令,直到執(zhí)行了停止指令。在一個實施例中,安全政策可定義為,只要滿足一規(guī)則的條件,就不測試其它規(guī)則。在塊601,處理器引擎取出由當(dāng)前指令指針指向的指令。在塊602,處理器引擎調(diào)用組件以對參數(shù)1和參數(shù)2解除引用。在判別塊603,如果指令的操作碼是測試操作,則處理器引擎在塊604繼續(xù)。如果指令的操作碼是非測試操作(除停止操作之外),則處理器引擎在塊608繼續(xù)。如果指令的操作碼是停止操作,則處理器引擎在塊609繼續(xù)。在塊604,處理器引擎調(diào)用求值測試組件來確定測試操作是求值為真還是假。調(diào)用的組件將條件碼標(biāo)志設(shè)為真或假。在判別塊605,如果條件碼為真,則處理器引擎在塊607繼續(xù),否則處理器引擎在塊606繼續(xù)。在塊606,處理器引擎將假分支字段的偏移添加到當(dāng)前指令指針,然后循環(huán)到塊601以取出下一指令。在塊607,處理器引擎將真分支字段的偏移添加到當(dāng)前指令指針,然后循環(huán)到塊601以取出下一指令。在塊608,處理器引擎調(diào)用執(zhí)行非測試組件,然后循環(huán)到塊601以取出下一指令。執(zhí)行非測試組件執(zhí)行指令的操作,并將當(dāng)前指令指針設(shè)為指向要執(zhí)行的下一指令。執(zhí)行非測試組件將指令的真分支的偏移(或在跳轉(zhuǎn)指令的情況下為參數(shù)2)添加到指令指針。在塊609,組件執(zhí)行停止指令,然后完成。
圖7所示是一個實施例中安全虛擬機器的解除引用組件的處理的流程圖。該組件對取出的指令的參數(shù)1和參數(shù)2解除引用。在塊701-708,組件對參數(shù)1解除引用。在判別塊701,如果參數(shù)1是如由參數(shù)1描述符指示的系統(tǒng)調(diào)用參數(shù),則組件在塊703繼續(xù),否則組件在塊702繼續(xù)。在塊702,組件將解除引用的參數(shù)1設(shè)為由參數(shù)1的索引指定的進程控制信息,然后在塊709繼續(xù)。在判別塊703,如果參數(shù)1的索引指示該系統(tǒng)調(diào)用參數(shù)是整型,則組件在塊704繼續(xù),否則組件在塊705繼續(xù)。在塊704,組件將解除引用的參數(shù)1設(shè)為由索引指定的整型,并在塊709繼續(xù)。在判別塊705,如果參數(shù)1的索引指示系統(tǒng)調(diào)用參數(shù)是字符串,則組件在塊706繼續(xù),否則組件在塊707繼續(xù)。在塊706,組件將解除引用的參數(shù)1設(shè)為由索引指定的字符串,并在塊709繼續(xù)。在判別塊707,如果參數(shù)1的索引指示系統(tǒng)調(diào)用參數(shù)是原始二進制,則組件在塊708繼續(xù),否則發(fā)生錯誤。在塊708,組件將解除引用的參數(shù)1設(shè)為由索引指定的原始二進制,并在塊709繼續(xù)。在塊709-714,組件對參數(shù)2解除引用。在判別塊709,如果參數(shù)2描述符指示直接數(shù)據(jù),則組件在塊710繼續(xù),否則組件在塊711繼續(xù)。在塊710,組件將解除引用的參數(shù)2設(shè)為取出的指令中的參數(shù)2的值,然后返回。在判別塊711,如果參數(shù)2描述符指示文字?jǐn)?shù)據(jù),則組件在塊712繼續(xù),否則組件在塊713繼續(xù)。在塊712,組件將解除引用的參數(shù)2設(shè)為由取出的指令中的參數(shù)2指示的文字?jǐn)?shù)據(jù),然后返回。在判別塊713,如果參數(shù)2描述符指示動態(tài)數(shù)據(jù),則組件在塊714繼續(xù),否則發(fā)生錯誤。在塊714,組件將解除引用的參數(shù)2設(shè)為由取出的指令中的參數(shù)2指定的動態(tài)數(shù)據(jù),然后返回。
圖8所示是一個實施例中安全虛擬機器的求值測試組件的處理的流程圖。該組件對加載的指令的操作碼進行解碼,并調(diào)用一組件實現(xiàn)對該操作碼的測試。調(diào)用的組件將條件碼設(shè)為真或假。在判別塊801-803,組件對加載的指令的操作碼進行解碼。在塊804-806,該組件調(diào)用實現(xiàn)該經(jīng)解碼的操作碼的組件,然后返回。
圖9所示是一個實施例中安全虛擬機器的測試組件的處理的流程圖。測試組件實現(xiàn)測試操作碼。在901,組件將條件碼設(shè)為解除引用的參數(shù)2的值,然后返回。
圖10所示是一個實施例中的安全虛擬機器的匹配字符串組件的處理的流程圖。該組件確定解除引用的參數(shù)1是否與解除引用的參數(shù)2相匹配。在一個實施例中,安全虛擬機器可使用模式匹配。例如,參數(shù)可包括“通配符”規(guī)范或更一般地包括正則表達式。在判別塊1001,如果參數(shù)1和參數(shù)2的長度相匹配,則組件在塊1003繼續(xù),否則解除引用的參數(shù)不能匹配,并且組件在塊1002繼續(xù)。在塊1002,組件將條件碼設(shè)為假然后返回。在塊1003-1006,組件循環(huán)核查解除引用參數(shù)的字符串的每一字符。在塊1003,組件選擇每一字符串的下一字符。在判別塊1004,如果已選擇了該字符串的所有字符,則組件在塊1008繼續(xù),否則組件在塊1005繼續(xù)。在塊1005,組件歸一化所選擇的字符。例如,組件可將每一字符設(shè)為小寫以實現(xiàn)大小寫不敏感比較。在判別塊1006,如果所選擇的字符相匹配,則組件循環(huán)到塊1003以選擇該字符串的下一字符,否則組件在塊1007繼續(xù)。在塊1007,組件將條件碼設(shè)為假然后返回。在塊1008,該字符串的所有字符相匹配,組件將條件碼設(shè)為真然后返回。
圖11所示是一個實施例中安全虛擬機器的非測試組件的處理的流程圖。該組件執(zhí)行取出的指令的非測試操作碼的操作,包括將當(dāng)前指令指針設(shè)為指向要執(zhí)行的下一指令。在判別塊1101,如果操作碼是行動操作,則組件在塊1102繼續(xù),否則組件在塊1103繼續(xù)。在塊1102,組件將取出的指令的參數(shù)2添加到行動輸出集,然后在塊1107繼續(xù)。在判別塊1103,如果操作碼是復(fù)位操作,則組件在塊1104繼續(xù),否則組件在塊1105繼續(xù)。在塊1104,組件將行動輸出集清零,然后在塊1107繼續(xù)。在判別塊1105,如果操作碼是跳轉(zhuǎn)操作,則組件在塊1106繼續(xù),否則組件繼續(xù)解碼更多的操作碼。在塊1106,組件將參數(shù)2添加到當(dāng)前指令指針,然后返回。在塊1107,組件將真分支字段的值添加到當(dāng)前指令指針,然后返回。
本領(lǐng)域的技術(shù)人員可以理解,盡管此處為說明目的描述了安全系統(tǒng)的特定實施例,然而可在不脫離本發(fā)明的精神和范圍的情況下作出各種修改。本領(lǐng)域的技術(shù)人員可以理解,使用安全虛擬機器的安全系統(tǒng)可用于實施各種各樣的安全政策。例如,安全系統(tǒng)可用于實施通過網(wǎng)絡(luò)接收的消息、由交易處理器接收的交易、以及更一般地提供應(yīng)用編程接口的任何應(yīng)用程序的安全。另外,本發(fā)明不受權(quán)利要求書以外的任何內(nèi)容的限制。
權(quán)利要求
1.一種計算機系統(tǒng)中用于實施安全政策的方法,其特征在于,所述方法包括提供一安全政策;基于一安全虛擬機器的指令集將所述安全政策編譯成一安全程序;將所述安全程序加載到所述安全虛擬機器的指令存儲中;以及在出現(xiàn)一安全實施事件時,基于所述安全實施事件的數(shù)據(jù)執(zhí)行所述指令存儲的指令,以實施所述安全政策。
2.如權(quán)利要求1所述的方法,其特征在于,所述安全政策為系統(tǒng)調(diào)用指定了安全性。
3.如權(quán)利要求1所述的方法,其特征在于,所述安全實施事件是應(yīng)用程序發(fā)出一系統(tǒng)調(diào)用。
4.如權(quán)利要求3所述的方法,其特征在于,所述系統(tǒng)調(diào)用的參數(shù)是所述安全實施事件的數(shù)據(jù)。
5.如權(quán)利要求3所述的方法,其特征在于,發(fā)出所述系統(tǒng)調(diào)用的應(yīng)用程序的進程控制信息是所述安全實施事件的數(shù)據(jù)。
6.如權(quán)利要求1所述的方法,其特征在于,所述安全程序的數(shù)據(jù)被儲存在一文字?jǐn)?shù)據(jù)結(jié)構(gòu)中。
7.如權(quán)利要求6所述的方法,其特征在于,一指令包含對儲存在所述文字?jǐn)?shù)據(jù)結(jié)構(gòu)中的文字?jǐn)?shù)據(jù)的引用。
8.如權(quán)利要求1所述的方法,其特征在于,所述安全程序的數(shù)據(jù)被儲存在一動態(tài)數(shù)據(jù)結(jié)構(gòu)中。
9.如權(quán)利要求8所述的方法,其特征在于,一指令包含對儲存在所述動態(tài)數(shù)據(jù)結(jié)構(gòu)中的動態(tài)數(shù)據(jù)的引用。
10.如權(quán)利要求1所述的方法,其特征在于,一指令標(biāo)識要執(zhí)行的下一指令的位置。
11.如權(quán)利要求1所述的方法,其特征在于,所述安全虛擬機器支持布爾型、整型、字符串和原始二進制數(shù)據(jù)類型。
12.如權(quán)利要求1所述的方法,其特征在于,所述安全虛擬機器支持正則表達式模式匹配比較。
13.如權(quán)利要求1所述的方法,其特征在于,所述安全程序的執(zhí)行創(chuàng)建一輸出行動集,它指定了如何處理所述安全實施事件。
14.如權(quán)利要求1所述的方法,其特征在于,所述指令的執(zhí)行是在內(nèi)核模式中執(zhí)行的。
15.如權(quán)利要求1所述的方法,其特征在于,一指令包括操作碼、參數(shù)和分支字段。
16.如權(quán)利要求15所述的方法,其特征在于,所述分支字段包括一真分支字段,它指定了當(dāng)所述指令的條件求值為真時的下一指令;以及一假分支字段,它指定了當(dāng)所述指令的條件求值為假時的下一指令。
17.如權(quán)利要求1所述的方法,其特征在于,所述安全實施指定了要阻擋的行為。
18.一種用于檢測應(yīng)用程序何時發(fā)出具有妨礙安全政策的參數(shù)的系統(tǒng)調(diào)用的安全虛擬機器,其特征在于,包括一指令存儲,它包含實現(xiàn)所述安全政策的指令;一數(shù)據(jù)存儲,它包含所述安全政策的數(shù)據(jù);一參數(shù)存儲,它包含系統(tǒng)調(diào)用的參數(shù);以及一處理器引擎,它使用所述數(shù)據(jù)存儲的數(shù)據(jù)和所述參數(shù)存儲的參數(shù)指令所述指令存儲的指令,以確定所述系統(tǒng)調(diào)用是否妨礙所述安全政策。
19.如權(quán)利要求18所述的安全虛擬機器,其特征在于,實現(xiàn)所述安全政策的指令是從以高級語言表示的所述安全政策編譯的。
20.如權(quán)利要求19所述的安全虛擬機器,其特征在于,所述高級語言是基于XML的格式。
21.如權(quán)利要求19所述的安全虛擬機器,其特征在于,所述高級語言具有按照條件以及滿足條件時要執(zhí)行的行動來指定的規(guī)則。
22.如權(quán)利要求18所述的安全虛擬機器,其特征在于,所述安全虛擬機器在內(nèi)核模式執(zhí)行。
23.如權(quán)利要求18所述的安全虛擬機器,其特征在于,一系統(tǒng)調(diào)用截取組件在所述參數(shù)存儲中儲存所截取的系統(tǒng)調(diào)用的參數(shù)。
24.如權(quán)利要求18所述的安全虛擬機器,其特征在于,一加載程序組件將指令加載到所述指令存儲中。
25.如權(quán)利要求18所述的安全虛擬機器,其特征在于,所述指令集是精簡指令集。
26.如權(quán)利要求18所述的安全虛擬機器,其特征在于,一進程控制信息存儲用于儲存當(dāng)執(zhí)行所述指令時使用的進程控制信息。
27.如權(quán)利要求18所述的安全虛擬機器,其特征在于,所述數(shù)據(jù)存儲包括一文字?jǐn)?shù)據(jù)結(jié)構(gòu)和一動態(tài)數(shù)據(jù)結(jié)構(gòu)。
28.如權(quán)利要求18所述的安全虛擬機器,其特征在于,指令包含到所述數(shù)據(jù)存儲的引用。
29.如權(quán)利要求18所述的安全虛擬機器,其特征在于,每一指令標(biāo)識要執(zhí)行的下一指令的位置。
30.如權(quán)利要求18所述的安全虛擬機器,其特征在于,所述安全虛擬機器支持布爾型、整型、字符串和原始二進制數(shù)據(jù)類型。
31.如權(quán)利要求18所述的安全虛擬機器,其特征在于,所述虛擬機器支持正則表達式模式匹配比較。
32.如權(quán)利要求18所述的安全虛擬機器,其特征在于,所述指令的執(zhí)行創(chuàng)建一輸出行動集,它指定了如何處理所述安全政策的實施。
33.如權(quán)利要求18所述的安全虛擬機器,其特征在于,一指令包括操作碼、參數(shù)和分支字段。
34.如權(quán)利要求18所述的安全虛擬機器,其特征在于,所述分支字段包括一真分支字段,它指定了當(dāng)所述指令的條件求值為真時的下一指令;以及一假分支字段,它指定了當(dāng)所述指令的條件求值為真時的下一指令。
35.一種包含用于實施安全政策的指令的計算機可讀介質(zhì),所述指令用于由一安全虛擬機器執(zhí)行,并且是從所述安全政策的高級語言表示編譯的。
36.如權(quán)利要求35所述的計算機可讀介質(zhì),其特征在于,還包括用于實施所述安全政策的數(shù)據(jù)的數(shù)據(jù)存儲。
37.如權(quán)利要求35所述的計算機可讀介質(zhì),其特征在于,所述數(shù)據(jù)存儲包括文字?jǐn)?shù)據(jù)和動態(tài)數(shù)據(jù)。
38.如權(quán)利要求35所述的計算機可讀介質(zhì),其特征在于,所述指令形成一可重定位的安全子程序。
39.如權(quán)利要求35所述的計算機可讀介質(zhì),其特征在于,每一指令標(biāo)識要執(zhí)行的下一指令。
全文摘要
提供了一種用于實施以安全虛擬機器的指令集編碼的安全政策的方法和系統(tǒng)。安全系統(tǒng)提供了執(zhí)行以安全虛擬機器的指令集表達的安全程序的安全虛擬機器。安全系統(tǒng)將安全程序儲存在安全虛擬機器的指令存儲中。當(dāng)發(fā)生安全實施事件時,安全虛擬機器使用安全實施事件的數(shù)據(jù)執(zhí)行其指令存儲的指令,以實施安全政策。
文檔編號G06F9/455GK1690957SQ20051006264
公開日2005年11月2日 申請日期2005年3月29日 優(yōu)先權(quán)日2004年4月27日
發(fā)明者A·H·貝克 申請人:微軟公司