欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

蠕蟲遏制的制作方法

文檔序號:6632785閱讀:186來源:國知局
專利名稱:蠕蟲遏制的制作方法
技術(shù)領(lǐng)域
本發(fā)明一般涉及計算機(jī)安全,尤其涉及檢測、警告和/或減少網(wǎng)絡(luò)化計算機(jī)系統(tǒng)中蠕蟲的傳播。

發(fā)明內(nèi)容
下文為向讀者提供基本的理解提出了本發(fā)明的簡化概述。該概述并非本發(fā)明的廣泛綜述,且沒有標(biāo)識本發(fā)明關(guān)鍵或決定性元素,也沒有描述本發(fā)明的范圍。它唯一的目的是以簡化的形式提供此處所揭示的某些概念,作為后文提供的更詳細(xì)描述的序言。
自繁殖程序,也被稱為蠕蟲,威脅連接至因特網(wǎng)的計算機(jī)。蠕蟲惡意利用了諸如流行的軟件包等程序中的易受攻擊性來獲取對被感染的機(jī)器的控制。這樣,該問題的一個長期的解決方法是構(gòu)建沒有易受攻擊性的軟件。然而,直到那時以前,軟件會一直含有易受攻擊性,并且可以采用蠕蟲遏制系統(tǒng)來降低蠕蟲的影響。因?yàn)槿湎x能夠迅速地傳播,遏制系統(tǒng)可以被自動化以快速和/或有效地檢測和響應(yīng),并且可以向網(wǎng)絡(luò)中的另一個計算機(jī)系統(tǒng)節(jié)點(diǎn)分發(fā)警報。
遏制系統(tǒng)的一方面可以包括監(jiān)測系統(tǒng),該監(jiān)測系統(tǒng)能夠通過包括動態(tài)流分析的多種技術(shù)檢測一大類攻擊。遏制系統(tǒng)的另一方面可以包括生成和/或發(fā)送警報,作為安全共享關(guān)于已檢測到的蠕蟲的知識的基礎(chǔ)。警報可以包含證明一個給定的程序含有易受攻擊性的信息。警報可以是自證明的,這樣它的真實(shí)性可以由計算機(jī)系統(tǒng)獨(dú)立地驗(yàn)證。遏制系統(tǒng)可以包括能復(fù)原的和/或自組織的協(xié)議,以用及時的方式向沒有被感染的節(jié)點(diǎn)傳播警報,甚至在蠕蟲爆發(fā)過程中受到劇烈的攻擊時。遏制系統(tǒng)可以包括一系統(tǒng)體系結(jié)構(gòu),它使得大量互不信任的計算機(jī)能夠在遏制蠕蟲的任務(wù)中相互合作,即使在蠕蟲正在迅速傳播并惡意利用軟件包中未知的易受攻擊性時。遏制系統(tǒng)可以包括一保護(hù)系統(tǒng),它可以保護(hù)計算設(shè)備免遭將來的攻擊。
當(dāng)結(jié)合附圖考慮參考下述詳細(xì)描述時,眾多附加特征能夠被更容易的理解和更好地理解。


