專利名稱:用于外來代碼檢測的系統(tǒng)和方法
用于外來代碼檢測的系統(tǒng)和方法版權聲明和許可本專利文件的公開內容的一部分可能包含須經版權保護的材料。本版權所有 者不反對任何專利文件或專利公開像出現(xiàn)在專利與商標局專利文件或記錄中一樣 的復制,但在除此之外的任何情況下保留版權。以下標注應適用于本文件Copyright 2004, Microsoft Corp.。發(fā)明領域本發(fā)明一般涉及計算領域,尤其涉及檢測非旨在駐留在計算機系統(tǒng)的進程空 間中的外來代碼的技術。發(fā)明背景當今的計算機系統(tǒng)常遭受到各種破壞或禁止計算機系統(tǒng)的期望操作、并使得 系統(tǒng)以損壞或非期望方式運行的攻擊。計算機病毒、蠕蟲和特洛伊木馬程序是不同 形式攻擊的示例。攻擊也可以來自計算機系統(tǒng)的不擇手段的用戶或者遠程黑客。這 些攻擊通常是以嘗試修改由計算機系統(tǒng)執(zhí)行的現(xiàn)有程序代碼或嘗試在計算機系統(tǒng) 中常規(guī)程序執(zhí)行的各個階段插入新的未經授權的程序代碼的形式出現(xiàn)。防止這些惡 意攻擊的系統(tǒng)和方法變得日益重要。一般而言,這種攻擊是通過使計算機執(zhí)行外來代碼實現(xiàn)的。在這種情況下"外 來"代碼是指不旨在或期望在特定程序的進程空間中執(zhí)行的代碼。它通常由黑客寫 成用以進入程序的進程空間以完成某些目的,諸如刪除、破壞或為了如非法制作音 樂的未經授權拷貝等其它目的操縱代碼或數(shù)據等。防止外來代碼的這種攻擊有助于確保計算機系統(tǒng)(或至少是特定程序)的行 為完整性。維持完整性的一種方式是執(zhí)行模塊認證,其中保護一個或多個軟件模塊 的安全性以免被篡改。這提供了對諸如代碼補丁、重定向和軟件斷點等對軟件的惡 意改變的一定程度的保護。模塊認證的一種形式是確保包含在軟件模塊中的內容沒有被改變(或者至少 諸如代碼部分等模塊的不期望改變的部分真正保持未變)。這可以通過靜態(tài)模塊認證來完成。靜態(tài)模塊認證是驗證模塊(在某些情況下可被認為是"on-disk (盤上)"模塊)的持久存儲圖像的過程。例如,檢查盤上模塊的一種機制可以通過取文件的 散列值、并將所得散列值與已由受信任簽署者簽名的文件的預先計算散列值作比較來完成。散列(Hashing)的處理是一種眾所周知的密碼技術,它使用相對唯一但相比 原始數(shù)據小得多的表示來標識數(shù)據。如SHA-1等好的散列算法即使對于源數(shù)據中 (或者該情況下的二進制文件)微小的變化也會生成顯著不同的散列值。因此,當 預期的攻擊是對所存儲代碼的修改時,散列法在檢測出修改方面很有效。然而,對于檢查代碼和數(shù)據的完整性和安全性方面有基本的限制。簡而言之, 不能一直檢查所有的代碼和數(shù)據。從性能的角度看,用戶可能不希望計算機系統(tǒng)專 門使用其過量的資源來不斷地搜索代碼或數(shù)據篡改。例如,像Microsoft Suite等大 型軟件程序的大小是許多兆字節(jié),并且會花費大量的資源來反復檢査整個程序以獲 得代碼或數(shù)據篡改的證據。解決該性能問題的一個方法是通過在存儲器中選擇一些數(shù)量的隨機頁面然后 掃描它們來檢查外來代碼??梢栽谀承┰O定的時間間隔或在事件發(fā)生時掃描這些頁 面。通過隨機地檢查有限量的代碼和數(shù)據,可為用戶釋放更多的資源以供使用,同 時提供對外來代碼破壞計算機系統(tǒng)完整性的合理檢查。然而,用于檢查對計算機系統(tǒng)的攻擊的一種經改進方式是仔細地選擇程序的 哪些部分用于檢查可能的篡改。例如,如果沒有引用代碼,那么它不能被執(zhí)行,這 意味著它不會對計算機系統(tǒng)完整性造成危險。因此,提供智能技術來檢測外來代碼 是有優(yōu)勢的,其中檢查和驗證將要執(zhí)行的代碼或者很有可能要執(zhí)行的代碼。具體地, 通過檢查可引用任何外來代碼的進程空間中的線程堆棧來確定外來代碼的存在是 有優(yōu)勢的。此外,檢查指令指針所指向的代碼、頁面出錯歷史、以及任何指針和可 執(zhí)行的其相關聯(lián)函數(shù),諸如整個動態(tài)鏈接庫(DLL)中的指針和函數(shù)、事件處理器 的指針和函數(shù)等,是有優(yōu)勢的。發(fā)明內容本發(fā)明的各個方面示教了檢測外來代碼的一種智能方法。本發(fā)明一方面的重 點在于可能運行的代碼,即以某種方式引用的代碼。在本發(fā)明的一方面,不管線程 堆棧是否活動檢査由線程堆棧引用的代碼。特別地,檢査在任何給定線程堆棧上引 用的選定代碼頁面。此外,在本發(fā)明的另一方面,也選擇鄰近那些選定頁面的任何可疑頁面來作外來代碼檢查。在本發(fā)明的又一方面,檢查線程堆棧上引用的隨機頁 面。在本發(fā)明的其它方面,在處理器的指令指針所指向的頁面中檢查外來代碼。 在本發(fā)明的另外方面,檢查頁面出錯歷史,這容許檢査從擴展存儲器頁入到物理存 儲器的任何頁面,以及要求頁入這些頁面的任何代碼。在本發(fā)明的其它方面,檢査 諸如故障處理器的事件處理函數(shù)以及指向其的指針,它們處理計算機系統(tǒng)用戶、計 算機系統(tǒng)本身或者兩者同時帶來的事件。所有這些方面具有相同的概念,即檢查可 能要執(zhí)行的代碼,而相反不檢查不大可能執(zhí)行的代碼。以下描述本發(fā)明的其他特征。
結合附圖能更好地理解上述發(fā)明內容和以下對發(fā)明的詳細描述。為了說明本 發(fā)明,示出了描述本發(fā)明的各個方面的示例性實施例。然而,本發(fā)明不限于所揭示 的特定系統(tǒng)和方法。包括以下附圖圖1提供了對結合其可實施本發(fā)明的合適計算設備的簡要描述;圖2示出了外來代碼檢測候選,即位于進程空間中的幾個線程堆棧;圖3A示出了遍歷線程堆棧并在頁面中檢査外來代碼的概念;圖3B示出了檢查線程堆棧所引用的隨機頁面的概念;圖3C示出了在鄰近可疑頁面中檢查外來代碼的概念;圖4示出了對事件處理函數(shù)和指針檢査外來代碼的存在;圖5示出了對指令指針檢査外來代碼;圖6示出了對頁面出錯歷史檢查外來代碼;圖7示出了外來代碼檢測的示例性實現(xiàn)。
具體實施方式
概述首先,以下針對本發(fā)明的各個方面描述了一示例性計算環(huán)境。其次,詳細描 述了這些方面。例如,討論了檢測外來代碼的方法,其中認證模塊遍歷堆棧,并且 檢查存儲器中堆棧所引用的任何頁面?;蛘?,認證模塊檢査隨機頁面和堆棧所引用 頁面的鄰近可疑頁面。此外,檢查由指令指針引用的頁面、以及由事件處理函數(shù)引用的任何頁面,不管是用戶調用的、系統(tǒng)調用的、還是兩者都調用的。此外,對頁面出錯歷史檢查 被頁入到物理存儲器中的頁面、以及請求那些頁面頁入的代碼。這些僅是一些示例, 意在示出貫穿本發(fā)明各個方面的寬泛原理檢査可能運行的代碼,不檢査不大可能 運行的代碼。示例性計算環(huán)境圖1和以下討論旨在提供對結合其可實施本發(fā)明的合適計算設備的簡要描述。 例如,圖1中示出的任何客戶機或服務器計算機或設備可采取這種形式。然而,應 該理解,可構想手提式、便攜式和所有類型的其他計算設備和計算對象可結合本發(fā) 明使用,即,計算環(huán)境中可生成、處理、接收和/或發(fā)送數(shù)據的任何地方。盡管以 下描述了通用計算機,但這僅是一個示例,本發(fā)明可使用具有網絡/總線互通和交 互的瘦客戶機來實現(xiàn)。因而,本發(fā)明可在網絡化主機服務環(huán)境中實現(xiàn),其中牽涉極 少或最少的客戶機資源,例如其中客戶機設備僅用作連接網絡/總線的接口 (諸如 置入裝置中的一對象)的網絡化環(huán)境。本質上,可存儲數(shù)據以及數(shù)據可從中獲取或 發(fā)送到另一計算機的任何地方都是對本發(fā)明的對象持久方法的操作而言合乎需要 或合適的環(huán)境。雖然不是必須的,但是本發(fā)明可通過操作系統(tǒng)實現(xiàn),供服務開發(fā)者用于設備 或對象、和/或包括在根據本發(fā)明運行的應用程序或服務器軟件中??稍谟嬎銠C可 執(zhí)行指令的通用環(huán)境中描述軟件,諸如可由例如客戶機工作站、服務器或其他設備 的一個或多個計算機執(zhí)行的程序模塊。 一般而言,程序模塊包括例程、程序、對象、 組件、數(shù)據結構等等,它們執(zhí)行特定的任務或實現(xiàn)特定的抽象數(shù)據類型。通常,在 各個實施例中可按需組合或分布程序模塊的功能。此外,本發(fā)明可用其他計算機系 統(tǒng)配置和協(xié)議來實踐。適用于本發(fā)明的其它眾所周知的計算系統(tǒng)、環(huán)境和/或配置 包括但不限于個人計算機(PC)、自動取款機、服務器計算機、手提式或膝上型 設備、多處理器系統(tǒng)、基于微處理器的系統(tǒng)、可編程消費電子產品、網絡PC、裝 置、燈光、環(huán)境控制元件、小型機、大型計算機等。圖1由此示出了可實現(xiàn)本發(fā)明的合適計算系統(tǒng)環(huán)境的一個示例100,盡管如上所闡明的,計算系統(tǒng)環(huán)境ioo僅是合適計算環(huán)境的一個示例,且并不旨在提出對本發(fā)明的使用范圍或功能的任何限制。計算環(huán)境100也不應當被解釋為對有關示例性 操作環(huán)境100中示出的任一組件或其組合具有任何依賴或要求。參考圖1,用于實現(xiàn)本發(fā)明的示例性系統(tǒng)包括計算機110形式的通用計算設 備。計算機110的組件可包括但不限于,處理單元120、系統(tǒng)存儲器130以及將包括系統(tǒng)存儲器的各個系統(tǒng)組件耦合至處理單元120的系統(tǒng)總線121。系統(tǒng)總線121 可以是若干種總線結構類型的任一種,包括存儲器總線或存儲器控制器、外圍總線 以及使用各類總線體系結構的任一種的局域總線。作為示例而非限制,這類體系結 構包括工業(yè)標準體系結構(ISA)總線、微信道體系結構(MCA)總線、增強ISA (EISA)總線、視頻電子技術標準協(xié)會(VESA)局域總線以及外圍部件互連(PCI) 總線(也稱為Mezzanine總線)。計算機110通常包括各種計算機可讀介質。計算機可讀介質可以是可由計算 機110訪問的任一可用介質,并且包括易失性和非易失性介質、可移動和不可移動 介質。作為示例而非限制,計算機可讀介質包括計算機存儲介質和通信介質。計算 機存儲介質包括以儲存諸如計算機可讀指令、數(shù)據結構、程序模塊或其它數(shù)據等信 息的任一方法或技術實現(xiàn)的易失性和非易失性、可移動和不可移動介質。計算機存 儲介質包括但不限于,RAM、 ROM、 EEPROM、閃存或其它存儲器技術、CDROM、 數(shù)字多功能盤(DVD)或其它光盤存儲、磁盒、磁帶、磁盤存儲或其它磁性存儲 設備、或可用來儲存所需信息并可由計算機110訪問的任一其它介質。通信介質通 常具體化為諸如載波或其它傳輸機制的已調制數(shù)據信號中的計算機可讀指令、數(shù)據 結構、程序模塊或其它數(shù)據,并包括任一信息傳送介質。術語"已調制數(shù)據信號" 指以對信號中的信息進行編碼的方式設置或改變其一個或多個特征的信號。作為示 例而非限制,通信介質包括有線介質,諸如有線網絡或直接接線連接,以及無線介 質,諸如聲學、RF、紅外和其它無線介質。上述任一個的組合也應當包括在計算 機可讀介質的范圍之內。系統(tǒng)存儲器130包括易失性和/或非易失性存儲器形式的計算機存儲介質,諸 如只讀存儲器(ROM) 131和隨機存取存儲器(RAM) 132。包含如在啟動時幫助 在計算機110內的元件之間傳輸信息的基本例程的基本輸入/輸出系統(tǒng)133 (BIOS) 通常儲存在ROM 131中。RAM 132通常包含處理單元120立即可訪問或者當前正 在操作的數(shù)據和/或程序模塊。作為示例而非限制,圖1示出了操作系統(tǒng)134、應用 程序135、其它程序模塊136和程序數(shù)據137。計算機110還可包括其它可移動/不可移動、易失性/非易失性計算機存儲介質。 僅作為示例,圖1示出了對不可移動、非易失性磁介質進行讀寫的硬盤驅動器141、 對可移動、非易失性磁盤152進行讀寫的磁盤驅動器151、以及對可移動、非易失 性光盤156,如CD-RW、 DVD-RW或其它光學介質進行讀寫的光盤驅動器155。 可在示例性操作環(huán)境中使用的其它可移動/不可移動、易失性/非易失性計算機存儲介質包括但不限于,磁帶盒、閃存卡、數(shù)字多功能盤、數(shù)字錄像帶、固態(tài)RAM、 固態(tài)ROM等等。硬盤驅動器141通常通過不可移動的存儲器接口,如接口 140連 接到系統(tǒng)總線121,而磁盤驅動器151和光盤驅動器155通常通過可移動存儲器接 口,如接口 150連接到系統(tǒng)總線121。上文討論并在圖1示出的驅動器及其關聯(lián)的計算機存儲介質為計算機110提 供了計算機可讀指令、數(shù)據結構、程序模塊和其它數(shù)據的存儲。例如,在圖1中, 硬盤驅動器141被示為儲存操作系統(tǒng)144、應用程序145、其它程序模塊146和程 序數(shù)據147。注意,這些組件可以與操作系統(tǒng)134、應用程序135、其它程序模塊 136和程序數(shù)據137相同,也可以與它們不同。這里對操作系統(tǒng)144、應用程序145、 其它程序模塊146和程序數(shù)據147給予不同的標號來說明至少它們是不同的副本。 用戶可以通過輸入設備,諸如鍵盤162和定位設備161 (諸如鼠標、跟蹤球或觸摸 板等)向計算機110輸入命令和信息。其它輸入設備(未示出)可包括話筒、操縱 桿、游戲墊、圓盤式衛(wèi)星天線、掃描儀等等。這些和其它輸入設備通常通過耦合至 系統(tǒng)總線121的用戶輸入接口 160連接至處理單元120,但是也可以通過其它接口 和總線結構,諸如并行端口、游戲端口或通用串行總線(USB)連接。圖形接口 182也可被連接到系統(tǒng)總線121。 一個或多個圖形處理單元(GPU) 184可與圖形 接口 182通信。監(jiān)視器191或其它類型的顯示設備也通過接口,諸如視頻接口 l卯 連接至系統(tǒng)總線121,該接口又可與視頻存儲器186通信。除監(jiān)視器之外,計算機 也可包括其它外圍輸出設備,諸如揚聲器197和打印機196,它們通過輸出外圍接 口 195連接。計算機110可以使用到一個或多個遠程計算機,如遠程計算機180的邏輯連 接在網絡化或分布式環(huán)境中操作。遠程計算機180可以是個人計算機、服務器、路 由器、網絡PC、對等設備或其它公用網絡節(jié)點,并通常包括許多或所有相關于計 算機IIO所描述的元件,盡管在圖1中僅示出了存儲器存儲設備181。圖1描述的 邏輯連接包括局域網(LAN) 171和廣域網(WAN) 173,但也可包括其它網絡/ 總線。這類網絡環(huán)境常見于家庭、辦公室、企業(yè)范圍計算機網絡、內聯(lián)網以及因特 網。當在LAN網絡環(huán)境中使用時,計算機IIO通過網絡接口或適配器170連接至 LAN 171。當在WAN網絡環(huán)境中使用時,計算機110通常包括調制解調器172或 用于通過WAN173,如因特網建立通信的其它裝置??梢允莾戎没蛲庵玫恼{制解 調器172通過用戶輸入接口 160或其他適當?shù)臋C制連接至系統(tǒng)總線121。在網絡化環(huán)境中,相關于計算機110所描述的程序模塊或其部分可儲存在遠程存儲器存儲設備中。作為示例而非限制,圖1示出遠程應用程序185駐留在存儲器設備181上。 可以理解,示出的網絡連接是示例性的,也可以使用在計算機之間建立通信鏈路的 其它手段。外來代碼檢測方面以下討論的本發(fā)明的各方面在進程空間中檢查外來代碼的存在。具體地,將 執(zhí)行或可能執(zhí)行的代碼是要檢查的目標。圖2示出了用于外來代碼檢測的一些候選 200。通常,諸如可執(zhí)行代碼的代碼和所支持庫被映射到進程空間中。進程空間不 執(zhí)行,而僅是定義在該進程空間中運作的任何事物可訪問的存儲器邊界、資源等。 線程是在進程空間的邊界內運作的執(zhí)行的實例。在一個進程空間中可以執(zhí)行許多線 程,且一般地,在進程空間中創(chuàng)建的所有存儲器和資源可被該進程空間中的任一執(zhí) 行線程使用。通常,每個線程具有它自己的堆棧,這種堆??梢员环Q為"線程堆棧"。在 本發(fā)明的一個方面,圖2示出了在進程空間224內分配的三個這種線程堆棧218、 220和222,這些線程堆棧是用于外來代碼檢測的候選,因為它們可能引用可能運 行的代碼。諸如ModAuth 204等認證模塊在每個線程堆棧所引用的要執(zhí)行頁面內 檢查外來代碼的存在。例如,ModAuth 204檢査線程堆棧A 218的頁面206和208, 以查看它們是否包含任何外來代碼。它對線程堆棧B310執(zhí)行相同的操作,檢查其 頁面310,并且對線程堆棧C 322檢查其頁面312、 314和316。ModAuth 204嘗試要避免的(如用粗體"X"所示)是檢查包含頁面228、 230、 232和234的其他存儲空間(進程空間)226。由于存儲空間226不是進程空間224 的一部分,其內容228、 230、 232和234將不會被執(zhí)行,因此ModAuth 204無需 在該存儲空間226中檢查任何外來代碼。簡而言之,ModAuth 204檢查潛在地可能 執(zhí)行的這類代碼。在圖2中,ModAuth 204將其對任何外來代碼的搜索限制在進程 空間224的線程堆棧218、 220和222中。這種智能外來代碼檢查導致了極大地改 進的計算機性能,因為處理器無需浪費寶貴的時鐘周期來檢查不會被執(zhí)行的代碼。在本發(fā)明的另一方面,圖3A示出了認證模塊ModAuth 304遍歷線程堆棧,以 獲取可能引用頁面306、 308或310中的外來代碼的返回地址。同樣地,以任何方 式可能最終導致外來代碼執(zhí)行的堆棧上所引用的任何要執(zhí)行代碼值得ModAuth 304檢查。堆棧遍歷僅是獲取對外來代碼引用的一種手段,即通過堆棧上的返回地 址,但可以采用找到對可能執(zhí)行代碼的引用的其它技術。在本領域中堆棧遍歷的概念是公知的,尤其是在調試階段使用時。在該階段, 在提供有關堆??蚣艿男畔?也被稱為激活記錄)及其大小的調試符號的幫助下完成堆棧遍歷,這樣可執(zhí)行可靠的堆棧遍歷。在本發(fā)明的一個方面,ModAuth304遍 歷線程堆棧。具體地,ModAuth304遍歷線程堆棧A318的框架(未示出),檢査 本地變量和引用要執(zhí)行代碼的頁面306和308的返回地址。它對線程堆棧B作出 相同的操作,該線程堆棧包含引用頁面310的返回地址。這樣,ModAuth304可檢査整個進程空間324中的所有線程堆棧。在圖3B中,在本發(fā)明的另一方面,ModAuth304檢查進程空間324的線程堆 棧所引用的隨機頁面。具體地,ModAuth304檢查頁面306,但是并不必然檢查線 程堆棧A318中的頁面308,并且它不檢查線程堆棧B 320中的頁面310。對隨機 頁面的檢查可以在每個指定時間間隔進行或者在特定時間間隔內進行若干次。檢查 實現(xiàn)依賴于運行ModAuth 304功能的系統(tǒng)的性能。換言之,ModAuth 304針對不存 在外來代碼必須認證的越是頻繁,要認證的頁面越是多,就會越多地降低系統(tǒng)性能, 因為更多的計算資源將必須專用于檢測外來代碼。在圖3C中,在本發(fā)明的又一方面,ModAuth 304不僅檢査選定頁面,而且也 檢查鄰近選定頁面的任何可疑頁面。例如,如果ModAuth 304已選擇檢查線程堆 棧A318中的頁面308,那么它可能也要檢查接著要執(zhí)行的頁面,即頁面306。同 樣地,如果ModAuth404已選擇檢查線程堆棧B 320中的頁面310,那么它也可能 要檢査下一頁面,即頁面311。選定頁面可隨機或非隨機地選擇。在任一情況下, 可檢查選定頁面的下一、上一或任何鄰近頁面。在本發(fā)明的另一方面,圖4示出了可對事件處理器函數(shù)以及指向這些函數(shù)的 指針檢查外來代碼,其中函數(shù)通常是計算機系統(tǒng)事件處理器函數(shù)。事件處理器的一 個示例是響應一事件執(zhí)行的函數(shù)或方法。事件可包括(1)用戶動作,諸如鍵擊和 鼠標移動,(2)系統(tǒng)事件,諸如存儲器用完(例如異常處理器函數(shù)),或(3)這 兩者的混合,諸如用戶開啟拼寫檢查器并由系統(tǒng)每分鐘更新拼寫檢查。檢査這些函 數(shù)的完整性是有利的原因在于它們可能在任何時刻被調用執(zhí)行,并由此落入"可能 執(zhí)行的代碼"的類別。典型的事件處理器包括以下函數(shù),但不限于這些示例 onclick (處理當用戶點擊一元時發(fā)生的事件) ondblclick (處理當用戶雙擊一元時發(fā)生的事件) onkeydown (處理當按下按鍵時發(fā)生的事件) onkeypress (處理當用戶按下字母數(shù)字鍵時發(fā)生的事件) onkeyup (處理當放開按鍵時發(fā)生的事件) onmousemove (處理當用戶在一元上移動鼠標指針時發(fā)生的事件) onmouseout (處理當用戶將指針從一元上移開時發(fā)生的事件) 這些僅是許多事件處理函數(shù)中的一些,這些事件處理函數(shù)可預防外來代碼以改進程序的行為完整性。在圖4中,示出了三種類型的事件用戶413可通過按鍵或鼠標移動401來 創(chuàng)建事件,窗口系統(tǒng)414程序可以發(fā)生403;或者可由用戶實施定時器例程415并 由系統(tǒng)更新505。這些事件由一些運行中的應用程序404處理,應用程序404具有 指向這些函數(shù)的指針以處理這些事件。例如,在定時器例程415事件時,應用程序 404處理該事件并通過指針416調用Spell—Checker—Routine() 406。這個例程406 會每隔60秒鐘執(zhí)行拼寫檢查。ModAuth 408通過檢査(418)指向像Spell—Checker—Routine() 406等的事件處 理函數(shù)的指針416,并檢査(420)例程406本身即檢查包含例程406的頁面來預 防任何外來代碼滲入。換而言之,黑客412可能改變(426)指向指定例程(在所 示示例中為Spell—Checker—Routine() 406)的指針416,從而指針416將指向(422) 某個外來代碼410而不再指向指定例程406。同樣地,黑客412可能侵入(428) 指定例程406,使得這個例程406引用(424)某個外來代碼410,或者黑客412 可能將某個外來代碼插入例程本身406。如果ModAuth 408要保護系統(tǒng)代碼的完整 性,則它必須預防這種侵入情況。預防這些情況的原因在于事件處理代碼將響應可 能發(fā)生的特定事件而運行。不會指示ModAuth 408來認證將不運行的代碼,而是 相反會指示ModAuth 408來認證將運行或可能運行的代碼,因為這些代碼可能潛 在地調用外來代碼。在本發(fā)明的又一個方面,圖5示出了檢查計算機系統(tǒng)的指令指針(或程序計 數(shù)器)以及它所指向的代碼。指令指針504是寄存器,它指向(506)要從存儲器 加載并接著執(zhí)行的下一指令512。指令指針504 —般存儲在處理器502中。認證模塊(未示出)可檢查指令指針504是否被改寫以指向(514)某個外來 代碼516,或者它是否指向(506)下一個要執(zhí)行的指令512,但是該指令實際上是 某個外來代碼516且不是指定代碼518。由于指令指針指向(506)將要執(zhí)行的指 令,因此檢查是否可能經由指令指針執(zhí)行外部代碼是合乎需要的。檢查事件處理函數(shù)和代碼所引用的指令指針只是需要檢查的這類代碼中的一 些示例,即可能運行的代碼。這對于包括動態(tài)鏈接庫、子系統(tǒng)程序(例如負責窗口操作的那些程序)等也成立。本領域技術人員會理解對這種可能運行代碼的檢査, 而不管檢查(存儲在頁面上的)代碼的標準是基于事件處理、指令指示、動態(tài)鏈接 庫、還是窗口子系統(tǒng)等。 檢查頁面出錯歷史頁面出錯是當程序請求當前不在物理存儲器中的代碼或數(shù)據時發(fā)生的中斷。 該中斷觸發(fā)操作系統(tǒng)從諸如磁盤驅動器等某個外部存儲器中獲取代碼或數(shù)據,并將 其加載到諸如RAM等物理存儲器中。該情況不同于無效頁面出錯或頁面出錯錯誤, 后兩者是在當操作系統(tǒng)在由物理存儲器和至少某些部分的外部存儲器組成的虛擬 存儲器中找不到代碼或數(shù)據時發(fā)生。這通常在虛擬存儲區(qū)域或將虛擬地址映射到實 際地址的表格發(fā)生損壞時發(fā)生。當發(fā)生頁面出錯時,創(chuàng)建其歷史和所有其他頁面出錯。該歷史包含有關哪個 頁面被頁入到物理存儲器中以及哪個代碼請求頁入特定頁面的信息。當頁面被頁入 到物理存儲器時,很有可能執(zhí)行頁面中的代碼。因此,檢查頁面出錯歷史是尋找潛 在外來代碼的有效方式,因為頁面中的代碼和請求頁面的代碼可能被執(zhí)行,且也可 能是外來代碼或至少包含某些外來代碼。圖6示出了檢查頁面出錯歷史600。虛擬存儲器602是擴展物理存儲器604 的一種方式。這種擴展是通過硬盤606的協(xié)助來完成的。通過在物理存儲器604 與硬盤606之間交換(618)頁面614,在程序看來物理存儲器604比其實際的要 大,即其大小是虛擬存儲器602的大小。虛擬存儲器602是物理存儲器604和硬盤 606的頁面文件608的總和。因此,硬盤606可包含分割出來以供虛擬存儲器602 使用的單獨磁盤空間610。頁面出錯歷史620維護哪些頁面614被頁入到物理存儲器604中、以及哪個 調用者612請求(616)將特定頁面614頁入的記錄。通過檢查頁面出錯歷史620, 認證模塊ModAuth 722能知道要檢查物理存儲器604中的哪些頁面。同樣地,基 于頁面出錯歷史620, ModAuth 722能知道哪個代碼請求頁入特定頁面。如上所述,ModAuth 622會想要檢査頁入頁面的原因在于它將很可能被執(zhí)行。 此外,通過檢查頁面出錯歷史620, ModAuth 622也能夠檢查請求頁面614的調用 者612。如果調用者612是不期望駐留在物理存儲器中的某個外來代碼,那么它可 能頁入某個其它的外來或惡意代碼。本發(fā)明一方面的示例性實現(xiàn)在圖7中,示出了本發(fā)明一方面的示例性實現(xiàn)。具體地,在框702,認證模塊檢查當前線程堆棧所引用的頁面。這些頁面上的代碼將被執(zhí)行或可能被執(zhí)行,因此 檢查它對防止外來代碼滲入是重要的。接著,在框704,認證模塊檢查進程空間內其他線程堆棧所引用的頁面,因為在任何環(huán)境切換時,這些其他線程堆棧中的任一個可能被調用,且它們所引用的代 碼將被或者至少是可能被執(zhí)行。同樣,在框706,檢查可能調用的任何函數(shù)以及指向他們的指針。這些函數(shù)可 能是基于某個用戶事件、計算機系統(tǒng)事件或其組合調用的事件處理函數(shù)。由于可能 基于一指定事件調用事件處理函數(shù),因此檢查這些函數(shù)以防外來代碼滲入是重要 的。換而言之,檢查這些函數(shù)所駐留的頁面是重要的。在框708,檢査指令指針。由于該指針指向在當前執(zhí)行指令之后將要執(zhí)行的代 碼,因此檢査和確定指令指針是被侵入而指向外來代碼,還是指向可能被侵入并由 此包含外來代碼(由此可能進一步引用外來代碼等)的正確指令集是重要的。在框710,檢查頁面出錯歷史。從硬盤上的頁面文件被頁入到物理存儲器中的 頁面是將可能運行的頁面,因此對其檢査外來代碼。此外,也檢査請求頁入這些頁 面的任何調用代碼。這種調用代碼可能是調用更多外來代碼的外來代碼。在框712,如果這種代碼被認為是外來代碼,則本發(fā)明的這個方面至少執(zhí)行一 個動作以防止執(zhí)行代碼。這種動作可以包括在某個隨機時間點使得系統(tǒng)出錯、使得 進程被終止并從存儲器卸載、信令另一進程終止或改變行為,或者觸發(fā)顯示用戶界 面。在框714,示例性實現(xiàn)在某個指定時間段之后再次執(zhí)行檢查。該時間段對于每 次反復檢查可能在長度上都一樣,或者它可能是任意的。這大部分是基于性能考慮, 因為認證模塊越是必須頻繁地檢査外來代碼,運行該模塊的系統(tǒng)就會越慢。此外, 這種外來代碼檢測模塊并非必須檢查所有將運行或潛在地可能運行的代碼,而是它 可以僅檢查任何可執(zhí)行代碼或可能被調用的代碼的幾個頁面。雖然如各個附圖中所示已結合優(yōu)選方面描述了本發(fā)明,應該理解可以使用其 他類似的方面,或者可以對所描述的方面作出修改或增加以執(zhí)行本發(fā)明相同的功能 而不背離于此。例如,描述了外來代碼檢測,其中檢查將運行和可能運行的代碼以 確定外來代碼的存在。這種外來代碼檢測的一個示例包括檢查引用帶有代碼的頁面 的給定進程空間中的當前堆棧線程;其他示例包括檢查隨機頁面和鄰近頁面。然而, 通過這里的示教也可構想這些所描述方面的其他等效方法。因此,本發(fā)明不應限于 任何單個方面,而是應該在廣度和范圍上根據所附權利要求來解釋。
權利要求
1.一種檢測對執(zhí)行外來代碼的嘗試的方法,包括基于關于包含在存儲器的頁面中的代碼將被執(zhí)行的可能性的標準來標識包含所述代碼的存儲器的頁面;驗證所述代碼是否滿足完整性測試;以及如果所述代碼不滿足所述完整性測試,則采取至少一個動作來防止代碼執(zhí)行。
2. 如權利要求l所述的方法,其特征在于,所述標準是引用所述頁面的線程 堆棧。
3. 如權利要求2所述的方法,其特征在于,所述頁面是隨機選擇的。
4. 如權利要求2所述的方法,其特征在于,還包括所述線程堆棧引用的附加 頁面,其中所述附加頁面鄰近所述頁面,其中所述附加頁面是基于所述標準標識的、并由所述完整性測試驗證、且如果所述附加頁面上的所述代碼不滿足所述完整性測 試則采取預防動作。
5. 如權利要求l所述的方法,其特征在于,所述標準是將所述頁面標識為被 頁入到物理存儲器、以及調用要被頁入的所述頁面的任何調用代碼的頁面出錯歷 史。
6. 如權利要求l所述的方法,其特征在于,所述標準包括事件處理代碼,其 中可以基于用戶事件、計算機系統(tǒng)事件或它們的組合中的任一個來調用所述事件處 理代碼。
7. 如權利要求l所述的方法,其特征在于,所述標準包括由指令指針引用的 頁面。
8. 如權利要求l所述的方法,其特征在于,所述標準包括包含動態(tài)鏈接庫函 數(shù)的頁面。
9. 如權利要求l所述的方法,其特征在于,所述完整性測試包括檢查所述頁 面的散列是否匹配一存儲的散列。
10. 如權利要求1所述的方法,其特征在于,所述防止代碼執(zhí)行的至少一個動作是以下之一在某個隨機時間點使得系統(tǒng)出錯、使得一進程被終止并從存儲器卸載、通知另一進程終止或改變行為、或者觸發(fā)顯示用戶界面。
11. 一種用于檢測對執(zhí)行外來代碼的嘗試的系統(tǒng),包括一代碼,其中所述代碼包含計算機可執(zhí)行指令;一存儲器頁面,其中所述代碼駐留在所述頁面上,其中所述頁面駐留在計算 機系統(tǒng)的進程空間中;一認證模塊,其中所述認證模塊基于關于包含在所述頁面中的所述代碼將被 執(zhí)行的可能性的標準來標識所述頁面,其中所述認證模塊驗證所述代碼是否滿足完 整性測試;如果所述代碼不滿足所述完整性測試,則所述認證模塊采取至少一個動 作來防止代碼執(zhí)行。
12. 如權利要求11所述的系統(tǒng),其特征在于,所述標準是引用所述頁面的線 程堆棧。
13. 如權利要求12所述的系統(tǒng),其特征在于,所述頁面是隨機選擇的。
14. 如權利要求12所述的系統(tǒng),其特征在于,還包括由所述線程堆棧引用的 附加頁面,其中所述附加頁面鄰近所述頁面,其中所述附加頁面是基于所述標準標 識的、并由所述完整性測試驗證、且如果所述附加頁面上的所述代碼不滿足所述完 整性測試則采取預防動作。
15. 如權利要求11所述的系統(tǒng),其特征在于,所述標準是將所述頁面標識為 被頁入到物理存儲器、以及調用要被頁入的所述頁面的任何調用代碼的頁面出錯歷 史。
16. 如權利要求11所述的系統(tǒng),其特征在于,所述標準包括事件處理代碼, 其中可以基亍用戶事件、計算機系統(tǒng)事件或它們的組合中的任一個來調用所述事件 處理代碼。
17. 如權利要求11所述的系統(tǒng),其特征在于,所述標準包括由指令指針引用 的頁面。
18. 如權利要求11所述的系統(tǒng),其特征在于,所述標準包括包含動態(tài)鏈接庫 函數(shù)的頁面。
19. 如權利要求11所述的系統(tǒng),其特征在于,所述完整性測試包括檢查所述 頁面的散列是否匹配一存儲的散列。
20. 如權利要求U所述的系統(tǒng),其特征在于,所述防止代碼執(zhí)行的至少一個 動作是以下之一在某個隨機時間點使得系統(tǒng)出錯、使得一進程被終止并從存儲器 卸載、通知另一進程終止或改變行為,或者觸發(fā)顯示用戶界面。
全文摘要
介紹了一種用于有效外來代碼檢測的方法和系統(tǒng)。在本發(fā)明的一個方面,認證模塊檢查進程空間中線程堆棧所引用的頁面,其中這些頁面可能包含外來代碼。模塊可以遍歷線程堆棧以檢查引用這種頁面的返回地址。在另一方面,模塊檢查堆棧所引用的隨機頁面。在又一方面,模塊檢查堆棧所引用的經檢查頁面的任何鄰近可疑頁面。此外,模塊檢查指令指針所引用的頁面,頁面出錯歷史所描述的頁面和調用代碼、以及具有事件處理函數(shù)、動態(tài)鏈接庫函數(shù)或可能要運行的其他函數(shù)的任何頁面。
文檔編號G06F12/14GK101405705SQ200680007679
公開日2009年4月8日 申請日期2006年4月6日 優(yōu)先權日2005年4月8日
發(fā)明者K·豪特樂利得, U·隆頓, V·A·舒賓 申請人:微軟公司