国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      安全相關(guān)的編程接口的制作方法

      文檔序號:6431696閱讀:216來源:國知局
      專利名稱:安全相關(guān)的編程接口的制作方法
      技術(shù)領(lǐng)域
      本發(fā)明描述的系統(tǒng)和方法涉及計(jì)算系統(tǒng),尤其涉及一種與處理諸如安全相關(guān)事件等事件和其它信息關(guān)聯(lián)的接口。
      背景技術(shù)
      計(jì)算機(jī)系統(tǒng)正在變得越來越普及,并經(jīng)常通過網(wǎng)絡(luò),如局域網(wǎng)(LAN)和因特網(wǎng)與其它計(jì)算機(jī)系統(tǒng)相互連接。諸如電子郵件(email)、即時(shí)消息通信和在線娛樂等特征鼓勵著耦合至網(wǎng)絡(luò)的計(jì)算機(jī)系統(tǒng)的使用。這些特征允許用戶例如,與其它用戶進(jìn)行通信、檢索音頻和/或視頻內(nèi)容并通過在線來源購買產(chǎn)品或服務(wù)。
      計(jì)算機(jī)系統(tǒng)的這一增加的互連增加了惡意用戶對計(jì)算機(jī)系統(tǒng)攻擊的可能性。這些攻擊可包括將惡意程序安裝到其它用戶的計(jì)算機(jī)上(如,企圖使其它用戶的計(jì)算機(jī)癱瘓、從其它用戶的計(jì)算機(jī)獲取信息、對其它計(jì)算機(jī)進(jìn)行攻擊等等)。攻擊也可包括試圖抑制計(jì)算機(jī)使得其性能被很大程度地削弱(如,通過生成發(fā)送到計(jì)算機(jī)的連續(xù)的請求流)。這些攻擊對計(jì)算機(jī)用戶可以是麻煩事情,并可導(dǎo)致丟失數(shù)據(jù)、破壞數(shù)據(jù)、從計(jì)算機(jī)復(fù)制保密數(shù)據(jù)或?qū)⒂?jì)算機(jī)呈現(xiàn)為不能操作。
      為防止或最小化這一攻擊的嚴(yán)重性,開發(fā)了各種安全程序和服務(wù)。這些程序和服務(wù)在計(jì)算機(jī)系統(tǒng)上執(zhí)行,并保護(hù)計(jì)算機(jī)免遭惡意攻擊。示例程序包括防病毒程序和防火墻程序。通常,這些程序或服務(wù)針對防止一種特定類型的攻擊。例如,防病毒程序?qū)τ?jì)算機(jī)病毒的加載和/或執(zhí)行進(jìn)行保護(hù),防火墻程序?qū)ν獠坑脩魧τ?jì)算機(jī)的非授權(quán)訪問進(jìn)行保護(hù)。
      不同的程序通常不能彼此進(jìn)行通信。例如,防病毒程序通常不向防火墻程序通報(bào)已檢測到了病毒的事實(shí)。由此,計(jì)算機(jī)系統(tǒng)中的各種安全程序?qū)o法了解計(jì)算機(jī)系統(tǒng)上的某些攻擊。期望提供一種準(zhǔn)許安全政策和事件信息在計(jì)算機(jī)系統(tǒng)的各種組件和安全程序中通信的接口。

      發(fā)明內(nèi)容
      本發(fā)明描述的系統(tǒng)和方法提供了一種與處理事件和其它信息以增強(qiáng)計(jì)算機(jī)系統(tǒng)的安全性的接口。在一個(gè)具體的實(shí)施例中,一種編程接口包括涉及向多個(gè)安全引擎?zhèn)鬟f新安全政策的第一組功能。多個(gè)安全引擎的每一個(gè)能夠用該新安全政策替換現(xiàn)有的安全政策。該編程接口也包括涉及傳遞每一安全引擎已準(zhǔn)備就緒來實(shí)現(xiàn)新安全政策的指示第二組功能。


      貫穿附圖,相同的標(biāo)號標(biāo)識相同的組件和/或特征。
      圖1示出了可生成并處理各種事件的示例環(huán)境。
      圖2示出了包含數(shù)據(jù)和規(guī)則的示例安全政策。
      圖3示出了由安全模塊維護(hù)的關(guān)于各種安全引擎請求的數(shù)據(jù)的示例表。
      圖4所示是用于檢索并分發(fā)安全政策規(guī)則和數(shù)據(jù)的過程的實(shí)施例的流程圖。
      圖5所示是用于處理更新安全政策數(shù)據(jù)的過程的實(shí)施例的流程圖。
      圖6所示是用于處理向一個(gè)或多個(gè)安全引擎的信息分發(fā)的過程的實(shí)施例的流程圖。
      圖7所示是用于更新安全政策的過程的實(shí)施例的流程圖。
      圖8所示是用于更新安全政策的過程的另一實(shí)施例的流程圖。
      圖9示出了一個(gè)通用計(jì)算環(huán)境。
      圖10-21示出了編程接口的各種示例實(shí)現(xiàn)。
      具體實(shí)施例方式
      本發(fā)明描述的系統(tǒng)和方法處理各種信息,如由一個(gè)或多個(gè)程序或服務(wù)生成的事件。此外,描述了一種準(zhǔn)許諸如安全相關(guān)信息等信息在計(jì)算機(jī)系統(tǒng)的各種組件和程序中通信的接口。計(jì)算系統(tǒng)包括從多個(gè)來源,如安全引擎和其它計(jì)算系統(tǒng)接收事件和其它信息的事件管理器。示例安全引擎包括防病毒引擎、防火墻引擎和入侵檢測引擎。事件管理器將從特定的來源接收的事件信息傳遞到可使用該信息來提高提供給計(jì)算系統(tǒng)的安全級別的一個(gè)或多個(gè)安全引擎。
      盡管本發(fā)明所討論的具體示例涉及安全相關(guān)事件和其它安全相關(guān)信息,替換實(shí)施例可處理任一類型的事件或信息。該信息包括可由主計(jì)算機(jī)中的安全相關(guān)組件使用的任一信息。其它實(shí)施例可接收、處理并分發(fā)未必涉及主計(jì)算機(jī)的安全性的信息。術(shù)語“接口”、“程序接口”和“應(yīng)用程序接口(API)”在這里可互交換地使用。
      事件處理圖1示出了可生成并處理各種事件的示例環(huán)境100。事件包括,例如,計(jì)算機(jī)病毒的檢測、訪問保密數(shù)據(jù)的嘗試的檢測、破壞了計(jì)算機(jī)病毒的通知、特定應(yīng)用程序被暫停或防止執(zhí)行的通知、系統(tǒng)狀態(tài)信息的改變等等。主計(jì)算機(jī)102通過網(wǎng)絡(luò)108耦合至多個(gè)服務(wù)器104和106。主計(jì)算機(jī)102和服務(wù)器104和106可以是任一類型的計(jì)算設(shè)備,如下文參考圖9所討論的設(shè)備。網(wǎng)絡(luò)108可以是任一類型的數(shù)據(jù)通信網(wǎng)絡(luò),如局域網(wǎng)(LAN)、廣域網(wǎng)(WAN)、因特網(wǎng)等等。盡管圖1示出了主計(jì)算機(jī)102耦合至兩個(gè)服務(wù)器104和106,主計(jì)算機(jī)102可耦合至任意數(shù)量的服務(wù)器或能夠與主計(jì)算機(jī)通信的其它設(shè)備。
      環(huán)境100可表示各種設(shè)置的任一個(gè),如家庭網(wǎng)絡(luò)、商業(yè)、教育、研究等設(shè)置。例如,服務(wù)器104可以是企業(yè)LAN上的服務(wù)器設(shè)備,主計(jì)算機(jī)102可以是企業(yè)LAN上的臺式或者便攜式計(jì)算設(shè)備。作為另一示例,服務(wù)器104可以是因特網(wǎng)上的服務(wù)器設(shè)備,主計(jì)算機(jī)102可以是用戶家中的桌面計(jì)算設(shè)備。
      主計(jì)算機(jī)102包括安全模塊110,它執(zhí)行各種安全相關(guān)功能,如監(jiān)控、檢測并響應(yīng)主計(jì)算機(jī)102上的攻擊。安全模塊110包括耦合至三個(gè)安全引擎114、116和118的事件管理器112。安全引擎可以是在對惡意用戶和/或惡意程序進(jìn)行保護(hù)中有幫助的任一服務(wù)。安全引擎114-118可以軟件、硬件或軟件和硬件的組合實(shí)現(xiàn)。特定的安全引擎是安全相關(guān)應(yīng)用程序,如防病毒程序和入侵檢測程序。安全引擎114-118也可被稱為“服務(wù)”。特定的安全模塊110可包括耦合至事件管理器112的任意數(shù)量的安全引擎。安全模塊110也可包括其它模塊、組件或應(yīng)用程序(未示出),如安全相關(guān)政策讀取器或其它政策處理機(jī)制。
      安全模塊110也耦合至系統(tǒng)狀態(tài)信息120和系統(tǒng)配置信息122。系統(tǒng)狀態(tài)信息120包括關(guān)于主計(jì)算機(jī)102的當(dāng)前操作狀態(tài)或操作模式的信息。系統(tǒng)配置信息122包括關(guān)于如何配置主計(jì)算機(jī)102的信息。系統(tǒng)狀態(tài)信息120和系統(tǒng)配置信息122可儲存在非易失存儲設(shè)備中,如存儲器設(shè)備或硬盤設(shè)備。在一個(gè)實(shí)施例中,事件管理器112和安全引擎114-118能夠接收系統(tǒng)狀態(tài)信息120和系統(tǒng)配置信息122。
      主計(jì)算機(jī)102也包括準(zhǔn)許安全政策和事件信息在主計(jì)算機(jī)102或其它設(shè)備的各種組件和程序中通信的應(yīng)用程序接口(API)124。例如,API124允許組件或程序與安全引擎114-118或事件管理器112進(jìn)行通信來發(fā)送或接收安全相關(guān)信息。API124也方便了,例如,加載新安全引擎、上傳現(xiàn)有的安全引擎、向安全引擎發(fā)送安全政策、將數(shù)據(jù)中的變化傳遞到安全引擎、與安全引擎的用戶交互以及安全引擎的集中式配置管理。下文將討論關(guān)于API124的另外的細(xì)節(jié)。
      盡管未在圖1中示出,另外的數(shù)據(jù)源或數(shù)據(jù)提供者可將信息和事件傳遞到安全模塊112和事件管理器112。另外的數(shù)據(jù)包括,例如,涉及因特網(wǎng)信息服務(wù)(IIS)的配置信息、由系統(tǒng)管理應(yīng)用程序提供的數(shù)據(jù)、包含在系統(tǒng)注冊表中的數(shù)據(jù)以及由系統(tǒng)的用戶或管理員提供的信息。
      每一安全引擎114-118執(zhí)行某些安全相關(guān)功能來幫助保護(hù)主計(jì)算機(jī)102免遭惡意用戶或應(yīng)用程序侵?jǐn)_。這些惡意用戶或應(yīng)用程序可試圖禁用主計(jì)算機(jī)102或禁用主計(jì)算機(jī)102的功能、從主計(jì)算機(jī)獲取數(shù)據(jù)(如,密碼或其它保密信息)、或使用主計(jì)算機(jī)(如,協(xié)助攻擊其它計(jì)算機(jī)系統(tǒng))。例如,安全引擎114檢測計(jì)算機(jī)病毒,安全引擎116提供防火墻保護(hù),而安全引擎118基于一個(gè)或多個(gè)用戶特權(quán)或特征阻塞特定應(yīng)用程序的執(zhí)行。在該示例中,安全引擎114保護(hù)主計(jì)算機(jī)102免遭計(jì)算機(jī)病毒、蠕蟲、特洛伊木馬等的感染。另外,防火墻保護(hù)包括保護(hù)主計(jì)算機(jī)102免遭其它設(shè)備通過網(wǎng)絡(luò)連接的訪問。阻塞特定應(yīng)用程序的執(zhí)行包括防止不具有合適的特權(quán)的用戶在主計(jì)算機(jī)102上執(zhí)行應(yīng)用程序。另外,如果檢測到了不正確的行為,如不正確的網(wǎng)絡(luò)訪問或不正確的存儲設(shè)備訪問,應(yīng)用程序的執(zhí)行將被阻塞。
      在其它實(shí)施例中,一個(gè)或多個(gè)安全引擎可執(zhí)行入侵檢測或攻擊分析。入侵檢測包括,例如,當(dāng)惡意應(yīng)用程序和/或用戶訪問主計(jì)算機(jī)102時(shí)進(jìn)行標(biāo)識,以及采取適當(dāng)?shù)男袆觼硗ㄖ脩艋蚬芾韱T、試圖禁用惡意應(yīng)用程序或暫停惡意用戶的訪問。攻擊分析包括,例如,試圖檢測主計(jì)算機(jī)102中由于未正確地安裝或更新安全引擎或其它組件、未適當(dāng)?shù)嘏渲冒踩婊蚱渌M件、未安裝補(bǔ)丁或熱修理、密碼不符合需要的長度或需要的字符等等而產(chǎn)生的弱點(diǎn)。特定的安全引擎114-1118可知道耦合至事件管理器112的其它安全引擎的存在和功能。
      每一安全引擎114-118向事件管理器112傳遞事件(如,計(jì)算機(jī)病毒的檢測、從主計(jì)算機(jī)102檢索數(shù)據(jù)的嘗試的檢測或防止用戶執(zhí)行應(yīng)用程序)。這些事件包括由安全引擎收集的信息、由安全引擎采取的行動、由事件管理器從一個(gè)或多個(gè)數(shù)據(jù)源收集的信息等等。示例信息包括在特定安裝中例示的所有虛擬服務(wù)器的清單。事件管理器112處理這些事件并把包含在特定事件中的信息傳遞到可從這些信息獲益的其它安全引擎114-118。
      安全模塊110也接收包括一個(gè)或多個(gè)規(guī)則和各種數(shù)據(jù)的安全相關(guān)政策。如需要,事件管理器112將規(guī)則分發(fā)到適當(dāng)?shù)陌踩?14-118,并向安全引擎提供數(shù)據(jù)。每一安全引擎114-118儲存從事件管理器112接收的這些規(guī)則和數(shù)據(jù)。安全模塊110、事件管理器112和安全引擎114-118的操作在后文更詳細(xì)討論。
      圖2示出了包含數(shù)據(jù)和規(guī)則的示例安全政策200。在一個(gè)實(shí)施例中,安全政策200儲存在安全模塊110中。特定的安全模塊可接收并儲存從任意數(shù)量的不同數(shù)據(jù)源接收的任意數(shù)量的不同的安全政策200??蛇x地,安全政策200可儲存在主計(jì)算機(jī)102內(nèi)的另一模塊或組件中。在圖2的示例中,安全政策200的數(shù)據(jù)部分202包括一個(gè)或多個(gè)數(shù)據(jù)元素。如圖2所示,這些數(shù)據(jù)元素包括分配給變量的值(如,值“1”分配給變量“A”,值“4”分配給變量“B”)。在其它實(shí)施例中,替代圖2所示的數(shù)據(jù)或除圖2所示的數(shù)據(jù)之外,可包括其它類型的數(shù)據(jù)。例如,包含在安全政策200中的數(shù)據(jù)由包含在安全政策200或包含在一個(gè)或多個(gè)其它安全政策中的一個(gè)或多個(gè)規(guī)則使用。
      安全政策200也包括包含多個(gè)規(guī)則的規(guī)則部分204。安全政策200中的規(guī)則部分可與一個(gè)或多個(gè)安全引擎關(guān)聯(lián)。例如,某些規(guī)則可僅由特定的安全引擎應(yīng)用。規(guī)則可基于其所關(guān)聯(lián)的安全引擎在安全政策200中排列??蛇x地,與每一規(guī)則關(guān)聯(lián)的標(biāo)識符可標(biāo)識能夠應(yīng)用該規(guī)則的安全引擎。在特定的實(shí)施例中,規(guī)則可與任意數(shù)量的安全引擎關(guān)聯(lián)。在其它實(shí)施例中,主計(jì)算機(jī)可以不包含應(yīng)用特定規(guī)則的安全引擎。在這一情況下,該規(guī)則不與任一安全引擎關(guān)聯(lián)。
      在圖2的示例中,使用“如果—則”(IF-THEN)結(jié)構(gòu)來定義規(guī)則??蛇x地,規(guī)則組可采用各種不同的形式。使用圖2所示的“如果—則”規(guī)則,該規(guī)則定義了特定的條件和對應(yīng)的特定行動或結(jié)果。在實(shí)施規(guī)則的過程中,如果檢測到了特定的條件,則執(zhí)行對應(yīng)的特定行動或結(jié)果。規(guī)則可標(biāo)識各種不同的條件和對應(yīng)的行動或結(jié)果。示例條件包括試圖訪問資源(如,存儲器位置、網(wǎng)絡(luò)地址或端口、其它程序、或存儲設(shè)備上的文件)、試圖向特定位置寫入數(shù)據(jù)(如,特定存儲器位置或存儲設(shè)備上的特定位置)、試圖運(yùn)行特定的程序以及主計(jì)算機(jī)102的當(dāng)前操作狀態(tài)的各方面。示例結(jié)果包括防止資源被讀取、防止數(shù)據(jù)被寫入到特定位置、防止程序被運(yùn)行或生成檢測到了規(guī)則中的條件的出現(xiàn)的通知(如,在記錄中記錄其出現(xiàn)或向用戶或其它計(jì)算機(jī)發(fā)送消息)。特定的結(jié)果也可以是本質(zhì)上許可而非防止。例如,結(jié)果可指示僅當(dāng)主計(jì)算機(jī)102滿足規(guī)則中的條件時(shí)可訪問特定資源或位置,或僅當(dāng)主計(jì)算機(jī)102滿足規(guī)則中的條件時(shí)可運(yùn)行特定的程序。
      規(guī)則的另外的示例包括準(zhǔn)許某些應(yīng)用程序或服務(wù)更新特定目錄或文件夾中的數(shù)據(jù)文件、如果啟用了文件傳輸協(xié)議(FTP)則起用端口21上通信量的接收、以及如果檢測到了特定的病毒簽名則生成病毒警告消息。其它示例包括如果特定的應(yīng)用程序未升級到特定的修訂級則生成事件、如果應(yīng)用程序未升級到最小修訂級則防止對網(wǎng)絡(luò)的訪問、以及防止主計(jì)算機(jī)通過網(wǎng)絡(luò)端口35接收數(shù)據(jù)。
      圖3示出了由安全模塊維護(hù)的關(guān)于各種安全引擎請求的數(shù)據(jù)的示例表300。在一個(gè)實(shí)施例中,表300儲存在安全模塊110中。可選地,表300可儲存在主計(jì)算機(jī)102內(nèi)的另一模塊或組件中。每次安全引擎從安全模塊請求數(shù)據(jù),安全模塊都更新該表(如必需)以包括該數(shù)據(jù)請求。表300的第一列302標(biāo)識具體的數(shù)據(jù)元素,如變量或其它標(biāo)識符或信息。表300的第二列標(biāo)識先前曾請求相關(guān)數(shù)據(jù)元素的任一安全引擎。例如,表300標(biāo)識出數(shù)據(jù)元素“A”先前由安全引擎“1”請求。類似地,數(shù)據(jù)元素“D”先前由安全引擎“1”、“4”和“6”請求。如后文更詳細(xì)討論的,包含在表300內(nèi)的信息由安全模塊用于確定哪一安全引擎應(yīng)當(dāng)接收更新的數(shù)據(jù)。
      圖4所示是用于檢索并分發(fā)安全政策規(guī)則和數(shù)據(jù)的過程400的實(shí)施例的流程圖。例如,可在主計(jì)算機(jī)的初始化之后執(zhí)行過程400。最初,安全模塊檢索用于主計(jì)算機(jī)的安全政策(塊402)。事件管理器標(biāo)識安全政策中涉及每一安全引擎的規(guī)則(塊404)。事件管理器然后將該規(guī)則傳遞到適當(dāng)?shù)陌踩?塊406)。
      每一安全引擎例如通過標(biāo)識包含在安全引擎將應(yīng)用的規(guī)則內(nèi)的數(shù)據(jù)元素,來標(biāo)識應(yīng)用其關(guān)聯(lián)的規(guī)則所必需的數(shù)據(jù)(408)。每一安全引擎然后從事件管理器請求其標(biāo)識的數(shù)據(jù)(塊410)。在從安全引擎接收了數(shù)據(jù)請求之后,事件管理器在表(如圖3的表300)中記錄請求的數(shù)據(jù)元素或其它數(shù)據(jù)結(jié)構(gòu)用于將來參考(塊412)。最后,事件管理器查找請求的數(shù)據(jù)并將該數(shù)據(jù)提供給請求的安全引擎(塊414)。由此,事件管理器向每一請求的安全引擎提供所請求的數(shù)據(jù),而不是向所有的安全引擎提供所有數(shù)據(jù)。
      圖5所示是用于處理更新的安全政策數(shù)據(jù)的過程500的實(shí)施例的流程圖。最初,安全模塊接收更新的數(shù)據(jù)(塊502)。例如,更新的數(shù)據(jù)可包括對現(xiàn)有變量的更新值。安全模塊標(biāo)識先前曾請求現(xiàn)已更新的數(shù)據(jù)的一個(gè)或多個(gè)安全引擎(塊504)。在一個(gè)實(shí)施例中,安全模塊使用諸如圖3所示的表300等表來標(biāo)識這些安全引擎。在標(biāo)識適當(dāng)?shù)陌踩嬷?,安全模塊向每一標(biāo)識的安全引擎提供更新的數(shù)據(jù)(塊506)。最后,安全引擎用更新的數(shù)據(jù)更新其數(shù)據(jù)元素。在每次安全模塊接收更新數(shù)據(jù)時(shí)重復(fù)過程500。在另一實(shí)施例中,安全模塊周期性地檢查各種數(shù)據(jù)源的更新數(shù)據(jù)。如果數(shù)據(jù)已更新,則安全模塊檢索更新的數(shù)據(jù)并依照過程500分發(fā)該數(shù)據(jù)。
      在一個(gè)實(shí)施例中,當(dāng)規(guī)則被更新后,安全模塊標(biāo)識與該規(guī)則關(guān)聯(lián)的安全引擎并將更新的規(guī)則分發(fā)到標(biāo)識的安全引擎。如果接收了新規(guī)則,則安全模塊標(biāo)識可能使用該新規(guī)則的安全引擎并將該新規(guī)則分發(fā)到適當(dāng)?shù)陌踩?。類似地,如果刪除了現(xiàn)有規(guī)則,則安全模塊從與該規(guī)則關(guān)聯(lián)的所有安全引擎刪除該規(guī)則。在另一個(gè)實(shí)施例中,當(dāng)規(guī)則被更新時(shí),安全模塊創(chuàng)建一組新規(guī)則(包括更新的規(guī)則),并將該組新規(guī)則分發(fā)到安全引擎,由此替換了包含在安全引擎中的現(xiàn)有規(guī)則。
      圖6所示是用于處理諸如事件信息或系統(tǒng)狀態(tài)信息等信息向一個(gè)或多個(gè)安全引擎的分發(fā)的過程600的實(shí)施例的流程圖。最初,事件管理器從安全引擎接收事件(塊602)。事件管理器然后標(biāo)識包含在該事件內(nèi)的信息(塊604),如事件類型或生成該事件的攻擊的特性。事件管理器也標(biāo)識可使用包含在該事件內(nèi)的信息的其它安全引擎(塊606)。例如,在主計(jì)算機(jī)接收的安全規(guī)則中指定不同安全引擎之間的關(guān)系。這些關(guān)系可由系統(tǒng)管理員或其它系統(tǒng)操作員在創(chuàng)建安全政策時(shí)全部或部分地定義。
      下一步,事件管理器向標(biāo)識的安全引擎提供包含在事件內(nèi)的信息(塊608)。標(biāo)識的安全引擎然后應(yīng)用接收的信息(塊610)。這一事件信息的共享(或相關(guān))增強(qiáng)了主計(jì)算機(jī)提供的對惡意攻擊的安全級別。事件信息的共享由事件管理器處理,使得個(gè)別的安全引擎不需要知道包含在主計(jì)算機(jī)內(nèi)的其它安全引擎。本發(fā)明討論的安全相關(guān)信息可儲存在中央位置上,由此允許其它設(shè)備、組件和應(yīng)用程序訪問該信息。例如,其它安全引擎或計(jì)算系統(tǒng)可訪問儲存的安全相關(guān)信息。
      在過程600的一個(gè)示例中,防病毒安全引擎檢測通過特定端口訪問網(wǎng)絡(luò)的重復(fù)試圖。防病毒安全引擎向事件管理器報(bào)告這一信息(如,嘗試的訪問的日期和事件以及嘗試訪問的端口)。在該示例中,防病毒安全引擎不負(fù)責(zé)響應(yīng)這一訪問試圖。事件管理器從防病毒引擎接收信息,并確定入侵檢測安全引擎和防火墻安全引擎可使用該信息。在接收信息之后,入侵檢測安全引擎和防火墻安全引擎可基于接收的信息調(diào)整其操作。例如,入侵檢測安全引擎可增加它檢測入侵者的頻率。另外,防火墻安全引擎可臨時(shí)禁用嘗試訪問的端口。由此,通過允許安全引擎基于關(guān)于安全相關(guān)事件的共享信息調(diào)整其操作,提高了主計(jì)算機(jī)對攻擊的總體安全性。
      在過程600的另一示例中,弱點(diǎn)安全引擎檢測特定的補(bǔ)丁是否已安裝在主計(jì)算機(jī)上。如果未安裝補(bǔ)丁,則弱點(diǎn)安全引擎生成指示未安裝補(bǔ)丁的事件。如果未安裝補(bǔ)丁,則主防火墻安全引擎和行為阻塞安全引擎向事件管理器注冊用于通知。當(dāng)主防火墻安全引擎和行為阻塞安全引擎接收未安裝補(bǔ)丁的通知時(shí),安全引擎實(shí)施限制未打補(bǔ)丁的應(yīng)用程序的功能(或防止執(zhí)行)的規(guī)則。
      在另一實(shí)施例中,系統(tǒng)狀態(tài)信息在安全模塊的各種組件(如,事件管理器和多個(gè)安全引擎)中共享。該系統(tǒng)狀態(tài)信息可由各種數(shù)據(jù)源提供。示例系統(tǒng)狀態(tài)信息包括當(dāng)前網(wǎng)絡(luò)狀態(tài)、網(wǎng)絡(luò)連接是有線還是無線、主計(jì)算機(jī)正在訪問企業(yè)網(wǎng)絡(luò)還是未知網(wǎng)絡(luò)、以及主計(jì)算機(jī)配置信息。由此,如果安全引擎標(biāo)識了特定的系統(tǒng)狀態(tài)信息,則該標(biāo)識的信息可在其它安全引擎和主計(jì)算機(jī)中的其它組件或模塊中共享。
      在一個(gè)具體的實(shí)施例中,各種組件收集的系統(tǒng)狀態(tài)信息可儲存在中央位置上,由此提供了其它設(shè)備、組件和應(yīng)用程序?qū)υ撔畔⒌脑L問。例如,一個(gè)安全引擎收集的系統(tǒng)狀態(tài)信息可由其它安全引擎、安全模塊和計(jì)算系統(tǒng)訪問。
      安全政策更新如上所述,安全政策可用于描述要由例如安全引擎或安全提供器應(yīng)用的規(guī)則。當(dāng)對安全政策作出改變時(shí),向各種安全引擎提供更新的規(guī)則,并且這些各種安全引擎改變成在基本上同一時(shí)間開始使用更新的規(guī)則。
      除上文參考圖1討論的組件、程序和模塊之外,主計(jì)算機(jī)102從一個(gè)或多個(gè)源服務(wù)器,如服務(wù)器104和106接收安全政策。安全政策描述了主計(jì)算機(jī)102上的各種安全引擎應(yīng)當(dāng)如何操作。盡管在圖1中僅示出了一個(gè)主計(jì)算機(jī)102,可以理解,多個(gè)主計(jì)算機(jī)102可從同一源設(shè)備獲取安全政策。
      示例源設(shè)備包括桌面或工作站計(jì)算設(shè)備、服務(wù)器計(jì)算設(shè)備、便攜式或手持式計(jì)算設(shè)備、游戲控制臺、網(wǎng)絡(luò)器材、蜂窩電話、個(gè)人數(shù)字助理(PDA)、網(wǎng)絡(luò)設(shè)備(如,路由器、網(wǎng)關(guān)、防火墻、無線接入點(diǎn)等)等等。
      主計(jì)算機(jī)102也可包括政策讀取器模塊、規(guī)則讀取器模塊、規(guī)則組生成器模塊和動態(tài)規(guī)則數(shù)據(jù)存儲??梢岳斫猓@些模塊的一個(gè)或多個(gè)可組合成單個(gè)模塊,和/或這些模塊的一個(gè)或多個(gè)可分割成兩個(gè)或多個(gè)模塊。
      一般地,為更新安全引擎114-118實(shí)施的安全政策,政策讀取器從源設(shè)備獲取安全政策。規(guī)則組生成器使用新獲取的安全規(guī)則來為各種安全引擎的每一個(gè)生成一組一個(gè)或多個(gè)規(guī)則和相關(guān)數(shù)據(jù)。這些規(guī)則組然后被傳遞到各種安全引擎,并且相關(guān)的數(shù)據(jù)儲存在動態(tài)規(guī)則數(shù)據(jù)存儲中。相關(guān)的數(shù)據(jù)也可傳遞到安全引擎。在接收該組一個(gè)或多個(gè)規(guī)則之后,每一安全引擎處理該組新規(guī)則,準(zhǔn)備好開始使用該組新規(guī)則。然而,每一安全引擎繼續(xù)使用其當(dāng)前規(guī)則組,直到被指示改變到新組。規(guī)則管理器在從準(zhǔn)備好改變到新規(guī)則組的每一安全引擎接收指示之后,指示所有安全引擎改變到新規(guī)則組。
      在某些實(shí)施例中,規(guī)則管理器協(xié)調(diào)主計(jì)算機(jī)102中的安全政策的更新。規(guī)則管理器從各種安全引擎接收指示安全引擎已準(zhǔn)備好改變到新規(guī)則組的指示,并給予安全引擎何時(shí)開始使用新規(guī)則組的指示。
      政策讀取器模塊從源設(shè)備獲取新安全政策。政策讀取器模塊可被配置成以有規(guī)律或無規(guī)律的間隔檢查是否可從源獲得新安全規(guī)則,或可選地可從某一其它組件(如,規(guī)則管理器、源設(shè)備或圖1中未示出的某一設(shè)備)接收它應(yīng)當(dāng)從該源獲取新安全規(guī)則(或檢查該源上是否有新安全規(guī)則可用)的指示。政策讀取器可向源標(biāo)識政策讀取器期望獲取的特定安全政策,或可選地可僅從源為主計(jì)算機(jī)請求最近的安全政策??勺鞒鲋饔?jì)算機(jī)使用的當(dāng)前安全政策和最近的安全政策之間的比較,以確定是否已在主計(jì)算機(jī)上實(shí)施了最近的安全政策。這一比較可由源、政策讀取器或可選地某一其它組件作出。
      當(dāng)從源獲取新安全政策之后,規(guī)則組生成器為不同的安全引擎114-118的每一個(gè)生成規(guī)則組。當(dāng)在主計(jì)算機(jī)102上實(shí)施安全政策時(shí),不同的安全引擎可使用不同的規(guī)則。例如,一個(gè)安全引擎114可以是防火墻,而另一安全引擎116可以是防病毒組件。安全政策可標(biāo)識對防病毒引擎專用的規(guī)則(并且由此防火墻引擎不需要關(guān)注它們),并也可標(biāo)識對防火墻引擎專用的規(guī)則(并且由此防病毒引擎不需要關(guān)注它們)。
      在某些實(shí)施例中,安全政策本身是規(guī)則及相關(guān)數(shù)據(jù)的列表。安全政策也可包括哪些規(guī)則和數(shù)據(jù)用于哪些安全引擎的指示,或可選地不包括這一指示(如,依賴于主計(jì)算機(jī)來確定哪些規(guī)則用于哪些安全引擎)。安全政策允許設(shè)計(jì)者具有主計(jì)算機(jī)的保護(hù)中所涉及的所有規(guī)則的單個(gè)記錄或文件,而不需要在不同的記錄或文件上為不同的安全引擎分割規(guī)則。
      另外,使用本發(fā)明描述的技術(shù),可由將對特定攻擊進(jìn)行保護(hù)的責(zé)任從一個(gè)安全引擎轉(zhuǎn)移到另一個(gè)的設(shè)計(jì)者準(zhǔn)備新安全政策。例如,對特定類型攻擊的保護(hù)在一個(gè)安全政策中可由防病毒程序?qū)嵤?,但是在新安全政策中改變到由防火墻程序?qū)嵤?。使用本發(fā)明描述的技術(shù),設(shè)計(jì)者可確定該責(zé)任中的轉(zhuǎn)移將基本上并發(fā)地出現(xiàn)在所有安全引擎中,由此降低了在轉(zhuǎn)移過程中主計(jì)算機(jī)對攻擊的弱點(diǎn)。
      規(guī)則組生成器基于安全政策標(biāo)識哪些規(guī)則和相關(guān)數(shù)據(jù)(如果有的話)由哪些安全引擎使用。對于每一安全引擎,規(guī)則組生成器為該安全引擎生成規(guī)則組,并令生成的規(guī)則組對該安全引擎可用(如,該規(guī)則組可傳輸或發(fā)送到安全引擎、可向安全引擎通知可獲取生成的規(guī)則組的存儲器位置,等等)。可以各種不同的方式執(zhí)行這一生成。例如,可由規(guī)則組生成器在不考慮安全引擎實(shí)施的當(dāng)前規(guī)則的情況下生成新規(guī)則組。作為另一示例,可修改或改變當(dāng)前規(guī)則組來結(jié)合進(jìn)當(dāng)前規(guī)則組和新規(guī)則組之間的任一差異。另外,規(guī)則組生成器可僅復(fù)制來自安全政策的規(guī)則,或可選地,規(guī)則組生成器可基于描述該規(guī)則的安全政策中的信息生成規(guī)則。
      在某些實(shí)施例中,安全政策標(biāo)識哪些規(guī)則要分發(fā)到哪些安全引擎。例如,每一規(guī)則可與特定的標(biāo)簽或標(biāo)識符關(guān)聯(lián)(如,安全引擎1或防病毒引擎等)。規(guī)則組生成器可使用這些標(biāo)識符來為各種安全引擎生成規(guī)則組。在替換的實(shí)施例中,規(guī)則組生成器可推斷哪些規(guī)則要分發(fā)到哪些安全引擎。在其它實(shí)施例中,可使用這些技術(shù)的組合(如,對于某些規(guī)則,安全政策可標(biāo)識它們要分配給哪些安全引擎,而對于其它規(guī)則,安全政策生成器可推斷它們將分配給哪些安全政策)。
      規(guī)則組生成器生成的規(guī)則組可采用各種不同形式的任一種。在某些實(shí)施例中,規(guī)則遵循上文所討論的“如果—則”結(jié)構(gòu)。采用這一結(jié)構(gòu),規(guī)則定義了特定的條件和對應(yīng)的特定行動或結(jié)果。在規(guī)則的實(shí)施過程中,如果檢測了該特定的條件,則執(zhí)行對應(yīng)的特定行動或結(jié)果??捎梢?guī)則定義各種條件的任一個(gè)以及對應(yīng)的結(jié)果。特定的條件的示例包括試圖訪問特定資源(如,存儲器位置、網(wǎng)絡(luò)地址或端口、其它程序、存儲設(shè)備上的文件等)、試圖向特定位置寫入數(shù)據(jù)(如,向特定的存儲器位置、向存儲設(shè)備上的特定位置等)、試圖運(yùn)行特定的程序、主計(jì)算機(jī)的當(dāng)前操作狀態(tài)的各方面(如,可用資源、運(yùn)行的程序等)等等。特定結(jié)果的示例包括防止資源被訪問、防止數(shù)據(jù)被寫入到特定位置、防止程序被運(yùn)行、生成檢測到規(guī)則中的條件的出現(xiàn)的通知(如,在記錄中記錄其出現(xiàn)、向用戶或其它計(jì)算機(jī)發(fā)送消息等)。特定的結(jié)果也可以本質(zhì)上是許可性的而非防止性的。例如,結(jié)果可指示僅當(dāng)主計(jì)算機(jī)滿足規(guī)則中的條件時(shí)訪問特定的資源或位置,或僅當(dāng)主計(jì)算機(jī)滿足規(guī)則中的條件時(shí)運(yùn)行特定的程序。
      在某些實(shí)施例中,主計(jì)算機(jī)102包括動態(tài)規(guī)則數(shù)據(jù)存儲,它是與安全引擎實(shí)施的各種規(guī)則關(guān)聯(lián)的數(shù)據(jù)。在某些實(shí)施例中,動態(tài)規(guī)則數(shù)據(jù)存儲可包括兩組數(shù)據(jù)一組用于安全引擎實(shí)施的當(dāng)前規(guī)則,另一組用于安全引擎要更新來實(shí)施的新規(guī)則。當(dāng)接收新安全政策時(shí),規(guī)則組生成器用與傳遞到安全引擎的該組新規(guī)則來更新動態(tài)規(guī)則數(shù)據(jù)存儲。
      每一安全引擎包括從規(guī)則組生成器接收一組一個(gè)或多個(gè)規(guī)則的規(guī)則改變模塊。與規(guī)則關(guān)聯(lián)的數(shù)據(jù)可從規(guī)則組生成器連同規(guī)則一起接收,或可選地,規(guī)則改變模塊可從動態(tài)規(guī)則數(shù)據(jù)獲取它所期望的數(shù)據(jù)。另外,應(yīng)當(dāng)注意,上文討論中,盡管規(guī)則組生成器基于安全政策為每一安全引擎生成規(guī)則組,可選地,每一安全引擎可接收整個(gè)安全政策(或安全政策的大部分),并生成其自己的規(guī)則組而非從規(guī)則組生成器接收該組。
      規(guī)則改變模塊如所需要的處理該新規(guī)則組,以生成實(shí)施新政策的新內(nèi)部規(guī)則。處理新規(guī)則組來生成新內(nèi)部規(guī)則涉及安全引擎為將新規(guī)則組置于使得它們可由安全設(shè)備實(shí)施的狀態(tài)中所必需的任何行動。例如,該處理可包括將新規(guī)則組轉(zhuǎn)換為內(nèi)部格式、將規(guī)則儲存在特定的存儲器位置、將規(guī)則組織成特定的排列或順序等等。規(guī)則改變模塊可以各種方式的任一種生成新規(guī)則;規(guī)則改變模塊可將規(guī)則保持在與它們從規(guī)則組生成器接收相同的格式,或可選地將規(guī)則轉(zhuǎn)換成安全引擎所使用的內(nèi)部格式。
      無論新規(guī)則是怎樣生成的,每一安全引擎維護(hù)著為主計(jì)算機(jī)實(shí)施先前的安全政策(被更新的安全政策)的當(dāng)前規(guī)則組。在生成新規(guī)則時(shí),甚至在生成新規(guī)則之后,安全引擎繼續(xù)實(shí)施當(dāng)前規(guī)則。安全引擎不開始實(shí)施新規(guī)則,直到它被指令這么做(如,由規(guī)則管理器)。
      在規(guī)則改變模塊完成生成新規(guī)則之后,規(guī)則改變模塊向規(guī)則管理器指示它已完成并準(zhǔn)備好切換到使用新規(guī)則(并由此開始實(shí)施新安全政策)。在規(guī)則管理器從所有安全引擎接收這一指示之后,規(guī)則管理器指令每一安全引擎開始使用新規(guī)則。規(guī)則管理器延緩指令每一安全引擎開始使用新規(guī)則,直到規(guī)則管理器從所有安全引擎接收到這種指示。一旦被指令這么做,每一安全引擎便開始使用新規(guī)則。一旦安全引擎開始使用新規(guī)則,它可刪除先前所使用的規(guī)則。
      在某些情況下,安全引擎可能在處理新規(guī)則時(shí)發(fā)生故障。在這一情況下,安全引擎向規(guī)則管理器返回這一故障指示??蛇x地,規(guī)則管理器可在來自安全引擎的響應(yīng)上施加時(shí)間限制。如果在時(shí)間限制內(nèi),所有的安全引擎都沒有它們已準(zhǔn)備好開始使用新規(guī)則的指示響應(yīng),則規(guī)則管理器可假定安全引擎的一個(gè)或多個(gè)在處理新規(guī)則上失敗。
      當(dāng)規(guī)則管理器標(biāo)識安全引擎的一個(gè)或多個(gè)在處理新規(guī)則上失敗時(shí),規(guī)則管理器不指令安全引擎的任一個(gè)開始使用新規(guī)則。相反,規(guī)則管理器發(fā)送指示來中止對新規(guī)則的改變(這也可被稱為回退)。這一中止或回退指示通知每一安全引擎,忽略從規(guī)則組生成器接收的新規(guī)則以及來得自其處理的任一新規(guī)則,并繼續(xù)使用當(dāng)前規(guī)則。在某些實(shí)施例中,安全引擎可響應(yīng)于這一中止或回退指示,安全地刪除它們所生成(或在生成的過程中)的新規(guī)則。
      在某些實(shí)施例中,每一安全引擎在通知規(guī)則管理器它準(zhǔn)備好使用新規(guī)則之前,等候直到它幾乎能夠確保它可開始使用新規(guī)則。換言之,安全引擎延緩向規(guī)則管理器通知它已準(zhǔn)備好開始使用新規(guī)則,直到安全引擎到達(dá)處理新規(guī)則的某一點(diǎn)上,在該點(diǎn)上,安全引擎實(shí)際上不再可能在被指令開始實(shí)施那些規(guī)則時(shí)而無法實(shí)施。在某些實(shí)施例中,這可通過安全引擎生成新規(guī)則組,并維護(hù)到它使用哪一規(guī)則組(舊規(guī)則或新規(guī)則)的指針。在生成新規(guī)則之后,安全引擎向規(guī)則管理器指示,安全引擎已準(zhǔn)備好開始使用新規(guī)則組。然后,當(dāng)被指令開始使用新規(guī)則組時(shí),安全引擎可僅將其指針僅從舊規(guī)則組改變到新規(guī)則組。安全引擎幾乎可確保它可改變其指針并開始使用新規(guī)則??梢岳斫?,“幾乎確?!辈恍枰?00%地保證失敗是完全不可能的。仍可出現(xiàn)將導(dǎo)致失敗的某些情況(如,電源丟失或禁止改變指針的病毒攻擊)。然而,可以理解,這類失敗的機(jī)會是很小的。
      規(guī)則管理器可以各種不同的方式的任一種來指令安全引擎開始使用新規(guī)則組(也稱為切換到新規(guī)則組)。然而,使用的方式應(yīng)當(dāng)操作成以在基本上同一時(shí)刻通知所有安全引擎,使得所有的安全引擎可在基本上同一時(shí)刻(此處也稱為基本上并發(fā))開始使用其新規(guī)則組。通過令所有安全引擎在基本上同一時(shí)刻開始使用其新規(guī)則組,降低了由于規(guī)則改變而引起的主計(jì)算機(jī)的弱點(diǎn)。一般地,安全引擎開始使用其新規(guī)則組的時(shí)間越近,改變到新規(guī)則組的過程中的弱點(diǎn)就越小。以下是規(guī)則管理器可指令安全引擎在基本上同一時(shí)刻開始使用其新規(guī)則組的方法的某些示例。
      規(guī)則管理器可指令安全引擎開始使用新規(guī)則組的一個(gè)方法是使用可跨越所有安全引擎一次被激發(fā)的事件對象。例如,在從規(guī)則組生成器接收新規(guī)則之后,每一安全引擎設(shè)置內(nèi)部標(biāo)志以在每次訪問規(guī)則時(shí)(在其保護(hù)主計(jì)算機(jī)的正常操作中)輪詢特定的事件。規(guī)則管理器然后可通過激發(fā)該事件(安全引擎所輪詢的同一個(gè))指令安全引擎開始使用其新規(guī)則組。因此,在事件被激發(fā)之后,任一隨后的事件輪詢將反映該事件已被激發(fā),并且由此通知輪詢安全引擎應(yīng)當(dāng)使用新規(guī)則。例如,響應(yīng)于檢測事件已被激發(fā),安全引擎中的指針可改變到指向新規(guī)則組。
      除輪詢事件之外,也可由等候事件的安全引擎運(yùn)行線程。當(dāng)激發(fā)事件時(shí),該線程檢測該激發(fā),使得向安全引擎通知應(yīng)當(dāng)使用新規(guī)則組。例如,響應(yīng)于線程檢測事件已激發(fā),安全引擎中的指針可改變到指向新規(guī)則組。
      一旦事件被激發(fā),且使用了新規(guī)則組,安全引擎可停止輪詢事件。另外,如果服務(wù)于事件的線程由安全引擎運(yùn)行,該線程可被終止。
      規(guī)則管理器可指令安全引擎開始使用新規(guī)則組的另一方法是調(diào)用每一安全引擎所展現(xiàn)的功能(如,“切換”功能)。調(diào)用安全引擎的這一功能指令該安全引擎開始使用新規(guī)則組。例如,響應(yīng)于調(diào)用安全引擎上的這一功能,安全引擎將其指針改變到指向新規(guī)則組。
      規(guī)則管理器可指令安全引擎開始使用新規(guī)則組的另一方法是向每一安全引擎通知每一安全引擎可訪問的共享數(shù)據(jù)結(jié)構(gòu)。規(guī)則管理器可在不同的時(shí)刻向每一安全引擎通知共享數(shù)據(jù)結(jié)構(gòu),如通過調(diào)用安全引擎上的功能(如,“標(biāo)識數(shù)據(jù)結(jié)構(gòu)功能”),或通過在新規(guī)則被傳遞到安全引擎時(shí)標(biāo)識通向數(shù)據(jù)結(jié)構(gòu)。共享數(shù)據(jù)結(jié)構(gòu)可采用各種不同形式的任一種,如存儲器中的位置(如,隨機(jī)存取存儲器(RAM)或諸如閃存等非易失存儲器)、儲存在本地或遠(yuǎn)程存儲設(shè)備上的文件等等。
      每一安全引擎檢查該共享數(shù)據(jù)結(jié)構(gòu)(如,每次在訪問規(guī)則時(shí)(在保護(hù)主計(jì)算機(jī)的正常操作中))來確定其值。規(guī)則管理器可通過改變儲存在共享數(shù)據(jù)結(jié)構(gòu)中的值來指令每一安全引擎開始使用新規(guī)則組。例如,共享數(shù)據(jù)結(jié)構(gòu)最初可儲存“先前”值或0值來指示使用當(dāng)前規(guī)則組,并且當(dāng)切換來開始使用新規(guī)則組時(shí),規(guī)則管理器可向共享數(shù)據(jù)結(jié)構(gòu)寫入“新”或“切換”值或1值來指示要使用新規(guī)則組。
      如上所述,動態(tài)規(guī)則數(shù)據(jù)存儲儲存與安全引擎實(shí)施的各種規(guī)則關(guān)聯(lián)的數(shù)據(jù)。由此,當(dāng)更新主計(jì)算機(jī)來開始實(shí)施新政策時(shí),安全引擎所使用的數(shù)據(jù)也可改變。該數(shù)據(jù)也可在主計(jì)算機(jī)的操作過程中改變(如,安全引擎可稍后向動態(tài)規(guī)則數(shù)據(jù)存儲請求數(shù)據(jù)或?qū)?shù)據(jù)儲存到其中)。為令正確的數(shù)據(jù)對安全引擎可用,當(dāng)更新安全政策時(shí),動態(tài)規(guī)則數(shù)據(jù)存儲可以與安全引擎相同的方式操作。即,將維護(hù)兩組規(guī)則數(shù)據(jù)—第一組將在切換之前使用,第二組將在切換之后使用。新數(shù)據(jù)將儲存在動態(tài)規(guī)則數(shù)據(jù)存儲中,并且動態(tài)規(guī)則數(shù)據(jù)存儲將在準(zhǔn)備好開始使用新數(shù)據(jù)組時(shí)向規(guī)則管理器返回指示。動態(tài)規(guī)則數(shù)據(jù)存儲然后繼續(xù)使用前一組數(shù)據(jù),直到從規(guī)則管理器接收開始使用新數(shù)據(jù)組的指示。
      應(yīng)當(dāng)注意,主計(jì)算機(jī)中的各種組件可在主計(jì)算機(jī)上執(zhí)行的同一應(yīng)用程序進(jìn)程中實(shí)現(xiàn)。例如,政策讀取器、規(guī)則管理器、動態(tài)規(guī)則數(shù)據(jù)、規(guī)則組生成器和安全引擎都可以是同一應(yīng)用程序進(jìn)程的部分。
      可選地,主計(jì)算機(jī)中的不同組件可以跨越在主計(jì)算機(jī)上執(zhí)行的兩個(gè)或多個(gè)應(yīng)用程序進(jìn)程實(shí)現(xiàn)。例如,一個(gè)或多個(gè)安全引擎可運(yùn)行在與其它安全引擎分離、并與政策讀取器、規(guī)則管理器、動態(tài)規(guī)則數(shù)據(jù)和規(guī)則組生成器分離的進(jìn)程中運(yùn)行。允許不同的組件在不同的應(yīng)用程序進(jìn)程中運(yùn)行允許,例如,不同的開發(fā)者設(shè)計(jì)不同的插入式組件(如,不同的插入式安全引擎)來增強(qiáng)主計(jì)算機(jī)的安全性。這些附加的插件組件將被升級來以與非插入式組件相同的方式實(shí)施新政策。
      當(dāng)跨越多個(gè)應(yīng)用程序進(jìn)程分割組件時(shí),使用一種機(jī)制來允許各種組件彼此通信。例如,這一通信允許新規(guī)則組和數(shù)據(jù)被傳遞到不同進(jìn)程中的安全引擎、數(shù)據(jù)被從不同進(jìn)程中的安全引擎?zhèn)鬟f到動態(tài)規(guī)則數(shù)據(jù)、開始使用新規(guī)則組的指令被傳遞到不同進(jìn)程中的安全引擎等等。作為示例,此處討論的組件可被實(shí)現(xiàn)為組件對象模型(COM)組件。關(guān)于組件對象模型體系結(jié)構(gòu)的其它信息可從華盛頓州雷蒙德市的微軟公司獲得。
      應(yīng)當(dāng)注意,在此處的討論中,由規(guī)則管理器指令每一安全引擎開始使用其新規(guī)則組??蛇x地,該指令可以仍允許每一安全引擎基本上并發(fā)地開始使用新規(guī)則組的其它方式來實(shí)現(xiàn)。例如,可使用一種而是指示每一安全引擎開始使用新規(guī)則組的控制機(jī)制可跨各種安全引擎分發(fā),而不是使用規(guī)則管理器。例如,這可通過每一安全引擎通知其它安全引擎它以準(zhǔn)備好開始使用新規(guī)則組,而沒有一個(gè)安全引擎開始使用其新規(guī)則組,直到所有的安全引擎向所有的其它安全引擎通知了它們已準(zhǔn)備好開始使用新規(guī)則組為止來實(shí)現(xiàn)。
      圖7所示是用于更新安全政策的示例過程700的流程圖。過程700由協(xié)調(diào)主計(jì)算機(jī)上的安全政策的更新的組件來實(shí)現(xiàn),如本發(fā)明所討論的規(guī)則管理器。過程700可以軟件、硬件、固件或其組合來實(shí)現(xiàn)。
      最初,獲取要在設(shè)備上實(shí)施的新政策(塊702)。該政策可以“拉”方式來獲取,其中,主計(jì)算機(jī)啟動對新政策來源的訪問來檢查是否可從該來源獲得新政策??蛇x地可以“推”方式獲取新政策,其中,向主計(jì)算機(jī)通知(如,發(fā)送消息或其它指示)新安全政策的可用性或新安全政策本身。
      無論如何獲取新政策,一旦獲取了新政策,向每一安全引擎提供一組新規(guī)則和/或與用于新政策的規(guī)則關(guān)聯(lián)的數(shù)據(jù)(塊704)。如上所述,可基于用于每一安全引擎的新政策生成不同的規(guī)則和/或數(shù)據(jù)組。
      然后從安全引擎接收返回值(塊706)。在某些實(shí)施例中,每一安全引擎向?qū)崿F(xiàn)過程700的組件返回表示“OK”的值或表示“失敗”的值。當(dāng)安全引擎返回表示“OK”的值時(shí),它指示安全引擎已處理了它所接收的規(guī)則和/或數(shù)據(jù)組,并已準(zhǔn)備好開始使用新規(guī)則和/或數(shù)據(jù)組。這也可被稱為安全引擎已準(zhǔn)備好實(shí)現(xiàn)新規(guī)則和/或數(shù)據(jù)組。例如,對安全引擎所有所剩下的是將其指針改變到指向新規(guī)則組而非前一規(guī)則組。然而,當(dāng)安全引擎返回表示“失敗”的值時(shí),它指示安全引擎無法(或沒有)處理該規(guī)則和/或數(shù)據(jù)組,并且安全引擎無法開始使用新規(guī)則和/或數(shù)據(jù)組。另外,如上文所討論的,可在來自安全引擎的響應(yīng)上施加時(shí)間限制也稱為超時(shí)值或時(shí)間閾值)—如果在該時(shí)間限制內(nèi)安全引擎未使用表示“OK”或“失敗”的值響應(yīng),則實(shí)現(xiàn)過程700的組件將安全引擎作為它返回了表示“失敗”的值來處理。
      可以理解,規(guī)則的發(fā)送和響應(yīng)的接收(塊704和706)是異步過程。不同的安全引擎可采用不同的時(shí)間量來處理它們所接收的規(guī)則和/或數(shù)據(jù),并且過程700徑直等到所有的安全引擎完成其各自的處理(直到所施加的任一可任選時(shí)間限制)。
      過程700基于所有安全引擎是否返回表示“OK”的值來前進(jìn)(塊708)。如果所有的安全引擎返回表示“OK”的值,則所有的安全引擎都準(zhǔn)備好開始使用新規(guī)則組,因此向所有的安全引擎指示開始使用新規(guī)則組(塊710)。
      然而,如果至少一個(gè)安全引擎未返回表示“OK”的值,則向每一安全引擎發(fā)出回退調(diào)用(塊712)。該回退調(diào)用本質(zhì)上中止了更新過程,因此沒有一個(gè)安全引擎將開始使用新規(guī)則組(即使是那些返回了表示“OK”的值的安全引擎)。
      圖8所示是用于更新安全政策的另一示例過程800的流程圖。過程800由設(shè)備上的安全引擎實(shí)現(xiàn),如圖1的主計(jì)算機(jī)上的安全引擎114-118。過程800可以軟件、硬件、固件或其組合實(shí)現(xiàn)。
      最初,接收一組新規(guī)則和/或數(shù)據(jù)用于要實(shí)施的新政策(塊802)。如上所述,該規(guī)則和數(shù)據(jù)可基本上在同一時(shí)刻接收,或可選地,安全引擎可如需要地從數(shù)據(jù)存儲獲取數(shù)據(jù)(如,本發(fā)明所討論的動態(tài)規(guī)則數(shù)據(jù)存儲)。然后處理新規(guī)則和/或數(shù)據(jù)(塊804)。新規(guī)則和/或數(shù)據(jù)的處理為安全引擎創(chuàng)建了在實(shí)施新安全政策中所遵循(如,以安全引擎的內(nèi)部格式)的內(nèi)部規(guī)則組。
      過程800基于規(guī)則處理是否成功來前進(jìn)(塊806)。如果安全引擎完成了它所接收的規(guī)則和/或數(shù)據(jù)組的處理,并準(zhǔn)備好開始使用新的規(guī)則和/或數(shù)據(jù)組(如,對安全引擎所剩下的只是將其指針改變到指向新規(guī)則組而非前一規(guī)則組),則處理是成功的。否則,處理是不成功的。如果處理成功,則返回表示“OK”的值(塊808)。然而,如果處理不成功,則返回表示“失敗”的值(塊810)。塊808和810的返回值返回到在主計(jì)算機(jī)上協(xié)調(diào)安全政策的更新的組件(如,本發(fā)明上文所討論的規(guī)則管理器)。
      不論是否返回了值,安全引擎繼續(xù)使用先前或舊的規(guī)則組,直到它被指示回退或開始使用新規(guī)則(塊812)。如果被指令開始使用新規(guī)則,則安全引擎開始使用新規(guī)則和/或數(shù)據(jù)(塊814),如通過將其指針從其前一規(guī)則組改變成其新規(guī)則組。開始使用新規(guī)則的指令可由安全引擎以上文討論的各種方式的任一種接收。
      然而,如果被指令回退,則安全引擎丟棄處理新規(guī)則和/或數(shù)據(jù)的任何結(jié)果(塊816)。不論安全引擎是否完成了它所接收的新規(guī)則組的處理,這種丟棄皆可執(zhí)行。
      由此,如圖8中可見到的,安全引擎繼續(xù)使用其前一規(guī)則組,直到接收切換到新規(guī)則的指令。在接收到這一指令時(shí),安全引擎已準(zhǔn)備好開始使用新規(guī)則,并且需要很少的時(shí)間來發(fā)生切換。例如,安全引擎僅需將其指針切換到指向其新新規(guī)則組而非其前一規(guī)則組。
      應(yīng)用程序接口(API)諸如上文參考圖1所討論的API124等API準(zhǔn)許安全政策和事件信息在主計(jì)算機(jī)中的各種組件和程序(如,安全引擎)內(nèi)通信。在一個(gè)實(shí)施例中,使用組件對象模型(COM)來定義API。該API支持用于加載并卸載安全引擎、向安全引擎發(fā)送安全政策、將安全政策總的變化傳遞到感興趣的安全引擎、允許主機(jī)用戶在決策制定時(shí)刻與安全引擎進(jìn)行交互以允許或不允許某些政策專用行為以及安全引擎的集中式配置管理的方法。
      本發(fā)明所討論的系統(tǒng)和過程令計(jì)算系統(tǒng)的安全性能夠通過將安全政策的目標(biāo)定為特定的計(jì)算系統(tǒng)或計(jì)算系統(tǒng)組來進(jìn)行中央管理。另外,這些系統(tǒng)和過程收集并相關(guān)由那些計(jì)算系統(tǒng)或其它數(shù)據(jù)源生成的事件和其它信息,如安全相關(guān)信息。
      在一個(gè)實(shí)施例中,該接口支持客戶機(jī)通過安全、已驗(yàn)證協(xié)議對安全政策和事件數(shù)據(jù)庫的訪問。該接口準(zhǔn)許各種組件或應(yīng)用程序和一個(gè)或多個(gè)安全引擎之間的通信。該接口也定義安全引擎如何彼此并與其它設(shè)備、組件、服務(wù)或程序進(jìn)行通信。
      在一個(gè)實(shí)施例中,使用自定義加載器來降低攻擊者通過改變COM注冊表值將安全引擎切換到攻擊者自己的代碼的可能性,該接口被定義為COM接口。
      在一個(gè)示例實(shí)施例中,由該API支持的功能調(diào)用是代理—安全引擎功能調(diào)用·Initialize(初始化)·Shutdown(關(guān)閉)·PreparePolicy(準(zhǔn)備政策)·CommitPolicy(提交政策)·RollbackPolicy(回退政策)·WriteData(寫數(shù)據(jù))·WriteConfig(寫配置)這七個(gè)功能被稱為“ISecurityEngine接口”。
      安全引擎—代理功能調(diào)用·ReadAndRegisterNotifyData(讀并注冊通知數(shù)據(jù))·WriteSEData(寫安全引擎數(shù)據(jù))·UnregisterNotifyData(取消通知數(shù)據(jù)的注冊)·GetDataAttribute(獲取數(shù)據(jù)屬性)·ReadAndRegisterNotifyConfig(讀并注冊通知配置)·UnRegisterNotifyConfig(取消通知配置的注冊)·QueryUser(查詢用戶)·Complete(完成)上述前七個(gè)功能調(diào)用被稱為“ISecurityAgent接口”,最后一個(gè)功能調(diào)用(Complete)被稱為“IAgentCallback接口”。
      功能調(diào)用也可被稱為“調(diào)用”、“方法”、“功能”或“服務(wù)”。關(guān)于這些功能調(diào)用的細(xì)節(jié)在下文提供。替換實(shí)施例可使用另外的功能調(diào)用和/或可省略本發(fā)明所討論的一個(gè)或多個(gè)功能調(diào)用。
      在一個(gè)實(shí)施例中,代理,如事件管理器或安全代理,通過API與安全引擎進(jìn)行通信。代理也可被稱為“管理器”。在具體的實(shí)施例中,當(dāng)API調(diào)用仍未完結(jié)時(shí),代理將不調(diào)用特定的安全引擎。該規(guī)則對于異步API有例外。在這些情況下,許可的代理行動在以下狀態(tài)表中定義。
      Initialize功能調(diào)用該方法對代理所知的每一安全引擎調(diào)用一次。該方法在代理啟動過程中調(diào)用。Initialize功能調(diào)用加載安全引擎并允許它執(zhí)行初始化操作。
      該方法由代理對每一安全引擎依次異步地調(diào)用,并且當(dāng)它們接收時(shí)處理回叫。代理將在繼續(xù)之前等待所有回叫完成。
      該方法被定義如下HRESULT Initialize([in]ISecurityAgent*pAgent. IAgentCallback*pCallback);pAgent是可由安全引擎用于回叫到代理的COM接口。
      pCallback是以下定義的回叫對象。
      如果Initialize功能調(diào)用失敗,或它在合理的時(shí)間內(nèi)未返回,則調(diào)用Shutdown。由于可能的競爭條件,安全引擎在Initialize返回之前處理Shutdown。
      Shutdown功能調(diào)用該方法對調(diào)用來由代理Initialize的每一安全引擎調(diào)用一次。該方法允許安全引擎開始其關(guān)閉處理。即使Initialize失敗,代理調(diào)用Shutdown來允許安全引擎關(guān)閉分配的任何資源。例如,該方法允許安全引擎執(zhí)行不能在DLL_PROCESS_DETACH處理中執(zhí)行的復(fù)雜關(guān)閉。
      由于該方法可花費(fèi)相當(dāng)大量的時(shí)間來完成,它使用一回叫對象來指示它已完成了關(guān)閉處理。當(dāng)該方法作為進(jìn)程內(nèi)(in-process)系統(tǒng)關(guān)閉的結(jié)果來調(diào)用時(shí),處理完成可用的時(shí)間是有限的,并且可在回叫完成之前由系統(tǒng)終止代理。
      該方法定義如下typedef enum tagSHUTDOWN_TYPE{SHUTDOWN_NORMAL=0,SHUTDOW_SYSTEM}SHUTDOWN_TYPE;HRESULT Shutdown([in]SHUTDOWN_TYPE eType,[in]IAgentCallback*pCallback);eType是SHUTDOWN_NORMAL或SHUTDOWN_SYSTEM的枚舉。
      pCallback是下文所定義的回叫對象。
      在作出Shutdown回叫之后(或出現(xiàn)超時(shí))將出現(xiàn)DLL卸載(DLL Unload)。由于可異步地作出回叫,代理可能需要在繼續(xù)卸載安全引擎DLL之前等候作出回叫的線程退出。這允許回叫棧幀展開至將被卸載的DLL外部的一點(diǎn),并避免進(jìn)程的異常。如果在Shutdown調(diào)用過程中作出回叫,則該附加的步驟不是必需的,因?yàn)榧俣ò踩婢€程要關(guān)閉。
      錯(cuò)誤被記錄為可操作事件或被忽略,因?yàn)闊o論如何代理都將要關(guān)閉。
      PreparePolicy功能調(diào)用該方法由代理在接收到經(jīng)更新的政策時(shí)調(diào)用。所得的政策被合并,并且構(gòu)建每一RuleSet(規(guī)則組)來傳遞到正確的安全引擎。XML數(shù)據(jù)作為可由MSXML(微軟XML)使用的IStream對象傳遞—DOM(文檔對象模型)或SAX(用于XML的簡單API)—來讀取XML數(shù)據(jù)。該方法定義如下HRESULT PreparePolicy([in]IStream*pstreamRuleset,[in]IAgentCallback*pCallback);pstreamRuleset是允許讀XML規(guī)則組的到Stream(流)對象的COM接口。可假定該IStream對機(jī)器是本地的,并且不跨網(wǎng)絡(luò)訪問數(shù)據(jù)。
      pCallback是下文定義的回叫對象。
      如果調(diào)用返回錯(cuò)誤,則假定安全引擎繼續(xù)運(yùn)行先前應(yīng)用的政策(可以是啟動時(shí)政策)。代理為其PreparePolicy成功的所有安全引擎調(diào)用RollbackPolicy,但是不對任一失敗的安全引擎調(diào)用。該過程在安全引擎返回錯(cuò)誤即刻開始。另外,如果PreparePolicy回叫不以及時(shí)的方式到達(dá),則代理將其作為該安全引擎的部分上的失敗來處理。因此,安全引擎假定代理可在PreparePolicy調(diào)用返回之前調(diào)用RollbackPolicy。
      CommitPolicy功能調(diào)用該方法由代理在所有安全引擎返回PreparePolicy調(diào)用成功時(shí)調(diào)用。該調(diào)用促使它們切換到新政策。該方法定義如下HRESULT CommitPolicy(void);該調(diào)用是同步的,并且代理將等一個(gè)調(diào)用完成后再移動到下一調(diào)用。在一個(gè)實(shí)施例中,預(yù)期會使政策更新失敗的所有工作都在PreparePolicy調(diào)用中執(zhí)行,并且該調(diào)用是從舊政策數(shù)據(jù)結(jié)構(gòu)到新政策數(shù)據(jù)結(jié)構(gòu)的簡單切換。
      CommitPolicy方法返回災(zāi)難性的失敗,如安全引擎的用戶和內(nèi)核部分之間的通信的失敗。當(dāng)該調(diào)用的確返回錯(cuò)誤時(shí),代理試圖重加載先前的政策并重應(yīng)用該政策。由于有錯(cuò)誤,這可能不起作用,且政策實(shí)施將處于未知狀態(tài)。如果CommitPolicy失敗,可由代理記錄可操作的錯(cuò)誤。
      RollbackPolicy功能調(diào)用該方法由代理在安全引擎返回其PreparePolicy調(diào)用上的失敗時(shí)調(diào)用。該調(diào)用促使代理調(diào)用所有其它安全引擎來中止更新,并還原到實(shí)施中的政策。該方法定義如下HRESULT RollbackPolicy(void);該調(diào)用是異步的,因?yàn)轭A(yù)期安全引擎的回退處理是廣泛的,粗略地類似于PreparePolicy的處理。當(dāng)安全引擎完成處理該調(diào)用時(shí),安全引擎調(diào)用Complete來指示回退狀態(tài)。
      如果政策回退,則由代理取消在PreparePolicy之后注冊的任何數(shù)據(jù)—系統(tǒng)回退到每一安全引擎預(yù)訂的前—數(shù)據(jù)組。鑒于此原因,安全引擎不丟棄其處于孤獨(dú)狀態(tài)的數(shù)據(jù)的本地副本,直到它們從代理接收CommitPolicy調(diào)用。代理負(fù)責(zé)處理政策回退過程中來自安全引擎的ReadAndRegisterData調(diào)用到達(dá)的定時(shí)窗。
      RollbackPolicy和Complete回叫可返回災(zāi)難性失敗。預(yù)期安全引擎實(shí)現(xiàn)PreparePolicy,使得回退可被支持。當(dāng)RollbackPolicy失敗時(shí)可由代理記錄可操作錯(cuò)誤。在這發(fā)生之后,不能由安全引擎和任一共同操作的安全引擎作出關(guān)于政策實(shí)施的任何假設(shè)。未來的政策將繼續(xù)發(fā)送到安全引擎。
      WriteData功能調(diào)用當(dāng)安全引擎先前調(diào)用ReadAndRegisterNotifyData時(shí)的數(shù)據(jù)片斷有了變化時(shí),該方法由代理調(diào)用。其參數(shù)類似于ReadAndRegisterNotifyData調(diào)用,除了其存儲器所有權(quán)屬于代理之外,因此安全引擎在處理它之后不可刪除該項(xiàng)目。
      當(dāng)安全引擎在從代理接收新政策的過程中時(shí),即,在PreparePolicy和CommitPolicy/RollbackPolicy的調(diào)用之間,不調(diào)用WriteData。一旦新政策被提交或被回退,由代理檢測到的此時(shí)的任何數(shù)據(jù)變化被分批并向下發(fā)送到感興趣的安全引擎。待決更新的隊(duì)列由代理優(yōu)化,以盡可能地避免對同一數(shù)據(jù)片斷傳遞多個(gè)連續(xù)的變化。WriteData方法被定義如下<pre listing-type="program-listing">#define DF_DYNAMIC 0x1#define DF_COLLECTION 0x2#define DF_BOOLEAN 0x4#define DF_PERSISTED 0x8HRESULT WriteData( [in]REFGUID guidDataID, [in]DWORD dwFlags, [in]DWORD dwDataSize, [in]VARIANT varData, [in]DWORD dwKeySize, [in]byte*pbKeyValue);</pre>當(dāng)向安全引擎?zhèn)鬟f回與前一查詢關(guān)聯(lián)的上下文時(shí),使用用于傳遞Key(dwKeySize,pbKeyValue)的參數(shù)。安全引擎使用該上下文以將查詢的結(jié)果與向代理發(fā)出的前一QueryUser調(diào)用相關(guān)。該附加的數(shù)據(jù)是必需的,因?yàn)榻o定的查詢可對同一規(guī)則中的不同上下文多次出現(xiàn)—例如,詢問用戶應(yīng)用程序X是否被允許修改注冊表值,然后稍后詢問關(guān)于應(yīng)用程序Y的同一問題。
      錯(cuò)誤被記錄為可操作事件,或者被忽略。同一數(shù)據(jù)片斷的未來更新將仍被通知到失敗的安全引擎。如果安全引擎希望避免這一通知,它可為該數(shù)據(jù)片斷調(diào)用UnRegisterNotifyData。
      WriteConfig功能調(diào)用該方法允許代理向感興趣的安全引擎分發(fā)配置數(shù)據(jù)。一旦安全引擎使用ReadAndRegisterNotifyConfig方法讀取了配置數(shù)據(jù),將由代理調(diào)用該方法向它通知對該數(shù)據(jù)的變化。該方法定義如下HRESULT WriteConfig([in]WCHAR*wszDataName,[in]VARIANT varData);wszDataName是要寫入的配置數(shù)據(jù)項(xiàng)目的文本名,并且是在該數(shù)據(jù)的注冊表中使用的名字。
      varData是包含該名字所表示的單個(gè)數(shù)據(jù)項(xiàng)目的變量結(jié)構(gòu)。該數(shù)據(jù)可以有各種類型,取決于注冊表中該數(shù)據(jù)的類型是什么。代理不作類型檢查—依照上下文,期望安全引擎在需要時(shí)檢查數(shù)據(jù)類型。
      錯(cuò)誤被記錄為可操作事件,或者被忽略。對同一配置參數(shù)的未來更新仍被通知到失敗的安全引擎。如果安全引擎希望防止這一通知,則它應(yīng)當(dāng)為該數(shù)據(jù)片斷調(diào)用UnRegisterNotifyConfig。
      當(dāng)來自代理的API調(diào)用尚待決之時(shí),特定的安全引擎通常不調(diào)用該代理。代理將其作為錯(cuò)誤處理并忽略第二次調(diào)用。
      ReadAndRegisterNotifyData功能調(diào)用該方法允許安全引擎從動態(tài)規(guī)則數(shù)據(jù)子系統(tǒng)讀數(shù)據(jù)用于其規(guī)則處理。一旦安全引擎讀取了該數(shù)據(jù),將由代理調(diào)用IScurityEngine接口的WriteData方法來向其通知改變。該方法定義如下HRESULT ReadAndRegisterNotifyData( REFGUID guidDataID,[out]SWORD*pdwFlags,[out]DWORD*pdwDataSuze,[out]VARIANT*pvarData);guidDataID是要檢索的數(shù)據(jù)項(xiàng)目的GUID。
      pdwFlags是描述數(shù)據(jù)項(xiàng)目的一組標(biāo)志。示例值可以是DYNAMIC(動態(tài))或STATIC(靜態(tài)),以及COLLECTION(集合)或BOOLEAN(布爾)。
      pdwDataSize是變量數(shù)據(jù)中返回的數(shù)組中數(shù)據(jù)項(xiàng)目的總大小。
      pvarData是包含到數(shù)據(jù)項(xiàng)目的數(shù)組的引用的變量結(jié)構(gòu),或用于布爾數(shù)據(jù)類型的數(shù)據(jù)項(xiàng)目值。該變量在輸入時(shí)為空。
      安全引擎要求不再在政策內(nèi)的數(shù)據(jù)是錯(cuò)誤。代理將對任一錯(cuò)誤生成可操作事件。在這一情況下,無法保證安全引擎和代理具有被影響的數(shù)據(jù)的一致視圖。
      WriteSEData功能調(diào)用該方法由安全引擎在數(shù)據(jù)片斷改變安全引擎所擁有并發(fā)布(用于持久),或由其它安全引擎使用時(shí)調(diào)用。其參數(shù)類似于WriteData調(diào)用,除其存儲器所有權(quán)屬于安全引擎外,因此代理不在處理之后刪除該項(xiàng)目。該方法定義如下HRESULT WriteSEData([in]REFGUID guidDataID,[in]DWORD dwDataSize,[in]VARIANT varData);該方法可在任一線程的任一時(shí)刻調(diào)用,包括當(dāng)另一WriteSEData調(diào)用待決時(shí)。如需要,確保串行化是代理的責(zé)任。
      數(shù)據(jù)項(xiàng)目的所有者由定義所有者的GUID在集合定義內(nèi)標(biāo)識。這可以是安全引擎的GUID或代理的標(biāo)識符,或可能是另一消費(fèi)者的標(biāo)識符。
      如果安全引擎定義它所擁有的集合,假定將通過該API向代理發(fā)布該數(shù)據(jù)。
      代理將任一錯(cuò)誤記錄為可操作事件。安全引擎可決定在錯(cuò)誤之后是否繼續(xù)提供更新。不保證在錯(cuò)誤之后數(shù)據(jù)的代理版本與安全引擎的視圖一致。
      UnRegisterNotifyData功能調(diào)用該方法允許安全引擎對不再感興趣的數(shù)據(jù)項(xiàng)目停止接收WriteData通知。該方法定義如下HRESULT UnRegisterNotifyData([in]REFGUID guidDataID);guidDataID是標(biāo)識安全引擎在變化通知中不再感興趣的數(shù)據(jù)項(xiàng)目的GUID。安全引擎可指示它希望通過傳遞空(Null)GUID{00000000-0000-0000-000000000000}來取消所有當(dāng)前的通知的注冊。
      代理將任一錯(cuò)誤記錄為可操作事件。這包括數(shù)據(jù)對代理未知的情況,以幫助診斷政策管理問題。
      GetDataAttribute功能調(diào)用該方法允許安全引擎檢索與數(shù)據(jù)項(xiàng)目關(guān)聯(lián)的具體屬性。屬性名與政策XML中的名字相同,包括文本的大小寫。屬性值僅可在政策改變時(shí)改變,因此該數(shù)據(jù)不需要通知系統(tǒng)。該方法定義如下HRESULT GetDataAttribute([in]REFGUID guidDataID,[in]WCHAR*wszAttributeName,[out]VARIANT*pvarAttributeValue);該方法可在任一時(shí)刻調(diào)用。
      guidDataID是標(biāo)識為檢索屬性的數(shù)據(jù)項(xiàng)目的GUID。
      wszAttributeName是屬性名,如它在政策文檔中的完全一樣。
      pvarAttributeValue是作為變量的屬性值。可應(yīng)用正常的輸出參數(shù)分配規(guī)則。代理用該信息分配新變量,并且稍后釋放它是調(diào)用者的責(zé)任。
      ReadAndRegisterNotifyConfig功能調(diào)用該方法允許安全引擎從代理讀配置數(shù)據(jù)。一旦安全引擎讀取了配置數(shù)據(jù),將由代理調(diào)用IScurityEngine接口的WriteConfig方法來向其通知該數(shù)據(jù)的改變。
      代理的配置數(shù)據(jù)及其主存(host)的安全引擎可位于一公共根下。該方法定義如下HRESULT ReadAndRegisterNotifyConfig([in]WCHAR*wszDataName,[out]VARIANT*pvarData);wszDataName是要檢索的配置數(shù)據(jù)項(xiàng)目的文本名,并且是該數(shù)據(jù)的注冊表內(nèi)使用的名字。這標(biāo)識了與公共代理根相關(guān)的個(gè)別項(xiàng)目。不需要前導(dǎo)的‘\’字符。該值是大小寫不敏感的,但是空格字符是重要的。
      pvarData是包含名字所標(biāo)識的單個(gè)數(shù)據(jù)項(xiàng)目的變量結(jié)構(gòu)。該數(shù)據(jù)可以是各種類型,取決于該數(shù)據(jù)在注冊表中是什么類型。代理不作類型檢查—依照上下文,期望安全引擎在需要時(shí)檢查數(shù)據(jù)類型。
      代理將任一錯(cuò)誤記錄為可操作事件。
      UnRegisterNotifyConfig功能調(diào)用該方法允許安全代理對它不再感興趣的數(shù)據(jù)項(xiàng)目停止接收WriteConfig通知。該方法定義如下HRESULT UnRegisterNotifyConfig([in]WCHAR*wszDataName);wszDataName是標(biāo)識安全引擎在變化通知中不再感興趣的配置數(shù)據(jù)項(xiàng)目的文本名。
      代理將任一錯(cuò)誤記錄為可操作事件。這包括數(shù)據(jù)對代理未知的情況,以幫助診斷配置管理問題。
      QueryUser功能調(diào)用該方法允許安全引擎要求代理向用戶顯示具體的消息,返回用戶選擇的回答。代理也可高速緩存該回答,并在代理重起后持久保存該值。向用戶呈現(xiàn)的問題可包含關(guān)于用戶為何詢問該問題的信息。該信息可由安全代理提供,并可在每次調(diào)用該方法時(shí)不同。代理如何確定該問題在之前是否已提出過及答案是什么等由安全引擎提供的鍵入信息(Key Information)來確定。
      該調(diào)用立即返回到安全引擎。安全引擎然后掛起觸發(fā)該查詢的會話/線程的操作,直到向其通知響應(yīng)。這在用戶鍵入響應(yīng)或當(dāng)查詢超時(shí)發(fā)生。超時(shí)處理由代理處理。在這一點(diǎn)上,代理用鍵入或默認(rèn)的響應(yīng)更新相關(guān)的數(shù)據(jù)項(xiàng)目,并用其關(guān)聯(lián)的上下文向安全引擎通知結(jié)果。
      由于獲取對這一查詢的響應(yīng)的時(shí)間是至關(guān)重要的,該API可在任一時(shí)刻由實(shí)施需要發(fā)出查詢的規(guī)則的安全引擎調(diào)用。該方法定義如下HRESULT QueryUser([in]REFGUID guidQueryItem,[in]DWORD dwKeySize,[in]byte*pbKeyValue,[in]SAFEARRAY(VARIANT)pvarQueryParams);guidQueryItem是包含用于向用戶提出問題并提供該問題的答案的基本串的數(shù)據(jù)項(xiàng)目的GUID。
      dwKeySize是關(guān)鍵值的長度,以字節(jié)計(jì)算。
      pbKeyValue是為該查詢定義唯一關(guān)鍵字的字節(jié)組。
      pvarQueryParams是包含代替到向用戶顯示的查詢文本中的查詢參數(shù)的變量安全數(shù)組(Safearray of Variants)。參數(shù)的順序和句法由QueryUser行動所關(guān)聯(lián)的規(guī)則類型定義。
      如果數(shù)據(jù)項(xiàng)目是不可定義的,則代理返回錯(cuò)誤。執(zhí)行查詢中的錯(cuò)誤將被記錄為可操作時(shí)間。在這一情況下,向安全引擎返回默認(rèn)行動。
      Complete功能調(diào)用該方法向代理通知安全引擎已完成與從代理到該安全引擎的先前的異步調(diào)用相關(guān)的處理。盡管特定的安全引擎可潛在地令一個(gè)以上來自代理的異步調(diào)用未決,代理為每一安全引擎管理內(nèi)部狀態(tài),使得特定Complete回叫的上下文無歧義。該方法定義如下HRESULT Complete([in]HRESULT hrCompletionCode);
      hrCompletionCode是代理先前對該安全引擎作出的異步調(diào)用的返回碼。
      接口使用下文描述了這些API如何用于與一個(gè)或多個(gè)安全引擎交互上的示例限制。
      在特定的時(shí)刻,安全引擎處于關(guān)于其與代理的交互的某一狀態(tài)。以下列表標(biāo)識了可能的安全引擎狀態(tài)。

      代理和安全引擎之間的準(zhǔn)許交互可被化為一組表,定義當(dāng)安全引擎在特定狀態(tài)中時(shí)可由每一實(shí)體調(diào)用的API,以及安全引擎需要采取什么狀態(tài)變化或其它行動作為結(jié)果。假定代理的操作狀態(tài)是不重要的—安全引擎可假定當(dāng)安全引擎被加載到存儲器時(shí),它在所有時(shí)刻保持在正常操作。
      該狀態(tài)表覆蓋了安全引擎的生命周期的以下階段·初始化·來自代理的更新政策·關(guān)閉這些表中未覆蓋的API調(diào)用和安全引擎狀態(tài)的任一組合可被認(rèn)為是API的錯(cuò)誤使用。避免這一錯(cuò)誤使用是API調(diào)用者的責(zé)任。
      以下狀態(tài)表定義了在安全引擎初始化過程中API的準(zhǔn)許序列,以及依照來自API的輸入的安全引擎狀態(tài)變化。對未作為與安全引擎初始化關(guān)聯(lián)的狀態(tài)列表的準(zhǔn)許輸入列出的任一API的調(diào)用意味著該調(diào)用實(shí)體部分上的協(xié)議錯(cuò)誤。

      以下狀態(tài)表定義了政策更新過程中準(zhǔn)許的API序列,以及關(guān)聯(lián)的安全引擎狀態(tài)變化。對未作為與政策更新關(guān)聯(lián)的狀態(tài)列表的準(zhǔn)許輸入列出的任一API的調(diào)用意味著該調(diào)用實(shí)體部分的協(xié)議錯(cuò)誤。



      考慮多個(gè)主存的安全引擎,下文描述了總體政策更新序列的一個(gè)示例。
      1.調(diào)用每一安全引擎的PreparePolicy。
      2.代理等候每一安全引擎成功或失敗地調(diào)用Complete。
      3.如果任一安全引擎報(bào)告失敗,每一其它安全引擎將調(diào)用其RollbackPolicy方法。
      4.如果沒有安全引擎報(bào)告失敗,則對每一安全引擎調(diào)用CommitPolicy方法。
      5.如果在調(diào)用任一CommitPolicy方法之前發(fā)現(xiàn)另一失敗,或者如果必須Shutdown,則對每一安全引擎調(diào)用RollbackPolicy方法。
      以下狀態(tài)表定義了安全引擎關(guān)閉過程中準(zhǔn)許的API序列,以及依照來自代理的輸入的安全引擎狀態(tài)變化。對未作為與安全引擎關(guān)閉關(guān)聯(lián)的狀態(tài)列表的準(zhǔn)許輸入列出的任一API的調(diào)用意味著調(diào)用實(shí)體部分的協(xié)議錯(cuò)誤。

      以下列出了代理所支持的示例集合類型,以及關(guān)于每一集合如何作為動態(tài)數(shù)據(jù)傳遞通過ReadAndRegisterNotifyData和WriteData方法調(diào)用的描述。
      可通過傳遞單個(gè)BSTR串,或?qū)o符號整數(shù)包裝為LONG或LONGLONG變體類型,來處理以下討論的許多數(shù)據(jù)項(xiàng)目。不容易適合這一模型的那些項(xiàng)目是DirecrotySet(目錄組)、ProtocolSet(協(xié)議組)和IPv4AddressSet(IPv4地址組)。對于這些類型的每一個(gè),建議一種將數(shù)據(jù)包裝成BSTR串的包裝系統(tǒng),以允許SafeArray(安全數(shù)組)中的建議傳輸。
      FileSet(文件組)對每一項(xiàng)目傳遞的數(shù)據(jù)“文件名—串實(shí)現(xiàn)BSTRDirectorySet(目錄組)對每一項(xiàng)目傳遞的數(shù)據(jù)目錄名—串遞歸—標(biāo)志實(shí)現(xiàn)包裝的BSTR—“遞歸標(biāo)志串”遞歸標(biāo)志是單個(gè)字符—‘R’—遞歸‘F’—單調(diào)RegistrySet(注冊表組)為每一項(xiàng)目傳遞的數(shù)據(jù)注冊表鍵名—串實(shí)現(xiàn)包裝的BSTR—“遞歸標(biāo)志串”遞歸標(biāo)志是單個(gè)字符—‘R’—遞歸
      ‘F’—單調(diào)Protocol(協(xié)議)為每一項(xiàng)目傳遞的數(shù)據(jù)初級/次級—串或枚舉IP類型—串或枚舉方向—傳或枚舉端口或端口范圍—一個(gè)或兩個(gè)整型(16位、無符號整數(shù))實(shí)現(xiàn)包裝的LONGLONG1字節(jié)—初級/次級1字節(jié)—IP類型TCP/UDP1字節(jié)—方向入/出/雙向1字節(jié)—未使用2字節(jié)—端口范圍末端(或零)2字節(jié)—端口范圍始端(或端口)ProcessSet(進(jìn)程組)為每一項(xiàng)目傳遞的數(shù)據(jù)進(jìn)程名或路徑—串實(shí)現(xiàn)BSTRNetworkPortSet(網(wǎng)絡(luò)端口組)為每一項(xiàng)目傳遞的數(shù)據(jù)端口或端口范圍—一個(gè)或兩個(gè)整數(shù)(16位、無符號整數(shù))實(shí)現(xiàn)包裝的LONG開始=低字,結(jié)束=高字。如果不是端口范圍,則高字為零。
      NetworkIPv4AddressSet(網(wǎng)絡(luò)IPv4地址組)為每一項(xiàng)目傳遞的數(shù)據(jù)以下之一IPv4地址—串(可包含通配符)IPv4地址范圍—2個(gè)串FQDN—串主機(jī)名—串實(shí)現(xiàn)包裝的BSTR“T串1串2”T—類型—1字符用于地址、地址范圍、主機(jī)名或FQDN串1—地址、起始地址、主機(jī)名或FQDN串2—地址范圍的結(jié)束地址UserSet(用戶組)為每一項(xiàng)目傳遞的數(shù)據(jù)用戶賬號名—串實(shí)現(xiàn)BSTRUserGroupSet(用戶組集)為每一項(xiàng)目傳遞的數(shù)據(jù)用戶組名—串實(shí)現(xiàn)BSTRFileOpSet(文件操作組)為每一項(xiàng)目傳遞的數(shù)據(jù)文件操作—串(或枚舉)實(shí)現(xiàn)BSTR
      DirOpSet(目錄操作組)為每一項(xiàng)目傳遞的數(shù)據(jù)目錄操作—串(或枚舉)實(shí)現(xiàn)BSTRProcessOpSet(進(jìn)程操作組)為每一項(xiàng)目傳遞的數(shù)據(jù)進(jìn)程操作—串(或枚舉)實(shí)現(xiàn)BSTRRegKeyOpSet(注冊表項(xiàng)組)為每一項(xiàng)目傳遞的數(shù)據(jù)注冊表鍵操作—串(或枚舉)實(shí)現(xiàn)BSTRRegValueOpSet(注冊表值組)為每一項(xiàng)目傳遞的數(shù)據(jù)注冊表值操作—串(或枚舉)實(shí)現(xiàn)BSTRUserOpSet(用戶操作組)為每一項(xiàng)目傳遞的數(shù)據(jù)用戶賬號操作—串(或枚舉)實(shí)現(xiàn)BSTR
      UserGroupOpSet(用戶組操作組)為每一項(xiàng)目傳遞的數(shù)據(jù)用戶組操作—串(或枚舉)實(shí)現(xiàn)BSTRJobOpSet(作業(yè)操作組)為每一項(xiàng)目傳遞的數(shù)據(jù)作業(yè)操作—串(或枚舉)實(shí)現(xiàn)BSTRGeneric(通用)為每一項(xiàng)目傳遞的數(shù)據(jù)值—串實(shí)現(xiàn)BSTRQuerySet(查詢組)對于安全引擎,QuerySet看似包含對用戶的查詢結(jié)果的單個(gè)項(xiàng)目集合。關(guān)聯(lián)的上下文作為單獨(dú)的參數(shù)傳遞到安全引擎。安全引擎通常不需要QuerySet的內(nèi)部結(jié)構(gòu),僅上下文和查詢結(jié)果需要。
      Boolean(boolDefine)(布爾)為單個(gè)項(xiàng)目傳遞的數(shù)據(jù)布爾—真或假實(shí)現(xiàn)LONG—假=0,真=1
      圖9示出了可用于實(shí)現(xiàn)本發(fā)明描述的技術(shù)的的通用計(jì)算系統(tǒng)環(huán)境900。計(jì)算機(jī)環(huán)境900僅為合適的計(jì)算環(huán)境的一個(gè)示例,并非建議對計(jì)算機(jī)和網(wǎng)絡(luò)體系結(jié)構(gòu)的使用或功能的范圍的局限。也不應(yīng)將計(jì)算機(jī)環(huán)境900解釋為對示例性計(jì)算機(jī)環(huán)境900中示出的任一組件或其組合具有依賴或需求。
      計(jì)算機(jī)環(huán)境900包括以常規(guī)計(jì)算機(jī)902形式的通用計(jì)算裝置??捎捎?jì)算機(jī)902執(zhí)行一個(gè)或多個(gè)媒體播放器應(yīng)用程序。計(jì)算機(jī)902的組件可包括但不限于,一個(gè)或多個(gè)處理器或處理單元904(可任選地包括密碼處理器或協(xié)處理器)、系統(tǒng)存儲器906以及將包括處理器904的各類系統(tǒng)組件耦合至系統(tǒng)存儲器906的系統(tǒng)總線908。
      系統(tǒng)總線908可以是若干種總線結(jié)構(gòu)類型的任一種,包括存儲器總線或存儲器控制器、點(diǎn)對點(diǎn)連接、交換光纖、外圍總線、加速圖形端口以及使用各類總線結(jié)構(gòu)的處理器或局部總線。作為示例,這類結(jié)構(gòu)包括工業(yè)標(biāo)準(zhǔn)體系結(jié)構(gòu)(ISA)總線、微通道體系結(jié)構(gòu)(MCA)總線、增強(qiáng)ISA(EISA)總線、視頻電子技術(shù)標(biāo)準(zhǔn)協(xié)會(VESA)局部總線以及外圍部件互連(PCI)總線,也稱為Mezzanine總線。
      計(jì)算機(jī)902通常包括各種計(jì)算機(jī)可讀媒質(zhì)。計(jì)算機(jī)可讀媒質(zhì)可以是可由計(jì)算機(jī)110訪問的任一可用媒質(zhì),包括易失和非易失媒質(zhì)、可移動和不可移動媒質(zhì)。
      系統(tǒng)存儲器906包括以易失存儲器形式的計(jì)算機(jī)存儲媒質(zhì),如隨機(jī)存取存儲器(RAM)910,和/或非易失存儲器形式的計(jì)算機(jī)存儲媒質(zhì),如只讀存儲器(ROM)912?;据斎?輸出系統(tǒng)(BIOS)914包括如在啟動時(shí)幫助在計(jì)算機(jī)902內(nèi)的元件之間傳輸信息的基本例程,通常儲存在ROM912中。RAM910通常包含處理單元904立即可訪問或者當(dāng)前正在操作的數(shù)據(jù)和/或程序模塊。
      計(jì)算機(jī)902也可包括其它可移動/不可移動、易失/非易失計(jì)算機(jī)存儲媒質(zhì)。作為示例,圖9示出了對不可移動、非易失磁媒質(zhì)(未示出)進(jìn)行讀寫的硬盤驅(qū)動器916、對可移動、非易失磁盤920(如,“軟盤”)進(jìn)行讀寫的磁盤驅(qū)動器918以及對可移動、非易失光盤924,如CD-ROM、DVD-ROM或其它光媒質(zhì)進(jìn)行讀寫的光盤驅(qū)動器922。硬盤驅(qū)動器916、磁盤驅(qū)動器918以及光盤驅(qū)動器922的每一個(gè)通過一個(gè)或多個(gè)數(shù)據(jù)媒質(zhì)接口925連接至系統(tǒng)總線908。可選地,硬盤驅(qū)動器916、磁盤驅(qū)動器918和光盤驅(qū)動器922可通過一個(gè)或多個(gè)接口(未示出)連接至系統(tǒng)總線908。
      盤驅(qū)動器及其相關(guān)的計(jì)算機(jī)可讀媒質(zhì)為計(jì)算機(jī)902提供了計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊和其它數(shù)據(jù)的非易失存儲。盡管示例示出了硬盤916、可移動磁盤920以及可移動光盤924,可以理解,也可以使用可儲存可由計(jì)算機(jī)訪問的數(shù)據(jù)的其它類型的計(jì)算機(jī)可讀媒質(zhì),如盒式磁帶或其它磁存儲設(shè)備、閃存卡、CD-ROM、數(shù)字多功能盤(DVD)或其它光存儲、隨機(jī)存取存儲器(RAM)、只讀存儲器(ROM)、電可擦除可編程只讀存儲器(EEPROM)等等,來實(shí)現(xiàn)示例計(jì)算系統(tǒng)和環(huán)境。
      任意數(shù)量的程序模塊可儲存在硬盤916、磁盤920、光盤924、ROM912和/或RAM910中,作為示例,包括操作系統(tǒng)926、一個(gè)或多個(gè)應(yīng)用程序928、其它程序模塊930和程序數(shù)據(jù)932。這類操作系統(tǒng)926、一個(gè)或多個(gè)應(yīng)用程序928、其它程序模塊930以及程序數(shù)據(jù)932的每一個(gè)(或其某一組合)可實(shí)現(xiàn)支持分布式文件系統(tǒng)的常駐組件的所有或部分。
      用戶可以通過輸入設(shè)備,如鍵盤934和定位設(shè)備936(如,“鼠標(biāo)”)向計(jì)算機(jī)902輸入命令和信息。其它輸入設(shè)備938(未具體示出)可包括麥克風(fēng)、操縱桿、游戲墊、圓盤式衛(wèi)星天線、串行端口、掃描儀和/或其類似物。這些和其它輸入設(shè)備通常通過耦合至系統(tǒng)總線908的輸入/輸出接口940連接到處理單元904,但也可以通過其它接口和總線結(jié)構(gòu)連接,如并行端口、游戲端口或通用串行總線(USB)。
      監(jiān)視器942或其它類型的顯示設(shè)備也通過接口,如視頻適配器944連接到系統(tǒng)總線908。除監(jiān)視器之外,其它輸出外圍設(shè)備可包括組件如,揚(yáng)聲器(未示出)和打印機(jī)946,可通過輸入/輸出接口940連接至計(jì)算機(jī)902。
      計(jì)算機(jī)902可以在使用到一個(gè)或多個(gè)遠(yuǎn)程計(jì)算機(jī),如遠(yuǎn)程計(jì)算裝置948的邏輯連接的網(wǎng)絡(luò)化環(huán)境中操作。遠(yuǎn)程計(jì)算裝置948可以是個(gè)人計(jì)算機(jī)、便攜式計(jì)算機(jī)、服務(wù)器、路由器、網(wǎng)絡(luò)計(jì)算機(jī)、對等設(shè)備或其它公用網(wǎng)絡(luò)節(jié)點(diǎn),游戲控制臺等等。示出遠(yuǎn)程計(jì)算裝置948為包括此處所描述的與計(jì)算機(jī)902有關(guān)的許多或所有元件和特征的便攜式計(jì)算機(jī)。
      計(jì)算機(jī)902和遠(yuǎn)程計(jì)算機(jī)948之間的邏輯連接被描述為局域網(wǎng)(LAN)950和一般廣域網(wǎng)(WAN)952。這類網(wǎng)絡(luò)環(huán)境常見于辦公室、企業(yè)范圍計(jì)算機(jī)網(wǎng)絡(luò)、內(nèi)聯(lián)網(wǎng)以及因特網(wǎng)。
      當(dāng)在LAN網(wǎng)絡(luò)環(huán)境中實(shí)現(xiàn)時(shí),計(jì)算機(jī)902通過網(wǎng)絡(luò)接口或適配器954連接至局域網(wǎng)950。當(dāng)在WAN網(wǎng)絡(luò)環(huán)境中實(shí)現(xiàn)時(shí),計(jì)算機(jī)902通常包括調(diào)制解調(diào)器956或其它裝置,用于通過廣域網(wǎng)952建立通信。調(diào)制解調(diào)器956可以對計(jì)算機(jī)902是內(nèi)置或外置的,通過輸入/輸出接口940或其它合適的機(jī)制連接至系統(tǒng)總線908??梢岳斫猓境龅木W(wǎng)絡(luò)連接是示例性的,也可以使用在計(jì)算機(jī)902和948之間建立通信鏈路的其它裝置。
      在網(wǎng)絡(luò)化環(huán)境中,描述的與計(jì)算機(jī)902相關(guān)的程序模塊或其部分可儲存在遠(yuǎn)程存儲器存儲設(shè)備中。作為示例,遠(yuǎn)程應(yīng)用程序958駐留在遠(yuǎn)程計(jì)算機(jī)的存儲器設(shè)備中。為說明目的,此處示出應(yīng)用程序和諸如操作系統(tǒng)等其它可執(zhí)行程序組件為離散的塊,盡管可以認(rèn)識到,這類程序和組件在不同的時(shí)刻駐留在計(jì)算裝置902的不同存儲組件中,并由計(jì)算機(jī)的數(shù)據(jù)處理器執(zhí)行。
      此處可在計(jì)算機(jī)可執(zhí)行指令的一般上下文環(huán)境中描述各種模塊和技術(shù),計(jì)算機(jī)可執(zhí)行指令如程序模塊,由一個(gè)或多個(gè)計(jì)算機(jī)或其它設(shè)備執(zhí)行。一般而言,程序模塊包括例程、程序、對象、組件、數(shù)據(jù)結(jié)構(gòu)等等,執(zhí)行特定的任務(wù)或?qū)崿F(xiàn)特定的抽象數(shù)據(jù)類型。通常,如各種實(shí)施例中所描述的,程序模塊的功能可組合或分布。
      這些模塊和技術(shù)的實(shí)現(xiàn)可儲存在某一形式的計(jì)算機(jī)可讀媒質(zhì)中,或通過其發(fā)送。計(jì)算機(jī)可讀媒質(zhì)可以是可由計(jì)算機(jī)訪問的任一可用媒質(zhì)。作為示例而非局限,計(jì)算機(jī)可讀媒質(zhì)包括“計(jì)算機(jī)存儲媒質(zhì)”和“通信媒質(zhì)”。
      “計(jì)算機(jī)存儲媒質(zhì)”包括以用于儲存信息的任一方法或技術(shù)實(shí)現(xiàn)的易失和非易失,可移動和不可移動媒質(zhì),信息如計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù)。計(jì)算機(jī)存儲媒質(zhì)包括但不限于,RAM、ROM、EEPROM、閃存或其它存儲器技術(shù)、CD-ROM、數(shù)字多功能盤(DVD)或其它光盤存儲、磁盒、磁帶、磁盤存儲或其它磁存儲設(shè)備、或可以用來儲存所期望的信息并可由計(jì)算機(jī)訪問的任一其它媒質(zhì)。
      “通信媒質(zhì)”通常在諸如載波或其它傳輸機(jī)制的已調(diào)制數(shù)據(jù)信號中包含計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù)。通信媒質(zhì)也包括任一信息傳送媒質(zhì)。術(shù)語“已調(diào)制數(shù)據(jù)信號”指以對信號中的信息進(jìn)行編碼的方式設(shè)置或改變其一個(gè)或多個(gè)特征的信號。作為示例而非局限,通信媒質(zhì)包括有線媒質(zhì),如有線網(wǎng)絡(luò)或直接連線連接,以及無線媒質(zhì),如聲學(xué)、RF、紅外和其它無線媒質(zhì)。上述任一的組合也應(yīng)當(dāng)包括在計(jì)算機(jī)可讀媒質(zhì)的范圍之內(nèi)。
      概念上,編程接口可以被一般地察看,如圖10或圖11所示的。圖10示出了接口“接口1”為管道,第一和第二代碼片斷通過該管道進(jìn)行通信。圖11示出了接口包括接口對象I1和I2(可以是或不是第一和第二代碼片斷的部分),它們令系統(tǒng)的第一和第二代碼片斷能通過媒質(zhì)M進(jìn)行通信。在圖11中,可以認(rèn)為接口對象I1和I2為同一系統(tǒng)的單獨(dú)接口,并且也可以認(rèn)為對象I1和I2加上媒質(zhì)M構(gòu)成了接口。盡管圖10和11示出了雙向流程以及該流程的每一側(cè)上的接口,某些實(shí)現(xiàn)可僅具有一個(gè)方向上的信息流(或如下所述沒有信息流),或僅具有一側(cè)的接口對象。作為示例而非局限,諸如應(yīng)用編程或程序接口(API)、入口點(diǎn)、方法、函數(shù)、子例程、遠(yuǎn)程過程調(diào)用和組件對象模型(COM)接口等術(shù)語包含在編程接口的定義之內(nèi)。
      這類編程接口的方面可包括第一代碼片斷向第二代碼片斷發(fā)送信息的方法(其中,“信息”以其最廣泛的意義使用,并包括數(shù)據(jù)、命令、請求等等);第二代碼片斷接收信息的方法;以及該信息的結(jié)構(gòu)、序列、語法、組織、模式、定時(shí)和內(nèi)容。在這一點(diǎn)上,只要信息以接口所定義的方式傳輸,底層傳輸媒質(zhì)本身可以對接口的操作不重要,無論該媒質(zhì)是有線還是無線,或兩者的組合。在某些情況下,在常規(guī)意義上,當(dāng)一個(gè)代碼片斷僅訪問由第二代碼片斷執(zhí)行的功能時(shí),信息可不在一個(gè)或兩個(gè)方向上傳輸,因?yàn)樾畔鬏斂梢允腔蛘咄ㄟ^另一機(jī)制(如,信息被放置在與代碼片斷之間的信息流分離的緩存、文件等中)或者不存在。這些方面的任一個(gè)或所有可以在給定的情況下重要,如,取決于代碼片斷是否是松耦合或緊耦合配置的系統(tǒng)的一部分,并且因此該列表應(yīng)當(dāng)被認(rèn)為是說明性的而非限制。
      編程接口的這一概念對本領(lǐng)域的技術(shù)人員是已知的,并且可以閱讀上述本發(fā)明的詳細(xì)描述而清楚這一概念。然而,有其它方法來實(shí)現(xiàn)編程接口,并且除非明顯地排除,這些方法也由所附權(quán)利要求書包含在內(nèi)。這些其它方法看似比圖10和11的視圖更精密或復(fù)雜,但是它們?nèi)詧?zhí)行類似的功能來完成同一整體結(jié)果?,F(xiàn)在簡要描述編程接口的某些說明性替換實(shí)現(xiàn)。
      分解(Factoring)可以通過將通信分裂成多個(gè)離散通信來間接地實(shí)現(xiàn)從一個(gè)代碼片斷到另一個(gè)的通信。這在圖12和13中示意性地描述。如圖所示,可以按照功能的可分組來描述某些接口。由此,可以分解圖10和11的接口功能來達(dá)到相同的結(jié)果,如同可以在數(shù)學(xué)上提供24,或2乘2乘3乘2一樣。因此,如圖12所示,可以細(xì)分由接口“接口1”提供的功能以將該接口的通信變換成多個(gè)接口“接口1A”、“接口1B”、“接口1C”等,而達(dá)到相同的結(jié)果。如圖13所示,由接口I1提供的函數(shù)可以被細(xì)分成多個(gè)接口I1a、I1b、I1c等,而達(dá)到相同的結(jié)果。類似地,從第一代碼片斷接收信息的第二代碼片斷的接口I2可以被分解成多個(gè)接口I2a、I2b、I2c等。當(dāng)分解時(shí),包括在第一代碼片斷中的接口的數(shù)量不需要匹配包括在第二代碼片斷中的接口的數(shù)量。在圖12或13的任一情況下,接口“接口1”和I1的功能性精神分別與圖10和11的保持相同。接口的分解也可遵從聯(lián)合、通信和其它數(shù)學(xué)性質(zhì),使得分解較難識別。例如,命令操作可以是不重要的,并且因此由接口完成的功能可以在達(dá)到該接口之前由另一段代碼或接口較好地完成,或者由系統(tǒng)的單獨(dú)組件執(zhí)行。此外,編程領(lǐng)域的普通技術(shù)人員可以理解有各種方式來作出不同的函數(shù)調(diào)用而達(dá)到相同的結(jié)果。
      重定義在某些情況下,可能忽略、添加或重定義編程接口的某些方面(如參數(shù)),而仍達(dá)到預(yù)期的結(jié)果。這在圖14和15中示出。例如,假定圖10的接口“接口1”包括函數(shù)調(diào)用Square(input,precision,output)(平方),它包括三個(gè)參數(shù),input(輸入)、precision(精度)和output(輸出),并且由第一代碼片斷向第二代碼片斷發(fā)布。如果中間參數(shù)precision在給定的情形下無關(guān)緊要,如圖10所示,它也可以被忽略或甚至由meaningless(無意義)(在這一情況下)參數(shù)來替換。也可以添加無關(guān)緊要的additional(另外)參數(shù)。在任一情況下,只要在輸入由第二代碼片斷平方之后返回輸出,就可以達(dá)到square(平方)的功能。Precision也有可能對計(jì)算系統(tǒng)的某一下游或其它部分是極有意義的參數(shù);然而,一旦認(rèn)識到precision對計(jì)算平方這一有限目的不是必需的,它可以被替換或忽略。例如,不是傳遞一個(gè)有效的pricision值,而是在不對結(jié)果產(chǎn)生不利地影響的情況下傳遞諸如出生日期等無意義的值。類似地,如圖10所示,接口I1由接口I1′替換,它被重新定義來忽略或向接口添加參數(shù)。接口I2可類似地被重定義為接口I2′,它被重定義來忽略不必要的參數(shù),或可在別處處理的參數(shù)。此處的要點(diǎn)是在某些情況下,編程接口可包括對某一目的而言所不需要的方面,諸如參數(shù),因此可以忽略或重定義它們,或在別處處理它們用于其它目的。
      內(nèi)嵌代碼合并兩個(gè)單獨(dú)的代碼模塊的一些或全部功能也是可行的,使得它們之間的“接口”改變形式。例如,圖10和11的功能可以被分別轉(zhuǎn)化到圖16和17的功能。在圖16中,圖10的先前的第一和第二代碼片斷被合并成包含兩者的模塊。在這一情況下,該代碼片斷仍可以彼此通信,但是該接口可以適用于更適合單個(gè)模塊的形式。由此,例如,正式的調(diào)用(Call)和返回(Return)狀態(tài)將不再必需,但是依照接口“接口1”的類似的處理或響應(yīng)仍是有效的。類似地,如圖17所示,圖11的部分(或所有)接口I2可以內(nèi)嵌地寫入接口I1來形成接口I1″。如圖所示,接口I2被劃分成I2a和I2b,并且接口部分I2a內(nèi)嵌在接口I1中書寫代碼來形成接口I1″。對于具體的示例,考慮圖11的接口1執(zhí)行函數(shù)調(diào)用square(input,output),它由接口I2接收,在由第二代碼片斷處理傳遞到input的值(對其求平方)之后,它被使用output傳遞回已求平方的結(jié)果。在這一情況下,由第二代碼片斷執(zhí)行的處理(對input求平方)可以由第一代碼片斷在不調(diào)用該接口的情況下執(zhí)行。
      脫離可以通過將通信分裂成多個(gè)離散的通信來間接地完成從一個(gè)代碼片斷到另一個(gè)的通信。這在圖18和19中示意性地描述。如圖18所示,提供了中間件的一個(gè)或多個(gè)片斷(脫離接口(Divorce Interface),因?yàn)樗鼈儚脑嫉慕涌诿撾x的功能和/或接口函數(shù)),以轉(zhuǎn)化第一接口“接口1”上的通信,使得它們符合不同的接口,在本情況下為“接口2A”、“接口2B”和“接口2C”。這可以在這樣一種情況中完成,例如,依照“接口1”協(xié)議設(shè)計(jì)應(yīng)用的已安裝基礎(chǔ)與如操作系統(tǒng)進(jìn)行通信,但是然后改變該操作系統(tǒng)來使用不同的接口,在本情況下為接口“接口2A”、“接口2B”和“接口2C”。要點(diǎn)是改變了由第二代碼片斷使用的原始接口,使得它不再與第一代碼片斷所使用的接口兼容,因此使用中間物來令舊接口和新接口兼容。類似地,如圖19所示,可以使用脫離接口DI1引入第三代碼片斷以從接口I1接收信息,并使用脫離接口DI2引入第三代碼片斷以向例如接口I2a和I2b發(fā)送接口功能,重新設(shè)計(jì)接口I2a和I2b以使用DI2,但是提供相同的功能性結(jié)果。類似地,DI1和DI2可共同工作以將圖11的接口I1和I2的功能翻譯成一新操作系統(tǒng),而提供相同或類似的功能性結(jié)果。
      重寫再一種可能的變化是動態(tài)地重寫代碼,使用別的東西來替換接口的功能,而仍達(dá)到相同的總體結(jié)果。例如,可以有一種系統(tǒng),其中,向執(zhí)行環(huán)境(如由.Net框架提供的環(huán)境、Java運(yùn)行時(shí)刻環(huán)境或其它類似的運(yùn)行時(shí)刻類型環(huán)境)中的及時(shí)(Just-in-Time)(JIT)編譯器或解釋器提供了中間語言(如Microsoft IL、JavaByteCode等)中呈現(xiàn)的代碼片斷??梢詴鴮慗IT編譯器以動態(tài)地將通信從第一代碼片斷轉(zhuǎn)化到第二代碼片斷,即,令它們符合第二代碼片斷(原始或不同的第二代碼片斷)所需要的不同接口。這在圖20和21中有描述。如圖20中所看見的,這一方式類似于上述的脫離情形。它可以在這樣一種情況下完成,例如,依照“接口1”協(xié)議設(shè)計(jì)應(yīng)用的已安裝基礎(chǔ)操作系統(tǒng)進(jìn)行通信,然后改變該操作系統(tǒng)以使用不同的接口。JIT編譯器可以用于令已安裝基礎(chǔ)應(yīng)用的空中通信符合操作系統(tǒng)的新接口。如圖21所描述的,可以應(yīng)用這一動態(tài)重寫接口的方法以進(jìn)行動態(tài)分解,或者改變接口。
      也應(yīng)當(dāng)注意,上述通過替換實(shí)施例實(shí)現(xiàn)與接口相同或相似的結(jié)果的情形也可以以各種方式串行、并行或與其它干預(yù)代碼組合。由此,上文呈現(xiàn)的替換實(shí)施例并非相互窮盡,并且可以被混合、匹配和組合以產(chǎn)生與圖10和11中所呈現(xiàn)的一般情形相同或等效的情形。也應(yīng)當(dāng)注意,如同大多數(shù)編程構(gòu)造,本發(fā)明可能未描述達(dá)到與接口相同或相似的功能的其它類似的方式,但是它們?nèi)杂杀景l(fā)明的精神和范圍來表示,即,應(yīng)當(dāng)注意,它至少部分地是由作為接口的值的基礎(chǔ)的接口表示的功能或由其啟用的有利結(jié)果。
      盡管上文的描述使用了對結(jié)構(gòu)探特征和/或方法行動專用的語言,可以理解,所附權(quán)利要求書中定義的本發(fā)明不限于所描述的具體特征或行動。相反,揭示了具體特征和行動作為實(shí)現(xiàn)本發(fā)明的示例性形式。
      權(quán)利要求
      1.一種包含在一個(gè)或多個(gè)計(jì)算機(jī)可讀媒質(zhì)中的編程接口,其特征在于,它包括涉及向多個(gè)安全引擎?zhèn)鬟f新安全政策的第一組功能,其中,所述多個(gè)安全引擎的每一個(gè)被配置成用所述新安全政策替換現(xiàn)有安全政策;以及涉及傳遞每一安全引擎已準(zhǔn)備好實(shí)現(xiàn)所述新安全政策的指示的第二組功能。
      2.如權(quán)利要求1所述的編程接口,其特征在于,所述第一組功能包括指令所述多個(gè)安全引擎的每一個(gè)刪除所述新安全政策的方法。
      3.如權(quán)利要求1所述的編程接口,其特征在于,所述第一組功能包括初始化一特定安全引擎的方法。
      4.如權(quán)利要求1所述的編程接口,其特征在于,所述第一組功能包括指令所述多個(gè)安全引擎的每一個(gè)實(shí)現(xiàn)所述新安全政策的方法。
      5.如權(quán)利要求1所述的編程接口,其特征在于,所述第一組功能還包括向所述多個(gè)安全引擎的至少一個(gè)傳遞與現(xiàn)有安全政策關(guān)聯(lián)的新數(shù)據(jù)的方法。
      6.如權(quán)利要求1所述的編程接口,其特征在于,所述第一組功能還包括向所述多個(gè)安全引擎的至少一個(gè)傳遞配置信息的方法。
      7.如權(quán)利要求1所述的編程接口,其特征在于,所述第二組功能還包括指示一特定安全引擎是否已實(shí)現(xiàn)了所述新安全政策的方法。
      8.如權(quán)利要求1所述的編程接口,其特征在于,所述第二組功能還包括檢索與一特定安全政策關(guān)聯(lián)的更新數(shù)據(jù)的方法。
      9.如權(quán)利要求1所述的編程接口,其特征在于,所述第二組功能還包括向一安全代理傳遞由所述多個(gè)安全引擎之一標(biāo)識的新數(shù)據(jù)的方法。
      10.如權(quán)利要求1所述的編程接口,其特征在于,所述第二組功能還包括允許所述多個(gè)安全引擎之一查詢包含所述多個(gè)安全引擎的系統(tǒng)的用戶的方法。
      11.如權(quán)利要求1所述的編程接口,其特征在于,所述多個(gè)安全引擎的至少一個(gè)實(shí)現(xiàn)防病毒服務(wù)。
      12.如權(quán)利要求1所述的編程接口,其特征在于,所述多個(gè)安全引擎的至少一個(gè)實(shí)現(xiàn)防火墻應(yīng)用。
      13.如權(quán)利要求1所述的編程接口,其特征在于,所述多個(gè)安全引擎在所有安全引擎指示已準(zhǔn)備好實(shí)現(xiàn)所述新安全政策之后實(shí)現(xiàn)所述新安全政策。
      14.一種包括一個(gè)或多個(gè)微處理器和一個(gè)或多個(gè)軟件程序的計(jì)算機(jī)系統(tǒng),所述一個(gè)或多個(gè)軟件程序使用一應(yīng)用程序接口來實(shí)現(xiàn)多個(gè)安全引擎上的安全政策,其特征在于,所述應(yīng)用程序接口包括以下功能向所述多個(gè)安全引擎?zhèn)鬟f新安全政策的第一功能;標(biāo)識所述多個(gè)安全引擎的每一個(gè)是否已準(zhǔn)備好應(yīng)用所述新安全政策的第二功能;以及在確定所有所述安全引擎已準(zhǔn)備好應(yīng)用所述新安全政策之后指令所述多個(gè)安全引擎實(shí)現(xiàn)所述新安全政策的第三功能。
      15.如權(quán)利要求14所述的計(jì)算機(jī)系統(tǒng),其特征在于,它還包括如果所述多個(gè)安全引擎的至少一個(gè)無法應(yīng)用所述新安全政策,則促使所述多個(gè)安全引擎的每一個(gè)刪除所述新安全政策的第四功能。
      16.如權(quán)利要求14所述的計(jì)算機(jī)系統(tǒng),其特征在于,它還包括涉及向其它安全引擎?zhèn)鬟f由第一安全引擎標(biāo)識的事件信息的第四功能。
      17.如權(quán)利要求14所述的計(jì)算機(jī)系統(tǒng),其特征在于,它還包括涉及向一事件管理器傳遞由第一安全引擎標(biāo)識的安全相關(guān)信息的第四功能。
      18.如權(quán)利要求17所述的計(jì)算機(jī)系統(tǒng),其特征在于,所述事件管理器向所述多個(gè)安全引擎的至少一個(gè)傳遞所述安全相關(guān)信息。
      19.如權(quán)利要求14所述的計(jì)算機(jī)系統(tǒng),其特征在于,所述多個(gè)安全引擎的至少一個(gè)與第一類型的安全攻擊關(guān)聯(lián)。
      20.如權(quán)利要求19所述的計(jì)算機(jī)系統(tǒng),其特征在于,所述多個(gè)安全引擎的至少一個(gè)與第二類型的安全攻擊關(guān)聯(lián)。
      21.一種方法,其特征在于,它包括調(diào)用一個(gè)或多個(gè)第一功能來方便向第一安全引擎?zhèn)鬟f安全政策;調(diào)用一個(gè)或多個(gè)第二功能來方便確定所述第一安全引擎是否已應(yīng)用了所述安全政策;以及調(diào)用一個(gè)或多個(gè)第三功能來方便從第一安全引擎向第二安全引擎?zhèn)鬟f安全相關(guān)信息。
      22.如權(quán)利要求21所述的方法,其特征在于,所述安全相關(guān)信息標(biāo)識一種安全攻擊類型。
      23.如權(quán)利要求21所述的方法,其特征在于,它還包括調(diào)用一個(gè)或多個(gè)第四功能來方便與包含所述第一安全引擎的系統(tǒng)的用戶交互。
      24.如權(quán)利要求21所述的方法,其特征在于,它還包括調(diào)用一個(gè)或多個(gè)第四功能來方便向所述第一安全引擎?zhèn)鬟f配置信息。
      25.如權(quán)利要求21所述的方法,其特征在于,它還包括調(diào)用一個(gè)或多個(gè)第四功能來方便指令所述第一安全引擎和所述第二安全引擎實(shí)現(xiàn)所述安全政策。
      26.如權(quán)利要求21所述的方法,其特征在于,它還包括調(diào)用一個(gè)或多個(gè)第四功能來方便向所述第一安全引擎?zhèn)鬟f一經(jīng)修訂安全政策。
      27.一種系統(tǒng),其特征在于,它包括用于展現(xiàn)向一事件管理器傳遞安全相關(guān)事件的第一功能的裝置;用于展現(xiàn)標(biāo)識與所述安全相關(guān)事件關(guān)聯(lián)的多個(gè)安全引擎的第二功能的裝置;以及用于展現(xiàn)向所標(biāo)識的安全引擎?zhèn)鬟f所述安全相關(guān)事件的第三功能的裝置。
      28.如權(quán)利要求27所述的系統(tǒng),其特征在于,它還包括用于展現(xiàn)向所述多個(gè)安全引擎?zhèn)鬟f新安全政策的第四功能的裝置;以及用于展現(xiàn)指令所述多個(gè)安全引擎用所述新安全政策替換現(xiàn)有安全政策的第五功能的裝置。
      29.如權(quán)利要求28所述的系統(tǒng),其特征在于,它還包括用于展現(xiàn)如果所述多個(gè)安全引擎的至少一個(gè)無法實(shí)現(xiàn)所述新安全政策,則指令所述多個(gè)安全引擎刪除所述新安全政策的第六功能的裝置。
      30.如權(quán)利要求27所述的系統(tǒng),其特征在于,所述安全相關(guān)事件是病毒檢測。
      31.如權(quán)利要求27所述的系統(tǒng),其特征在于,所述安全相關(guān)事件是訪問存儲設(shè)備的非授權(quán)嘗試。
      32.如權(quán)利要求27所述的系統(tǒng),其特征在于,它還包括用于展現(xiàn)向所述事件管理器通知多個(gè)安全引擎已完成處理另一功能調(diào)用的第四功能的裝置。
      全文摘要
      一種編程接口包括涉及向多個(gè)安全引擎?zhèn)鬟f新安全政策的第一組功能。所述多個(gè)安全引擎的每一個(gè)被配置成用所述新安全政策替換現(xiàn)有安全政策。該編程接口也包括涉及傳遞每一安全引擎準(zhǔn)備好實(shí)現(xiàn)所述新安全政策的指示的第二組功能。
      文檔編號G06F12/14GK1624657SQ20041008310
      公開日2005年6月8日 申請日期2004年9月28日 優(yōu)先權(quán)日2003年12月5日
      發(fā)明者S·W·湯杉德, T·F·菲克斯 申請人:微軟公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
      1