按照附圖閱讀下述詳細(xì)描述,可以更好地理解本發(fā)明,附圖中圖1是實(shí)現(xiàn)網(wǎng)絡(luò)系統(tǒng)中一節(jié)點(diǎn)的示例性計算系統(tǒng)的示意圖;圖2是一示例性計算網(wǎng)絡(luò)的示意圖;圖3是一示例性遏制系統(tǒng)的數(shù)據(jù)流圖;圖4是與一示例性存儲器位置污染數(shù)據(jù)存儲相關(guān)聯(lián)的示例性頁污染數(shù)據(jù)存儲的表;圖5是另一示例性頁污染數(shù)據(jù)存儲的表;圖6是一檢測蠕蟲攻擊和/或程序易受攻擊性的示例性方法的流程圖;圖7是一示例性警報的示意圖;圖8是一證明自證明警報的示例性方法的流程圖;圖9是一示例性抽象機(jī)器的代碼清單;圖10是一示例性安全條件的條件清單;圖11是易受攻擊指令的指令清單;圖12是一示例性對等網(wǎng)絡(luò)的示意圖;圖13是示出在一示例性對等網(wǎng)絡(luò)中在給定一小部分檢測模塊時一小部分存活節(jié)點(diǎn)的示例性圖表。
圖14是一示例性寄存器污染數(shù)據(jù)存儲的表;圖15是易受攻擊指令的指令清單;圖16是一生成自證明警報的示例性方法的流程圖;圖17是對任意跳轉(zhuǎn)至一可執(zhí)行緩沖區(qū)的易受攻擊性的示例性源代碼清單;以及圖18是一示例性污染數(shù)據(jù)存儲的表。
附圖中,相同的參考標(biāo)號用來指相同的部分。
具體實(shí)施例方式
示例性操作環(huán)境圖1和下列討論意在對其中可實(shí)現(xiàn)蠕蟲遏制系統(tǒng)的所有或一部分部的合適的計算機(jī)環(huán)境提供一簡短的、概括的描述。圖1中的操作環(huán)境僅僅是合適的操作環(huán)境的一個示例,并不意欲對該操作環(huán)境的使用范圍或功能提出任何限制。其它可適于用作此處所述的蠕蟲遏制系統(tǒng)的公知的計算機(jī)系統(tǒng)、環(huán)境和/或配置包括,但不限于,個人計算機(jī)、手持或膝上型設(shè)備、多處理器系統(tǒng)、基于微處理器的系統(tǒng)、可編程消費(fèi)者電子產(chǎn)品、網(wǎng)絡(luò)個人計算機(jī)、服務(wù)器計算機(jī)、小型機(jī)、大型機(jī)、包含上述系統(tǒng)或設(shè)備中的任一個的分布式計算機(jī)環(huán)境等。
盡管并非必需,蠕蟲遏制系統(tǒng)將在諸如由一臺或多臺計算機(jī)或其他設(shè)備執(zhí)行的程序模塊等計算機(jī)可執(zhí)行指令的通用語境下描述。一般地,程序模塊包括例程、程序、對象、組件、數(shù)據(jù)結(jié)構(gòu)等,它們執(zhí)行特定的任務(wù)或?qū)崿F(xiàn)特定的抽象數(shù)據(jù)類型。通常,程序模塊的功能可以按在多種環(huán)境下所要求的結(jié)合或分布。在分布式環(huán)境中,程序模塊可以位于包括存儲器存儲設(shè)備在內(nèi)的本地和遠(yuǎn)程計算機(jī)存儲介質(zhì)中。
參考圖1,用于實(shí)現(xiàn)蠕蟲遏制系統(tǒng)的示例性系統(tǒng)包括一計算設(shè)備,諸如計算設(shè)備100。在其最基本配置中,計算設(shè)備100通常包括至少一個處理器單元102和存儲器104。取決于計算設(shè)備的確切配置和類型,存儲器104可以是易失性的(諸如RAM)、非易失性的(諸如ROM、閃存等)或兩者的結(jié)合。該最基本配置在圖1中由虛線106示出。此外,設(shè)備100還可以包括另外的特征和/或功能。例如,設(shè)備100還可包括另外的存儲(例如,可移動的和/或不可移動的),包括,但不限于,磁盤、光盤或磁帶。這些另外的存儲在圖1中由可移動存儲108和不可移動存儲110示出。計算機(jī)存儲介質(zhì)包括以任何方法或技術(shù)實(shí)現(xiàn)的用于諸如計算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù)的信息的存儲的易失性的和非易失性的、可移動的和不可移動的介質(zhì)。存儲器104、可移動存儲108、和不可移動存儲110都是計算機(jī)存儲介質(zhì)的示例。計算機(jī)存儲介質(zhì)包括,但并不限于,RAM、ROM、EEPROM、閃存或其它存儲器技術(shù)、CD-ROM、數(shù)字多功能盤(DVD)或其它光學(xué)存儲、磁帶盒、磁帶、磁盤存儲或其它磁性存儲設(shè)備、或能用于存儲所需信息且可以由設(shè)備100訪問的任何其它介質(zhì)。任何這樣的計算機(jī)存儲介質(zhì)可以是設(shè)備100的一部分。
設(shè)備100還可以包含通信連接112,它允許設(shè)備100與諸如計算系統(tǒng)網(wǎng)絡(luò)211中的其它節(jié)點(diǎn)等其它計算設(shè)備通信。通信連接112是通信介質(zhì)的一個示例。通信介質(zhì)通常具體化為諸如載波或其它傳輸機(jī)制等已調(diào)制數(shù)據(jù)信號中的計算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù),且包含任何信息傳遞介質(zhì)。術(shù)語“已調(diào)制數(shù)據(jù)信號”指的是一種信號,其一個或多個特征以在信號中編碼信息的方式被設(shè)定或更改。作為示例,而非限制,通信介質(zhì)包括有線介質(zhì),諸如有線網(wǎng)絡(luò)或直接線連接,和無線介質(zhì),諸如聲學(xué)、射頻、紅外線和其它無線介質(zhì)。在這里使用的術(shù)語計算機(jī)可讀介質(zhì)包括存儲介質(zhì)和通信介質(zhì)兩者。
設(shè)備100還可以含有輸入設(shè)備114,諸如鍵盤、鼠標(biāo)、筆、語音輸入設(shè)備、觸摸式輸入設(shè)備、激光距離探測器、紅外攝像機(jī)、視頻輸入設(shè)備和/或其它輸入設(shè)備。還可以包括諸如顯示器、揚(yáng)聲器、打印機(jī)和/或其它輸出設(shè)備的輸出設(shè)備116。
在下文的描述中,本發(fā)明參考由一臺或多臺計算設(shè)備實(shí)現(xiàn)的動作和操作的符號表示來描述,除非另有說明。由此,可以理解,這樣的動作和操作,有時被稱為由計算機(jī)執(zhí)行的,包括由計算設(shè)備的處理單元對以結(jié)構(gòu)化格式表示數(shù)據(jù)的電信號的處理。該處理變換了數(shù)據(jù)或在計算設(shè)備的存儲器系統(tǒng)中的位置上維護(hù)它們,從而以一種本領(lǐng)域技術(shù)人員都理解的方式重新配置或改變了該設(shè)備的操作。雖然下列描述已在前文中描述,但它并不意味著限制,如本領(lǐng)域的技術(shù)人員可以理解的,在下文中描述的各種動作和操作也可用硬件實(shí)現(xiàn)。例如,通過使用本領(lǐng)域技術(shù)人員所知的常規(guī)技術(shù),軟件指令中的全部或一部分可以由諸如DSP、可編程邏輯陣列等專用電路來實(shí)現(xiàn)。
維護(hù)數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)是存儲器的物理位置,它具有由數(shù)據(jù)格式所定義的特定屬性。本領(lǐng)域的技術(shù)人員可以認(rèn)識到,用來存儲程序指令的存儲設(shè)備能夠分布在網(wǎng)絡(luò)上。例如,遠(yuǎn)程計算機(jī)可以存儲被描述為軟件的進(jìn)程的一示例。本地或終端計算機(jī)可以訪問該遠(yuǎn)程計算機(jī)并下載一部分或全部軟件來運(yùn)行程序。作為選擇,本地計算機(jī)可以下載所需的部分軟件,或通過在本地終端上執(zhí)行一些軟件指令且在遠(yuǎn)程計算機(jī)上(或計算機(jī)網(wǎng)絡(luò)中)執(zhí)行一些軟件指令來分布式地處理。
其中可使用遏制系統(tǒng)的網(wǎng)絡(luò)化環(huán)境的一個示例參考圖2來描述。該示例性網(wǎng)絡(luò)包括若干計算機(jī)或節(jié)點(diǎn)210,它們通過由云表示的網(wǎng)絡(luò)211彼此通信。網(wǎng)絡(luò)211可以包括眾多公知的組件,諸如,路由器、網(wǎng)關(guān)、集線器等,且允許節(jié)點(diǎn)210通過有線和/無線介質(zhì)通信。當(dāng)通過網(wǎng)絡(luò)211彼此交互時,一個或多個節(jié)點(diǎn)可以擔(dān)當(dāng)客戶機(jī)、網(wǎng)絡(luò)服務(wù)器、或關(guān)于其他節(jié)點(diǎn)的對等體(peer)。從而,遏制系統(tǒng)的各種示例可以被實(shí)施為客戶機(jī)、網(wǎng)絡(luò)服務(wù)器、對等體、或其組合,即使此處所包含的特定示例沒有涉及所有這些類型的計算機(jī)。
蠕蟲遏制蠕蟲通常通過諸如消息等可以被存儲在計算系統(tǒng)中的接收到的數(shù)據(jù)引入到計算系統(tǒng)中。該接收到的和存儲的數(shù)據(jù)可以惡意利用該計算系統(tǒng)的存儲特征來創(chuàng)建允許蠕蟲攻擊和/或傳播的易受攻擊性。例如,眾多蠕蟲將代碼注入一易受攻擊的程序中并強(qiáng)迫該程序執(zhí)行該代碼。其它蠕蟲可以通過遠(yuǎn)程控制易受攻擊的程序的執(zhí)行來攻擊,而不需注入新的代碼。
參考圖3,蠕蟲遏制系統(tǒng)300可以包括一個或多個檢測模塊340、警報模塊350、警報驗(yàn)證模塊360、分發(fā)模塊370和響應(yīng)模塊380。檢測模塊340可以檢測在計算系統(tǒng)上的蠕蟲攻擊。檢測前,該蠕蟲可以是已知或未知的??梢岳斫?,在適當(dāng)時可使用任何蠕蟲檢測系統(tǒng)。蠕蟲遏制系統(tǒng)300可以使用不同的技術(shù)運(yùn)行不同的檢測模塊340,且每個檢測模塊340可以使用一種或多種技術(shù)來檢測蠕蟲。可使用合適的檢測技術(shù)的任一組合,包括將收到的信息標(biāo)識為含有已知蠕蟲;將接收到的信息與存儲的信息相比較以檢測更改的和不必要的文件的存在、檢測配置的改變、和/或驗(yàn)證諸如返回地址等參數(shù)值;將預(yù)期要存儲的信息與實(shí)際所存儲的信息相比較以檢測緩沖區(qū)蓋寫;使用保護(hù)存儲段檢測緩沖區(qū)溢出;實(shí)現(xiàn)數(shù)組邊界核查以直接檢測緩沖區(qū)上溢和下溢;監(jiān)視程序的運(yùn)行時和/或通信模式并檢測與預(yù)期行為的任何背離;對傳入數(shù)據(jù)檢查已知蠕蟲簽名,諸如串和/或消息長度;動態(tài)數(shù)據(jù)流分析;等等。動態(tài)數(shù)據(jù)流分析在下文描述。
當(dāng)檢測到蠕蟲,遏制系統(tǒng)可以采取行動。例如,警報模塊350可以生成警報330,并且將警報送至一個或多個計算系統(tǒng),以共享關(guān)于所檢測的蠕蟲的知識。警報模塊可以生成一自證明警報,它可以被發(fā)送至一個或多個計算系統(tǒng),且可以包含證明給定程序含有易受攻擊性的信息。警報的分發(fā)可以由分發(fā)模塊370來確定,它可以使得大量互不信任的計算機(jī)系統(tǒng)能夠在遏制蠕蟲上合作。接收到的自證明警報可以由接收該自證明警報的計算系統(tǒng)獨(dú)立地證明。對自證明警報的驗(yàn)證可以由接收計算系統(tǒng)320的警報驗(yàn)證模塊360執(zhí)行。
檢測蠕蟲和/或接收警報的計算系統(tǒng)可以采取本地行動以凈化和/或保護(hù)系統(tǒng)、降低蠕蟲的有害效果、和/或防止蠕蟲經(jīng)由響應(yīng)模塊380傳播。響應(yīng)模塊380所使用的確切保護(hù)機(jī)制可在各節(jié)點(diǎn)間變化,并且可以適當(dāng)?shù)貙?shí)現(xiàn)。例如,某些節(jié)點(diǎn)可以簡單地停止易受攻擊的軟件包;其它節(jié)點(diǎn)可以使用本地修補(bǔ)和/或過濾過程。
使用動態(tài)流分析的檢測動態(tài)數(shù)據(jù)流分析可以檢測多種不同的蠕蟲或同一蠕蟲的變種通過惡意利用易受攻擊性來獲取對目標(biāo)程序的控制的方式。從而,動態(tài)數(shù)據(jù)流分析不是以蠕蟲為中心的,而是以易受攻擊性為中心的。動態(tài)數(shù)據(jù)流分析可以檢測未知的蠕蟲,因?yàn)樗恍枰P(guān)于含有易受攻擊性的特定指令集或蠕蟲所使用來惡意利用該易受攻擊性的特定行動集的先驗(yàn)知識。以這種方式,動態(tài)數(shù)據(jù)流分析可以檢測未知的蠕蟲。蠕蟲使用的多種攻擊涉及將代碼注入到易受攻擊的程序中并強(qiáng)迫它執(zhí)行該代碼。另一種常見的攻擊機(jī)制是遠(yuǎn)程地控制該易受攻擊的程序的執(zhí)行,而不注入任何新代碼。例如,如果該程序已經(jīng)裝載C運(yùn)行時環(huán)境,則蠕蟲可以強(qiáng)迫該易受攻擊的程序調(diào)用system()函數(shù)。動態(tài)流分析可以檢測這兩種感染方法以及其它感染方法。
動態(tài)流分析跟蹤輸入操作中接收到的數(shù)據(jù)(例如,從網(wǎng)絡(luò)連接處接收到的數(shù)據(jù))。動態(tài)流分析可以由上文參考圖3討論的檢測模塊340來實(shí)現(xiàn)。更具體地,檢測模塊340可以將某些信息存儲位置標(biāo)識為“臟”,例如,存儲從外部來源接收到的信息的那些存儲位置和/或存儲從來自外部來源的信息導(dǎo)出的信息的存儲位置。檢測模塊可以選擇性地阻斷存儲在臟位置上的數(shù)據(jù)的執(zhí)行,和/或可以選擇性地阻斷將那些數(shù)據(jù)裝載到指令指針。以這種方式,阻斷執(zhí)行和/或?qū)⑴K數(shù)據(jù)裝載到指令指針可以防止或減少遠(yuǎn)程裝載的代碼的執(zhí)行和對執(zhí)行的遠(yuǎn)程控制。指令指針或程序計數(shù)器是包含在程序序列中下一條被執(zhí)行的指令的地址或位置的寄存器。
跟蹤所存儲的數(shù)據(jù)是臟還是干凈的動態(tài)流分析可以使用任一合適的方式來執(zhí)行。例如,可以探測存儲來自外部來源的信息的指令來跟蹤哪個存儲器位置和/或CPU寄存器含有從輸入操作中接收和/或從輸入操作中接收到的數(shù)據(jù)中導(dǎo)出的臟數(shù)據(jù)。探測的指令的選擇可以包括讀/或?qū)憯?shù)據(jù)的任何適當(dāng)?shù)闹噶?,諸如裝載或存儲操作(例如,x86 CPU上的MOVS、PUSH、POP)、算術(shù)和邏輯指令(例如,x86 CPU上的ADD、MUL、XOR、AND)。所有控制轉(zhuǎn)移指令(例如,x86 CPU上的RET、CALL、JMP),或被認(rèn)為適當(dāng)?shù)淖蛹部梢员惶綔y來實(shí)現(xiàn)對裝載至指令指針的數(shù)據(jù)的核查。
臟存儲器位置可以用任何合適的方式來跟蹤。例如,臟存儲器位置可以在污染數(shù)據(jù)存儲中跟蹤,污染數(shù)據(jù)存儲將一臟指示符與計算設(shè)備的一部分存儲器中的存儲位置相關(guān)聯(lián)。存儲器的該部分可以是存儲器位置、寄存器、偏移量指示等。
臟指示符可以是任一合適的指示符,它指示存儲在相關(guān)聯(lián)的存儲器位置上的信息來自不可信外部來源,在某些示例中,可以認(rèn)為發(fā)送信息的所有其它節(jié)點(diǎn)都是不可信的。例如,臟指示符可以是一二進(jìn)制數(shù),這樣,1指示相關(guān)聯(lián)的數(shù)據(jù)是臟的,而0指示相關(guān)聯(lián)的數(shù)據(jù)是干凈的。在另一個示例中,臟指示符可以是諸如整數(shù)或字母數(shù)字串等消息標(biāo)識符,它指示臟信息的消息和/或來源。以這種方式,如果數(shù)據(jù)是臟的,則臟指示符可以等價于唯一消息指示符,且如果數(shù)據(jù)是‘干凈的’,臟指示符可以等于一默認(rèn)值,如空值或‘0’。在另一個示例中,臟指示符可以是指示消息和消息中的偏移量兩者的標(biāo)識符。在另一個示例中,臟指示符可以是數(shù)據(jù)流圖的標(biāo)識符,該數(shù)據(jù)流圖包括用來從臟信息的消息/來源中的值計算臟存儲器部分處的值的指令的全部序列或序列的相關(guān)部分。
由相關(guān)聯(lián)的臟指示符指示的相關(guān)聯(lián)的存儲器部分的臟或干凈的位置可以用任一適當(dāng)?shù)姆绞絹碇甘?。在一個示例中,臟指示符可以與指示存儲器中的特定位置的存儲器位置指示符相關(guān)聯(lián)。在另一個示例中,在臟指示符向量中放置臟指示符可以指示該存儲器位置。例如,臟指示符向量或數(shù)組中的第一個臟指示符可以指示第一存儲器位置(諸如,堆棧的頂端),第二個臟指示符可以指示第二存儲器位置(諸如堆棧中自頂向下第二個位置),依此類推。
在一個示例中,每個存儲器位置可以用污染數(shù)據(jù)存儲中的臟指示符來跟蹤。示例污染數(shù)據(jù)存儲390在圖3示出。計算設(shè)備中的任何類型或部分的存儲器可以被跟蹤,例如,存儲器頁、在存儲器頁中的個別存儲器位置、CPU寄存器等。
存儲器的每一頁都可以通過將存儲器的每一頁和頁臟指示符相關(guān)聯(lián)來跟蹤。存儲器頁可以是存儲器的任一段,諸如4KB的存儲器段。頁臟指示符可以指示存儲器頁中的至少一個存儲器位置是否為臟。如果頁臟指示符指示頁中的至少一個臟存儲器位置,那么臟頁中的每個存儲器位置可以與一存儲器位置臟指示符相關(guān)聯(lián)。存儲器位置臟指示符可以指示相關(guān)聯(lián)的存儲器位置(由向量中的位置,或任何其它合適的方式來指示)是干凈的還是臟的,取決于在該存儲器位置中所包含的信息。以這種方式,每個存儲器頁可以與一頁臟指示符相關(guān)聯(lián),且只有包含臟信息的那些頁可以被進(jìn)一步分隔成一個個存儲器位置以跟蹤臟信息。
圖4示出允許檢測模塊跟蹤哪些存儲器位置為臟(例如,含有從輸入操作中接收到的數(shù)據(jù))示例數(shù)據(jù)結(jié)構(gòu)410、420。頁污染數(shù)據(jù)存儲410可以包括指示相關(guān)聯(lián)的存儲器頁是干凈還是臟的頁臟指示符的向量。例如,如圖4所示,第一存儲器頁可以如頁臟指示符412的值所指示的那樣是干凈的,而第二存儲器頁可以如頁臟指示符414的值所指示的那樣是臟的。以這種方式,頁污染數(shù)據(jù)存儲410是一向量位圖,每4KB存儲器頁一個比特,如果在該頁中的任何位置是臟的,則將該比特置位。
對頁污染數(shù)據(jù)存儲410中所指示的每一臟頁,可將一附加存儲器位置污染數(shù)據(jù)存儲420與圖4中所示的指示臟頁的頁污染數(shù)據(jù)存儲的頁臟指示符相關(guān)聯(lián)。存儲器位置污染數(shù)據(jù)存儲420可以包括指示臟面中相關(guān)聯(lián)的存儲器位置是干凈還是臟的存儲器位置臟指示符的向量。例如,如圖4所示,由頁臟指示符414的值指示的,第二頁包含臟數(shù)據(jù)。存儲器位置污染數(shù)據(jù)存儲420可以與頁臟指示符414相關(guān)聯(lián)。存儲器位置污染數(shù)據(jù)存儲420可以包括指示該特定頁中哪個存儲器位置是干凈的和/或臟的存儲器位置臟指示符422、424的向量。在圖4所示的示例存儲器位置污染數(shù)據(jù)存儲中,第一存儲器位置可以如存儲器位置臟指示符422的值所指示的那樣是干凈的,而第二存儲器位置可以如存儲器位置臟指示符424的值所指示的那樣是臟的。以這種方式,存儲器位置污染數(shù)據(jù)存儲420是一個向量位圖,每個存儲單元一個比特,如果相關(guān)聯(lián)頁上的相關(guān)聯(lián)存儲器位置是臟的,則將該比特置位。存儲器位置污染數(shù)據(jù)存儲可以用任一何合適的粒度來跟蹤臟存儲器位置,例如,通過以頁、字、和/或字節(jié)粒度維護(hù)臟指示符來跟蹤。類似地,其它存儲器位置污染數(shù)據(jù)存儲可以與指示臟存儲器位置的存儲器位置臟指示符相關(guān)聯(lián)。其它存儲器位置污染數(shù)據(jù)存儲可以在更精細(xì)級別的粒度上,例如,對信息的每個字節(jié),指示臟存儲器位置。
如圖4所示,頁臟指示符可以存儲在頁污染數(shù)據(jù)存儲410上,且存儲器位置臟指示符可以存儲在存儲器位置污染數(shù)據(jù)存儲420上。可選擇地,并非對每一級存儲器部分粒度有單獨(dú)數(shù)據(jù)存儲,而是單個數(shù)據(jù)存儲可以與指示臟存儲器部分的、包括下一級更精細(xì)粒度的臟指示符的臟指示符一同使用。例如,頁臟指示符可以作為數(shù)組存儲在污染數(shù)據(jù)存儲中。指示干凈頁的頁臟指示符可以是任一合適的指示符,諸如0或空值。指示臟值的頁臟指示符可以是含有指示該頁的哪個存儲器位置是臟和干凈的指示符值矢量的位圖。
在圖5所示的示例性污染數(shù)據(jù)存儲510中,第一存儲器頁可以如由頁臟指示符512的值所指示的那樣是干凈的,而第二存儲器頁可以如由頁臟指示符514的值所指示的那樣是臟的。指示該頁為臟的臟面指示符可以包括指示相關(guān)聯(lián)的存儲器位置是干凈還是臟的存儲器位置臟指示符向量。以這種方式,如果頁是干凈的,則污染數(shù)據(jù)存儲510是一數(shù)組位圖,每一存儲器頁一個比特,如果頁是臟的,則污染數(shù)據(jù)存儲510是一存儲器位置臟指示符向量。例如,如圖5所示,第二頁包含了如由頁臟指示符514的值所指示的臟數(shù)據(jù)。頁臟指示符514的值可以指示該頁中哪些存儲器位置是臟的或是干凈的。例如,如圖5所示,存儲器位置臟指示符542的值指示該頁中包含的第一存儲器位置是干凈的,而存儲器位置臟指示符544指示相關(guān)聯(lián)的存儲器位置是臟的。
動態(tài)數(shù)據(jù)流分析可以另外地和/或替換地跟蹤存儲在CPU寄存器上干凈的/臟的數(shù)據(jù)。例如,存儲器的每一寄存器可以用寄存器污染數(shù)據(jù)存儲中的寄存器臟指示符來跟蹤。寄存器臟指示符可以依據(jù)所存儲的信息的來源指示相關(guān)聯(lián)的存儲器寄存器是干凈的還是臟的。如上文所述,跟蹤也可以在比寄存器更小的粒度上另外地或替換地執(zhí)行,例如,通過為寄存器中每一字節(jié)保存一個臟指示符來跟蹤。
圖14示出允許檢測模塊跟蹤哪些寄存器為臟(例如,含有從輸入操作中接收到的(或?qū)С龅?數(shù)據(jù))的示例數(shù)據(jù)存儲1400。寄存器污染數(shù)據(jù)存儲1400可以包括一寄存器臟指示符向量。例如,如圖14所示,第一CPU寄存器可以如寄存器臟指示符1422的值所指示的那樣是干凈的,而第二CPU寄存器可以如寄存器臟指示符1424的值所指示的那樣是臟的。以這種方式,寄存器污染數(shù)據(jù)存儲1400是一向量位圖,每一CPU寄存器一個比特,如果相關(guān)聯(lián)頁上的相關(guān)聯(lián)CPU寄存器是臟的,則將該比特置位。
盡管在上文描述了存儲器頁、存儲器位置和寄存器的示例,然而應(yīng)該理解,任何類型、部分和/或格式的存儲器都可以使用上文所述的動態(tài)數(shù)據(jù)流分析來跟蹤。
如上文所述,臟指示符可以不僅僅指示相關(guān)聯(lián)的存儲器部分是干凈的/臟的,而且也可以指示存儲在該存儲器部分中的信息的來源和/或?qū)С雎窂?。存儲在臟存儲器部分中的信息的來源、計算或?qū)С隹梢杂萌我缓线m的方式來指示,諸如一帶有可任選偏移量指示的輸入消息標(biāo)識符、包含用于計算臟存儲器位置的值的指令序列的數(shù)據(jù)流圖等。臟指示符還可以指示在指令中處理的值的原始來源。
圖18示出了允許檢測模塊跟蹤哪些存儲器位置和/或寄存器為臟(例如,包含從輸入操作中接收到的或?qū)С龅臄?shù)據(jù))以及臟數(shù)據(jù)的來源的示例污染數(shù)據(jù)存儲1800。如圖18所示,臟指示符,諸如臟指示符值1812可以用任一合適的方式指示在該位置上相關(guān)聯(lián)的數(shù)據(jù)是干凈的,諸如空值等。臟指示符值1814可以指示相關(guān)位置處的相關(guān)聯(lián)數(shù)據(jù)是臟的,且可以指示該臟信息的來源。例如,如圖18所示,臟指示符值1814可以包含一數(shù)據(jù)流圖,指示存儲在相關(guān)聯(lián)存儲器位置上的數(shù)據(jù)是從來自非可信來源的臟輸入數(shù)據(jù)中導(dǎo)出的,且指示了存儲在相關(guān)聯(lián)存儲器部分的數(shù)據(jù)是如何從臟輸入數(shù)據(jù)中導(dǎo)出的。數(shù)據(jù)流圖可以指示輸入值、輸入數(shù)據(jù)的來源消息、輸入數(shù)據(jù)消息中的偏移量、應(yīng)用于輸入數(shù)據(jù)以導(dǎo)出目前所存儲的數(shù)據(jù)的指令等。如圖18所示,臟指示符值1814可以指示數(shù)據(jù)流圖1816。圖18中的數(shù)據(jù)流圖1816指示了輸入數(shù)據(jù)1818在消息標(biāo)識符為mess_1的消息中的偏移量為0。數(shù)據(jù)流圖可以指示應(yīng)用于輸入數(shù)據(jù)的操作和/或指令。如圖18所示,加法操作1820使用輸入值1818和以值2示出的值1824執(zhí)行。加法操作的結(jié)果可以使用乘法操作符1826與值1828相乘。以這種方式,該數(shù)據(jù)流圖示出了相關(guān)聯(lián)的存儲器位置是如何從臟數(shù)據(jù),例如輸入數(shù)據(jù)1818中導(dǎo)出的。
存儲臟指示符的污染數(shù)據(jù)存儲,諸如圖4中的頁污染數(shù)據(jù)存儲410和寄存器污染數(shù)據(jù)存儲420、圖5中的污染數(shù)據(jù)存儲510、圖14中的寄存器污染數(shù)據(jù)存儲1400、以及圖18中的污染數(shù)據(jù)存儲1800,可以被存儲在計算設(shè)備的存儲器中的任意一個或多個合適的數(shù)據(jù)存儲中。可以理解,任一合適格式的任一合適數(shù)據(jù)存儲可以用來存儲污染數(shù)據(jù)存儲信息和/或?qū)⑵鋫鬟f到檢測模塊,包括關(guān)系型數(shù)據(jù)庫、面向?qū)ο髷?shù)據(jù)庫、非結(jié)構(gòu)化數(shù)據(jù)庫、常駐內(nèi)存(in-memory)數(shù)據(jù)庫、時序存儲器或其它數(shù)據(jù)存儲。存儲陣列可以使用平面文件系統(tǒng),諸如ASCII文本、二進(jìn)制文件、通信網(wǎng)絡(luò)上傳輸?shù)臄?shù)據(jù)、或其他文件系統(tǒng)來構(gòu)造。盡管對上述數(shù)據(jù)存儲有這些可能的實(shí)現(xiàn),然而此處使用的術(shù)語數(shù)據(jù)存儲和存儲陣列仍涉及以計算機(jī)可訪問的任何方式收集和存儲的任何數(shù)據(jù)。
寄存器、頁、存儲器位置等的臟指示符可以在任何合適的時間生成。例如,只要執(zhí)行了輸入操作(例如,從網(wǎng)絡(luò)連接接收和/或處理數(shù)據(jù)),寫入結(jié)果數(shù)據(jù)的存儲器位置和/或寄存器就可以用一臟指示符來指示。參考圖3,只要執(zhí)行了[MoveData目標(biāo),源]格式的指令,檢測模塊340就可以為存儲器的相關(guān)聯(lián)部分生成一個或多個臟指示符。更具體地,每當(dāng)來自臟來源的數(shù)據(jù)被寫到目標(biāo)中,該目標(biāo)存儲器部分,例如,存儲器位置、寄存器等,可以被指示為臟的,否則,目標(biāo)存儲器部分可以被指示為干凈的。當(dāng)指令或系統(tǒng)調(diào)用將來自非可信外部來源的數(shù)據(jù)寫入目標(biāo)時,目標(biāo)存儲器部分可以被指示為臟的。指令MoveData是一不存在于任一特定CPU上的廣義指令,且可以包含可以處理計算設(shè)備的存儲器中的數(shù)據(jù)的任何數(shù)量的指令和/或指令的組合。例如,MoveData指令可包含操作數(shù)為寄存器或存儲器的x86 MOV指令、目標(biāo)為由ESP寄存器所指向的存儲器位置且另一寄存器為操作數(shù)的PUSH操作。其他的示例可以包括裝載和存儲操作,諸如MOV、MOVS、PUSH、POP等。其他的示例可以包括算術(shù)和邏輯指令,諸如ADD、MUL、AND、XOR等。只要存儲器位置因?yàn)樗阈g(shù)或邏輯指令被執(zhí)行而變成臟的,臟指示符就可以包括導(dǎo)致該存儲器位置變臟的全部或部分指令序列。盡管上述示例是對x86 CPU專用的,然而本領(lǐng)域的技術(shù)人員可以認(rèn)識到,由其他計算設(shè)備執(zhí)行的其他操作和/或指令可以是適合的。
為使用動態(tài)數(shù)據(jù)流分析檢測蠕蟲的存在,數(shù)據(jù)可以在它被執(zhí)行和/或被裝載至指令指針之前被檢查。以這種方式,動態(tài)數(shù)據(jù)流分析可以在蠕蟲獲得控制之前截取執(zhí)行。特別地,檢測可以在執(zhí)行控制被重定向到非法位置時發(fā)生。例如,在指令被執(zhí)行前,可檢查適當(dāng)?shù)奈廴緮?shù)據(jù)存儲,以保證存儲要執(zhí)行的數(shù)據(jù)的存儲器部分的相關(guān)聯(lián)臟指示符是干凈的。如果該臟指示符指示存儲該數(shù)據(jù)的存儲器位置是臟的,則該指令的執(zhí)行可以被中止,且可檢測到蠕蟲的存在。類似地,在數(shù)據(jù)從存儲器部分被裝載至指令指針之前,可以檢查該數(shù)據(jù)的存儲器部分的相關(guān)聯(lián)污染數(shù)據(jù)存儲。如果相關(guān)聯(lián)存儲器部分的臟指示符指示該數(shù)據(jù)來自不可信來源或從其導(dǎo)出的,那么該指針值可以不被裝載至該指令指針,且可以檢測到蠕蟲的存在。為降低最后一項(xiàng)測試可能生成的假肯定,檢測模塊可以進(jìn)一步在將被裝載至該指令指針的值上沒有計算任何范圍比較(例如,檢查一個值是否比一給定的常數(shù)小)或邏輯操作(例如,與一給定的比特模式進(jìn)行AND操作)。檢測模塊也可以使用下述的易受攻擊性驗(yàn)證過程來保證蠕蟲的存在被正確地檢測到,而沒有假肯定。
動態(tài)數(shù)據(jù)流分析檢測是非常通用的,因?yàn)樗梢葬槍ξ粗墓裟繕?biāo)進(jìn)行保護(hù),而大多數(shù)目前可用的工具被設(shè)計成保護(hù)已知目標(biāo)。實(shí)現(xiàn)如上文所述的動態(tài)數(shù)據(jù)流分析的檢測模塊可以不依賴于檢測任一特定數(shù)據(jù)結(jié)構(gòu)的蓋寫,而是可以跟蹤被執(zhí)行或被裝載至指令指針的數(shù)據(jù)的來源。例如,多種工具被設(shè)計成保護(hù)堆棧,然而攻擊者可以選擇以函數(shù)指針或設(shè)置跳轉(zhuǎn)(setjump)緩沖區(qū)為目標(biāo)來繞過該類型的保護(hù)。在任一情況下,攻擊者必須向正在運(yùn)行的程序輸入某些數(shù)據(jù),這意味著動態(tài)數(shù)據(jù)流分析可以檢測到該攻擊。事實(shí)上,動態(tài)數(shù)據(jù)流分析可以有能力檢測攻擊目標(biāo)十分難以識別的問題。
例如,諸如圖17所示的源代碼清單1700等程序可以從網(wǎng)絡(luò)連接裝載數(shù)據(jù),并將該數(shù)據(jù)復(fù)制到第二緩沖區(qū)。該程序可以更改包含該緩沖區(qū)的頁上的頁保護(hù)許可,以允許執(zhí)行然后跳轉(zhuǎn)到該緩沖區(qū)。那些保護(hù)堆?;蛉魏纹渌绦驍?shù)據(jù)結(jié)構(gòu)的工具不會檢測到該問題,因?yàn)闆]有損壞程序的堆棧且也沒有緩沖區(qū)過速。如果該程序在頁上實(shí)施執(zhí)行許可的CPU上運(yùn)行,則該問題也不會被檢測到,因?yàn)樵摮绦蛎鞔_地更改了頁許可。然而,上文所述的動態(tài)數(shù)據(jù)流分析可以檢測該問題,因?yàn)榫彌_區(qū)中的數(shù)據(jù)最初是通過網(wǎng)絡(luò)連接上的輸入操作進(jìn)入程序的地址空間中的。盡管該示例是稍有創(chuàng)造的,但它顯示了程序可能包含的那種任意錯誤。
可以理解,在某些情況下,由檢測模塊實(shí)現(xiàn)的動態(tài)流分析可以不需訪問源代碼,而大多數(shù)保護(hù)工具需要訪問源代碼。該檢測機(jī)制可以用多種其他方式實(shí)現(xiàn)。它可以通過在跟蹤使用頁許可的存儲器訪問解釋的CPU仿真器上運(yùn)行程序、通過使用二進(jìn)制探測技術(shù)、或通過使用操作系統(tǒng)調(diào)試接口控制程序的執(zhí)行來實(shí)現(xiàn)。此外,在某些情況下,只要執(zhí)行環(huán)境有能力保留對每一被執(zhí)行指令的控制,上文所述的動態(tài)數(shù)據(jù)流分析甚至可以檢測自修改代碼和動態(tài)生成代碼(例如,在及時(just-in-time)編譯環(huán)境中生成的代碼等)的安全問題。如果程序運(yùn)行在解釋環(huán)境中,對每個指令保持控制是平凡的,但仍存在支持自修改代碼的二進(jìn)制蓋寫器。
因?yàn)閯討B(tài)流分析不依賴于系統(tǒng)的已知易受攻擊性,和/或定義含有蠕蟲的消息的特征,上述的動態(tài)流分析可以檢測已知和/或未知的蠕蟲。另外,實(shí)現(xiàn)動態(tài)流分析的檢測模塊可以檢測慢速蠕蟲和/或偽裝成正常話務(wù)的蠕蟲。即使蠕蟲僅將它們自己寄生在正常的應(yīng)用程序話務(wù)中,使用動態(tài)流分析的檢測模塊仍可以檢測到該蠕蟲。另外,實(shí)現(xiàn)動態(tài)流分析的檢測模塊可以檢測多形和/或變形的蠕蟲。使用包括加密在內(nèi)的通用迷惑技術(shù)的蠕蟲變種引擎是廣泛可用的。因此,將來的蠕蟲可以廣泛地使用這些工具,從而提高了不使用動態(tài)流分析來檢測的難度。
實(shí)現(xiàn)動態(tài)數(shù)據(jù)流分析的檢測模塊可以被擴(kuò)展以檢測通過蓋寫系統(tǒng)調(diào)用參數(shù)來獲取對目標(biāo)程序的控制的蠕蟲。這樣的蠕蟲可以,例如,蓋寫創(chuàng)建進(jìn)程的系統(tǒng)調(diào)用的參數(shù)并啟動接受來自其它蠕蟲實(shí)例的命令的程序。檢測模塊可以通過核查系統(tǒng)調(diào)用正在使用臟的自變量,例如,存儲在臟存儲器位置的自變量,以及這些自變量未被系統(tǒng)所核查,即,在臟的自變量上計算的邏輯操作(例如,與特定值或值范圍的比較)不足以將它們限制到安全的值,來檢測這樣的攻擊。例如,檢測模塊可以斷定蠕蟲可以強(qiáng)迫目標(biāo)程序啟動存儲在目標(biāo)系統(tǒng)上的任何程序。
檢測模塊可以實(shí)現(xiàn)一種以上檢測機(jī)制,且網(wǎng)絡(luò)中一個或多個不同節(jié)點(diǎn)的每個檢測模塊可以實(shí)現(xiàn)不同的檢測技術(shù)。例如,檢測模塊可以實(shí)現(xiàn)上文結(jié)合一種或多種其他檢測機(jī)制描述的數(shù)據(jù)流分析檢測機(jī)制。每種檢測機(jī)制還可以有多種實(shí)現(xiàn)。以這種方式,可以達(dá)到檢測機(jī)制的類型和實(shí)現(xiàn)的多樣性。示例性附加和/或替換檢測機(jī)制可以包括不如動態(tài)數(shù)據(jù)流分析通用但仍有能力檢測出重大攻擊的檢測機(jī)制。
一種這樣的簡單技術(shù)是檢測每一RET指令將控制轉(zhuǎn)移至一可執(zhí)行頁。該檢測機(jī)制可能是有效的,因?yàn)槎喾N蠕蟲使用簡單的蓋寫堆棧和跳轉(zhuǎn)至蓋寫該堆棧的數(shù)據(jù)的技術(shù),該數(shù)據(jù)通常并不處于含有執(zhí)行許可的存儲器區(qū)域內(nèi)。該技術(shù)可以通過使用二進(jìn)制蓋寫探測目標(biāo)可執(zhí)行碼上的每一RET指令來實(shí)現(xiàn)。多種其他技術(shù)可以用來保護(hù)堆棧。
另一示例性附加和/或替換檢測機(jī)制可以通過探測每個CALL和/或RET指令來保持陰影堆棧。陰影堆棧本質(zhì)上是正常堆棧的副本,但保持在不同的存儲器位置,所以該堆棧的完整性可以在每條RET處核查。
可以理解,其他附加和/或替換檢測機(jī)制可以由檢測模塊實(shí)現(xiàn),以檢測蠕蟲、病毒等的存在或威脅,包括將接收到的信息標(biāo)識為包含已知的蠕蟲;將接收到的信息和所存儲的信息進(jìn)行比較以檢測被更改的和不必要的文件的存在、檢測配置改變、和/或驗(yàn)證諸如返回地址等參數(shù)值;將預(yù)期要存儲的信息和實(shí)際存儲的信息作比較以檢測緩沖器蓋寫;使用保護(hù)存儲段檢測緩沖區(qū)溢出;實(shí)現(xiàn)數(shù)組邊界核查以直接檢測緩沖區(qū)上溢和下溢;監(jiān)視程序的運(yùn)行時和/或通信模式并檢測與預(yù)期行為的任何背離;檢查輸入數(shù)據(jù)是否含有已知蠕蟲簽名,諸如串和/或消息長度;動態(tài)數(shù)據(jù)流分析;等等。
在操作中,檢測模塊,諸如圖3所示檢測模塊340,可以實(shí)現(xiàn)一種檢測蠕蟲的方法。圖6示出了檢測蠕蟲的示例性方法600??山邮?602)處理數(shù)據(jù)的指令,諸如由參考圖1所述的計算設(shè)備接收。如上文所述,處理數(shù)據(jù)的指令可以是移動、組合、轉(zhuǎn)移、裝載數(shù)據(jù)等的指令。數(shù)據(jù)可以如所指令的來處理(604),諸如由計算設(shè)備的適當(dāng)?shù)谋镜貞?yīng)用程序、操作系統(tǒng)等來處理。對數(shù)據(jù)的處理可以包括在存儲器位置和/或寄存器中存儲(606)至少一部分?jǐn)?shù)據(jù)或處理過的部分?jǐn)?shù)據(jù)(例如,數(shù)據(jù)的導(dǎo)出)。存儲器可以是堆棧、緩沖區(qū)或計算設(shè)備的任何其他存儲器部分的一部分。存儲的數(shù)據(jù)的位置可以用任一合適的方式來確定(608)??蓹z查數(shù)據(jù)的來源以確定(610)存儲信息的存儲器部分是‘臟的’還是‘干凈的’。當(dāng)所存儲的信息是從不可信來源導(dǎo)出時,存儲器部分是臟的。同樣地,如果數(shù)據(jù)是來自可信來源和/或從其它干凈數(shù)據(jù)導(dǎo)出的,數(shù)據(jù)可以被認(rèn)為是干凈的。
如果數(shù)據(jù)是干凈的,那么可設(shè)置(612)臟指示符值以指示該數(shù)據(jù)是干凈的。如上文所述,指示干凈數(shù)據(jù)的臟指示符可以是任何合適的指示符,包括‘0’值、空值等。
所確定的臟指示符值可以與存儲數(shù)據(jù)的存儲器部分相關(guān)聯(lián)(614),諸如通過在污染數(shù)據(jù)存儲,如圖3所示的污染數(shù)據(jù)存儲390中存儲臟指示符值來關(guān)聯(lián)。該污染數(shù)據(jù)存儲可以用默認(rèn)臟指示符值來初始化和/或填充。更具體地,所有存儲器部分可以最初被認(rèn)為是一指示臟存儲器部分的臟指示符和/或與該臟指示符相關(guān)聯(lián),,除非如果肯定地確定了干凈數(shù)據(jù)并且將其存儲在相關(guān)聯(lián)的存儲器部分中而特意地更改為干凈的。在另一示例中,所有的存儲器部分最初可以被認(rèn)為是一指示干凈存儲器部分的臟指示符和/或該臟指示符相關(guān)聯(lián),,除非如果肯定地確定了臟數(shù)據(jù)并且將其存儲在相關(guān)聯(lián)存儲器部分中而特意地更改為臟的??梢岳斫?,污染數(shù)據(jù)存儲可以被初始化為任何適當(dāng)?shù)闹怠4送?,如上文所述,污染?shù)據(jù)存儲可以包括一個或多個數(shù)據(jù)存儲,一個或多個臟指示符與每個存儲器寄存器、存儲器頁、存儲器位置等相關(guān)聯(lián)。
如果數(shù)據(jù)是臟的,那么可設(shè)置(612)臟指示符值以指示在該確定位置的數(shù)據(jù)是臟的。如上文所述,指示臟數(shù)據(jù)的臟指示符可以是任一合適的指示符,包括‘1’值或例如消息標(biāo)識符等與數(shù)據(jù)來源相關(guān)聯(lián)的唯一起源標(biāo)識符、向存儲的當(dāng)前數(shù)據(jù)提供輸入的數(shù)據(jù)的存儲器位置、與消息內(nèi)偏移量組合的消息標(biāo)識符、包括在計算所存儲的數(shù)據(jù)時所使用的所有或部分指令的數(shù)據(jù)流圖等。如果所存儲的數(shù)據(jù)是從存儲在另一臟存儲器部分的其它‘父’數(shù)據(jù)中導(dǎo)出的,則擁有與‘父’數(shù)據(jù)相同的起源指示符、父數(shù)據(jù)的存儲器位置、通過將所接收到的指令與指令操作數(shù)的數(shù)據(jù)流圖相組合所創(chuàng)建的數(shù)據(jù)流圖等。所確定的臟指示符值可以與所存儲數(shù)據(jù)的存儲器部分(例如,位置或寄存器)相關(guān)聯(lián)(614),諸如通過在一適當(dāng)?shù)奈廴緮?shù)據(jù)存儲中存儲該臟指示符值來關(guān)聯(lián)。例如,如果一存儲器位置被確定為臟的,那么可設(shè)置一存儲器位置臟指示符以指示臟數(shù)據(jù),和/或可設(shè)置一頁臟指示符以指示存儲器的臟頁。
在某些情況下,為檢測惡意利用系統(tǒng)調(diào)用自變量的蠕蟲的存在,本方法可以確定臟存儲器部分何時被用作系統(tǒng)調(diào)用的自變量。更具體地,可接收(616)執(zhí)行系統(tǒng)調(diào)用的指令可被接收(616)??纱_定(618)作為系統(tǒng)調(diào)用自變量傳遞的數(shù)據(jù)的存儲器部分??蓹z查(620)與所確定的存儲器部分相關(guān)聯(lián)的臟指示符。例如,如上文所述,臟指示符可以與每個存儲器部分相關(guān)聯(lián),以指示所存儲的信息是干凈的還是臟的。如果該臟指示符指示將被裝載的數(shù)據(jù)是‘干凈的’,那么,在某些情況下,可執(zhí)行(636)接收到的指令,例如,可裝載該信息。在某些情況下,為包括各種檢測機(jī)制,可以使用其他檢測技術(shù)進(jìn)一步檢查指令和/或數(shù)據(jù)以檢測(634)蠕蟲、病毒等的存在。
在某些情況下,為檢測蠕蟲的存在,本方法可確定存儲在臟存儲器部分的數(shù)據(jù)何時以指示蠕蟲存在的方式來處理。更具體地,可接收(622)更改執(zhí)行流的指令??纱_定(624)存儲將被裝載至指令指針的值的存儲器部分??蓹z查(620)與所確定的存儲器部分相關(guān)聯(lián)的臟指示符。如果該臟指示符指示存儲將被裝載至指令指針的值的存儲器部分是臟的,那么可以按上文所述采取(625)適當(dāng)?shù)男袆?。如果該臟指示符指示存儲將被裝載的值的存儲器部分是‘干凈的’,那么,在某些情況下,可執(zhí)行(636)所接收的指令,并且該值被裝載。在某些情況下,如果將被裝載的值的存儲器部分被指示為干凈的,則由所裝載的值所指示的指令的位置可以被確定(628),并且可以檢查(630)該位置以確定存儲該指令的存儲器部分是干凈的還是臟的。如果存儲該指令的位置是臟的,則可以采取(626)適當(dāng)?shù)男袆?。如果該位置被指示為干凈的,則可以使用其他檢測技術(shù)進(jìn)一步檢查指令和/或數(shù)據(jù)以檢測(634)蠕蟲、病毒等的存在。如果臟指示符指示將被裝載的值的存儲器位置和由該值指示的指令是干凈的,那么該指令被執(zhí)行(636)。
如果臟指示符指示將被處理的數(shù)據(jù)是‘臟的’,那么可以采取(626)適當(dāng)?shù)男袆印H缟衔乃?,響?yīng)于蠕蟲的檢測的適當(dāng)行動可以包括關(guān)閉易受攻擊的程序、關(guān)閉主機(jī)系統(tǒng)、生成并發(fā)送警報消息、為易受攻擊性生成補(bǔ)丁和/或過濾器等。
自證明警報(“SCA”)在某些情況下,單個節(jié)點(diǎn)可以包括一檢測模塊來保護(hù)它自己。然而,對蠕蟲的檢測可能是計算密集型過程。因此,在某些情況下,諸如圖2所示的網(wǎng)絡(luò)等網(wǎng)絡(luò)的一個或多個節(jié)點(diǎn)可以檢測蠕蟲、易受攻擊性和/或攻擊,且可以警告網(wǎng)絡(luò)中的一個或多個節(jié)點(diǎn)。如果中心節(jié)點(diǎn)代表多個其它節(jié)點(diǎn)檢測到蠕蟲,則該檢測系統(tǒng)可以是以服務(wù)器為中心的。以這種方式,檢測蠕蟲的負(fù)載可以由一專用系統(tǒng)承擔(dān)。可選擇地,在網(wǎng)絡(luò)中的所有節(jié)點(diǎn)或其子集可以負(fù)責(zé)檢測易受攻擊性,則該檢測系統(tǒng)可以是以主機(jī)為中心的。網(wǎng)絡(luò)中檢測易受攻擊性的節(jié)點(diǎn)集合可以是固定的,或可以隨時間而改變并且可以在任何時間加入或離開該集合。服務(wù)器中心和主機(jī)中心檢測系統(tǒng)的組合可以在網(wǎng)絡(luò)中的各個節(jié)點(diǎn)之間實(shí)現(xiàn)各種檢測系統(tǒng),并將檢測結(jié)果互相傳遞和/或傳遞給在網(wǎng)絡(luò)中的其他節(jié)點(diǎn)。
只要檢測機(jī)制檢測到蠕蟲攻擊,可以生成標(biāo)識軟件程序易受攻擊性和/或所識別的蠕蟲特征(例如,消息來源等)的警報。例如,該警報可以通過其特征作為輸入數(shù)據(jù)(以蠕蟲為中心)和/或通過可被蠕蟲惡意利用的軟件應(yīng)用程序的易受攻擊性(以易受攻擊性為中心)來識別蠕蟲。警報的生成可以是自動或手動的,且可以響應(yīng)于被檢測到的易受攻擊性和/或蠕蟲。警報可以用任一合適的方式來生成,諸如如圖3所示響應(yīng)于來自檢測模塊340的輸入通過警報模塊350生成。
在某些情況下,可生成警報,使得接收系統(tǒng)可以證明警報消息的起源和/或內(nèi)容的真實(shí)性。為證明警報的來源,該警報可以或可以不被數(shù)字地簽署,以將該警報標(biāo)識為源自一可信來源。為證明警報中指示的程序的易受攻擊性,該警報可以包含描述如何觸發(fā)該易受攻擊性等的事件和/或程序路徑的列表。在一示例中,自證明警報可以包含標(biāo)識和/或描述軟件易受攻擊性的機(jī)器可驗(yàn)證證據(jù)。以這種方式,該自證明警報可以包含允許接收者通過再現(xiàn)感染過程來高效和/或有效地核查在警報中的易受攻擊性聲稱的真實(shí)性的信息。自證明警報可以用任一合適的方式描述在軟件系統(tǒng)中的易受攻擊性,諸如通過文本描述、示出易受攻擊性的非確定性事件的完整和/或部分日志、攜帶由Necula等人所著“Safe Kernel Extensions withoutRuntime Checking”(發(fā)表在2ndSymp.On Operating System Design andImplementation,1996年十月,第229-243頁上,通過引用包含在此)所描述的代碼的證明的包括等來描述。例如,非確定性事件的日志可以包括接收到的數(shù)據(jù),并且可以示出直到被檢測到的攻擊瞬間之前的事件,例如,對存儲在臟存儲器部分的數(shù)據(jù)的執(zhí)行和/或使用來自臟存儲器部分的數(shù)據(jù)裝載程序計數(shù)器。
對軟件易受攻擊性的描述可以用于自證明警報,因?yàn)榻邮沼嬎阍O(shè)備可以驗(yàn)證所識別的軟件應(yīng)用程序以所指示的方式響應(yīng),這指示了軟件對于蠕蟲攻擊的易受攻擊性。以這種方式,警報可以是自證明的,因?yàn)樵摼瘓罂梢曰诰瘓笾兴男畔⒁约敖邮展?jié)點(diǎn)已知的信息(例如,通過本地應(yīng)用程序響應(yīng)的驗(yàn)證)而被證明。以這種方式,自證明警報可以是以易受攻擊性為中心的,而不是以蠕蟲為中心的。
程序的所檢測到的易受攻擊性可以在自證明警報中被描述為非確定性事件的列表。更具體地,易受攻擊的程序的執(zhí)行可以被建模為分段確定性過程。該執(zhí)行是間隔的序列,每一間隔以一非確定性事件(例如,消息的接收)開始,且其后跟隨一確定性事件的序列。在一間隔內(nèi)的執(zhí)行是確定性的,例如,程序的響應(yīng)完全由當(dāng)前狀態(tài)所確定。以這種方式,記錄所有非確定性事件可以允許執(zhí)行的重放,這樣可以示出程序的易受攻擊性。重放顯示所識別程序的易受攻擊行為的執(zhí)行可以允許節(jié)點(diǎn)核查該自證明警報的真實(shí)性。
圖7示出了以易受攻擊性為中心的示例性自證明警報700。該自證明警報可以是任一合適的格式和/或依照任一合適的消息協(xié)議。自證明警報可以包括程序標(biāo)識符702和事件列表704,且可以可任選地包括易受攻擊性類型標(biāo)識符706、一個或多個驗(yàn)證提示708、和/或響應(yīng)指示符710。
程序標(biāo)識符702可以標(biāo)識含有所檢測到的易受攻擊性的程序或應(yīng)用程序。程序標(biāo)識符702可以包括易受攻擊程序的任一合適的標(biāo)識符的任何一個或多個,諸如商業(yè)名稱、預(yù)定名稱、版本號、廠商名稱等。
事件列表704是執(zhí)行時會導(dǎo)致程序到達(dá)禁止?fàn)顟B(tài)的一個或多個非確定性事件的序列。重放該事件列表可以示出和/或指示程序的所檢測到的易受攻擊性。事件列表704中的事件序列可以用任一合適的方式生成。將非確定性事件記入日志的技術(shù)在容錯文獻(xiàn)中有進(jìn)一步描述,這些文獻(xiàn)包括Dunlap等人所著“Revirtenablingintrusion analysis through virtual-machine logging and replay”,發(fā)表在Operating Syst.Design and Implementation,Boston,Massachusetts,2002年12月,和Elnozahy等人所著“A survey of rollback-recovery protocols inmessage passing systems”,發(fā)表在ACM Computing Surveys,第32卷,第3號,2002年9月,第375-408頁,這兩篇文獻(xiàn)都通過引用包含在此。
事件序列可以包括在檢測過程中記入日志的事件或從那些事件中導(dǎo)出,諸如在上文所述動態(tài)流檢測技術(shù)過程中記入日志的事件。事件列表中的事件序列可以與攻擊期間實(shí)際紀(jì)入日志的事件匹配或不匹配,諸如圖3所示檢測模塊340所記入日志的事件。準(zhǔn)備自證明警報的節(jié)點(diǎn)可以用任一合適的方式修改記入日志的事件,包括去除不必要到達(dá)禁止?fàn)顟B(tài)的事件、用無害的值替代蠕蟲代碼部分等。事件列表704中的非確定性事件序列可以采用任何合適的格式和/或包含任何合適的指令或其它數(shù)據(jù)。例如,事件列表可以包括來自操作系統(tǒng)調(diào)用的結(jié)果列表和/或接收到的消息列表。因?yàn)槿湎x可以惡意利用不需與易受攻擊的程序長時間交互的那些易受攻擊性,因此非確定性事件的序列可以相當(dāng)短。更具體地,易受攻擊行為可以用少量數(shù)據(jù)來觸發(fā)。例如,對先前的多種蠕蟲,單個接收事件就足夠了。
對于使用動態(tài)流分析的蠕蟲檢測,檢測模塊340在蠕蟲獲得控制之前截取執(zhí)行。具體地,對蠕蟲攻擊的檢測可以在執(zhí)行控制被重定向至一非法位置時發(fā)生,例如,來自臟存儲器位置的數(shù)據(jù)將要被執(zhí)行或裝載至指令指針時。為限制在警報中事件列表的大小,如果檢測沒有被干涉,可以搜索非確定性事件的日志,以找出含有存儲在臟存儲器部分中、將要被執(zhí)行或被裝載至程序計數(shù)器的數(shù)據(jù)的事件。在多種情況下,易受攻擊性可以由單個事件觸發(fā),并且自證明警報可以只包含作為該搜索結(jié)果的事件。在一示例中,可以在整個日志上執(zhí)行對臟數(shù)據(jù),例如非法地址的搜索。在另一示例中,上文參考檢測模塊的檢測機(jī)制所述的數(shù)據(jù)流分析可以用來避免搜索并減少錯誤匹配的出現(xiàn)。因?yàn)閯討B(tài)流分析可以提供所有輸入事件的全數(shù)據(jù)流跟蹤,因此確定將要被執(zhí)行或裝載至程序計數(shù)器的臟數(shù)據(jù)的值的一個或多個確切輸入事件可以被確定。例如,數(shù)據(jù)流跟蹤可以標(biāo)識引入在蠕蟲攻擊中使用的信息的來自外部來源的特定消息、可惡意利用易受攻擊性的輸入事件、和/或輸入數(shù)據(jù)內(nèi)數(shù)據(jù)和/或指令的偏移量。
為確定輸入事件,一輸入事件標(biāo)識符可以與存儲在臟存儲器部分的數(shù)據(jù)相關(guān)聯(lián),以指示確定臟數(shù)據(jù)的當(dāng)前值的輸入事件。輸入事件標(biāo)識符可以在臟指示符之外和/或包括在臟指示符內(nèi)。輸入事件標(biāo)識符可以是標(biāo)識從臟存儲器部分裝載數(shù)據(jù)的輸入事件和/或臟數(shù)據(jù)來源的任意何時的標(biāo)識符,諸如整數(shù)、文本串等。在一示例中,臟指示符包括標(biāo)識臟數(shù)據(jù)來源的輸入事件標(biāo)識符。更具體地,指示干凈的臟指示符可以是任何合適的值,諸如空值或0。然而,在某些情況下,并非使用諸如‘1’等整數(shù)來指示臟存儲器部分,而是指示臟存儲器部分的臟指示符可以是輸入事件指示符或其它來源指示符??蛇x擇地,臟指示符可以包括諸如圖18所示的數(shù)據(jù)流圖,以確定確定存儲在臟存儲器部分的當(dāng)前值的輸入事件和這些事件中的字節(jié)范圍。當(dāng)數(shù)據(jù)流分析用信號通知易受攻擊性時,含有將要被執(zhí)行或裝載至程序計數(shù)器的臟數(shù)據(jù)的數(shù)據(jù)流圖中的標(biāo)識符的事件和在執(zhí)行日志中最后一個非確定性事件可以用來形成警報中的事件列表。
除減少重放易受攻擊執(zhí)行所需的非確定性事件序列大小以外或作為其替換,執(zhí)行可以在生成警報事件列表時用越來越大的事件日志后綴(例如,從后向前通過日志)來重放,且可對每次迭代核查錯誤狀態(tài)的存在。以這種方式,事件列表可以從導(dǎo)致易受攻擊性檢測的原始事件中減少。對目前大多數(shù)的蠕蟲,該策略可能是有效的,因?yàn)橥ㄟ^網(wǎng)絡(luò)連接接收到的最后幾個分組可能觸發(fā)易受攻擊性。
易受攻擊性類型標(biāo)識符706可以標(biāo)識和/或描述存在且可能在指示的程序中被惡意利用的程序易受攻擊性或錯誤狀態(tài)的類型。易受攻擊性類型標(biāo)識符可以是任何合適的標(biāo)識符,諸如字母數(shù)字文本串等,它指示所指出程序的允許不被接受的錯誤狀態(tài)的預(yù)定易受攻擊性。對錯誤狀態(tài)的描述和/或可接受性可在警報的生成者和接收者中意見一致且被預(yù)先確定。此外,自證明警報的接收節(jié)點(diǎn)可以認(rèn)同執(zhí)行的哪些狀態(tài)和結(jié)果是易受攻擊性的表達(dá)。關(guān)于易受攻擊性類型的一致認(rèn)定可以是事先的,例如預(yù)先確定的,或動態(tài)的,例如,在蠕蟲檢測和/或警報接收時確定。由易受攻擊性類型標(biāo)識符所標(biāo)識的易受攻擊性類型可以是程序或應(yīng)用程序的任何合適的漏洞??纱嬖诙喾N不同類型的狀態(tài),它們可事先被一致同意為易受攻擊性的表達(dá)。易受攻擊性類型的一示例可以是任意執(zhí)行控制(“AEC”)。AEC警報標(biāo)識了允許蠕蟲將執(zhí)行重定向至程序地址空間中的任意代碼片段的易受攻擊性。它們描述了如何調(diào)用其地址在輸入中提供給易受攻擊程序的代碼片段。易受攻擊性類型的另一示例可以是任意代碼執(zhí)行(ACE)。ACE警報描述了代碼注入易受攻擊性。它們描述了如何執(zhí)行在輸入中提供給易受攻擊程序的任意代碼片段。易受攻擊性類型的另一示例可以是任意函數(shù)自變量(AFA)。AFA警報標(biāo)識了數(shù)據(jù)諸如易受攻擊性,它允許蠕蟲更改關(guān)鍵函數(shù)的自變量值,諸如更改可執(zhí)行碼的名稱以在創(chuàng)建進(jìn)程的系統(tǒng)調(diào)用中運(yùn)行。它們描述了如何調(diào)用帶有在輸入中提供給易受攻擊程序的自變量值的指定關(guān)鍵函數(shù)。
驗(yàn)證提示708可以包括便于在重放所指示的事件列表后核查所指示的狀態(tài)或易受攻擊性是否為真的任何合適的信息。
響應(yīng)指示符710可以包括便于對程序易受攻擊性的恰當(dāng)響應(yīng)的任何合適的信息。例如,響應(yīng)指示符可以指示一補(bǔ)丁可以解決易受攻擊性、可以生成一過濾器來檢測對該易受攻擊性的潛在惡意利用、用于檢測含有所標(biāo)識蠕蟲的消息的接收的過濾器、實(shí)現(xiàn)補(bǔ)丁/過濾器的實(shí)際代碼等。
在一示例中,易受攻擊性中心自證明警報可以指示一程序含有任意執(zhí)行控制(AEC)易受攻擊性。因?yàn)槿湎x攻擊可以是基于任意地更改易受攻擊程序的執(zhí)行流的能力,因此該易受攻擊性可以用一AEC易受攻擊性類型指示符來指示。因?yàn)樘峁┩ㄟ^向程序發(fā)送消息來將程序計數(shù)器重定位至任意位置的能力是少見且危險的,因此主機(jī)可以認(rèn)同該狀態(tài)表達(dá)了易受攻擊性。對這種類型的易受攻擊性,驗(yàn)證提示可以指出程序計數(shù)器(例如,x86 CPU上的EIP)將用任意值來裝載,且可以指出在非確定性事件列表中的哪里是將被裝載至程序計數(shù)器的值。例如,如果該非確定性事件列表是接收到的消息的列表,則驗(yàn)證提示可以指出在哪條消息中和在哪個偏移量處是將被裝載至程序計數(shù)器的值。消息和偏移量可以使用上述技術(shù)來確定。
在另一示例中,易受攻擊性中心自證明警報可以指示一程序含有任意代碼執(zhí)行(ACE)易受攻擊性。因?yàn)槿湎x攻擊是基于將代碼注入易受攻擊程序的能力的,因此該易受攻擊性可以用一ACE易受攻擊性類型指示符來指示。因?yàn)樘峁┩ㄟ^向程序發(fā)送消息來向程序注入新代碼的能力是少見且危險的,因此主機(jī)可以認(rèn)同該狀態(tài)表達(dá)了易受攻擊性。對這種類型的易受攻擊性,驗(yàn)證提示可以指出新代碼會被注入且被執(zhí)行,且可以指出非確定性事件列表中的哪里是將被執(zhí)行的代碼。例如,如果非確定性事件列表是接收到的消息的列表,則驗(yàn)證提示可以指出在哪條消息中和在哪個偏移量處是將被注入和執(zhí)行的代碼。消息和偏移量可以使用上述技術(shù)來確定。
在另一示例中,易受攻擊性中心自證明警報可以指示一程序含有任意函數(shù)自變量(AFA)漏洞。因?yàn)槿湎x攻擊是基于注入要用作函數(shù)自變量的值的能力的,因此該易受攻擊性可以用一AFA易受攻擊性類型指示符來指示。因?yàn)樘峁┩ㄟ^向程序發(fā)送消息來向程序所使用的系統(tǒng)調(diào)用注入任意新自變量的能力是少見且危險的,因此主機(jī)可以認(rèn)同該狀態(tài)表達(dá)了易受攻擊性。對這種類型的易受攻擊性,驗(yàn)證提示可以指出一任意函數(shù)自變量被注入且被執(zhí)行,且可以指出在非確定性事件列表中的哪里是將被注入的自變量。例如,如果該非確定性事件列表是接收到的消息的列表,則驗(yàn)證提示可以指出在哪條消息中和在哪個偏移量處是將被注入的自變量。消息和偏移量可以使用上述技術(shù)來確定。
自證明警報的一個替換形式可以包括該程序是易受攻擊的證據(jù),它類似于Necula等人所著的“Safe Kernel Extensions without Runtime Checking”中的帶證據(jù)的代碼,發(fā)表在2ndSymp.Operation Systems Design and Implementation,1996年10月,第229-243頁。在最簡單的形式中,該證據(jù)可以包括對導(dǎo)致禁止?fàn)顟B(tài)的執(zhí)行路徑的描述,諸如以指令序列的形式。該種形式的警報同先前所述的不同,因?yàn)樗鼣y帶程序指令序列,而非只含有非確定性事件列表,且它也可以帶有邏輯公式以促進(jìn)下述的驗(yàn)證機(jī)制。
生成警報的節(jié)點(diǎn)可以向至少一個其它節(jié)點(diǎn)發(fā)送警報,以向它通知所檢測到的蠕蟲或易受攻擊性。警報的分發(fā)可以通過分發(fā)模塊370響應(yīng)于警報模塊350來確定,如圖3所示。節(jié)點(diǎn)可以通過通信介質(zhì)以任何合適的消息格式或協(xié)議發(fā)送警報。警報可以分發(fā)給與生成警報的節(jié)點(diǎn)通信的任何合適的節(jié)點(diǎn)。當(dāng)一節(jié)點(diǎn)接收到警報時,該節(jié)點(diǎn)也可以將該警報分發(fā)給與其通信的任何合適的節(jié)點(diǎn)。例如,警報可以依照預(yù)先確定的警報地址列表發(fā)送給所有節(jié)點(diǎn)、發(fā)送給近期與生成警報的節(jié)點(diǎn)聯(lián)系的所有節(jié)點(diǎn)、或依照任何其他合適的分發(fā)方案。一種分發(fā)方案將在下文更詳細(xì)論述。
證明自證明警報諸如圖7所示的自證明警報700的自證明警報,可以由接收該警報的節(jié)點(diǎn)自證明。例如,接收節(jié)點(diǎn)320的警報驗(yàn)證模塊360,如圖3所示,可以證明接收到的警報330。在一示例中,接收節(jié)點(diǎn)可以對該警報進(jìn)行語法分析以檢索程序標(biāo)識符和事件列表以及諸如易受攻擊性指示符和一個或多個驗(yàn)證提示等任何其他參數(shù)。接收節(jié)點(diǎn)可以重放由所指示的程序中的事件列表定義的執(zhí)行??梢允褂萌魏魏线m的技術(shù)以重放該事件列表,包括在某種類型的沙箱(sandbox)環(huán)境中重放程序中的事件。重放事件列表的結(jié)果可以由接收節(jié)點(diǎn)檢查來驗(yàn)證程序易受攻擊性,結(jié)果可以用所提供的易受攻擊性類型標(biāo)識符和/或驗(yàn)證提示來擴(kuò)充,以確定指示的錯誤或易受攻擊性狀態(tài)是否存在。如果否,則該警報沒有被證明,且可以采取適當(dāng)行動,諸如丟棄消息、向其它節(jié)點(diǎn)發(fā)送標(biāo)識錯誤警報的警報等。
事件列表可以使用一階邏輯來證明,而不是逐字逐句地執(zhí)行事件列表。例如,包含在自證明警報中的證據(jù)可以用一種類似于攜帶證據(jù)的代碼的方式來驗(yàn)證。然而,不是顯示程序的所有執(zhí)行涉及安全條件,而是證明自證明警報可以顯示程序的一特殊執(zhí)行展示了易受攻擊性。不是考慮完整的程序,而是自證明警報的證明可以集中在一條或多條所標(biāo)識的執(zhí)行路徑上,例如,事件列表中由非確定性事件序列定義的路徑。在一種簡單的形式中,自證明警報中的證據(jù)可以包括在由事件列表定義的路徑中執(zhí)行的指令列表。以這種方式,一邏輯驗(yàn)證可以為易受攻擊的程序中所標(biāo)識的路徑生成一安全條件,并且顯示當(dāng)程序接收到由自證明警報提供的事件列表中的事件時該安全條件不成立。
例如,在上述AEC自證明警報中,所指示的程序的易受攻擊執(zhí)行路徑可以由單個消息的接收觸發(fā),且該自證明警報可以包括路徑中的指令列表。為證明該警報,可以檢查該指令列表,諸如通過使用程序文本來確定安全條件并驗(yàn)證事件列表中的事件違反了該條件??梢詮某绦蛑噶钪猩稍搱?zhí)行路徑的邏輯安全條件。為獲得一執(zhí)行路徑的安全條件,可以定義一模擬安全程序的執(zhí)行的抽象機(jī)器。該抽象機(jī)器的指令可以與由易受攻擊程序生成的真實(shí)CPU指令類似。
圖9示出了x86 CPU指令的一子集的示例抽象機(jī)器900。在圖9中,∏表示CPU指令的向量(例如,自證明警報中的指令列表);pc表示程序計數(shù)器;∏pc表示當(dāng)前指令;ρ表示機(jī)器寄存器和存儲器的狀態(tài);ρ[ri]是狀態(tài)ρ中寄存器ri的值(可以被縮寫為ri);rm表示指示存儲器狀態(tài)的特殊寄存器;ρ[rd←rs]表示通過用值rs代替rd從ρ獲得的新狀態(tài);sel(rm,n)表示存儲器地址n的內(nèi)容;upd(rm,rd,rs)表示從將寄存器rs寫入寄存器rd得到的新存儲器狀態(tài);以及ZF表示零標(biāo)志(例如,存儲器中的一個比特)。
當(dāng)執(zhí)行返回指令(RET)時,示例抽象機(jī)器900核查由堆棧指針寄存器(ESP)指向的存儲器位置是否含有蠕蟲。從諸如圖9所示的抽象機(jī)器的定義中,可以獲得一組規(guī)則來為程序機(jī)械地生成安全條件。圖10示出了對應(yīng)于圖9所示的抽象機(jī)器的一組示例規(guī)則1000。規(guī)則1000根據(jù)安全條件參數(shù)SCpc+11004指定了安全條件參數(shù)SCpc1002。以這種方式,程序的安全條件可以通過從最后一條指令開始,處理每條在前的指令直到開始指令,同時核查指令列表是否代表給定程序文本時的有效執(zhí)行而獲得。更具體地,可以檢查最后一條指令、然后可以檢查最后兩條指令、依此類推。
可以定義一前置條件。更具體地,該前置條件可以反映程序在易受攻擊執(zhí)行路徑開始時的初始狀態(tài),諸如寄存器和/或存儲器的狀態(tài)。可以定義一易受攻擊性謂詞。例如,易受攻擊性謂詞可以被定義為前置條件﹁安全條件。易受攻擊性謂詞然后可以根據(jù)一階謂詞演算的規(guī)則來證明。
例如,由一自證明警報的事件列表提供的易受攻擊指令序列可以被定義為如圖11所示的指令1100。使用圖10所示的規(guī)則1000,安全條件SafetyCondition可以被定義為(ECX=10﹁Worm(sel(rm,ESP)))∧(ECX≠10﹁Worm(sel(rm,1234))(1)以這種方式,在由警報的事件列表1100標(biāo)識的執(zhí)行路徑的開始處,ECX寄存器的值不等于10,且存儲器位置1234剛被一網(wǎng)絡(luò)輸入操作寫入(且因此被認(rèn)為是‘臟的’且可能含有蠕蟲)。由上述等式(1)給出的安全條件,前置條件可以被定義為(ECX≠10∧ Worm(sel(rm,1234))(2)從等式(1)的安全條件和等式(2)的前置條件中,可以生成并證實(shí)一易受攻擊性謂詞。證實(shí)該易受攻擊性可以驗(yàn)證在事件列表中指示的易受攻擊性的存在,這可以證明警報。應(yīng)該理解,存儲器位置1234不必含有蠕蟲。例如,外部輸入操作可能任意地更改程序執(zhí)行的實(shí)時可以意味著該程序是易受攻擊的,即使還沒有對該易受攻擊性進(jìn)行惡意利用。
圖16示出了生成自證明警報的示例性方法1600,圖8示出了證明自證明警報的示例性方法800。參考圖16,程序易受攻擊性可以由諸如檢測模塊340檢測(802)??梢源_定(804)該易受攻擊程序的程序標(biāo)識符??梢源_定(806)易受攻擊性類型,且選擇適當(dāng)?shù)囊资芄粜灾甘痉???梢源_定(808)提供易受攻擊性的機(jī)器可驗(yàn)證證據(jù)的事件列表808。如上文所述,該事件列表可以從實(shí)現(xiàn)動態(tài)數(shù)據(jù)流分析的檢測過程中記入日志的事件導(dǎo)出。該事件列表也可以從檢測過程中記入日志的事件中消減或減少,以確定示出所指示的易受攻擊性、從一數(shù)據(jù)流圖導(dǎo)出、被修改以用無害的值來代替各部分等的最小的或精簡的事件集合。一個或多個驗(yàn)證提示可以基于所確定的事件列表和/或易受攻擊性指示符來確定(810)。在某些情況下,可確定(812)一響應(yīng)指示符,它可以包括關(guān)于對蠕蟲的潛在解決方法的提示,例如,補(bǔ)丁和/或過濾器、實(shí)現(xiàn)補(bǔ)丁和/或過濾器的實(shí)際代碼、蠕蟲簽名等。自證明消息可以依照任何合適的協(xié)議以任何合適的格式形成(814)。警報可以諸如通過通信介質(zhì)發(fā)送(816)給網(wǎng)絡(luò)中的另一節(jié)點(diǎn)。如上文所述,分發(fā)模塊370可以用來確定自證明警報的接收節(jié)點(diǎn)。
參考圖8,可由接收節(jié)點(diǎn)諸如通過通信介質(zhì)接收(850)一自證明警報。該警報可以諸如由途3的警報驗(yàn)證模塊360進(jìn)行語法分析(852)以確定程序標(biāo)識符和事件列表。程序標(biāo)識符可以與接收節(jié)點(diǎn)上存在的程序進(jìn)行比較(854)。如果程序標(biāo)識符不存在于接收節(jié)點(diǎn)上,那么可以采取(856)恰當(dāng)?shù)男袆?。例如,恰?dāng)?shù)男袆涌梢园▉G棄該警報和/或?qū)⒃摼瘓筠D(zhuǎn)發(fā)至另一節(jié)點(diǎn)以進(jìn)一步在通信網(wǎng)絡(luò)中分發(fā)該警報。
如果該程序標(biāo)識符指示了接收節(jié)點(diǎn)的程序或應(yīng)用程序,那么該接收節(jié)點(diǎn),諸如通過圖3所示的警報驗(yàn)證模塊360,可以裝載(858)所指示的程序。在某些情況下,該程序可以被裝載至一被掛起的進(jìn)程。在某些情況下,該程序可以被裝載至一‘沙箱’環(huán)境,它可以限制行動、互相聯(lián)系、和/或所指示的易受攻擊性的其它惡意副作用。虛擬機(jī)器可提供其中可以發(fā)生警報驗(yàn)證的沙箱環(huán)境。其他沙箱環(huán)境可以沉默地丟棄正在運(yùn)行的程序的所有輸出以限制副作用。在某些情況下,接收節(jié)點(diǎn)可以指令另一計算設(shè)備,諸如一孤立和/或測試設(shè)備,裝載所指示的程序和/或證明自證明警報。
一驗(yàn)證函數(shù)可以被裝載(860)至該掛起進(jìn)程的地址空間。驗(yàn)證函數(shù)可以在該驗(yàn)證函數(shù)由所指示的程序調(diào)用時返回一成功指示符,或該函數(shù)可以調(diào)用一響應(yīng)模塊。成功指示符可以是指示驗(yàn)證函數(shù)的執(zhí)行的任何合適的指示符,包括視覺或聽覺信號、使用指定值退出程序、向網(wǎng)絡(luò)接口寫入值、發(fā)信號通知同步對象等。驗(yàn)證函數(shù)的結(jié)構(gòu)可以依賴于由事件列表所示的易受攻擊性的類型。以這種方式,可從自證明警報中語法分析易受攻擊性指示符和/或驗(yàn)證提示,并用來選擇和/或生成適當(dāng)?shù)尿?yàn)證函數(shù)。
事件序列可以使用所裝載的程序來重放(862)。因?yàn)槭录斜肀粓?zhí)行,因此可調(diào)用驗(yàn)證函數(shù),它可以指示所指示的程序中的易受攻擊性的存在。例如,對于指示AEC的易受攻擊性指示符,自證明警報中的提示可以指示將被裝載至程序計數(shù)器的地址的事件和/或該事件中的偏移量。其中裝載了驗(yàn)證函數(shù)的地址可以被放置在該事件和/或偏移量處。以這種方式,如果在事件列表的重放過程中執(zhí)行(864)了驗(yàn)證函數(shù),那么證明了該易受攻擊性,且該警報可以被認(rèn)為是已證明的。以這種方式,接收節(jié)點(diǎn)可以響應(yīng)于已證明的警報采取(866)恰當(dāng)?shù)男袆?,諸如終止該易受攻擊的程序和/或?qū)崿F(xiàn)一合適的補(bǔ)丁和/或過濾器以解決該易受攻擊性。如果該警報沒有被證明,例如,驗(yàn)證函數(shù)沒有被執(zhí)行,那么可以采取(856)恰當(dāng)?shù)男袆?,諸如丟棄消息和/或向其它節(jié)點(diǎn)通知該無效的警報。
在另一示例中,對于指示ACE警報的易受攻擊性指示符,自證明警報中的提示可以指示將由目標(biāo)程序注入和執(zhí)行的代碼的事件和/或該事件中的偏移量。指令序列“call verification(調(diào)用驗(yàn)證)”,即,指令CPU調(diào)用驗(yàn)證函數(shù)的目標(biāo)CPU指令序列,可以被放置在該事件和/或偏移量處。以這種方式,如果在事件列表的重放過程中執(zhí)行(864)了驗(yàn)證函數(shù),那么證明了該易受攻擊性,且該警報可以被認(rèn)為是已證明的。以這種方式,接收節(jié)點(diǎn)可以響應(yīng)于已證明的警報采取(866)恰當(dāng)?shù)男袆樱T如終止該易受攻擊的程序和/或?qū)崿F(xiàn)一合適的補(bǔ)丁和/或過濾器以解決該易受攻擊性。如果該警報沒有被證明,例如,驗(yàn)證函數(shù)沒有被執(zhí)行,那么可以采取(856)恰當(dāng)?shù)男袆樱T如丟棄消息和/或向其它節(jié)點(diǎn)通知該無效警報。
在另一示例中,對于指示AFA警報的易受攻擊性指示符,自證明警報中的提示可以指示將會被傳遞給目標(biāo)程序的函數(shù)的任意自變量的事件和/或該事件中的偏移量。任意自變量可以被放置在該事件和/或偏移量處,且驗(yàn)證器可以用一包裝器來探測該AFA警報中所標(biāo)識的關(guān)鍵函數(shù),該包裝器在非確定性事件重放過程中對照用于函數(shù)調(diào)用的實(shí)際自變量值核查所提供的任意自變量值。如果它們匹配,則該包裝器調(diào)用驗(yàn)證函數(shù)。以這種方式,如果在事件列表重放過程中執(zhí)行(864)了驗(yàn)證函數(shù),那么證明了該易受攻擊性,且該警報可以被認(rèn)為是已證明的。以這種方式,接收節(jié)點(diǎn)可以響應(yīng)于已證明警報采取(866)恰當(dāng)?shù)男袆樱T如終止該易受攻擊的程序和/或?qū)崿F(xiàn)一合適的補(bǔ)丁和/或過濾器以解決該易受攻擊性。如果該警報沒有被證明,例如,驗(yàn)證函數(shù)沒有被執(zhí)行,那么可以采取(856)恰當(dāng)?shù)男袆?,諸如丟棄消息和/或向其它節(jié)點(diǎn)通知該無效警報。
不是逐字逐句地執(zhí)行上文對于事件列表所描述的事件列表,該事件列表可以使用一階邏輯來證明。參考圖8所示的方法,可以從程序指令中對由事件列表所指示的執(zhí)行路徑生成(872)一邏輯安全條件。該安全條件可以用任何合適的方式生成,諸如通過定義一模擬安全程序的執(zhí)行的抽象機(jī)器。可以定義(874)一反映在易受攻擊執(zhí)行路徑開始處的程序的初始狀態(tài)的前置條件。可以定義(876)一易受攻擊謂詞,它然后可以根據(jù)一階邏輯演算規(guī)則來證實(shí)(878)。如果該謂詞被證實(shí),則可以響應(yīng)于已證明的警報采取(866)恰當(dāng)?shù)男袆?,諸如終止該易受攻擊的程序和/或?qū)崿F(xiàn)一合適的補(bǔ)丁和/或過濾器以解決該易受攻擊性。如果該謂詞沒有被證實(shí),那么可以采取(856)恰當(dāng)?shù)男袆?,諸如丟棄消息和/或向其它節(jié)點(diǎn)通知該無效的警報。
響應(yīng)如果執(zhí)行結(jié)果確實(shí)標(biāo)識了所指示的易受攻擊性,那么可以響應(yīng)于程序中已證明的易受攻擊性采取恰當(dāng)?shù)男袆印S嬎阍O(shè)備的響應(yīng)可以用任何合適的方式手動和/或自動地執(zhí)行,包括由系統(tǒng)管理員、如圖3所示的響應(yīng)模塊380等手動指示的響應(yīng)。例如,程序可以脫機(jī)地獲得,和/或可以采取其它防范措施。該防范措施可以包括基于事件列表和/或易受攻擊性類型指示符和/或驗(yàn)證提示來生成一補(bǔ)丁和/或過濾器。以這種方式,自證明警報內(nèi)的信息可以用來手動和/或自動地生成補(bǔ)丁和/或過濾器來防止感染,而無需終止應(yīng)用程序。此外,生成的補(bǔ)丁/過濾器可以包含在該自證明警報中,以供接收節(jié)點(diǎn)使用,諸如在圖7所示的響應(yīng)指示符710中。
自證明警報的事件列表和/或驗(yàn)證提示可以用來自動地生成對易受攻擊的程序的二進(jìn)制修改(例如,補(bǔ)丁),它可修補(bǔ)該易受攻擊性。
例如,如果感染涉及對數(shù)據(jù)結(jié)構(gòu)的蓋寫,則可以生成執(zhí)行防止蓋寫的額外核查的代碼。例如,如果蓋寫是歸因于緩沖區(qū)上溢或下溢,則可以生成數(shù)組邊界核查代碼來防止蓋寫。所生成的代碼而后可以應(yīng)用于該易受攻擊的程序。在另一示例中,可以通過保持被該寫數(shù)據(jù)結(jié)構(gòu)的一單獨(dú)副本、使用原始數(shù)據(jù)結(jié)構(gòu)、以及在對執(zhí)行前的原始數(shù)據(jù)結(jié)構(gòu)的每次訪問前將該副本與原始數(shù)據(jù)結(jié)構(gòu)進(jìn)行比較,來生成一動態(tài)補(bǔ)丁。在另一示例中,循環(huán)中的邊界條件可以用另一條件(例如,用確保循環(huán)體的執(zhí)行次數(shù)更低的條件)來替代。
可以基于攜帶蠕蟲的源消息中足夠獨(dú)特的字母數(shù)字串和/或含有特定長度的消息來生成一蠕蟲專用過濾器。
可以聲稱可檢測多形蠕蟲的易受攻擊性專用過濾器。在一示例中,一過濾器可以被安裝在網(wǎng)絡(luò)堆棧之上。易受攻擊性專用過濾器可以使用應(yīng)用程序狀態(tài)來確定何時丟棄傳入的話務(wù)。更具體地,可以通過分析自證明警報的事件列表中所列出的執(zhí)行路徑,并核查傳入消息中的哪些字節(jié)確定了導(dǎo)致感染的執(zhí)行路徑以及在該執(zhí)行路徑上測試了那些字節(jié)上的哪些條件,來生成過濾程序的一般條件。這些易受攻擊性專用過濾器能夠使用一類似于動態(tài)流分析的機(jī)制來生成,直到寫入了將會由蠕蟲裝載至程序計數(shù)器或執(zhí)行的臟數(shù)據(jù)。
在一示例中,使用動態(tài)數(shù)據(jù)流分析生成易受攻擊性中心過濾器的響應(yīng)模塊可以為諸如存儲器位置和/或寄存器等每個臟存儲器部分維護(hù)一數(shù)據(jù)流圖。響應(yīng)模塊還可以為每個CPU標(biāo)志保持?jǐn)?shù)據(jù)流圖。每張數(shù)據(jù)流圖可以包括用于從消息或其它外部信息源中的值計算臟存儲器位置上的值的指令序列的全部或相關(guān)部分。響應(yīng)模塊可以使用控制流分析來跟蹤確定執(zhí)行控制轉(zhuǎn)移指令后的指令指針值的所有條件、以及在執(zhí)行條件移動和設(shè)置指令時使用的條件。這些條件的邏輯與可以被稱為過濾器條件。過濾器條件初始為真,且可以在使用臟處理器標(biāo)志或?qū)⒖刂妻D(zhuǎn)移給從臟位置讀取的地址的每一指令后被更新。過濾器條件被更新為其舊的值和由該臟標(biāo)志和地址位置的數(shù)據(jù)流圖計算得到的表達(dá)式的適當(dāng)條件的邏輯與。例如,當(dāng)JZ EAX(如果零標(biāo)志被設(shè)定設(shè)置,則跳轉(zhuǎn)至存儲在EAX寄存器中的地址)被執(zhí)行且發(fā)生跳轉(zhuǎn),如果零標(biāo)志和EAX寄存器都是干凈的,則過濾器條件保持不變。如果零標(biāo)志是臟的,添加由零標(biāo)志的數(shù)據(jù)流圖計算的表達(dá)式為假的條件。如果EAX也是臟的,也添加由EAX數(shù)據(jù)流圖計算的表達(dá)式等于由EAX當(dāng)前所存儲的值的條件。如果跳轉(zhuǎn)沒有發(fā)生,添加由零標(biāo)志的數(shù)據(jù)流圖計算的表達(dá)式為真的條件,且不添加EAX數(shù)據(jù)流圖的條件。在該過程之后,過濾器條件可以被應(yīng)用于傳入消息,以阻斷蠕蟲或惡意利用同樣的漏洞的蠕蟲變種。以這種方式,過濾器條件可以減少假肯定的發(fā)生。
圖15所示的示例性易受攻擊代碼可以用來闡明過濾器的生成。圖15中代碼1500通過將網(wǎng)絡(luò)緩沖區(qū)中消息的第一字節(jié)與一常數(shù)(0×31)進(jìn)行比較開始。如果匹配,則網(wǎng)絡(luò)緩沖區(qū)中的字節(jié)被復(fù)制到一基于堆棧的緩沖區(qū),直到發(fā)現(xiàn)一零字節(jié)。這是可能蓋寫堆棧上返回地址的潛在緩沖區(qū)上溢,且它表示了字符串庫中的易受攻擊性。用于此易受攻擊性的過濾器可以通過運(yùn)行上述動態(tài)數(shù)據(jù)流分析來生成。例如,在執(zhí)行了圖15所示的示例性指令的前四條指令1502后,實(shí)現(xiàn)動態(tài)數(shù)據(jù)流分析的檢測模塊可以確定消息中第一字節(jié)應(yīng)該等于0×31的條件。類似地,執(zhí)行循環(huán)可以導(dǎo)出網(wǎng)絡(luò)緩沖區(qū)中的字節(jié)序列上不同于零的條件。向傳入消息應(yīng)用具有這些條件的過濾器可以不產(chǎn)生假肯定,且可以阻斷實(shí)質(zhì)上惡意利用該易受攻擊性的所有蠕蟲變種。若干附加機(jī)制可以用來細(xì)化過濾器條件。在一示例中,響應(yīng)模塊去除消息字節(jié)上在由SCA中的驗(yàn)證提示標(biāo)識的偏移量后出現(xiàn)的條件。因?yàn)橄⒅械淖止?jié)通常按順序來處理,因此這種試探不太可能造成假肯定。在另一示例中,響應(yīng)模塊在函數(shù)返回時去除由該函數(shù)執(zhí)行添加的條件?;驹硎沁@些條件在函數(shù)返回后通常不重要,且該函數(shù)的重要效果是在臟數(shù)據(jù)的數(shù)據(jù)流圖中捕捉的。
生成的補(bǔ)丁或過濾器可以由接收并證明警報消息的任何機(jī)器獨(dú)立地生成,諸如通過如圖3所示的響應(yīng)模塊380生成。在另一示例中,生成的補(bǔ)丁或過濾器可以包括在警報消息之內(nèi),且該補(bǔ)丁或過濾器可以由接收節(jié)點(diǎn)用任何合適的方式證明或確認(rèn)。如圖7所示,自證明警報還可以包括響應(yīng)指示符710,它可以包含對已驗(yàn)證的易受攻擊性和/或蠕蟲攻擊的合適的響應(yīng)。例如,該響應(yīng)指示符可以提供對合適的補(bǔ)丁和/或過濾器、實(shí)現(xiàn)合適的補(bǔ)丁和/或過濾器的代碼等的描述或提示。
警報的分發(fā)檢測易受攻擊性的節(jié)點(diǎn)可以向網(wǎng)絡(luò)中與該檢測節(jié)點(diǎn)通信的一個或多個節(jié)點(diǎn)發(fā)送警報。例如,通信網(wǎng)絡(luò)中的一部分節(jié)點(diǎn)可以運(yùn)行易受攻擊性和/或蠕蟲檢測模塊,該模塊可以幫助分發(fā)檢測負(fù)載和去除蠕蟲的中心目標(biāo)。如上文所述,檢測模塊可以包含多種檢測機(jī)制,其中有些是簡單的,有些是復(fù)雜的。網(wǎng)絡(luò)的一檢測節(jié)點(diǎn)可以在空閑時運(yùn)行檢測模塊,作為其正常操作的一部分,和/或作為網(wǎng)絡(luò)中其主要的或唯一的功能??梢岳斫?,通信網(wǎng)絡(luò)中的任何數(shù)量的節(jié)點(diǎn),諸如一個、一部分、或所有節(jié)點(diǎn)可以被認(rèn)為是運(yùn)行檢測模塊的檢測節(jié)點(diǎn)。
如上文所述,當(dāng)檢測到易受攻擊性和/或蠕蟲攻擊時,一種響應(yīng)可以是生成警報,諸如自證明警報,并將其發(fā)送至網(wǎng)絡(luò)中的一個或多個節(jié)點(diǎn)。以這種方式,可以向沒有檢測到該易受攻擊性和/或沒有被所檢測到的蠕蟲感染的節(jié)點(diǎn)警告關(guān)于該蠕蟲和/或程序易受攻擊性,且可以采取恰當(dāng)?shù)谋Wo(hù)行動。如上文所述,自證明警報可以包括允許接收節(jié)點(diǎn)獨(dú)立地驗(yàn)證該警報的真實(shí)性的機(jī)器可驗(yàn)證信息。以這種方式,網(wǎng)絡(luò)中接收警報的任何節(jié)點(diǎn)可以證明該警報,而無需與鑒權(quán)機(jī)構(gòu)等通信。從而,自證明警報可以是促進(jìn)互不信任節(jié)點(diǎn)之間的合作的體系結(jié)構(gòu)的一部分。
覆蓋圖網(wǎng)絡(luò)當(dāng)檢測到蠕蟲和/或易受攻擊性時,一警報可以被迅速和/或能復(fù)原地發(fā)送到可能運(yùn)行該易受攻擊或易受蠕蟲攻擊影響的其它程序。該警報可以用任何合適的方式發(fā)送到網(wǎng)絡(luò)中任何數(shù)量的可確定和/或預(yù)定節(jié)點(diǎn)。在一示例中,可以使用一網(wǎng)絡(luò)覆蓋圖來發(fā)送警報,該網(wǎng)絡(luò)覆蓋圖對抗惡意知情者和/或蠕蟲的服務(wù)拒絕攻擊來進(jìn)行保護(hù)。例如,警報可以通過一結(jié)構(gòu)化的對等覆蓋圖來廣播。
對等覆蓋圖可以為自組織應(yīng)用程序的構(gòu)造提供一合適的基底,因?yàn)閷Φ染W(wǎng)絡(luò)可以縮放至巨大數(shù)量的節(jié)點(diǎn),且可以是有復(fù)原力的,例如,可以即使在大量節(jié)點(diǎn)崩潰或斷開連接時也保持連通性。下面的描述提供了結(jié)構(gòu)化對等覆蓋圖的概述,且示出了保護(hù)對等覆蓋圖以提高向在系統(tǒng)中實(shí)質(zhì)上所有未被感染的節(jié)點(diǎn)傳遞警報的可能性的一示例。盡管在以下討論中使用了Pastry對等覆蓋圖作為示例,然而可以理解,可以使用任何其它合適的網(wǎng)絡(luò)和/或?qū)Φ染W(wǎng)絡(luò)覆蓋圖。對等網(wǎng)絡(luò)覆蓋圖的網(wǎng)絡(luò)類型的當(dāng)前示例包括加州大學(xué)伯克利分校開發(fā)的Tapestry、麻省理工大學(xué)開發(fā)的Chord、以及微軟和賴斯大學(xué)開發(fā)的Pastry。Tapestry、Chord和Pastry都是用于構(gòu)建分布式系統(tǒng)的工具包。CAN、Kademlia、Skipnet和Viceroy是類似的其它系統(tǒng)。經(jīng)常會出現(xiàn)新的覆蓋圖設(shè)計。
諸如Pastry等結(jié)構(gòu)化覆蓋圖將鍵映射給覆蓋圖節(jié)點(diǎn)。每個節(jié)點(diǎn)被分配一標(biāo)識符空間選擇的節(jié)點(diǎn)標(biāo)識符。鍵是從同一標(biāo)識符空間選擇的。鍵被映射給具有最接近和/或最類似于標(biāo)識符空間中該健的節(jié)點(diǎn)標(biāo)識符的節(jié)點(diǎn)。該節(jié)點(diǎn)可以被稱為該鍵的根節(jié)點(diǎn)。鍵到節(jié)點(diǎn)的映射可以通過允許用戶向目標(biāo)鍵發(fā)送查找消息的原語來展示,例如,使用在Dabek等人所著的“Towards a common API for structuredpeer-to-peer overlays”(發(fā)表在2ndInt’l Workshop on P2P Systems,2003年2月,第33-44頁,通過引用包含在此)中有進(jìn)一步討論的KBR接口來展示。查找消息可以通過覆蓋圖路由到目標(biāo)鍵的根節(jié)點(diǎn)。例如,Pastry從128位無符號整數(shù)集合中均勻地隨機(jī)選擇節(jié)點(diǎn)標(biāo)識符和鍵,然后將一指示的目標(biāo)鍵映射至其節(jié)點(diǎn)標(biāo)識符在數(shù)字上與該鍵最接近的活動結(jié)點(diǎn)。例如,數(shù)字上最接近的節(jié)點(diǎn)標(biāo)識符可以是與目標(biāo)鍵以2128為模最接近的節(jié)點(diǎn)標(biāo)識符。
節(jié)點(diǎn)的路由狀態(tài)信息可以被存儲在一路由表中。該路由表可以用路由表中指示的節(jié)點(diǎn)空間逼近存儲在路由表中的節(jié)點(diǎn)的節(jié)點(diǎn)標(biāo)識符的越來越高的詳細(xì)等級將節(jié)點(diǎn)標(biāo)識符與地址空間中多個節(jié)點(diǎn)的網(wǎng)絡(luò)地址相關(guān)聯(lián)。節(jié)點(diǎn)的葉子集合包含最接近或最類似于主宿在路由表中的節(jié)點(diǎn)的節(jié)點(diǎn)標(biāo)識符的那些節(jié)點(diǎn)的信息,諸如節(jié)點(diǎn)標(biāo)識符和網(wǎng)絡(luò)地址。取決于覆蓋圖協(xié)議,葉子集合可以被存儲在獨(dú)立于路由表的數(shù)據(jù)結(jié)構(gòu)中,和/或可以是路由表的最低層次。
一示例性路由表結(jié)構(gòu)將參考Pastry來討論。Pastry的路由算法將節(jié)點(diǎn)標(biāo)識符和鍵解釋為以2b為底的無符號整數(shù),其中b是通常值為4的參數(shù)?;谠摻忉專酚杀硎蔷哂?28/b行和2b列的矩陣。該路由表的r行c列中的條目包含與本地節(jié)點(diǎn)的節(jié)點(diǎn)標(biāo)識符共享前r位數(shù)的節(jié)點(diǎn)標(biāo)識符,且第(r+1)位數(shù)等于c,假定該路由表中的第一列表示r=0。如果不存在這樣的節(jié)點(diǎn)標(biāo)識符,例如,在網(wǎng)絡(luò)中沒有一個活動節(jié)點(diǎn)正在使用該節(jié)點(diǎn)標(biāo)識符,那么該條目可以為空值。因?yàn)楣?jié)點(diǎn)標(biāo)識符可以遍及標(biāo)識符空間被均勻且隨機(jī)地分配,因此在該發(fā)送表中非空條目的平均數(shù)量可以被近似為對等網(wǎng)絡(luò)中節(jié)點(diǎn)的數(shù)量的(2b-1)*log(以2b為底)。一Pastry節(jié)點(diǎn)的葉子集合可以包含本地節(jié)點(diǎn)的節(jié)點(diǎn)標(biāo)識符左端的 個最接近節(jié)點(diǎn)標(biāo)識符,以及本地節(jié)點(diǎn)的節(jié)點(diǎn)標(biāo)識符右端的 個最接近節(jié)點(diǎn)標(biāo)識符,其中 是一個通常值為8的參數(shù)。對等網(wǎng)絡(luò)中的每個節(jié)點(diǎn)的葉子集合的集合然后以環(huán)的形式連接覆蓋圖節(jié)點(diǎn)。以這種方式,消息可以通過轉(zhuǎn)發(fā)該消息給具有與目標(biāo)鍵相匹配的逐漸更長的前綴的節(jié)點(diǎn)而在對等網(wǎng)絡(luò)中路由。
圖12示出了b=2以及 的一示例性結(jié)構(gòu)化覆蓋圖網(wǎng)絡(luò)1200。該結(jié)構(gòu)化覆蓋圖網(wǎng)絡(luò)圖示出了于節(jié)點(diǎn)1202始發(fā)的查找消息的路線1210。查找消息含有一與最接近于所指示鍵值的節(jié)點(diǎn)標(biāo)識符的鍵,例如,存儲與鍵相關(guān)的所需信息的節(jié)點(diǎn)是含有最接近于該的鍵的節(jié)點(diǎn)標(biāo)識符相匹配的健,例如,儲存與健相關(guān)聯(lián)的期望信息的節(jié)點(diǎn)是具有最接近于該健的節(jié)點(diǎn)標(biāo)識符的節(jié)點(diǎn)。例如,節(jié)點(diǎn)1202可以含有節(jié)點(diǎn)標(biāo)識符203231,且查找消息的鍵可以是323310。為發(fā)送該查找消息,始發(fā)節(jié)點(diǎn)1202可以搜索其路由表中的一層,以找出最接近于該查找消息的目標(biāo)鍵的已知節(jié)點(diǎn)標(biāo)識符。更具體地,節(jié)點(diǎn)1202可以搜索其路由表的第一行,以尋找以數(shù)字3開頭的節(jié)點(diǎn)標(biāo)識符,3是該鍵的第一位。該始發(fā)節(jié)點(diǎn)可以在以3開頭的節(jié)點(diǎn)標(biāo)識符的路由表位置處找到節(jié)點(diǎn)標(biāo)識符313221。參考圖12,始發(fā)節(jié)點(diǎn)1202可以而后使用通信介質(zhì)通過路線1212向處于與其路由表中的節(jié)點(diǎn)標(biāo)識符(313221)相關(guān)聯(lián)的地址處的節(jié)點(diǎn)1204轉(zhuǎn)發(fā)該查找消息。節(jié)點(diǎn)1204而后接收到該查找消息,且可以搜索其路由表(例如,表的第二層),以查找以32開始的節(jié)點(diǎn)標(biāo)識符,例如,匹配查找消息鍵323310的前兩位。節(jié)點(diǎn)1204可以在以32開頭的節(jié)點(diǎn)標(biāo)識符的位置處找到節(jié)點(diǎn)標(biāo)識符322021。節(jié)點(diǎn)1204然后可以使用通信介質(zhì)通過路線1214向處于與其路由表中的節(jié)點(diǎn)標(biāo)識符(322021)相關(guān)聯(lián)的地址的節(jié)點(diǎn)1206轉(zhuǎn)發(fā)該查找消息。節(jié)點(diǎn)1206然后接收到該查找消息,且可以搜索其路由表,并繼續(xù)上述步驟直至該查找消息到達(dá)該鍵的根節(jié)點(diǎn)1208。在多種情況下,如果節(jié)點(diǎn)標(biāo)識符的分布是足夠隨機(jī)且均勻的,路由平均需要大約 個中繼段(其中參數(shù)N是網(wǎng)絡(luò)中節(jié)點(diǎn)的個數(shù),且b是節(jié)點(diǎn)標(biāo)識符空間的底數(shù))。
保護(hù)網(wǎng)絡(luò)為提高通過結(jié)構(gòu)化網(wǎng)絡(luò)覆蓋圖的警報分發(fā)的復(fù)原能力,一個或多個安全機(jī)制可以用來保護(hù)該結(jié)構(gòu)化的對等覆蓋圖網(wǎng)絡(luò)。任何安全措施可以被恰當(dāng)?shù)厥褂?。安全措施可以包括,例如,Castro等人所著的“Secure routing for structured P2Poverlay networks”(發(fā)表在5thUsenix Symp.Operating System Design andImplementation,2002年12月,第299-314頁,通過引用包含在此)中所述的技術(shù)。其他的安全機(jī)制可以減少信息泄漏、減少服務(wù)拒絕(在覆蓋圖層產(chǎn)生擁塞)、即使大部分覆蓋圖節(jié)點(diǎn)被感染時也能向未感染的節(jié)點(diǎn)發(fā)送廣播警報等。
一種安全措施可以向進(jìn)入對等網(wǎng)絡(luò)的節(jié)點(diǎn)分配節(jié)點(diǎn)標(biāo)識符。節(jié)點(diǎn)標(biāo)識符可以由任何合適的來源分配,諸如一個或多個可信鑒權(quán)機(jī)構(gòu)(CA)。該鑒權(quán)機(jī)構(gòu)可以保證節(jié)點(diǎn)標(biāo)識符是從節(jié)點(diǎn)標(biāo)識符空間中充分隨機(jī)地選取的,和/或可以防止節(jié)點(diǎn)偽造節(jié)點(diǎn)標(biāo)識符。鑒權(quán)機(jī)構(gòu)可以使用技術(shù)以控制認(rèn)證節(jié)點(diǎn)標(biāo)識符的已簽署證書的可用性,例如,通過要求支付、擁有一特定產(chǎn)品的證據(jù)、對慈善團(tuán)體的財政饋贈的證據(jù)等來控制。使用鑒權(quán)機(jī)構(gòu)分配節(jié)點(diǎn)標(biāo)識符可以減少Sybil攻擊。為保護(hù)該鑒權(quán)機(jī)構(gòu)免遭攻擊,該一個或多個鑒權(quán)機(jī)構(gòu)可以是脫機(jī)的,和/或不被牽涉至該覆蓋圖網(wǎng)絡(luò)的正常操作中。
一種替換和/或另外的安全措施可以包括啟用安全路由表維護(hù),這可以用任一適當(dāng)?shù)姆绞絹韺?shí)現(xiàn)。例如,可以對能夠填充路由表中每一字段的節(jié)點(diǎn)標(biāo)識符集合施加約束。在標(biāo)識符為i的節(jié)點(diǎn)的Pastry發(fā)送表中,在r行和c列的字段可以被約束為含有與該節(jié)點(diǎn)標(biāo)識符i共享前r位數(shù)且在第r+1位上的值為c的任何節(jié)點(diǎn)標(biāo)識符。節(jié)點(diǎn)標(biāo)識符條目的剩余數(shù)字可以是與路由無關(guān)的。然而,路由表中的條目可以被進(jìn)一步約束為指示或包含在域中最接近點(diǎn)p的節(jié)點(diǎn)標(biāo)識符。點(diǎn)p可以被定義為節(jié)點(diǎn)空間中這樣的節(jié)點(diǎn)標(biāo)識符位置它與節(jié)點(diǎn)標(biāo)識符i共享前r位數(shù),在第r+1位的值為c,且含有限制域中一有效點(diǎn)p的節(jié)點(diǎn)標(biāo)識符的某些可確定的數(shù)字序列。例如,點(diǎn)p可以被定義為這樣的節(jié)點(diǎn)標(biāo)識符它與節(jié)點(diǎn)標(biāo)識符i共享前r位數(shù),在第r+1位上值為c,且其它數(shù)字都與i相同。將路由表?xiàng)l目與標(biāo)識符空間中的虛擬點(diǎn)綁定可以減少對由惡意節(jié)點(diǎn)發(fā)送、由誠實(shí)節(jié)點(diǎn)接收的路由更新的接受(如果該更新不滿足虛擬點(diǎn)約束)。以這種方式,能夠被惡意節(jié)點(diǎn)占據(jù)的路由表?xiàng)l目的數(shù)目可以被限定。該技術(shù)在Castro等人所著的“Secure routing for structured peer-to-peeroverlay networks”(發(fā)表在5thUsenix Symp.Operating System Design andImplementation,Boston,MA,2002年12月,第299-314頁,通過引用包含在此)中進(jìn)一步描述。
一種另外的或替換的安全措施可以包括避免信息泄漏。更具體地,網(wǎng)絡(luò)覆蓋圖的爬行(crawling)可以被禁止和/或反對。從而,對覆蓋圖成員信息的訪問可以被降低。任何合適的技術(shù)可以用來避免泄漏成員信息,諸如約束路由表中的條目。例如,帶有節(jié)點(diǎn)標(biāo)識符i的節(jié)點(diǎn)可能需要填充其路由表中r行c列的縫隙,因?yàn)樵摽p隙由于節(jié)點(diǎn)故障、由于另一節(jié)點(diǎn)而離開覆蓋圖、和/或節(jié)點(diǎn)正加入和初始化其路由表而變空。為填充該縫隙,節(jié)點(diǎn)可以向定義該空隙的約束的標(biāo)識符s路由一請求消息,該標(biāo)識符s是例如除了在r+1位值為c外與節(jié)點(diǎn)標(biāo)識符相等的標(biāo)識符。當(dāng)這樣一個請求被傳送到一節(jié)點(diǎn)時,該接收節(jié)點(diǎn)可以核查在其路由表中和/或葉子集合中是否存在更接近標(biāo)識符s的節(jié)點(diǎn)。接收節(jié)點(diǎn)還可以核查標(biāo)識符s是否不代表請求者節(jié)點(diǎn)標(biāo)識符的有效點(diǎn)p。如果是,則該接收節(jié)點(diǎn)可以丟棄該請求、將該請求轉(zhuǎn)發(fā)給更近的節(jié)點(diǎn)、和/或采取其他任何合適的行動。以這種方式,惡意節(jié)點(diǎn)僅能發(fā)現(xiàn)滿足路由表項(xiàng)約束的那些節(jié)點(diǎn)。在某些情況下,其他應(yīng)用程序可以被限制不能在支持警報分發(fā)的覆蓋圖之上運(yùn)行,因?yàn)樵谀承┣闆r下,該應(yīng)用程序可能會泄漏關(guān)于覆蓋圖成員的信息。
另一替換和/或另外的安全措施可以在當(dāng)一節(jié)點(diǎn)被損壞時,減少對覆蓋圖相鄰節(jié)點(diǎn)身份的暴露。例如,覆蓋圖可以運(yùn)行在操作系統(tǒng)內(nèi)核中、虛擬機(jī)監(jiān)控程序中、硬件芯片中等。
另一替換或另外的安全措施可以減少對等網(wǎng)絡(luò)中節(jié)點(diǎn)之間的消息話務(wù)擁塞,這可以減少對網(wǎng)絡(luò)的服務(wù)拒絕攻擊的出現(xiàn)和/或其效果。各種合適的機(jī)制的任何一種或多種可以用來減少網(wǎng)絡(luò)中的擁塞。例如,可以防止節(jié)點(diǎn)向覆蓋圖注入極大數(shù)量的消息。另外或作為選擇,覆蓋圖消息可以被簽署,且每個節(jié)點(diǎn)可以對它為覆蓋圖中由該消息的簽名標(biāo)識的其它節(jié)點(diǎn)處理的消息的速率強(qiáng)加限制。例如,鑒權(quán)機(jī)構(gòu)可以簽署包含每一節(jié)點(diǎn)的節(jié)點(diǎn)標(biāo)識符和公鑰的證書。當(dāng)發(fā)送節(jié)點(diǎn)發(fā)送一覆蓋圖消息時,該節(jié)點(diǎn)可以使用其私鑰來簽署該消息并可以路由該消息。由鑒權(quán)機(jī)構(gòu)簽署的該節(jié)點(diǎn)的證書可以附加給該消息。路由該消息的每一節(jié)點(diǎn)可以驗(yàn)證該發(fā)送節(jié)點(diǎn)是該消息的來源(例如,使用證書來驗(yàn)證消息的簽名),且可以記錄它為特定節(jié)點(diǎn)路由的消息的數(shù)目(例如,在消息計數(shù)參數(shù)中)。消息計數(shù)參數(shù)可以與一預(yù)定閾值進(jìn)行比較,該閾值可限制從發(fā)送節(jié)點(diǎn)路由的消息的數(shù)目。在另一示例中,任何給定節(jié)點(diǎn)可以向網(wǎng)絡(luò)插入消息的速率可以通過在每一相鄰鏈接(例如,節(jié)點(diǎn)標(biāo)識符與本地節(jié)點(diǎn)標(biāo)識符類似的那些節(jié)點(diǎn))上應(yīng)用速率限制來界定。如果節(jié)點(diǎn)標(biāo)識符是由鑒權(quán)機(jī)構(gòu)分配的,那么可以限制更改節(jié)點(diǎn)的相鄰節(jié)點(diǎn)。
有復(fù)原力的分發(fā)警報的分發(fā),例如,為警報標(biāo)識接收節(jié)點(diǎn)可以用任何合適的方式來確定。例如,如圖3所示,分發(fā)模塊370可以在生成警報時響應(yīng)于來自警報模塊350的輸入而被觸發(fā),和/或在驗(yàn)證所接收的警報時響應(yīng)從來自警報驗(yàn)證模塊360的輸入而被觸發(fā)。指示蠕蟲攻擊和/或程序易受攻擊性的警報的分發(fā),對阻斷該警報的傳播的一個或多個路由節(jié)點(diǎn)的企圖可以是有復(fù)原力的。阻斷節(jié)點(diǎn)可能是有目的地阻斷警報傳播的惡意節(jié)點(diǎn),或者該節(jié)點(diǎn)可能被損害而不能參與消息的路由,例如,該節(jié)點(diǎn)可能被蠕蟲感染。這樣,向?qū)Φ染W(wǎng)絡(luò)中的節(jié)點(diǎn)發(fā)送警報的分發(fā)方案可以經(jīng)由多條覆蓋圖路線向同一節(jié)點(diǎn)發(fā)送警報。更具體地,一節(jié)點(diǎn)可以接收多個警報,其每一個始發(fā)于一不同節(jié)點(diǎn),和/或經(jīng)由不同的路由路徑發(fā)送。
如果使用單條路徑,則該路徑被阻斷的概率可以被近似為P(block)=1-(1-f)pathlength(3)其中參數(shù)f是網(wǎng)絡(luò)中阻斷路由的節(jié)點(diǎn)的比例。從而,如果使用通向每個節(jié)點(diǎn)的多條獨(dú)立路徑來發(fā)送警報,例如通過構(gòu)建多個獨(dú)立的多點(diǎn)傳播樹,那么至少有一條路徑僅含有誠實(shí)和/或有能力節(jié)點(diǎn)概率可以被近似為(clear)=1-binom(0:p,(1-f)log2bN)----(4)]]>其中N是網(wǎng)絡(luò)中節(jié)點(diǎn)的個數(shù), 是樹的深度,p是通向每個節(jié)點(diǎn)的獨(dú)立路徑數(shù)目,binom是p次嘗試中,0次成功路由的二項(xiàng)式分布,每次嘗試中路由成功的概率是 從而,為達(dá)到到達(dá)一給定節(jié)點(diǎn)的90%的概率,b=4且在含有100,000個節(jié)點(diǎn)的網(wǎng)絡(luò)中百分之五十的節(jié)點(diǎn)被損壞,大約需要選擇40條路經(jīng)。如果40條路徑用來把單個警報轉(zhuǎn)發(fā)給網(wǎng)絡(luò)中的每一節(jié)點(diǎn),那么該消息成本近似為p*N的值。
被選擇來路由消息的獨(dú)立路徑可以用任何合適的方式來選取。例如,可以選取隨機(jī)路徑。在另一示例中,每一節(jié)點(diǎn)可以向其路由表中的所有或部分條目發(fā)送警報。在b=l的對等網(wǎng)絡(luò)中,對所有路由表?xiàng)l目的完整路由表廣播可以有大致為 條消息的消息成本。該完整路由表廣播可能可以到達(dá)對其存在到警報來源的好路徑的每一節(jié)點(diǎn)。在另一示例中,接收節(jié)點(diǎn)可以由路由表中低于一預(yù)定層次的條目所標(biāo)識。作為選擇或另外地,發(fā)送警報的節(jié)點(diǎn)可以向在葉子集合中的每一條目發(fā)送警報。
接收和證明警報的那些節(jié)點(diǎn)可以根據(jù)分發(fā)技術(shù)將警報轉(zhuǎn)發(fā)到其它節(jié)點(diǎn),例如,到路由表?xiàng)l目中的條目、到葉子集合中的條目等的多條隨機(jī)路徑。例如,如果一個節(jié)點(diǎn)將已證明的警報轉(zhuǎn)發(fā)給其路由表中的所有節(jié)點(diǎn),則每個接收節(jié)點(diǎn)可以從在其路由表中列出該接收節(jié)點(diǎn)的每一節(jié)點(diǎn)接收該警報,這樣形成了到網(wǎng)絡(luò)中的每個節(jié)點(diǎn)的多條路徑。從而,該警報可以分發(fā)給在網(wǎng)絡(luò)中實(shí)質(zhì)上的所有節(jié)點(diǎn),且多個警報可以經(jīng)由不同的路徑路由給每個節(jié)點(diǎn),以減少警報的阻斷。
另外,一節(jié)點(diǎn)可以在轉(zhuǎn)發(fā)警報之前驗(yàn)證該警報的來源和/或該警報的內(nèi)容,例如,程序中易受攻擊性的指示。如果警報的來源不能被驗(yàn)證,但是被發(fā)現(xiàn)是對一已被驗(yàn)證的易受攻擊性的描述,那么該節(jié)點(diǎn)可以轉(zhuǎn)發(fā)或不轉(zhuǎn)發(fā)該警報。如果警報的來源可以被驗(yàn)證,且被發(fā)現(xiàn)不是對易受攻擊性的描述,那么該節(jié)點(diǎn)可以丟棄該警報。
節(jié)點(diǎn)可以將警報與已經(jīng)被轉(zhuǎn)發(fā)的警報作比較。如果該警報與先前轉(zhuǎn)發(fā)的警報描述相同的易受攻擊性,則該節(jié)點(diǎn)可以不轉(zhuǎn)發(fā)該警報。為減少不間斷地發(fā)送相同的警報消息,警報可以包含一警報標(biāo)識符,可檢查該警報標(biāo)識符以確定該警報是否為重復(fù)、指示轉(zhuǎn)發(fā)該警報的特定時間量的超時指示符、限制警報被轉(zhuǎn)發(fā)的次數(shù)的轉(zhuǎn)發(fā)次數(shù)計數(shù)器、或其它任何合適的指示符。
當(dāng)一節(jié)點(diǎn)加入覆蓋圖,加入的節(jié)點(diǎn)可以請求覆蓋圖中的一個或多個節(jié)點(diǎn),諸如在其葉子集合和/或路由表中存在的節(jié)點(diǎn)轉(zhuǎn)發(fā)相關(guān)警報。該相關(guān)警報可以是由覆蓋圖中的節(jié)點(diǎn)存儲的任何合適的警報,包括,例如,自從該加入節(jié)點(diǎn)最后一次斷開與覆蓋圖的連接后被證明的警報、在一預(yù)定時間段中的警報等。接收警報請求的節(jié)點(diǎn)可以返回全部或一部分所請求的警報。另外地或作為選擇,接收警報請求的節(jié)點(diǎn)可以發(fā)送它接收到的和/或存儲的警報的概述。加入的節(jié)點(diǎn)可以選擇在該概述中標(biāo)識的一部分警報并向該接收節(jié)點(diǎn)和/或網(wǎng)絡(luò)覆蓋圖中的其它節(jié)點(diǎn)請求那些特定警報。警報概述可以采用任何合適的形式。
參考圖12所示的示例性對等網(wǎng)絡(luò),節(jié)點(diǎn)1202可以含有一包含節(jié)點(diǎn)1220、1222、1224、1226的條目的葉子集合1232。節(jié)點(diǎn)1202可以向節(jié)點(diǎn)1220、1222、1224、1226發(fā)送警報,且這些節(jié)點(diǎn)的每一個可以向在其葉子集合中包括的節(jié)點(diǎn)轉(zhuǎn)發(fā)已證明的警報。例如,節(jié)點(diǎn)1222可以含有一包含節(jié)點(diǎn)1202、1220、1244、1246的葉子集合1242。以這種方式,節(jié)點(diǎn)1220可以接收來自節(jié)點(diǎn)1202和節(jié)點(diǎn)1222兩者的警報。而且,因?yàn)橄蛎總€后繼的葉子集合發(fā)送警報,該警報在整個網(wǎng)絡(luò)上分發(fā)。
而且,分發(fā)系統(tǒng)可以隨覆蓋圖網(wǎng)絡(luò)的增長收縮而自動縮放。路由表和/或葉子集合分發(fā)技術(shù)可以允許對等網(wǎng)絡(luò)中的任何節(jié)點(diǎn)獨(dú)立地加入或離開蠕蟲遏制系統(tǒng)。而且,自證明警報的分發(fā)可以不要求伙伴間的廣泛協(xié)定。更具體地,每個節(jié)點(diǎn)不依賴于單個點(diǎn),例如,ISP或其它中央服務(wù)器,來通知和/或保護(hù)他們免于感染。
由于蠕蟲遏制系統(tǒng)的檢測、警報證明、警報分發(fā)、和/或響應(yīng)模塊不依賴于單個中央處理器,因此沒有一個中央基礎(chǔ)結(jié)構(gòu)可以擔(dān)當(dāng)專用攻擊的目標(biāo)和/或成為單個點(diǎn)故障。在某些情況下,為進(jìn)一步分散蠕蟲遏制系統(tǒng)的基礎(chǔ)結(jié)構(gòu),作為遏制系統(tǒng)的一部分(例如,對等網(wǎng)絡(luò)中節(jié)點(diǎn)的葉子集合的一部分)的每個節(jié)點(diǎn)可以是可消耗的。以這種方式,遏制系統(tǒng)中的所有或至少一部分節(jié)點(diǎn)可以執(zhí)行相同類型的功能(盡管它們能夠,且可以不同地實(shí)現(xiàn))。
其它分發(fā)或擴(kuò)散技術(shù)可以是適合的,諸如互聯(lián)網(wǎng)協(xié)議多點(diǎn)傳送和基于拉的機(jī)制。
部署情形如上文所述,覆蓋圖網(wǎng)絡(luò)的一個或多個節(jié)點(diǎn)可以運(yùn)行檢測模塊以檢測蠕蟲攻擊和/或軟件程序中的易受攻擊性。檢測模塊可以由一個或多個專用計算設(shè)備的任一組合(例如,在蜜罐類型的部署中)、一個或多個空閑的計算設(shè)備(例如,作為屏幕保護(hù)類型的應(yīng)用程序的一部分)、以及作為正常生產(chǎn)部署的一部分的一個或多個節(jié)點(diǎn)來運(yùn)行。
在蠕蟲傳播時用來廣播警報的覆蓋圖網(wǎng)絡(luò)可以被部署在整個因特網(wǎng)或其它通信網(wǎng)絡(luò)上、部署在單個企業(yè)局域網(wǎng)的節(jié)點(diǎn)上、部署在定義為特定用戶類(例如,軟件包的注冊用戶)的節(jié)點(diǎn)上等。
如上文所述,警報消息可以在檢測到易受攻擊性或蠕蟲攻擊時自動生成。此外,警報可以在接收警報消息和/或證明警報消息后根據(jù)一預(yù)定分發(fā)協(xié)議來自動轉(zhuǎn)發(fā)。在其他情況下,手動或人員交互可以提供監(jiān)督和/或授權(quán)來生成和/或轉(zhuǎn)發(fā)警報。
如果網(wǎng)絡(luò)中的每一或至少一部分節(jié)點(diǎn)涉及遏制系統(tǒng)中的檢測、警報證明、和/或警報分發(fā),那么存在甚至在大規(guī)模攻擊發(fā)生前攻擊者滲透系統(tǒng)的可能性。假定系統(tǒng)中的任一節(jié)點(diǎn)可以是惡意的,且每個節(jié)點(diǎn)由一不同的實(shí)體所擁有,則節(jié)點(diǎn)之間不存在信任,即使節(jié)點(diǎn)具有由一鑒權(quán)機(jī)構(gòu)簽署的身份。然而,這些節(jié)點(diǎn)可以在阻止蠕蟲惡意利用未知的易受攻擊性的任務(wù)中相互合作。識別那些惡意節(jié)點(diǎn)可能引入可能被惡意節(jié)點(diǎn)所惡意利用的機(jī)制。從而,如上所述,遏制系統(tǒng)體系結(jié)構(gòu)可以被開發(fā)為容忍和/或設(shè)計圍繞著網(wǎng)絡(luò)中存在的惡意但未知的節(jié)點(diǎn)。
在操作中,一蠕蟲遏制體系結(jié)構(gòu)可以提供對蠕蟲或程序易受攻擊性的檢測、警報生成、警報證明、警報分發(fā)和/或響應(yīng)。更具體地,在某些情況下,由遏制系統(tǒng)保護(hù)的網(wǎng)絡(luò)中的每個節(jié)點(diǎn)可以參與對攻擊或易受攻擊性的檢測、警報生成、警報證明、警報分發(fā)和/或響應(yīng)中的至少一項(xiàng)。例如,參考圖3,對等網(wǎng)絡(luò)310中的檢測節(jié)點(diǎn)可以包括檢測模塊340、警報模塊350、分發(fā)模塊370和響應(yīng)模塊380。如上文所述,檢測模塊可以諸如通過使用動態(tài)數(shù)據(jù)流分析來檢測蠕蟲攻擊和/或軟件易受攻擊性。任何合適的運(yùn)行時分析系統(tǒng)可以用來跟蹤事件。
當(dāng)一檢測到蠕蟲攻擊和/或程序易受攻擊性后,檢測模塊340可以與響應(yīng)模塊380通信以觸發(fā)一項(xiàng)或多項(xiàng)保護(hù)措施。為向未感染節(jié)點(diǎn)傳達(dá)所識別的蠕蟲和/或程序易受攻擊性,檢測節(jié)點(diǎn)310可以使用警報模塊350來生成警報消息330。如上文所述,警報消息可以是自證明的和/或可以包括易受攻擊程序指示符、易受攻擊性類型指示符、事件列表、一條或多條證實(shí)提示和響應(yīng)指示符中的一個或多個。警報模塊350可以與分發(fā)模塊370通信,以根據(jù)分發(fā)協(xié)議向網(wǎng)絡(luò)中的一個或多個節(jié)點(diǎn)發(fā)送警報消息330。對于上文所述的示例,警報消息可以依照網(wǎng)絡(luò)覆蓋圖協(xié)議被分發(fā)給所維護(hù)的路由表中所標(biāo)識的節(jié)點(diǎn)。另外地或作為選擇,警報消息可以依照對等覆蓋圖協(xié)議被分發(fā)給所維護(hù)的葉子集合中所標(biāo)識的所有節(jié)點(diǎn)。
如圖3所示,警報消息330可以被發(fā)送給節(jié)點(diǎn)310的葉子集合中所標(biāo)識的接收節(jié)點(diǎn)320。該接收節(jié)點(diǎn)可以接收警報消息330,并使用警報驗(yàn)證模塊360來證明該警報消息。如果該警報被證明,則接收節(jié)點(diǎn)320可以使用響應(yīng)模塊380來觸發(fā)一項(xiàng)或多項(xiàng)保護(hù)措施。為通過通信網(wǎng)絡(luò)分發(fā)警報330,接收模塊320可以使用分發(fā)模塊370根據(jù)分發(fā)協(xié)議向網(wǎng)絡(luò)中的一個或多個節(jié)點(diǎn)轉(zhuǎn)發(fā)警報消息330。對于上文所述的示例,警報消息可以依照對等覆蓋圖協(xié)議被分發(fā)給所維護(hù)的路由表和/或葉子集合中所標(biāo)識的節(jié)點(diǎn)。
在一實(shí)驗(yàn)中,在類似于SQL Slammer的蠕蟲攻擊下存活的節(jié)點(diǎn)的比例可以根據(jù)系統(tǒng)中檢測器的比率來確定。在一實(shí)驗(yàn)中,全體100,000個節(jié)點(diǎn)(例如,主機(jī)計算設(shè)備)是網(wǎng)絡(luò)的一部分,且10個節(jié)點(diǎn)被模擬為被感染的。此外,網(wǎng)絡(luò)中10%的節(jié)點(diǎn)被假定為惡意的,即使在蠕蟲攻擊之前。感染率β被估算約為0.117,這個數(shù)字被認(rèn)為接近因特網(wǎng)上所觀察到的SQL Slammer行為。該實(shí)驗(yàn)的示例性結(jié)果在圖13的圖1300中示出,檢測器的比例沿軸1302指示,存活節(jié)點(diǎn)的比例沿軸1304指示。圖13中的圖顯示,在網(wǎng)絡(luò)中,很小一部分檢測器節(jié)點(diǎn),例如0.001,可以是足夠的,以將蠕蟲感染限制在10%易受攻擊群體以下。
參考所示的實(shí)施例描述和闡明了本發(fā)明的原理之后,可以認(rèn)識到,所示的實(shí)施例能夠在安排和細(xì)節(jié)上加以修改而不背離該原理。
例如,一種方法可以包括在一接收計算設(shè)備處接收一含有程序標(biāo)識符和事件列表的自證明警報,該程序標(biāo)識符標(biāo)識了含有所檢測到的易受攻擊性的程序,而該事件列表包含示出所檢測到的易受攻擊性的一個或多個非確定性事件;確定該接收計算設(shè)備是否包括含有所檢測到的易受攻擊性的程序;以及驗(yàn)證該事件列表示出了所檢測到的易受攻擊性。驗(yàn)證可以包括執(zhí)行程序中的事件列表。驗(yàn)證可以包括從程序指令中生成一邏輯安全條件;定義一定義在事件列表開始處的程序狀態(tài)的前置條件;定義一基于事件列表的易受攻擊謂詞;以及基于謂詞演算評估該邏輯安全條件、前置條件和易受攻擊謂詞。在該方法中,自證明警報可以包括一用于指示程序中檢測到的易受攻擊性的類型的易受攻擊性類型標(biāo)識符,且其中,驗(yàn)證包括引用該易受攻擊性類型標(biāo)識符。在該方法中,自證明警報可以包括提供事件列表如何示出所檢測到的易受攻擊性的指示的驗(yàn)證提示。驗(yàn)證該事件列表可以包括基于一條或多條驗(yàn)證提示修改事件列表,來觸發(fā)發(fā)信號通知成功驗(yàn)證的、裝載至程序的驗(yàn)證函數(shù)的執(zhí)行。在該方法中,事件列表可以用檢測感染嘗試的軟件或硬件探測從程序執(zhí)行期間記入日志的事件中導(dǎo)出。該方法還可以包括響應(yīng)于驗(yàn)證事件列表,將自證明警報轉(zhuǎn)發(fā)給至少一個其它節(jié)點(diǎn)。在轉(zhuǎn)發(fā)自證明警報之處,可以從覆蓋圖網(wǎng)絡(luò)中的相鄰節(jié)點(diǎn)集合中檢索至少一個其它節(jié)點(diǎn)的至少一個節(jié)點(diǎn)。在轉(zhuǎn)發(fā)自證明警報之處,至少一個其它節(jié)點(diǎn)的至少一個節(jié)點(diǎn)可以包括覆蓋圖網(wǎng)絡(luò)中的所有相鄰節(jié)點(diǎn)。該方法還可以包括基于事件列表生成補(bǔ)丁或過濾器以解決易受攻擊性。
在另一示例中,在其上存儲有一自證明警報數(shù)據(jù)結(jié)構(gòu)的計算機(jī)可讀介質(zhì)可以包括第一數(shù)據(jù)字段,它包含表示標(biāo)識含有檢測到的對蠕蟲攻擊的易受攻擊性的程序標(biāo)識符的數(shù)據(jù);第二數(shù)據(jù)字段,它包含表示包含示出所檢測到的易受攻擊性的一個或多個非確定性事件的事件列表的數(shù)據(jù);以及第三數(shù)據(jù)字段,它包含表示指示在程序中檢測到的易受攻擊性的類型的易受攻擊性類型標(biāo)識符的數(shù)據(jù)。在該計算機(jī)可讀介質(zhì)中,易受攻擊性類型標(biāo)識符可以指示將程序的執(zhí)行重定向至任意代碼的能力、執(zhí)行任意代碼的能力、或向函數(shù)提供任意自變量的能力。該計算機(jī)可讀介質(zhì)還可以包括第四數(shù)據(jù)字段,它包含表示提供事件列表如何示出所檢測到的易受攻擊性的指示的一條或多條驗(yàn)證提示的數(shù)據(jù)。該一條或多條驗(yàn)證提示可以指示要被執(zhí)行的代碼的任意地址,或函數(shù)的任意自變量的事件列表中的事件和事件中的偏移量,取決于易受攻擊性的類型。該計算機(jī)可讀介質(zhì)還可以包括第五數(shù)據(jù)字段,它包含表示適用于解決所檢測到的易受攻擊性的補(bǔ)丁或過濾器中的至少一個的數(shù)據(jù)。
在另一示例中,含有計算機(jī)可執(zhí)行組件的一個或多個計算機(jī)可讀介質(zhì)可以包括用于檢測蠕蟲攻擊的裝置、用于響應(yīng)于檢測到的蠕蟲生成自證明警報的裝置、用于將自證明警報分發(fā)到網(wǎng)絡(luò)覆蓋圖中至少一個其它節(jié)點(diǎn)的裝置。該計算機(jī)可讀介質(zhì)還可以包括結(jié)構(gòu)化網(wǎng)絡(luò)覆蓋圖的路由表和葉子集合中的至少一個,其中,用于分發(fā)自證明警報的裝置訪問該路由表和葉子集合中的至少一個以確定至少一個其它節(jié)點(diǎn)。該計算機(jī)可讀介質(zhì)還可以包括用于減少對路由表中的條目的泄漏的裝置。用于生成自證明警報的裝置可以訪問一事件日志以確定示出可被蠕蟲攻擊惡意利用的程序中的易受攻擊性的至少一個非確定性事件。該計算機(jī)可讀介質(zhì)還可以包括用于確認(rèn)接收到的自證明警報的裝置,并且用于分發(fā)的裝置是由指示程序中的易受攻擊性和蠕蟲攻擊中的至少一個的接收到的自證明警報的驗(yàn)證所觸發(fā)的。
在另一示例中,一個或多個計算機(jī)可讀介質(zhì)含有計算機(jī)可讀指令,在這些指令被執(zhí)行時,可以實(shí)現(xiàn)一種方法,該方法包含接收在計算系統(tǒng)的存儲器的第一部分中寫入或存儲所接收到的信息的指令;將第一臟指示符與該存儲器的第一部分相關(guān)聯(lián),如果接收到的信息是從一不可信來源或具有指示‘臟’臟指示符的存儲器部分中接收的,則該第一臟指示符指示‘臟’;接收將接收到的信息裝載至程序計數(shù)器或執(zhí)行接收到的信息的指令;以及如果第一臟指示符指示‘臟’,則提供對程序易受攻擊性的指示。裝載或執(zhí)行接收到的信息的接收到的指令可以包括移動數(shù)據(jù)的指令、算術(shù)和邏輯指令、以及更改程序控制流的指令。提供對程序易受攻擊性的指示可以包括基于接收到的信息生成一補(bǔ)丁或過濾器。提供對程序易受攻擊性的指示可以包括向至少一個其它節(jié)點(diǎn)發(fā)送一自證明警報。該計算機(jī)可讀介質(zhì)還可以包含接收標(biāo)識覆蓋圖網(wǎng)絡(luò)中鄰近節(jié)點(diǎn)集合中的至少一個其它節(jié)點(diǎn)的節(jié)點(diǎn)標(biāo)識符。該計算機(jī)可讀介質(zhì)還可以包含將一輸入事件標(biāo)識符與存儲器的第一部分相關(guān)聯(lián),該輸入事件標(biāo)識符標(biāo)識所接收信息的來源。第一臟指示符可以包括該輸入事件標(biāo)識符。該計算機(jī)可讀介質(zhì)還可以包含從接收到的信息計算一新數(shù)據(jù)、將該新數(shù)據(jù)存儲在存儲器的第二部分中、以及將第二臟指示符與該存儲器的第二部分相關(guān)聯(lián),如果接收到的信息是從一不可信來源或具有指示臟的臟指示符的存儲器部分中接收的,則第二臟指示符指示‘臟’。第二臟指示符可以包括一數(shù)據(jù)流圖,它指示從接收到的信息或從中接收信息的存儲器部分的臟指示符中的數(shù)據(jù)流圖中計算新數(shù)據(jù)的中至一個步驟。存儲器的第一部分可以包括由CPU寄存器、存儲器頁和該頁中的存儲器位置構(gòu)成的一組中的至少一個。存儲器的第一部分可以包括一存儲器位置,該存儲器位置是第一存儲器頁的一部分,該方法還包括基于第一臟指示符將一頁臟指示符與存儲器頁相關(guān)聯(lián)。接收將接收到的信息裝載至程序計數(shù)器或執(zhí)行該接收到的信息的指令可以包括接收執(zhí)行該接收到信息的指令,如果第一臟指示符指示‘干凈’,那么檢查與存儲由接收到的信息引用的指令的存儲器的第三部分相關(guān)聯(lián)的第三臟指示符。該計算機(jī)可讀介質(zhì)還可以包括如果第三臟指示符指示‘臟’,則提供一程序易受攻擊性的指示。
在又一示例中,一種方法可以包括維護(hù)跟蹤存儲的值的來源是不可信來源還是可信任來源的至少一個污染數(shù)據(jù)存儲;在將存儲的值裝載至程序指針之前,檢查至少一個污染存儲;如果至少一個污染數(shù)據(jù)存儲指示所存儲的值是來自一可信來源,則裝載所存儲的值;如果至少一個污染數(shù)據(jù)存儲指示所存儲的值是來自不可信任來源,則拒絕自動裝載所存儲的值;以及響應(yīng)于拒絕自動裝載所存儲的值,確定所存儲的值的存儲位置,并從至少一個污染數(shù)據(jù)存儲中確定所存儲的值的輸入源。至少一個污染數(shù)據(jù)存儲可以包括指示用于計算所存儲的值的一組步驟的數(shù)據(jù)流圖。確定輸入源可以包括確定所存儲的值的輸入源和該輸入源中的偏移量。該方法還可以包括如果至少一個污染數(shù)據(jù)存儲指示所存儲的值來自于一可信來源,則確定由所存儲的值所指向的指令是否來自于可信來源;以及僅當(dāng)所存儲的值和指令都來自于至少一個可信來源時執(zhí)行該指令。
在又一示例中,含有計算機(jī)可執(zhí)行組件的一個或多個計算機(jī)可讀介質(zhì)可以包括用于使用動態(tài)數(shù)據(jù)流分析來檢測蠕蟲攻擊的裝置;用于響應(yīng)于對蠕蟲攻擊的檢測生成警報的裝置;用于響應(yīng)于警報的生成分發(fā)警報的裝置。該計算機(jī)可讀介質(zhì)還可以包括用于基于檢測裝置的動態(tài)數(shù)據(jù)流分析生成補(bǔ)丁或過濾器的裝置。用于生成警報的裝置可以包括用于至少分地基于檢測裝置的動態(tài)數(shù)據(jù)流分析生成自證明警報的裝置。
在再一示例中,一種方法可以包含檢索示出可被蠕蟲攻擊所惡意利用的程序易受攻擊性的第一執(zhí)行路徑;確定傳入消息中確定第一執(zhí)行路徑的至少一部分的至少一個字節(jié);確定所確定的字節(jié)上可以被測試以驗(yàn)證至少一個字節(jié)的存在的至少一個條件;使用至少一個條件來測試新消息的至少一部分以檢測蠕蟲攻擊的存在;基于該測試拒絕處理該新消息。第一執(zhí)行路徑可以從用來檢測易受攻擊性的事件日志中導(dǎo)出。該方法還可以包含從另一計算設(shè)備處接收一自證明警報,且其中,檢索第一執(zhí)行路徑可以包括對該自證明警報進(jìn)行語法分析以檢索事件列表。確定至少一個條件可以包括當(dāng)臟存儲器部分用來控制流決策時,記錄在來自該臟存儲器部分的數(shù)據(jù)計算的邏輯操作。該方法還可以包括將一過濾器條件初始化為‘真’,且其中,記錄包括根據(jù)過濾器條件的前一值和至少一個條件的邏輯AND運(yùn)算更新該過濾器條件。該方法還可以包括記錄含有臟存儲器部分的數(shù)據(jù)流圖的指令序列。該方法還可以包括將過濾器條件包含在一指示易受攻擊性的自證明警報中,并將該自證明警報發(fā)送給另一計算設(shè)備。第一執(zhí)行路徑可以包括非確定性事件的事件列表。
在另一示例中,一個或多個計算機(jī)可讀介質(zhì)含有計算機(jī)可讀指令,當(dāng)這些指令被執(zhí)行時,可以實(shí)現(xiàn)一種方法,該方法包含將一過濾器條件初始化為‘真’;確定與含有將被裝載至程序計數(shù)器或?qū)⒈粓?zhí)行的數(shù)據(jù)的存儲器部分相關(guān)聯(lián)的臟指示符的值;接收執(zhí)行條件控制轉(zhuǎn)移的指令;基于過濾器條件前一值和該臟指示符的所確定的值,更新該過濾器條件;以及將該過濾器條件應(yīng)用于傳入消息以阻斷惡意利用程序中的易受攻擊性的蠕蟲攻擊。該一個或多個計算機(jī)可讀介質(zhì)還可以包括從一檢測模塊接收對易受攻擊性的指示。該一個或多個計算機(jī)可讀介質(zhì)還可以包括從一自證明警報接收對易受攻擊性的指示。該一個或多個計算機(jī)可讀介質(zhì)還可以包括將過濾器條件包含在一指示易受攻擊性的自證明警報中,并向另一計算設(shè)備發(fā)送該自證明警報。臟指示符可以包括包含用于計算包含在存儲器部分內(nèi)值的指令序列的數(shù)據(jù)流圖。
在又一示例中,含有計算機(jī)可執(zhí)行組件的一個或多個計算機(jī)可讀介質(zhì)可以包括用于自動生成示出程序中可被蠕蟲惡意利用的易受攻擊性的指令序列的裝置;以及用于基于該指令序列自動生成對該易受攻擊性的解決方案的裝置。用于自動生成指令序列的裝置可以包括用于檢測蠕蟲攻擊的裝置。用于自動生成指令序列的裝置可以包括用于證明一接收到的自證明警報的裝置。用于自動生成解決方案的裝置可以包括用于為惡意利用易受攻擊性的接收到的指令生成一過濾器的裝置。用于自動生成解決方案的裝置可以包括生成對程序中的易受攻擊性的補(bǔ)丁的裝置。該一個或多個計算機(jī)可讀介質(zhì)還可以包括用于生成含有該指令序列和解決方案的至少一部分的自證明警報的裝置。該一個或多個計算機(jī)可讀介質(zhì)還可以包括用于向網(wǎng)絡(luò)覆蓋圖中的至少一個其它節(jié)點(diǎn)分發(fā)該自證明警報的裝置。
鑒于可應(yīng)用本發(fā)明的原理的多種可能的實(shí)施例,應(yīng)該認(rèn)識到,這些詳細(xì)實(shí)施例僅僅是說明性的,且不應(yīng)該作為本發(fā)明的范圍的限制。相反,要求保護(hù)落入所附權(quán)利要求書及其等效技術(shù)方案的范圍和精神之內(nèi)的所有這些實(shí)施例作為本發(fā)明。
權(quán)利要求
1.一種方法,包括a)在一接收計算設(shè)備上接收一含有程序標(biāo)識符和事件列表的自證明警報,所述程序標(biāo)識符標(biāo)識了含有所檢測到的易受攻擊性的程序,且所述事件列表包含示出所檢測到的易受攻擊性的一個或多個非確定性事件;b)確定所述接收計算設(shè)備是否包括含有所檢測到的易受攻擊性的程序;以及c)驗(yàn)證所述事件列表示出了所檢測到的易受攻擊性。
2.如權(quán)利要求1所述的方法,其特征在于,驗(yàn)證包括執(zhí)行所述程序中的事件列表。
3.如權(quán)利要求1所述的方法,其特征在于,驗(yàn)證包括從所述程序的指令中生成一邏輯安全條件;定義一定義所述程序在所述事件列表的開始處的狀態(tài)的前置條件;基于所述事件列表定義一易受攻擊謂詞;以及基于謂詞演算評估所述邏輯安全條件、前置條件和易受攻擊謂詞。
4.如權(quán)利要求1所述的方法,其特征在于,所述自證明警報包括一用于指示所述程序中檢測到的易受攻擊性的類型的易受攻擊性類型標(biāo)識符,且其中,驗(yàn)證包括引用所述易受攻擊性類型標(biāo)識符。
5.如權(quán)利要求1所述的方法,其特征在于,所述自證明警報包括提供所述事件列表如何示出所檢測到的易受攻擊性的指示的一條或多條驗(yàn)證提示。
6.如權(quán)利要求1所述的方法,其特征在于,還包含接收在計算系統(tǒng)的存儲器的第一部分中寫入或存儲接收到的信息的指令;將第一臟指示符與所述存儲器的第一部分相關(guān)聯(lián),如果接收到的信息是從一不可信來源或具有指示‘臟’的臟指示符的存儲器部分中接收的,則所述第一臟指示符指示‘臟’;接收將接收到的信息裝載至程序計數(shù)器或執(zhí)行接收到信息的指令;以及如果所述第一臟指示符指示‘臟’,則生成指示程序易受攻擊性的自證明警報,它含有程序標(biāo)識符和事件列表,所述事件序列指示在接收寫入或存儲指令、關(guān)聯(lián)第一臟指示符、以及接收裝載接收到的信息的指令的操作期間記入日志的一個或多個事件。
7.如權(quán)利要求6所述的方法,其特征在于,還包含將一輸入事件標(biāo)識符與所述存儲器的第一部分相關(guān)聯(lián),所述輸入事件標(biāo)識符標(biāo)識了接收到信息的來源。
8.如權(quán)利要求6所述的方法,其特征在于,還包含從接收到的信息計算一新數(shù)據(jù)、將所述新數(shù)據(jù)存儲在所述存儲器的第二部分中、以及將第二臟指示符與所述存儲器的第二部分關(guān)聯(lián),如果接收到的信息是從一不可信來源或具有指示臟的臟指示符的存儲器部分中接收的,則所述第二臟指示符指示‘臟’。
9.如權(quán)利要求8所述的方法,其特征在于,所述第二臟指示符包括一數(shù)據(jù)流圖,它指示從接收到的信息或從其接收信息的存儲器部分的臟指示符中的數(shù)據(jù)流圖中計算新數(shù)據(jù)的至少一個步驟。
10.如權(quán)利要求6所述的方法,其特征在于,接收將接收到的信息裝載至程序計數(shù)器或執(zhí)行接收到的信息的指令包括接收執(zhí)行接收到的信息的指令,如果所述第一臟指示符指示‘干凈’,則所述方法還包括檢查與存儲由接收到的信息引用的指令的存儲器的第三部分相關(guān)聯(lián)的第三臟指示符。
11.如權(quán)利要求1所述的方法,其特征在于,還包括響應(yīng)于驗(yàn)證所述事件列表,向網(wǎng)絡(luò)覆蓋圖中由節(jié)點(diǎn)標(biāo)識符標(biāo)識的至少一個相鄰節(jié)點(diǎn)轉(zhuǎn)發(fā)所述自證明警報。
12.如權(quán)利要求1所述的方法,其特征在于,還包括基于所述事件列表生成補(bǔ)丁或過濾器的至少一個以解決所述易受攻擊性。
13.一個或多個含有計算機(jī)可執(zhí)行組件的計算機(jī)可讀介質(zhì),包含a)用于使用動態(tài)數(shù)據(jù)流分析來檢測對蠕蟲攻擊的易受攻擊性的裝置;b)用于響應(yīng)于一所檢測到的蠕蟲生成一自證明警報的裝置,所述自證明警報包含i)第一數(shù)據(jù)字段,它包含表示標(biāo)識含有所檢測到對蠕蟲攻擊的易受攻擊性的程序的標(biāo)識符的數(shù)據(jù);ii)第二數(shù)據(jù)字段,它包含表示包含示出所述易受攻擊性的一個或多個非確定性事件的事件列表的數(shù)據(jù);以及iii)第三數(shù)據(jù)字段,它包含表示用于指示在所述程序中檢測到的易受攻擊性的類型的易受攻擊性類型標(biāo)識符的數(shù)據(jù)。
14.如權(quán)利要求13所述的計算機(jī)可讀介質(zhì),其特征在于,所述自證明警報還包括第四數(shù)據(jù)字段,它包含表示提供所述事件列表如何示出所述易受攻擊性的指示的一條或多條驗(yàn)證提示的數(shù)據(jù),所述驗(yàn)證提示指示將被執(zhí)行的代碼的任意地址、將被執(zhí)行的任意代碼或函數(shù)的任意自變量的事件列表中的事件和事件中的偏移量,取決于所述易受攻擊性類型。
15.如權(quán)利要求13所述的計算機(jī)可讀介質(zhì),其特征在于,所述易受攻擊性類型指示將程序執(zhí)行重定向至任意代碼的能力、執(zhí)行任意代碼的能力、或?qū)瘮?shù)提供任意自變量的能力。
16.如權(quán)利要求13所述的計算機(jī)可讀介質(zhì),其特征在于,還包括用于向網(wǎng)絡(luò)覆蓋圖中的至少一個其它節(jié)點(diǎn)分發(fā)所述自證明警報的裝置。
17.如權(quán)利要求13所述的計算機(jī)可讀介質(zhì),其特征在于,用于檢測的所述裝置創(chuàng)建一含有示出所述易受攻擊性的至少一個非確定性事件的事件日志。
18.如權(quán)利要求13所述的計算機(jī)可讀介質(zhì),其特征在于,還包括用于確認(rèn)接收到的自證明警報的裝置,包括使用所提供的提示修改所述事件列表,以觸發(fā)發(fā)信號通知成功驗(yàn)證的、裝載至程序的驗(yàn)證函數(shù)的執(zhí)行。
19.一種方法,包括a)從一自證明警報中檢索第一執(zhí)行路徑,所述第一執(zhí)行路徑示出可由蠕蟲攻擊惡意利用的程序的易受攻擊性;b)確定傳入消息中確定所述第一執(zhí)行路徑的至少一部分的至少一個字節(jié);c)確定所確定的字節(jié)上可以被測試以驗(yàn)證所述至少一個字節(jié)的存在的至少一個條件;d)使用所述至少一個條件測試一新消息的至少一部分,以檢測蠕蟲攻擊的存在。e)基于所述測試拒絕處理所述新消息。
20.如權(quán)利要求19所述的方法,其特征在于,確定至少一個條件包括當(dāng)臟存儲器部分在控制流決策中使用時,記錄在來自該臟存儲器部分的數(shù)據(jù)上計算的邏輯操作。
21.一個或多個含有計算機(jī)可讀指令的計算機(jī)可讀介質(zhì),當(dāng)所述指令被執(zhí)行時,實(shí)現(xiàn)一種方法,所述方法包括a)從一自證明警報中接收程序中對蠕蟲攻擊的易受攻擊性的指示;b)將一過濾器條件值初始化為‘真’;c)確定與含有將被裝載至程序計數(shù)器或?qū)⒈粓?zhí)行的數(shù)據(jù)的存儲器部分相關(guān)聯(lián)的臟指示符的值;d)接收執(zhí)行條件控制轉(zhuǎn)移的指令;e)基于所述過濾器的前一值和所確定的所述臟指示符的值更新所述過濾器條件;以及f)將所述過濾器條件應(yīng)用于一傳入消息以阻斷惡意利用所述易受攻擊性的蠕蟲攻擊。
22.如權(quán)利要求9所述的計算機(jī)可讀介質(zhì),其特征在于,所述臟指示符包括一數(shù)據(jù)流圖,它包括用于計算包含在所述存儲器部分中的值的指令序列。
全文摘要
一種遏制系統(tǒng)可以包括生成和/或發(fā)送一警報,作為安全共享關(guān)于已檢測到的蠕蟲的知識的基礎(chǔ)。警報可以含有證明給定程序含有易受攻擊性的信息。該警報可以是自證明的,這樣其真實(shí)性可以由一計算系統(tǒng)獨(dú)立地驗(yàn)證。
文檔編號G06F21/56GK1725759SQ20051008752
公開日2006年1月25日 申請日期2005年7月21日 優(yōu)先權(quán)日2004年7月21日
發(fā)明者M·科斯塔, M·卡斯特羅, A·羅斯特隆, J·克勞克羅福特 申請人:微軟公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
莲花县| 林甸县| 汕尾市| 永清县| 张家界市| 万源市| 淳化县| 西林县| 邓州市| 澄城县| 通许县| 巫山县| 张家港市| 罗城| 招远市| 武鸣县| 江达县| 奉新县| 潼关县| 桐城市| 温泉县| 鄂州市| 峨边| 莆田市| 工布江达县| 永康市| 阿克陶县| 民丰县| 东安县| 佳木斯市| 舟山市| 大渡口区| 海安县| 酒泉市| 博湖县| 定襄县| 额尔古纳市| 辽中县| 平江县| 鄂托克旗| 宁波市|