專利名稱:用于修復(fù)應(yīng)用程序的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明總體上涉及用于對(duì)多種軟件錯(cuò)誤做出反應(yīng)的方法。更具體 地,本發(fā)明涉及用于從軟件故障和攻擊自動(dòng)恢復(fù)的方法和系統(tǒng)。
背景技術(shù):
應(yīng)用程序可能會(huì)由于任意數(shù)量的威脅、程序錯(cuò)誤、軟件故障、攻 擊或任何合適的軟件錯(cuò)誤而終止。計(jì)算機(jī)病毒、蠕蟲(chóng)、木馬、黑客、 密鑰恢復(fù)攻擊、惡意可執(zhí)行程序、探測(cè)器等等是對(duì)連接到公共計(jì)算機(jī) 網(wǎng)絡(luò)(例如互聯(lián)網(wǎng))和/或?qū)S镁W(wǎng)絡(luò)(例如公司計(jì)算機(jī)網(wǎng))上的計(jì)算機(jī) 的用戶的持續(xù)威脅。響應(yīng)于這些威脅,許多計(jì)算機(jī)被防病毒軟件和防 火墻保護(hù)起來(lái)。但是,這些保護(hù)措施并不總是足夠的。例如,許多服 務(wù)在面臨遠(yuǎn)程攻擊、大量事件(例如,快速散播的蠕蟲(chóng)例如Slammer 和Blaster)、或簡(jiǎn)單的應(yīng)用層的拒絕服務(wù)(DoS )攻擊必須保持高的 可用性。
除了這些威脅之外,應(yīng)用程序通常包含操作期間的錯(cuò)誤,該錯(cuò)誤 通常由程序員錯(cuò)誤產(chǎn)生。不管應(yīng)用程序是被一個(gè)上述威脅攻擊還是包 含操作期間的錯(cuò)誤,這些軟件故障和錯(cuò)誤都會(huì)導(dǎo)致非法存儲(chǔ)器訪問(wèn)錯(cuò) 誤、被零除錯(cuò)誤、緩沖溢出攻擊等等。這些錯(cuò)誤導(dǎo)致應(yīng)用程序終止其 執(zhí)行或"崩潰"。
已經(jīng)提出例如實(shí)現(xiàn)提前主動(dòng)方法的解決方案,該提前主動(dòng)方法試 圖通過(guò)使用安全語(yǔ)言、庫(kù)和編譯器、代碼分析工具和開(kāi)發(fā)方法使該代碼盡可能地可靠。還提出了試圖使后續(xù)故障分析和恢復(fù)對(duì)于程序員盡
可能容易的調(diào)試幫助。已經(jīng)提出Byzantine容錯(cuò)方案,該方法在多個(gè) 服務(wù)實(shí)例中使用投票來(lái)選擇正確的答案。但是,這些容錯(cuò)方案在僅有 少量副本將表現(xiàn)出故障行為的假設(shè)下操作。實(shí)際上,解決此問(wèn)題的許 多這些方法通常是提前主動(dòng)的,但是這些策略不會(huì)產(chǎn)生無(wú)錯(cuò)誤代碼。 這些解決方案通常是有問(wèn)題的,例如系統(tǒng)性能降低、單調(diào)和麻煩的用 戶互動(dòng)、以及自發(fā)的拒絕服務(wù)(即,當(dāng)檢測(cè)到溢出時(shí),唯一的可選擇 方案是終止應(yīng)用程序)。另外,對(duì)于服務(wù)器應(yīng)用程序,由于服務(wù)器應(yīng) 用程序通常長(zhǎng)期運(yùn)行(累積了相當(dāng)多的狀態(tài)量),并且通常包含服務(wù) 于許多遠(yuǎn)程用戶的多個(gè)線程,服務(wù)器應(yīng)用程序往往不能被簡(jiǎn)單地重 啟。重啟服務(wù)器將拒絕對(duì)其他用戶的服務(wù)。結(jié)果,軟件糟糕地保持了 很多缺陷多并且很容易崩潰。此外,這些解決方案不適合于高性能、 高可用性環(huán)境例如被頻繁訪問(wèn)的電子商務(wù)網(wǎng)絡(luò)服務(wù)器。
另外,這些應(yīng)用程序可安裝在多種平臺(tái),例如個(gè)人數(shù)字助理 (PDA)、移動(dòng)電話或汽車個(gè)人電腦上。例如,開(kāi)放式平臺(tái)操作系統(tǒng) 已被用于汽車個(gè)人電腦,以允許用戶安裝已經(jīng)為該平臺(tái)設(shè)計(jì)的第三方 應(yīng)用程序。這些應(yīng)用程序也容易遭受軟件錯(cuò)誤。盡管目前為這些平臺(tái) 開(kāi)發(fā)出了防病毒程序以保護(hù)應(yīng)用程序不受這種錯(cuò)誤影響,但是它們通 常需要用戶交互(例如,下栽補(bǔ)丁或者另一種應(yīng)用程序,將該設(shè)備連 接到個(gè)人計(jì)算機(jī),等等),并且由于占用了平臺(tái)的已經(jīng)很有限的空間、 存儲(chǔ)器和傳輸帶寬而降低了系統(tǒng)性能。
因此,本領(lǐng)域中需要提供一種用于處理多種軟件錯(cuò)誤的反應(yīng)性更 高的和自動(dòng)的方法,以便應(yīng)用程序可從這種錯(cuò)誤中恢復(fù)而無(wú)需用戶干 涉,并且不會(huì)降低系統(tǒng)性能。
因此,希望提供克服現(xiàn)有技術(shù)的這些以及其他缺點(diǎn)的方法和系統(tǒng)。
發(fā)明內(nèi)容
根據(jù)本發(fā)明的一些實(shí)施例,提供了 一種使應(yīng)用程序可從軟件錯(cuò)誤和攻擊中自動(dòng)恢復(fù)的自愈式系統(tǒng)和方法。通過(guò)選擇性地模擬應(yīng)用程序 代碼的全部或一部分,或者檢測(cè)到已經(jīng)發(fā)生故障,如對(duì)于該故障類型 適當(dāng)?shù)兀到y(tǒng)立即圍繞檢測(cè)到的故障使操作數(shù)對(duì)于機(jī)器指令有效。系 統(tǒng)通過(guò)糾錯(cuò)模擬應(yīng)用程序代碼的 一部分。這可通過(guò)更新應(yīng)用程序代碼 或者通過(guò)非入侵的手段(例如,通過(guò)包裝或調(diào)試器類型的過(guò)程控制) 實(shí)現(xiàn)。這增加了在存在一般軟件錯(cuò)誤、軟件錯(cuò)誤和攻擊(例如,計(jì)算 機(jī)病毒、蠕蟲(chóng)、木馬、黑客、密鑰恢復(fù)攻擊、惡意可執(zhí)行程序、探測(cè) 器、拒絕服務(wù)攻擊、資源消耗攻擊、緩沖溢出、緩沖下溢、非法存儲(chǔ)
器訪問(wèn)、被零除、檢查時(shí)間到使用時(shí)間(TOCTTOU)違規(guī)和/或程序 設(shè)計(jì)錯(cuò)誤的情況下的服務(wù)可用性。
在一些實(shí)施例中,提供了 一種用于檢測(cè)應(yīng)用程序并且從軟件錯(cuò)誤 中修復(fù)應(yīng)用程序的方法和系統(tǒng)。使用一個(gè)或多個(gè)傳感器(例如,基于 主機(jī)的傳感器、無(wú)源傳感器、蜜罐(honeypot)等等)監(jiān)控該應(yīng)用程 序的故障情況。根據(jù)本發(fā)明的一些實(shí)施例,傳感器可以是在模擬該應(yīng) 用程序的單獨(dú)服務(wù)器上實(shí)現(xiàn)的蜜罐。
響應(yīng)于檢測(cè)到錯(cuò)誤,導(dǎo)致該錯(cuò)誤的應(yīng)用程序代碼部分被隔離。使 用導(dǎo)致該錯(cuò)誤的輸入向量、關(guān)于該錯(cuò)誤的信息(例如,錯(cuò)誤類型)、 核心轉(zhuǎn)儲(chǔ)文件(例如,堆棧跟蹤)等等,構(gòu)造修復(fù)該錯(cuò)誤的基于仿真 器的免疫程序。響應(yīng)于驗(yàn)證到該免疫程序已修復(fù)該錯(cuò)誤,使用該基于 仿真器的免疫程序更新該應(yīng)用程序。
可選地,該傳感器可分析應(yīng)用程序的代碼,并且預(yù)測(cè)代碼的哪一 部分易發(fā)生影響,或者代碼的哪一部分具有較高的表現(xiàn)出某一特定錯(cuò) 誤的可能性。
根據(jù)本發(fā)明的 一 些實(shí)施例,提供了 一種創(chuàng)建應(yīng)用程序組以有效地 使用軟件單一系統(tǒng)內(nèi)的可用資源的系統(tǒng)和方法。這些組合的資源可被 用于為應(yīng)用程序組的每個(gè)成員提供保護(hù),同時(shí)在組的所有成員之間分 攤檢測(cè)和分析錯(cuò)誤的(例如,計(jì)算、存儲(chǔ)、磁盤(pán)等等)成本。
在一些實(shí)施例中,可定義包含多個(gè)設(shè)備(例如,工作站、服務(wù)器 等等)的應(yīng)用程序組。應(yīng)用程序的代碼可被劃分成較小的代碼部分,其被指定用于監(jiān)控多個(gè)設(shè)備中的每一個(gè)。應(yīng)注意,該代碼部分可被靜 態(tài)分配、隨機(jī)分配、加權(quán)分配、自愿分配和交易型分配指定。還應(yīng)注 意,用于指定進(jìn)行監(jiān)控的代碼部分的其它合適的方法也可與上述方法 一起使用或者代替上述方法??蛇x地,不是指定代碼部分,而是可為 多個(gè)設(shè)備中的每一個(gè)指定特定錯(cuò)誤。
響應(yīng)于接收到指定的代碼部分,每個(gè)設(shè)備在應(yīng)用程序的本地實(shí)例 中監(jiān)控應(yīng)用程序的代碼的指定部分的錯(cuò)誤情況,響應(yīng)于檢測(cè)到該錯(cuò)誤 分析該代碼的指定部分,并且構(gòu)造修復(fù)該錯(cuò)誤的基于仿真器的免疫程 序。響應(yīng)于驗(yàn)證到該免疫程序已修復(fù)該錯(cuò)誤的情況,每個(gè)設(shè)備用該基 于仿真器的免疫程序更新該應(yīng)用程序,并且將該錯(cuò)誤告知其它設(shè)備。
已經(jīng)概述而不是廣泛地說(shuō)明本發(fā)明的較主要的特征,以便下文對(duì) 本發(fā)明的詳細(xì)說(shuō)明可被更好地理解,并且對(duì)本領(lǐng)域的貢獻(xiàn)可被更好地 理解。當(dāng)然,存在下文將說(shuō)明的并且將形成所附權(quán)利要求的主旨的本 發(fā)明的附加特征。
在此方面,在詳細(xì)說(shuō)明本發(fā)明的至少一個(gè)實(shí)施例之前,應(yīng)理解, 本發(fā)明在應(yīng)用中并不局限于下文說(shuō)明書(shū)內(nèi)闡述的或附圖中示出的構(gòu) 造的細(xì)節(jié)和部件的設(shè)置。本發(fā)明能夠具有其它實(shí)施例,并且以多種方 式實(shí)踐和實(shí)現(xiàn)。另外,還應(yīng)理解,文中使用的用語(yǔ)和術(shù)語(yǔ)是為了說(shuō)明 而不應(yīng)被認(rèn)為是限制性的。
因此,本領(lǐng)域技術(shù)人員應(yīng)理解,作為公開(kāi)內(nèi)容的基礎(chǔ)的概念可被 容易地實(shí)現(xiàn)為用于實(shí)現(xiàn)本發(fā)明的一些目的的其它結(jié)構(gòu)、方法和系統(tǒng)的 設(shè)計(jì)基礎(chǔ)。因此,重要地是,權(quán)利要求被認(rèn)為包含不背離本發(fā)明的精 神和范圍的等同構(gòu)造。
這些以及本發(fā)明的其它目標(biāo)和作為本發(fā)明的特征的多種新穎特 征在所附的并且形成此公開(kāi)的 一部分的權(quán)利要求內(nèi)被具體指出。為了 更好地理解本發(fā)明、其操作優(yōu)點(diǎn)和通過(guò)其使用獲得的特定目標(biāo),應(yīng)參 考示出本發(fā)明的優(yōu)選實(shí)施例的附圖和描述內(nèi)容。
結(jié)合附圖參照下文對(duì)本發(fā)明的詳細(xì)說(shuō)明可更充分地理解本發(fā)明 的各種目標(biāo)、特征和優(yōu)點(diǎn),在附圖中類似的標(biāo)號(hào)指示類似的元件。
圖1是根據(jù)本發(fā)明的一些實(shí)施例的適合于監(jiān)控其它應(yīng)用程序并 且保護(hù)這些應(yīng)用程序免于發(fā)生錯(cuò)誤的應(yīng)用程序的實(shí)現(xiàn)的示例性系統(tǒng) 的示意圖。
圖2是可根據(jù)本發(fā)明的一些實(shí)施例使用的圖1的服務(wù)器和工作站 之一的詳細(xì)示例。
圖3示出根據(jù)本發(fā)明的一些實(shí)施例的修復(fù)應(yīng)用程序中的故障并 且更新該應(yīng)用程序的簡(jiǎn)化流程圖。
圖4是示出根據(jù)本發(fā)明的一些實(shí)施例的響應(yīng)于故障發(fā)生進(jìn)行檢 測(cè)并修復(fù)應(yīng)用程序的簡(jiǎn)化流程圖。
圖5示出根據(jù)本發(fā)明的一些實(shí)施例的集成在已有應(yīng)用程序內(nèi)的 仿真代碼的示例性示例。
圖6是示出根據(jù)本發(fā)明的一些實(shí)施例的使用應(yīng)用程序組檢測(cè)和 修復(fù)應(yīng)用程序的簡(jiǎn)化流程圖。
圖7是示出根據(jù)本發(fā)明的一些實(shí)施例的可被用于分布式投標(biāo)的 多個(gè)應(yīng)用程序組計(jì)算出的表的示例性示例。
具體實(shí)施例方式
在下文將說(shuō)明關(guān)于本發(fā)明的方法和系統(tǒng)以及這種方法和系統(tǒng)可 在其中操作的環(huán)境等等的許多特定細(xì)節(jié),以便更透徹地理解本發(fā)明。 但是,對(duì)于本領(lǐng)域技術(shù)人員來(lái)說(shuō)很明顯的是,本發(fā)明可被實(shí)現(xiàn)為不具 有這些特定細(xì)節(jié),并且沒(méi)有詳細(xì)說(shuō)明本領(lǐng)域內(nèi)公知的一些特征以避免 使本發(fā)明的主題復(fù)雜化。另外,應(yīng)理解,下文提供的示例僅是示例性 的,并且可想到,在本發(fā)明的范圍內(nèi)存在其他的方法和系統(tǒng)。
圖l是適合于實(shí)現(xiàn)根據(jù)本發(fā)明的一些實(shí)施例的用于監(jiān)控、修復(fù)和 更新其他應(yīng)用程序的應(yīng)用程序的示例性系統(tǒng)100的示意圖。參照?qǐng)D1, 示出用于實(shí)現(xiàn)本發(fā)明的示例性系統(tǒng)100。如圖所示,系統(tǒng)100可包括 一個(gè)或多個(gè)工作站102。工作站102可相互是本地的,或者相互遠(yuǎn)離,并且通過(guò)一個(gè)或多個(gè)通信鏈路104連接到通信網(wǎng)絡(luò)106,該通信網(wǎng)絡(luò) 106通過(guò)通信鏈路108連接到服務(wù)器110。
在系統(tǒng)100中,服務(wù)器110可以是任何適合于執(zhí)行應(yīng)用程序的服 務(wù)器例如處理器、計(jì)算機(jī)、數(shù)據(jù)處理設(shè)備或這些設(shè)備的組合。通信網(wǎng) 絡(luò)106可以是任何合適的計(jì)算機(jī)網(wǎng)絡(luò),包括互聯(lián)網(wǎng)、內(nèi)聯(lián)網(wǎng)、廣域網(wǎng) (WAN)、局域網(wǎng)(LAN)、無(wú)線網(wǎng)絡(luò)、數(shù)字用戶線(DSL)網(wǎng)絡(luò)、 幀中繼網(wǎng)絡(luò)、異步傳送模式(ATM)網(wǎng)絡(luò)、虛擬專用網(wǎng)絡(luò)(VPN)或 它們的任何組合。通信鏈路104和108可以是適合于在工作站102和 服務(wù)器UO之間傳輸數(shù)據(jù)的任何通信鏈路,如網(wǎng)絡(luò)鏈路、撥號(hào)鏈路、 無(wú)線鏈路、硬連線鏈路等等。工作站102可以是個(gè)人計(jì)算機(jī)、膝上型 計(jì)算機(jī)、主計(jì)算機(jī)、啞終端、數(shù)據(jù)顯示器、互聯(lián)網(wǎng)瀏覽器、個(gè)人數(shù)字 助理(PDA)、雙向式尋呼機(jī)、無(wú)線終端、便攜電話等等或者它們的 任何組合。工作站102和服務(wù)器110可被設(shè)置在任何合適的位置。在 一個(gè)實(shí)施例中,工作站102和服務(wù)器IIO可被設(shè)置在一個(gè)機(jī)構(gòu)內(nèi)。可 選地,工作站102和服務(wù)器IIO可被安置在多個(gè)機(jī)構(gòu)內(nèi)。
圖1內(nèi)所示的服務(wù)器和一個(gè)工作站在圖2內(nèi)被更詳細(xì)地示出。參 照?qǐng)D2,工作站102可包括處理器202、顯示器204、輸入設(shè)備206和 存儲(chǔ)器208,它們可互連。在一個(gè)優(yōu)選實(shí)施例中,存儲(chǔ)器208包含存 儲(chǔ)用于控制處理器202的工作站程序的存儲(chǔ)設(shè)備。存儲(chǔ)器208還可包 括用于檢測(cè)應(yīng)用程序并從錯(cuò)誤中修復(fù)應(yīng)用程序的應(yīng)用程序。在一些實(shí) 施例中,該應(yīng)用程序可位于工作站102或服務(wù)器110的存儲(chǔ)器內(nèi)。
在一個(gè)具體實(shí)施例中,該應(yīng)用程序可包括客戶端一側(cè)的軟件、硬 件或這二者。例如,應(yīng)用程序可包含一個(gè)或多個(gè)網(wǎng)頁(yè)或網(wǎng)頁(yè)部分(例 如經(jīng)由任何合適的編碼,如超文本鏈接標(biāo)記語(yǔ)言(HTML)、動(dòng)態(tài)超 文本鏈接標(biāo)記語(yǔ)言(DHTML)、可擴(kuò)展標(biāo)記語(yǔ)言(XML) 、 Java服 務(wù)器端網(wǎng)頁(yè)(JSP)、動(dòng)態(tài)服務(wù)器網(wǎng)頁(yè)(ASP)、冷融合或任何其他 合適的方法)。
盡管應(yīng)用程序在文中被描述為在工作站上實(shí)現(xiàn),但是這僅是示例 性的。應(yīng)用程序可在任何合適的平臺(tái)(例如個(gè)人計(jì)算機(jī)(PC)、主機(jī)計(jì)算機(jī)、啞終端、數(shù)據(jù)顯示器、雙路尋呼機(jī)、無(wú)線終端、便攜式電話、
便攜式計(jì)算機(jī)、掌上型電腦、H/PC、汽車計(jì)算機(jī)、膝上型計(jì)算機(jī)、個(gè) 人數(shù)字助理(PDA)、組合的蜂窩式電話和PDA等等)上實(shí)現(xiàn)以提 供這種特征。
處理器202可使用工作站程序在顯示器204上顯示該應(yīng)用程序、 通過(guò)通信鏈路104接收到的數(shù)據(jù)、以及工作站102的用戶發(fā)送的命令 和數(shù)值。應(yīng)注意,通過(guò)通信鏈路10或任何其它通信鏈路接收到的數(shù) 據(jù)可從任何合適的源例如網(wǎng)絡(luò)服務(wù)接收到。輸入設(shè)備206可以是計(jì)算 機(jī)鍵盤(pán)、光標(biāo)控制器、撥號(hào)盤(pán)、轉(zhuǎn)換開(kāi)關(guān)組、杠桿或可被輸入系統(tǒng)或 處理控制系統(tǒng)的設(shè)計(jì)者使用的任何其它合適的輸入設(shè)備。
服務(wù)器110可包括處理器220、顯示器222、輸入設(shè)備224和存 儲(chǔ)器226,它們可互連。在一個(gè)優(yōu)選實(shí)施例中,存儲(chǔ)器226包含用于 存儲(chǔ)通過(guò)通信鏈路108或通過(guò)其他鏈路接收到的數(shù)據(jù)的存儲(chǔ)設(shè)備,并 且還接收由一個(gè)或多個(gè)用戶所發(fā)送的命令和數(shù)值。該存儲(chǔ)設(shè)備還包括 用于控制控制器220的服務(wù)器程序。
一般來(lái)說(shuō),本發(fā)明涉及用于檢測(cè)應(yīng)用程序內(nèi)的故障,并且在檢測(cè) 到故障時(shí)禁止和/或防止該故障在該應(yīng)用程序未來(lái)的執(zhí)行中發(fā)生的方 法和系統(tǒng)。應(yīng)注意,術(shù)語(yǔ)"應(yīng)用程序,,和"服務(wù),,在文中可相互交換地使 用。例如,如下文所述,可使用一個(gè)或多個(gè)針對(duì)特定類型故障的軟件 監(jiān)視程序監(jiān)控應(yīng)用程序或服務(wù)。應(yīng)注意,術(shù)語(yǔ)"故障"、"攻擊"和"錯(cuò) 誤,,在文中可相互交換地使用。例如,如下文所述,系統(tǒng)用于對(duì)多種 軟件錯(cuò)誤、故障和攻擊做出反應(yīng)。這些軟件錯(cuò)誤和攻擊包括例如非法 存儲(chǔ)器訪問(wèn)、被零除和緩沖溢出(更一般地說(shuō),control hijacking)攻 擊。
根據(jù)本發(fā)明的一些實(shí)施例,提供了使應(yīng)用程序能夠從軟件錯(cuò)誤和 攻擊中自動(dòng)恢復(fù)的自愈系統(tǒng)。通過(guò)當(dāng)系統(tǒng)檢測(cè)到發(fā)生故障時(shí)選擇性地 模擬應(yīng)用程序代碼的一部分或全部,對(duì)于該故障類型合適地,系統(tǒng)圍 繞檢測(cè)到的故障使操作數(shù)對(duì)于機(jī)器指令有效。該系統(tǒng)通過(guò)糾錯(cuò)模擬應(yīng) 用程序代碼的一部分,并且更新該應(yīng)用程序。這增加了在存在普通軟件缺陷、軟件錯(cuò)誤、攻擊的情況下的服務(wù)可用性。
轉(zhuǎn)到圖3和4,提供了示出根據(jù)本發(fā)明的一些實(shí)施例的檢測(cè)應(yīng)用 程序內(nèi)的故障并糾錯(cuò)該應(yīng)用程序時(shí)執(zhí)行的各個(gè)步驟的簡(jiǎn)化流程圖。它 們是概括性的流程圖。應(yīng)當(dāng)理解,圖3和圖4中所示的步驟可以以適 當(dāng)?shù)捻樞驁?zhí)行,某些步驟可以被去除,也可以添加其它步驟。
通常,過(guò)程300從在步驟310中檢測(cè)一個(gè)或多個(gè)應(yīng)用程序內(nèi)的各 種類型的錯(cuò)誤開(kāi)始。在一些實(shí)施例中,故障錯(cuò)誤可包括監(jiān)控一個(gè)或多 個(gè)應(yīng)用程序的錯(cuò)誤情況。在一些實(shí)施例中,可在步驟310中使用一個(gè) 或多個(gè)傳感器執(zhí)行對(duì)錯(cuò)誤的監(jiān)控或檢測(cè)。如前文所述的,錯(cuò)誤包括程 序設(shè)計(jì)錯(cuò)誤、異常、軟件故障(例如,非法存儲(chǔ)器訪問(wèn)、被零除、援 沖溢出攻擊、檢查時(shí)間到使用時(shí)間(TOCTTOU)違規(guī)等等)、威脅 (例如,計(jì)算機(jī)病毒、蠕蟲(chóng)、木馬、黑客、密鑰恢復(fù)攻擊、惡意可執(zhí) 行程序、探測(cè)器等等)、以及會(huì)導(dǎo)致異常的應(yīng)用程序終止或?qū)σ粋€(gè)或 多個(gè)應(yīng)用程序產(chǎn)生不利影響的任何其它合適的故障。例如, 一組傳感 器可監(jiān)控在網(wǎng)絡(luò)服務(wù)器上運(yùn)行的應(yīng)用程序的錯(cuò)誤情況。
任何合適的傳感器可用于檢測(cè)錯(cuò)誤或監(jiān)控一個(gè)或多個(gè)應(yīng)用程序。 在一些實(shí)施例中,可使用監(jiān)控被部署的應(yīng)用程序和服務(wù)器的行為的基 于主機(jī)的傳感器。在另一個(gè)合適的實(shí)施例中,可使用防火墻上的無(wú)源 傳感器偷聽(tīng)或監(jiān)聽(tīng)行進(jìn)到和離開(kāi)服務(wù)器(例如圖1的服務(wù)器110)的 流量。在一些實(shí)施例中,還可使用模擬目標(biāo)應(yīng)用程序的行為并且捕荻 任何通信的蜜罐。蜜罐可以是例如用作誘斜的單獨(dú)的服務(wù)器,其引誘 潛在的黑客同時(shí)僅為潛在的黑客提供有限地訪問(wèn)網(wǎng)絡(luò)的權(quán)限,從而允 許蜜罐監(jiān)控黑客,并且確定黑客如何能夠侵入系統(tǒng)。蜜罐可安裝在防 火墻內(nèi)。但是,應(yīng)注意,蜜罐也能夠安裝在防火墻外部。應(yīng)注意,可 同時(shí)使用傳感器的任何組合。這些傳感器可相互通信、與服務(wù)器通信 或者與一個(gè)或多個(gè)工作站通信。
在步驟320 ,可使用來(lái)自傳感器的反饋來(lái)預(yù)測(cè)給定應(yīng)用程序代碼 的哪一部分易受到特定類型的攻擊(例如,可遠(yuǎn)程利用的緩沖溢出)。 在一些實(shí)施例中,傳感器還可檢測(cè)到已經(jīng)發(fā)生故障。在預(yù)測(cè)到可能發(fā)生故障或者檢測(cè)到已經(jīng)發(fā)生故障時(shí),在步驟330隔離具有故障指令或 者易受攻擊的函數(shù)的應(yīng)用程序代碼部分,從而將所預(yù)測(cè)的故障限制在 局部。
可選地,如圖4所示和說(shuō)明的, 一個(gè)或多個(gè)傳感器可一直監(jiān)控應(yīng) 用程序,直到該應(yīng)用程序被異常終止。系統(tǒng)可檢測(cè)到已經(jīng)發(fā)生的故障, 從而導(dǎo)致實(shí)際應(yīng)用程序終止。如圖4所示,在步驟410,系統(tǒng)迫使行 為不當(dāng)?shù)膽?yīng)用程序異常中止。響應(yīng)于應(yīng)用程序終止,在步驟420,系 統(tǒng)生成一個(gè)核心轉(zhuǎn)儲(chǔ)文件或產(chǎn)生其它與錯(cuò)誤相關(guān)的信息。當(dāng)發(fā)生錯(cuò)誤 時(shí),核心轉(zhuǎn)儲(chǔ)文件可包括例如錯(cuò)誤類型以及堆棧跟蹤。至少部分地基 于該核心轉(zhuǎn)儲(chǔ)文件,在步驟430,系統(tǒng)隔離應(yīng)用程序代碼的包含故障 指令的部分。使用核心轉(zhuǎn)儲(chǔ)文件,系統(tǒng)可對(duì)該應(yīng)用程序的被隔離部分 或片段應(yīng)用選擇性的仿真。例如,系統(tǒng)可從堆棧跟蹤內(nèi)的最頂部的函 數(shù)開(kāi)始。
返回圖3,在一些實(shí)施例中,系統(tǒng)可生成應(yīng)用程序的被探測(cè)的版 本(步驟340)。例如,應(yīng)用程序的被探測(cè)的版本可以是應(yīng)用程序代 碼的 一部分或全部的副本。系統(tǒng)可觀察到應(yīng)用程序的被探測(cè)的部分。
可基于對(duì)特定類型的攻擊的脆弱性選擇應(yīng)用程序的這些部分。被探測(cè) 的應(yīng)用程序可在目前運(yùn)行一個(gè)或多個(gè)應(yīng)用程序的服務(wù)器、單獨(dú)服務(wù) 器、工作站或任何其它合適的設(shè)備上執(zhí)行。
應(yīng)注意,隔離應(yīng)用程序代碼的一部分并且對(duì)該部分使用仿真器允 許系統(tǒng)減少和/或最小化對(duì)被免疫應(yīng)用程序的性能影響。但是,盡管此 實(shí)施例隔離了應(yīng)用程序代碼的一部分或片段,但是也可模仿整個(gè)應(yīng)用 程序。仿真器可完全用軟件實(shí)現(xiàn),或者利用系統(tǒng)處理器或體系結(jié)構(gòu)的 硬件特征或者操作系統(tǒng)提供的其它資源,以減小和/或最小化監(jiān)控或仿 真的性能影響,并且提高處理錯(cuò)誤的準(zhǔn)確性和有效性。
利用這種脆弱性的嘗試暴露了攻擊或輸入向量以及其他相關(guān)信 息(例如,被攻擊的緩沖器、易受攻擊的函數(shù)、堆棧跟蹤等等)。然 后在步驟350,使用攻擊或輸入向量和其他相關(guān)信息以構(gòu)建實(shí)現(xiàn)在機(jī) 器指令級(jí)進(jìn)行檢查的數(shù)組界的基于仿真器的免疫程序或糾錯(cuò),或者適合于檢測(cè)到的錯(cuò)誤類型的其它糾錯(cuò)。然后,使用指令級(jí)仿真器(例如,
libtasvm x86仿真器,STEM x86仿真器等等)在被探測(cè)的應(yīng)用程序內(nèi)測(cè)試該免疫程序,以確定故障是否被糾錯(cuò)和糾錯(cuò)是否影響任何其它功能(例如,關(guān)鍵功能性)。
通過(guò)使用指令級(jí)仿真器連續(xù)測(cè)試不同的免疫程序,系統(tǒng)可驗(yàn)證是否通過(guò)相對(duì)于導(dǎo)致特定故障的事件順序(例如,輸入向量)運(yùn)行被探測(cè)應(yīng)用程序已經(jīng)修復(fù)了特定故障。例如,為了驗(yàn)證糾錯(cuò)的有效性,應(yīng)用程序可在能夠進(jìn)行探測(cè)的測(cè)試環(huán)境或者沙盒內(nèi)重新開(kāi)始,并且被供給導(dǎo)致該錯(cuò)誤的一個(gè)或多個(gè)輸入向量。沙盒通常創(chuàng)建其中存在嚴(yán)格限制的環(huán)境,在該限制上可請(qǐng)求或訪問(wèn)系統(tǒng)資源、被探測(cè)應(yīng)用程序或者應(yīng)用程序的函數(shù)。
在步驟360,為應(yīng)用程序代碼的區(qū)段選擇性地調(diào)用指令級(jí)仿真器,從而使該系統(tǒng)可在同 一代碼執(zhí)行內(nèi)混合被模擬和未被模擬的代碼。仿真器可用于例如在執(zhí)行指令之前檢測(cè)和/或監(jiān)控特定類型的故障,記錄在指令執(zhí)行期間的存儲(chǔ)器改變(例如,全局變量、庫(kù)內(nèi)部狀
態(tài)、庫(kù)標(biāo)準(zhǔn)i/o結(jié)構(gòu)等等)和初始值,使存儲(chǔ)器堆棧返回其初始狀態(tài),
并且模擬從該應(yīng)用程序的函數(shù)返回的錯(cuò)誤。即,在進(jìn)入應(yīng)用程序代碼的易受攻擊部分時(shí),指令級(jí)仿真器捕獲并存儲(chǔ)程序狀態(tài),并且在為仿真指定的區(qū)域內(nèi)處理所有指令,包括函數(shù)調(diào)用。當(dāng)程序計(jì)數(shù)器引用在仿真界限外部的第一指令時(shí),虛擬處理器將其內(nèi)部狀態(tài)復(fù)制回設(shè)備處理器寄存器中。當(dāng)寄存器被更新時(shí),還通過(guò)仿真的執(zhí)行來(lái)進(jìn)行存儲(chǔ)器更新。不管虛擬處理器執(zhí)行的指令如何,程序繼續(xù)在實(shí)際處理器上正常執(zhí)行。
在一些實(shí)施例中,指令級(jí)仿真器可預(yù)先與應(yīng)用程序鏈接??蛇x地,響應(yīng)于檢測(cè)到的錯(cuò)誤,指令級(jí)仿真器可在代碼內(nèi)被編譯。在另一個(gè)合適的實(shí)施例中,當(dāng)執(zhí)行特定程序指令時(shí),指令級(jí)仿真器可以通過(guò)和現(xiàn)代調(diào)試器類似的方式被調(diào)用。這可利用系統(tǒng)處理器和體系結(jié)構(gòu)具有的斷點(diǎn)寄存器和/或其他程序調(diào)試手段,或者其可以是適合于本發(fā)明在其上實(shí)現(xiàn)的設(shè)備的操作系統(tǒng)和硬件的純軟件方法。使用仿真器使得系統(tǒng)可檢測(cè)和/或監(jiān)控許多不同的系統(tǒng)錯(cuò)誤,例 如非法存儲(chǔ)器解除引用、緩沖溢出和緩沖下溢、以及更一般的故障, 例如被零除。仿真器檢查其將至少部分地使用由檢測(cè)故障的一個(gè)或多 個(gè)傳感器所提供的向量和相關(guān)信息模擬的指令的操作數(shù)。例如,在被 零除的情況下,仿真器檢查div指令的操作數(shù)的值。在另一個(gè)示例中, 在非法存儲(chǔ)器解除引用的情況下,仿真器驗(yàn)證任何存儲(chǔ)器訪問(wèn)(或指
令提取的程序計(jì)數(shù)器)的源和目的地址是否指向使用mincore ()系 統(tǒng)調(diào)用被映射到的過(guò)程地址空間的頁(yè)面,或者操作系統(tǒng)提供的適當(dāng)?shù)?資源。在另一個(gè)示例中,在緩沖溢出檢測(cè)的情況下,圍繞如被一個(gè)或 多個(gè)傳感器識(shí)別的易受攻擊緩沖器的存儲(chǔ)器被填充一個(gè)字節(jié)。仿真器 然后觀察對(duì)這些存儲(chǔ)位置的存儲(chǔ)器寫(xiě)入。應(yīng)注意,這要求源代碼可用, 以便插入特定變量(例如自己周期性地啟動(dòng)并執(zhí)行一些典型的用戶事 務(wù)以能夠圍繞時(shí)鐘進(jìn)行事務(wù)延時(shí)評(píng)估的canary變量)。還應(yīng)注意,
仿真器在其重寫(xiě)存儲(chǔ)器堆棧內(nèi)的剩余位置并恢復(fù)執(zhí)行之前防止溢出。 用于檢測(cè)這些錯(cuò)誤的其它方法可以模塊化方式結(jié)合到系統(tǒng)中,而不會(huì) 影響系統(tǒng)的高級(jí)別操作和特性。
例如,指令級(jí)仿真器可被實(shí)現(xiàn)為靜態(tài)鏈接C庫(kù),其定義了標(biāo)記 選擇性仿真的開(kāi)始和結(jié)束的專用標(biāo)簽(例如,宏和函數(shù)調(diào)用的組合)。
圖5內(nèi)示出圍繞用于被指令級(jí)仿真器仿真的應(yīng)用程序代碼的區(qū)段放置 的標(biāo)簽示例。如圖5所示,C宏emulate—init()將程序狀態(tài)(一般是區(qū) 段、eflag和FPU寄存器)移入仿真器可訪問(wèn)的全局?jǐn)?shù)據(jù)結(jié)構(gòu),以便 在仿真器獲得控制之前即刻捕獲狀態(tài)。該數(shù)據(jù)結(jié)構(gòu)被用于初始化虛擬 寄存器。emulatejbegin()獲得在對(duì)自身的調(diào)用之后的第一個(gè)指令的存 儲(chǔ)位置。指令地址與返回地址相同,并且可在emulatej)egin()的激活 記錄內(nèi)在其基堆棧指針之上四個(gè)字節(jié)處找到。指令的提取/解碼/執(zhí)行/ 回收循環(huán)繼續(xù)進(jìn)行,直到達(dá)到emulate一end()或者仿真器檢測(cè)到控制返 回父函數(shù)。如果仿真器在其執(zhí)行期間沒(méi)有遇到錯(cuò)誤,則仿真器的指令 指針在完成時(shí)引用emulatejerm()宏。為了使被探測(cè)的應(yīng)用程序能夠 在這個(gè)地址繼續(xù)執(zhí)行,用指令指針的當(dāng)前值代替emulate一begiii()激活記錄的返回地址。通過(guò)執(zhí)行emulate—term(),仿真器的環(huán)境被復(fù)制到 程序寄存器中,并且執(zhí)行在正常狀況下繼續(xù)進(jìn)行。
應(yīng)注意,盡管本發(fā)明的實(shí)施例說(shuō)明了仿真器與易受攻擊的應(yīng)用程 序相鏈接,和/或易受攻擊的應(yīng)用程序的源代碼可用,但是本發(fā)明還可 使用處理器的可編程斷點(diǎn)寄存器來(lái)調(diào)用仿真器,而返回過(guò)程甚至不能 檢測(cè)到其現(xiàn)在在仿真器下運(yùn)行。
除了監(jiān)控在執(zhí)行指令之前的錯(cuò)誤,并且回復(fù)當(dāng)錯(cuò)誤發(fā)生時(shí)特定函 數(shù)導(dǎo)致的存儲(chǔ)器變化(例如,通過(guò)使仿真器存儲(chǔ)在其執(zhí)行期間發(fā)生的 存儲(chǔ)器改變),仿真器還模擬該函數(shù)的出錯(cuò)返回。利用本發(fā)明,系統(tǒng) 可生成在應(yīng)用程序執(zhí)行期間可能發(fā)生的 一組錯(cuò)誤和被應(yīng)用程序的代 碼明確處理的有限的一組錯(cuò)誤之間的映射(有時(shí)在文中被稱為"錯(cuò)誤 虛擬化")。如下文所述,本發(fā)明的錯(cuò)誤虛擬化特征可基于啟發(fā)法。 但是,可使用用于確定函數(shù)的返回值的任何合適的方法。例如,可使 用確定適合于函數(shù)的返回值的侵入源代碼分析技術(shù)。在另一個(gè)實(shí)施例 中,特定函數(shù)的代碼的一部分可被標(biāo)記為故障安全,并且當(dāng)強(qiáng)制出錯(cuò) 返回時(shí)可返回特定值(例如,檢查用戶許可的代碼)。在另一個(gè)示例 中,可使用程序員、系統(tǒng)管理員或任何其它合適的用戶提供的信息確 定已經(jīng)發(fā)生錯(cuò)誤的函數(shù)返回的錯(cuò)誤值。
即使程序員最初沒(méi)有預(yù)測(cè)到的邊界條件使得故障發(fā)生,這些錯(cuò)誤 虛擬化特征仍使得應(yīng)用程序可繼續(xù)執(zhí)行。具體來(lái)說(shuō),對(duì)于程序員不曾 預(yù)料到的故障,錯(cuò)誤虛擬化特征允許用異常捕獲機(jī)制改進(jìn)應(yīng)用程序的 代碼。應(yīng)注意,錯(cuò)誤虛擬化與通過(guò)一些編程語(yǔ)言實(shí)現(xiàn)的傳統(tǒng)異常處理 不同,在傳統(tǒng)異常處理中程序員必須在程序代碼內(nèi)故意創(chuàng)建異常情 況,并且還添加代碼以處理這些異常情況。在錯(cuò)誤虛擬化下,本發(fā)明 捕獲例如程序員不曾預(yù)料到的錯(cuò)誤和異常,并且本發(fā)明利用已有的應(yīng) 用程序代碼來(lái)處理它們。在本發(fā)明的一些實(shí)施例中,錯(cuò)誤虛擬化可通 過(guò)指令級(jí)仿真器實(shí)現(xiàn)??蛇x地,錯(cuò)誤虛擬化可通過(guò)直接插入應(yīng)用程序 的源代碼的附加源代碼來(lái)實(shí)現(xiàn)。這種附加源代碼的插入可在如前文所 述的檢測(cè)到錯(cuò)誤之后或者在預(yù)測(cè)到錯(cuò)誤之后自動(dòng)執(zhí)行,或者其可在程序員、系統(tǒng)操作員或可對(duì)應(yīng)用程序的源代碼具有訪問(wèn)權(quán)限的其它合適 的用戶的指導(dǎo)下進(jìn)行。
利用錯(cuò)誤虛擬化,當(dāng)在仿真期間發(fā)生異常時(shí)或者如果系統(tǒng)檢測(cè)到 已經(jīng)發(fā)生故障,則系統(tǒng)可使程序狀態(tài)返回其初始設(shè)置,并且強(qiáng)制從當(dāng) 前執(zhí)行的函數(shù)返回錯(cuò)誤。為了確定合適的錯(cuò)誤值,系統(tǒng)分析所聲明的
函數(shù)類型。在一些實(shí)施例中,系統(tǒng)可使用例如TXL腳本來(lái)分析所聲 明的函數(shù)類型??偟膩?lái)說(shuō),TXL是可用于執(zhí)行源到源變換并且迅速確 定新語(yǔ)言和語(yǔ)言處理器的原語(yǔ)的混合函數(shù)和基于規(guī)則的語(yǔ)言?;谒?聲明的函數(shù)類型,系統(tǒng)確定合適的錯(cuò)誤值并且將其放置在返回函數(shù)的 堆棧幀內(nèi)。合適的錯(cuò)誤值可至少部分地基于啟發(fā)法確定。例如,如果 返回類型是整數(shù),則返回值-1。如果返回類型是無(wú)符號(hào)整數(shù),則系統(tǒng) 返回0。如果函數(shù)返回一個(gè)指針,則系統(tǒng)判斷返回的指針是否進(jìn)一步 被父函數(shù)解除引用。如果返回的指針被進(jìn)一步解除引用,則系統(tǒng)將仿 真范圍擴(kuò)展到包括父函數(shù)。在另一個(gè)示例中,返回出錯(cuò)代碼可使用嵌 入到應(yīng)用程序的源代碼中的信息來(lái)確定,或者通過(guò)應(yīng)用程序的程序 員、系統(tǒng)管理員或第三方提供給系統(tǒng)的附加信息來(lái)確定。
在一些實(shí)施例中,emulate—end()被定位并且仿真終止。由于仿 真器保存了在開(kāi)始之前的應(yīng)用程序的狀態(tài),并且持續(xù)跟蹤在應(yīng)用程序 的執(zhí)行期間的存儲(chǔ)器改變,系統(tǒng)能夠通過(guò)使其中發(fā)生故障的代碼函數(shù) 導(dǎo)致的任何存儲(chǔ)器改變返回其初始設(shè)置而顛倒該存儲(chǔ)器改變,從而抵 消通過(guò)仿真被處理的指令的影響。即,代碼的被仿真部分被切除,并 且代碼的執(zhí)行連同其在存儲(chǔ)器改變方面的副作用 一起被返回。
例如,仿真器可能不能不經(jīng)核心級(jí)許可而直接執(zhí)行系統(tǒng)調(diào)用。因 此,當(dāng)仿真器使用中間值0x80對(duì)中斷解碼時(shí),仿真器將控制釋放給 內(nèi)核。但是,在內(nèi)核執(zhí)行系統(tǒng)調(diào)用之前,仿真器備份實(shí)際寄存器并且 用其自己的值替換它們。仿真器發(fā)出INT0x80,并且核心程序處理系 統(tǒng)調(diào)用。 一旦控制返回仿真器,則仿真器更新其寄存器,并且在應(yīng)用 程序的寄存器內(nèi)恢復(fù)初始值。
如果被探測(cè)的應(yīng)用程序沒(méi)有在強(qiáng)制返回之后崩潰,則系統(tǒng)已經(jīng)成功地發(fā)現(xiàn)用于特定故障的免疫程序,該免疫程序可用于在服務(wù)器上運(yùn)
行的實(shí)際應(yīng)用程序中。在步驟370,系統(tǒng)至少部分地基于仿真更新該 應(yīng)用程序。
根據(jù)本發(fā)明的一些實(shí)施例,可提供人工多樣性特征以減輕軟件單 一系統(tǒng)的安全性風(fēng)險(xiǎn)。
軟件單一 系統(tǒng)已被認(rèn)為聯(lián)網(wǎng)計(jì)算環(huán)境的問(wèn)題。單一系統(tǒng)用作攻擊
者的放大器,使得攻擊者可在相同應(yīng)用程序的許多實(shí)例(例如,成千 或數(shù)百萬(wàn)個(gè)實(shí)例)之間利用相同的脆弱性。如近來(lái)一些事件證明的, 這種攻擊可能會(huì)迅速造成廣泛混亂。
盡管許多其他系統(tǒng)試圖引入人工多樣性,但是可利用已有軟件單 一系統(tǒng)的好處來(lái)減輕軟件單一系統(tǒng)的安全性風(fēng)險(xiǎn)。在一些實(shí)施例中, 可創(chuàng)建應(yīng)用程序組來(lái)有效地使用大的單一系統(tǒng)內(nèi)可用的資源,以保護(hù) 每個(gè)應(yīng)用程序組成員。如這里所使用的,應(yīng)用程序組是相同應(yīng)用程序 的獨(dú)立實(shí)例的集合,這些實(shí)例共同監(jiān)控它們的執(zhí)行的缺陷和攻擊情 況,并且當(dāng)檢測(cè)到這種事件時(shí)告知所述的組。例如,在上迷系統(tǒng)中, 在廣域網(wǎng)(例如,互聯(lián)網(wǎng))上運(yùn)行一個(gè)或多個(gè)應(yīng)用程序的一個(gè)或多個(gè) 工作站和服務(wù)器可以是應(yīng)用程序組的成員。每個(gè)工作站可通過(guò)監(jiān)控應(yīng) 用程序的不同部分來(lái)合作,從而分配被用于監(jiān)控該應(yīng)用程序的每個(gè)工 作站所分配的存儲(chǔ)器。在另一個(gè)合適的實(shí)施例中,每個(gè)工作站可通過(guò) 監(jiān)控應(yīng)用程序的不同錯(cuò)誤而合作。響應(yīng)于檢測(cè)到代碼的被監(jiān)控部分易 發(fā)生錯(cuò)誤,或者響應(yīng)于檢測(cè)到在應(yīng)用程序代碼的被監(jiān)控部分內(nèi)出現(xiàn)錯(cuò) 誤,工作站可將該錯(cuò)誤告知其它工作站和服務(wù)器。
圖6是示出根據(jù)本發(fā)明的一些實(shí)施例的在使用應(yīng)用程序組監(jiān)控 應(yīng)用程序的故障情況和修復(fù)該應(yīng)用程序時(shí)執(zhí)行的各種步驟的簡(jiǎn)化流 程圖。這是一個(gè)概括的流程圖。應(yīng)理解的是,圖6內(nèi)所示的步驟可以 以任何合適的順序執(zhí)行, 一些步驟可被刪除,并且可以添加其它步驟。
一般來(lái)說(shuō),在步驟610,系統(tǒng)可將應(yīng)用程序代碼分割成多個(gè)代碼 部分。應(yīng)用程序代碼的每個(gè)部分或片段可例如被分配給應(yīng)用程序組的 一個(gè)成員(例如工作站、服務(wù)器等等)。在步驟620,應(yīng)用程序組的每個(gè)成員可監(jiān)控該代碼部分的不同類型的錯(cuò)誤。如前文已說(shuō)明的,所 述錯(cuò)誤包括程序設(shè)計(jì)錯(cuò)誤、異常、軟件故障(例如,非法存儲(chǔ)器訪問(wèn)、
被零除、緩沖溢出攻擊、違反TOCTTOU等等)、威脅(例如,計(jì) 算機(jī)病毒、蠕蟲(chóng)、木馬、黑客、密鑰恢復(fù)攻擊、惡意可執(zhí)行程序、探 測(cè)器等等)、以及會(huì)導(dǎo)致異常應(yīng)用程序終止或?qū)σ粋€(gè)或多個(gè)應(yīng)用程序 產(chǎn)生不利影響的任何其它合適的故障。
例如,系統(tǒng)可基于應(yīng)用程序的大小和應(yīng)用程序組內(nèi)的成員數(shù)目 (即,應(yīng)用程序/應(yīng)用程序組內(nèi)的成員的規(guī)模)劃分代碼部分。可選地, 系統(tǒng)可基于應(yīng)用程序組的每個(gè)成員內(nèi)的可用存儲(chǔ)量劃分代碼的部分。 可使用適于確定如何劃分應(yīng)用程序代碼的任何合適的方法。下文將說(shuō) 明一些合適的方法。
例如,系統(tǒng)可通過(guò)檢驗(yàn)執(zhí)行應(yīng)用程序代碼的離散片段的成本,檢 驗(yàn)應(yīng)用程序組內(nèi)的全部工作W。假設(shè)包含應(yīng)用程序的調(diào)用圖的一組函 數(shù)F, F的第i個(gè)成員被表示為fi。執(zhí)行每個(gè)fi的成本是fi內(nèi)存在的計(jì)
算量(即,Xi)和fi內(nèi)的危險(xiǎn)量(即,Vi)的函數(shù)。Xi的計(jì)算被至少兩
個(gè)量度推動(dòng)即作為fi的一部分被執(zhí)行的機(jī)器指令的數(shù)量Oi,和執(zhí)行 fi所花費(fèi)的時(shí)間量ti。 Oi和ti可根據(jù)應(yīng)用程序的內(nèi)部邏輯作為時(shí)間或應(yīng) 用程序工作量的函數(shù)而改變。例如,應(yīng)用程序可在該應(yīng)用程序經(jīng)過(guò)閾 值數(shù)量的請(qǐng)求之后執(zhí)行記錄或清除任務(wù)。
在一些實(shí)施例中,可分兩個(gè)階段提供成本函數(shù)。第一階段計(jì)算由 每個(gè)fi的計(jì)算量導(dǎo)致的成本。第二階段使此成本歸一化,并且應(yīng)用危
險(xiǎn)因數(shù)Vi以確定每個(gè)fi的最終成本以及系統(tǒng)內(nèi)的工作總量。例如,假
設(shè)
如果C(fi, Xi)= Xi/T*100,則通過(guò)將F的子集分組以代表一個(gè)工 作單位將每個(gè)成本歸一化。
在一些實(shí)施例中,系統(tǒng)可解決函數(shù)的脆弱性的測(cè)量問(wèn)題。例如, 系統(tǒng)將Vi當(dāng)作具有值a的離散變量對(duì)待,其中a具有根據(jù)危險(xiǎn)量的一 定范圍的值,從而=^ (如果/;易受攻擊) "1i(如果/;不易受攻擊)
給定每個(gè)函數(shù)的Vj,系統(tǒng)可確定監(jiān)控所需的系統(tǒng)中的工作總量和
成員總數(shù)
在系統(tǒng)(例如,控制器)或者每個(gè)應(yīng)用程序組成員已經(jīng)計(jì)算出系 統(tǒng)內(nèi)的工作量之后,分配工作單位。在一個(gè)示例中,中央控制器或一
個(gè)工作站可為每個(gè)節(jié)點(diǎn)分配大約W/N個(gè)工作單位。在另一個(gè)合適的 示例中,應(yīng)用程序組的每個(gè)成員可確定其自己的工作集合。每個(gè)成員 可通過(guò)拋擲用值Vi*ri加權(quán)的硬幣的方式迭代通過(guò)工作單位列表。因 此,如果拋擲結(jié)果為"真",則然后該成員將該工作單位添加到其工作 集合中。
可選地,系統(tǒng)可生成具有WW個(gè)空位的列表。每個(gè)函數(shù)用該列 表上的多個(gè)項(xiàng)(例如,v,rj表示。應(yīng)用程序組的每個(gè)成員例如通過(guò) 拋擲硬幣迭代通過(guò)該列表。如果硬幣是"人頭"或者"真",應(yīng)用程序組 成員在給定的時(shí)間片上監(jiān)控應(yīng)用程序的函數(shù)。由于權(quán)重較大的函數(shù)在 該列表內(nèi)具有更多的項(xiàng),則可分配更多數(shù)量的用戶以覆蓋該應(yīng)用程 序。當(dāng)成員的全部工作達(dá)到W/N時(shí)該成員可停止。這種方法提供了 應(yīng)用程序的統(tǒng)計(jì)覆蓋范圍。
在一些實(shí)施例中,可使用分布式投標(biāo)方法分配監(jiān)控和修復(fù)應(yīng)用程 序的工作量。調(diào)用圖G內(nèi)的每個(gè)節(jié)點(diǎn)具有權(quán)值v^n。為每個(gè)應(yīng)用程序 組成員分配F內(nèi)的節(jié)點(diǎn)的一些子集,使得每個(gè)成員的工作不會(huì)多于 W/N的工作量。閾值在W/N的一些范圍e內(nèi)是松弛的,其中e是系 統(tǒng)公平性的量度。在計(jì)算工作W/N的全局公平量時(shí),每個(gè)應(yīng)用程序 組成員可通過(guò)使用分布式投標(biāo)方法與其它成員商議調(diào)節(jié)其工作負(fù)荷。
有兩種考慮會(huì)影響到工作單位向應(yīng)用程序組成員的分配。首先, 系統(tǒng)優(yōu)先分配具有較高權(quán)重的工作單位,因?yàn)檫@些工作單位可能由于 高Vi而具有較大的權(quán)重。即使權(quán)重僅由性能成本得到,將具有較高權(quán) 重的工作單位分配給更多的成員是有益的,因?yàn)檫@些成員可循環(huán)監(jiān)控任務(wù)以便任何一個(gè)成員不必承擔(dān)全部成分。其次,在一些情況下, 可大于工作的平均量W/N。實(shí)現(xiàn)公平是指定義了被分配給應(yīng)用程序組 成員的量,并且這些量的總和定義了應(yīng)用程序組內(nèi)的成員的最小數(shù) 目。
在一些實(shí)施例中,每個(gè)應(yīng)用程序組成員計(jì)算出一個(gè)表。圖7內(nèi)示 出這種表的示例。在生成該表時(shí),應(yīng)用程序組成員可投標(biāo)以調(diào)節(jié)它們 各自的工作量。例如,系統(tǒng)可使用用于投標(biāo)的令牌。令牌可直接映射 到應(yīng)用程序組成員負(fù)責(zé)監(jiān)控工作單位或應(yīng)用程序的函數(shù)的時(shí)間量子 的數(shù)目。系統(tǒng)確保每個(gè)節(jié)點(diǎn)不會(huì)累加多于e的選擇所允許的令牌的總
量的令牌。
如果應(yīng)用程序組成員監(jiān)控多于其份額的內(nèi)容,則系統(tǒng)增加覆蓋范 圍,并且確保故障被盡可能快地檢測(cè)出來(lái)。如步驟630和640內(nèi)所示, 每個(gè)應(yīng)用程序組成員可預(yù)測(cè)到在代碼的指定部分內(nèi)可能發(fā)生故障,或 者可檢測(cè)到已經(jīng)發(fā)生導(dǎo)致應(yīng)用程序異常中止的故障,其中代碼的被指 定部分是故障源。當(dāng)故障被檢測(cè)到時(shí),每個(gè)應(yīng)用程序成員可提前主動(dòng) 監(jiān)控包含該故障的代碼的指定部分,以保護(hù)應(yīng)用程序不受其它錯(cuò)誤影 響。如前文討論的,應(yīng)用程序組成員可隔離代碼的導(dǎo)致該故障的部分, 并且使用仿真器測(cè)試免疫程序或糾錯(cuò)。在步驟650,檢測(cè)或預(yù)測(cè)到該 故障的應(yīng)用程序組成員可通知其他應(yīng)用程序組成員??赏ㄟ^(guò)由檢測(cè)到 該故障的應(yīng)用程序成員所生成的保護(hù)機(jī)制或糾錯(cuò)重新開(kāi)始遭遇該故 障的其它應(yīng)用程序成員。
假設(shè)新故障在應(yīng)用程序組成員中分配均勻地隨機(jī)分配,故障在成 員k處發(fā)生的概率是P(故障)-l/N。因此,k檢測(cè)到新故障的概 率是故障在k處發(fā)生和k檢測(cè)到該故障的概率P (k處故障A檢測(cè)) =1/N*kj,其中ki是在k處的覆蓋百分比。應(yīng)用程序組檢測(cè)到該故障 的概率是
<formula>formula see original document page 24</formula>
當(dāng)每個(gè)Ki趨近100%時(shí),上述等式變?yōu)?^+或者N/N,當(dāng)其首 次發(fā)生時(shí)該故障被檢測(cè)到的概率為1。根據(jù)本發(fā)明,提供了用于監(jiān)控應(yīng)用程序和從多種軟件錯(cuò)誤中修復(fù) 應(yīng)用程序的方法和系統(tǒng)。
應(yīng)理解,文中的詳細(xì)說(shuō)明可在計(jì)算機(jī)或計(jì)算機(jī)網(wǎng)絡(luò)上執(zhí)行的程序 過(guò)程方面被表示。這些程序說(shuō)明和表示是被本領(lǐng)域技術(shù)人員用于最有 效地將其工作實(shí)例傳送給本領(lǐng)域其他技術(shù)人員的方法。
過(guò)程在此通常被設(shè)想為是導(dǎo)致希望的結(jié)果的自給序列。這些步驟 是要求物理量的物理操縱的那些步驟。通常但不是必要的,這些量表 現(xiàn)為能夠被存儲(chǔ)、傳遞、組合、比較和操縱的電信號(hào)或磁信號(hào)。主要 出于公共使用的原因,證明有時(shí)將這些信號(hào)稱作位、值、元件、符號(hào)、 字符、術(shù)語(yǔ)、號(hào)碼等等是方便的。但是,應(yīng)注意,所有這些以及類似 的術(shù)語(yǔ)將與合適的物理量相關(guān)聯(lián),并且僅是應(yīng)用于這些量的方便標(biāo) 記。
此外,執(zhí)行的操作常常用術(shù)語(yǔ)例如添加或比較提及,其通常與操 作人員執(zhí)行的智力操作相關(guān)聯(lián)。在形成本發(fā)明的一部分的文中所述的 任何操作中,操作員的這種能力并不是必需的或者在大多數(shù)情況不合
乎需要;該操作是機(jī)器操作。可用于執(zhí)行本發(fā)明的操作的機(jī)器包括通 用數(shù)字計(jì)算機(jī)或類似設(shè)備。
本發(fā)明還涉及用于執(zhí)行這些操作的裝置。此裝置可為所需的用途 被專門構(gòu)造,或者其可包括通用計(jì)算機(jī),該通用計(jì)算機(jī)被該計(jì)算機(jī)內(nèi) 存儲(chǔ)的計(jì)算機(jī)程序選擇性地激活或重新配置。文中給出的過(guò)程本質(zhì)上 與具體計(jì)算機(jī)或其他裝置不相關(guān)。各種通用機(jī)器可與根據(jù)文中的指導(dǎo)
寫(xiě)成的程序一起使用,或者可證明構(gòu)造更專用的裝置來(lái)執(zhí)行所需的方 法步驟更加方便。多種這些機(jī)器的所需結(jié)構(gòu)從文中給出的說(shuō)明中顯而 易見(jiàn)。
根據(jù)本發(fā)明的系統(tǒng)可包括通用計(jì)算機(jī)或者被特別編程的專用計(jì)
算機(jī)。用戶可經(jīng)由例如個(gè)人計(jì)算機(jī)或PDA在例如互聯(lián)網(wǎng)、內(nèi)聯(lián)網(wǎng)等 等上與該系統(tǒng)相互作用。它們中的任何一個(gè)都可被實(shí)現(xiàn)為分布式計(jì)算 機(jī)系統(tǒng)而不是單個(gè)計(jì)算機(jī)。類似地,通信鏈路可以是專用鏈路、在 POTS線路上的調(diào)制解調(diào)器、互聯(lián)網(wǎng)和/或在計(jì)算機(jī)和/或用戶之間通信的任何其它方法。此外,該處理可被一個(gè)或多個(gè)計(jì)算機(jī)系統(tǒng)或處理 器上的軟件程序控制,或者甚至可部分或完全用硬件實(shí)現(xiàn)。
盡管可使用單個(gè)計(jì)算機(jī),但是根據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例的 系統(tǒng)任選地適當(dāng)配備多個(gè)處理器或存儲(chǔ)設(shè)備或它們的組合。例如,計(jì) 算機(jī)可被根據(jù)本發(fā)明的實(shí)施例的概念操作的任何合適的處理系統(tǒng),例 如復(fù)雜計(jì)算器、手提式、膝上型電腦/筆記本電腦、迷你計(jì)算機(jī)、主計(jì) 算機(jī)和超級(jí)計(jì)算機(jī),以及它們的處理系統(tǒng)網(wǎng)絡(luò)組合代替或與它們組 合。另外,該系統(tǒng)的部分可以任何合適的電子格式被提供,包括例如
在通信線路上作為電子信號(hào)被提供,在CD和/或DVD上被提供,在 光盤(pán)存儲(chǔ)器上被提供等等。
本發(fā)明的這些實(shí)施例中可使用任何目前可用的或者未來(lái)開(kāi)發(fā)的 計(jì)算機(jī)軟件語(yǔ)言和/或硬件部件。例如,上文提及的功能性中的至少一 些可使用Visual Basic、 C、 C+十或任何匯編語(yǔ)言實(shí)現(xiàn)。其還可在面向 對(duì)象和/或解釋性環(huán)境例如Java內(nèi)被編寫(xiě),并且被傳輸給多個(gè)目的地、 多個(gè)用戶。
應(yīng)理解,本發(fā)明在其應(yīng)用方面并不局限于下文說(shuō)明內(nèi)闡述的或者 附圖內(nèi)示出的構(gòu)造的細(xì)節(jié)和部件的設(shè)置。本發(fā)明能夠表現(xiàn)為其他實(shí)施 例,并且用多種方式實(shí)施和實(shí)現(xiàn)。另外,應(yīng)理解,文中使用的用語(yǔ)和 術(shù)語(yǔ)是用于說(shuō)明而不應(yīng)被看作是限制性的。
因而,本領(lǐng)域技術(shù)人員應(yīng)理解,作為此公開(kāi)的基礎(chǔ)的概念可被容
易地實(shí)現(xiàn)為用于實(shí)現(xiàn)本發(fā)明的一些目的的其它結(jié)構(gòu)、方法和系統(tǒng)的設(shè) 計(jì)基礎(chǔ)。因此,重要地是,權(quán)利要求被認(rèn)為包含不背離本發(fā)明的精神 和范圍的這種等同的構(gòu)造。
盡管已經(jīng)在前文的示例性實(shí)施例中說(shuō)明和示出了本發(fā)明,但是應(yīng) 理解,本公開(kāi)僅作為示例,并且可對(duì)本發(fā)明的實(shí)現(xiàn)細(xì)節(jié)作出多種改變
而不會(huì)背離本發(fā)明的精神和范圍,該精神和范圍僅被下文的權(quán)利要求 限制。下文的參考文獻(xiàn)全文并入此作為參考文獻(xiàn)
CERT Advisory CA-2003-21: W32/Baster Worm, http:〃www.cert,org/advisories/ CA、2003-20.html, August 2003.
The Spread of也e Sapphire/Slammer Worm, http:〃www,silicondefense.com/ research/worms/slammer.php, February 2003.
A. Avizienis. The n-version approach to feult-tolerant software.正EB Transactions on Software Engineering, U(12):1491fl1501, 1985.
A. Baratloo, N. Singh, and T. Tsai. Transparent Run-Time Defense Against Stack Smashing Attacks, In Proceedings of the USENIX Annual Technical Conference, June 2000.
A. Baratloo, N. Singfe and T. Tsai, Transparent Run-Time Defense Against Stack Smashing Attacks. In Proceedings of the USENIX Annual Technical Conference, June 2000.
E. G. Barrantes, D. H. Ackley, S. Forrest, T. S. Palmer, D. Stef咖vic, and D. D. Zovi, Randomized Instruction Set Emulation to Disrupt Binary Code Injection Attacks. In 10th AGM Conference on Computer and Communications Security (GCS), October 2003.
S. Bhatkar, D. C. DuVaraey, and R. Sekar. Address Obfiiscation: an Efficient Approach to Combat a Broad Range of Memory Error Exploits. In Proceedings of the 12th USENIX Security Symposium, pages 105fil20, August 2003.
S. Brilliant, J. C. Knight, and N. G. Leveson. Analysis of Faults in an N-Version Software Experiment,邁EE Tran幼ctions on Software Engineering, 16(2), Februaiy 1990.
D. Bruening, T, Garnett, and S. Amarasinghe. An Infrastructure for Adaptive Dynamic Optimization. In Proceedings of the International Symposium on Code Generation and Optimization, pages 265-275,2003.
G. Candea and A. Fox. Crash-Only Software, In Proceedings of the她Workshop on Hot Topics in Operating Systems, May 2003.H, Chen and D. "Wagner. MOPS: an Infirastructure for Examining Security Properties of Software. In Proceedings of the ACM Computer and Coiramraications Security (CCS) Conference, pages 235-244, November 2002.
M. Chew and D. Song. Mitigating Buffer Overflows by Operatijig System Randomization. Technical Report CMU-CS-02-197, Carnegie Mellon University, December
2002.
S. A. Crosby and D. S. Wallach. Denial of Service via Algorithmic Complexity Attacks. In Proceedings of the 12th USENDC Security Symposium, pages 29-44, August
2003.
B. De咖ky and M, C. Rinard. Automatic Detection and Repair of Errors in Data Structures. In Proceedings of the l她Annual ACM SIGPLAN Conference on Object Oriented Programmingj Systems, Languages, and Applications, October 2003.
E. Duestetwald and S. P. Amarsinghe. On the Run - Building Dynamic Program Modifiers for Optimization, Introspection, and Security. In Conference on Programming Language Design and Implementation (PLDI), 2002.
G, W. Dunlap, S. King, S. Cinar' M, A. Basrai, and P. M. Chen. ReVirt: Enabling Intrusion Analysis Through Virtual-Machine Logging and Replay, In Proceedings of the Symposium on Operating Systems Design and In^)l咖entation (OSDI), February 2002.
C. C. et al. StackGuard: Automatic Adaptive Detection and Prevention of Buffer-Overflow Attacks. In Proceedings of the 7th USENDC Security Symposium January 1998.
T. Garfinkel and M. Rosenbhrai. A Virtual Machine Introspection Based Architecture for Intrusion Detection. In 10th ISOC Symposium on Network and Distributed Systems Security (SNDSS), February 2003.
D. B, Geer, Monopoly Considered HarmfW.正EE Security & Privacy, 1(6): 14 & 17, November/December 2003.
G. Goth. Addressing the Monoculture. IEEE Security & Privacy, l(6):8-0, November/December 2003.
T. Jim, G. Monisett, D. Grossm叫M. Hicks, J. Cheney, and Y.Wang. Cyclone: A safe dialect of C. In Proceedings of the USENDC Anmial Technical Conference, pages 275-288, June 2002.
G. S. Kc, A. D. Keromytis, and V. Prevelakis. Countering Code-Injection Attacks With Instruction-Set Randomization. In 10th ACM Conference on Computer and Communications Security (CCS), October 2003.S. T. King and P. M, CbeiL Backtrackkg Intrusions. In 19ih ACM Symposium cm Operating Systems Principles (SOSP), October 2003.
S. T. Kingj G. Dunlap, and P. Chen, Operating System Support for Virtual Machines. In Proceedings of the USENIX Annual Technical Conference, June 2003.
V. Kiri咖ky, D. Bruening, and S. Amarasinghe. Secure Execution Via Prograni Shepherding.Proceedings of the 11th USENIX Security Symposium, August 2002.
D. Mosberger and T, Jin. httperf: A tool for measuring web server performance. In First Workshop on Internet Server Performance, pages 59-67. ACM, June 1998.
N. Netbercote and J. Seward. Valgrind: A Program Supervision Fraraewo汰.In Electronic Notes in Theoretical Computer Science, volume 89, 2003.
J. Newsome and D. Dong. Dynamic Taint Analysis for Automatic Detection, Analysis, and Signature Generation of Exploits on Commodity Software. In The〗2th Annual Network and Distributed System Security Symposium, Februaiy 2005.
J. Oplinger and M S. Lam. Enhancing Software Reliability with Speculative Threads. In Proceedings of the 10th International Conference on Architectural Support for Programming Languages and Operating Systems (ASPLOS X), October 2002.
V, Prevelakis. A Secure Station for Network Monitoring and Control. In Proceedings of the 8th USENIX Security Symposium, August 1999.
N. Provos. Improving Host Security w他System Call Policies. In Proceedings of the 12th USENIX Security Symposium, pages 257-272, August 2003.
J. C, Reynolds, J. Just> L. Clough^ and K Maglich. On-Line Intrusion Detection and Attack Prevention Using Diversity, Generate-and-Test, and Generalization. In Proceedings of
the 36th Annual Hawaii International Conference on System Sciences (HICSS), January 2003.
M. Ri加rd, C. Cadar, D. Dumitran, D. Roy, and T. Leu. A Dynamic Technique for Eliminating Buffer Overflow Vulnerabilities (and Other Memory Errors). In Proceedings 20th Annual Computer Security Applications Conference (ACSAC), December 2004.
M. Rinard, C. Cadar, D. Dumitr叫D. Roy, T. Leu, and J. W Beebee. Enhancing Server Availability and Security Throu缺Failure-Oblivious Computing. In Proceedings 6th Symposium on Operating Systems Design and Implementation (OSDI), Deceiriber 2004.
A. Rudys and D. S, Wallach. Transactional Rollback for Language-Based Systems. In ISOC Symposium on Network and Distributed Systems Security (SNDSS), February 2001.S. T. King加d P. M. Chen. Backtracking Intrusions. In l她ACM Symposium on Operating Systems Principles (SOSP), October 2003.
S, T. Kingj G. Dunlap, and P, Chen. Operating System Support for Virtual Machines. In Proceedings of the USENIX Annual Technical Conference, June 2003.
V. Kiria加ky, D. Bruening, and S, Amarasinghe. Secure Execution Via Program Shepherding. In Proceedings of the 11th USENIX Security Symposium, August 2002.
D. Mosbetger and T, Jin. httperf: A tool for measuring web server performance. In First Workshop on Internet Server Performance, pages 59-67. ACM, June 1998.
N. Nethercote and J. Seward. Valgrind: A Program Supervision Framework. In Electronic Notes in Theoretical Computer Science, volume 89, 2003.
J. Newsorae and D. Dong. Dynamic Taint Analysis for Automatic Detection, Analysis, and Signature Generation of Exploits on Commodity Software. In The 12th Annual Network and Distributed System Security Symposium, February 2005.
J. Oplinger and M. S. Lam. Enhancing Software Reliability with Speculative Threads. In Proceedings of the 10th加e咖tional Conference on Architectural Support for Programming Languages and Operating Systems (ASPLOS X), October 2002.
V, Preve!akis, A Secure Station for Network Monitoring and Control. In Proceedings of tiie 8th USENIX Security Symposium, August 1999.
N. Provos. Improving Host Security with System Call Policies. In Proceedings of the 12th USENDC Security Symposium, pages 257-272, August 2003.
J. C. Reynolds, J. Jus仁L. Ckm^h, and R Maglich. On-Line Intrusion Detection and Attack Prevention Using Diversity, Generate-and-Tes^ and Generalization. In Proceedings of
the 36th Annual Hawaii International Conference on System Sciences (HICSS), January 2003.
M. Rinard, C. Cadar, D, Dumitran, D. Roy, and T. Leu. A Dynamic Technique for Eliminating Buffer Overflow Vulnerabilities (and Other Memory Errors). In Proceedings 20th Annual Computer Security Applications Conference (ACSAC), December 2004.
M Rinard, C. Cadar, D. Dumitran, D. Roy, T. Leu, and J. W Beebee. Enhancing Server Availability and Security Through Failure-Oblivious Computing. In Proceedings她 Symposium on Operating Systems Design and Implementation (OSDI), December 2004.
A. Rudys and D. S. Wallach. Transactional Rollback for Language-Based Systems. In ISOC Symposium on Network and Distributed Systems Security (SNDSS), February 2001.
權(quán)利要求
1.一種用于從軟件錯(cuò)誤中修復(fù)應(yīng)用程序的方法,其中該應(yīng)用程序包含代碼,所述方法包括檢測(cè)該應(yīng)用程序中的錯(cuò)誤;響應(yīng)于檢測(cè)到該錯(cuò)誤,隔離導(dǎo)致該錯(cuò)誤的代碼部分;構(gòu)造修復(fù)該錯(cuò)誤的基于仿真器的免疫程序;使用指令級(jí)仿真器在該被隔離的代碼部分的被探測(cè)版本內(nèi)測(cè)試基于仿真器的免疫程序;并且響應(yīng)于驗(yàn)證到該免疫程序已修復(fù)該錯(cuò)誤,用該基于仿真器的免疫程序更新該應(yīng)用程序。
2. 根據(jù)權(quán)利要求l的方法,其中所述錯(cuò)誤是以下情況中的至少 一個(gè)計(jì)算機(jī)病毒、蠕蟲(chóng)、木馬、惡意可執(zhí)行程序、探測(cè)器、拒絕服 務(wù)攻擊、資源消耗攻擊、緩沖溢出、緩沖下溢、非法存儲(chǔ)器訪問(wèn)、被 零除、檢查時(shí)間到使用時(shí)間違規(guī)和程序設(shè)計(jì)錯(cuò)誤。
3. 根據(jù)權(quán)利要求l的方法,其中所述檢測(cè)使用至少一個(gè)傳感器 來(lái)執(zhí)行,并且其中該至少一個(gè)傳感器包括基于主機(jī)的傳感器、基于網(wǎng) 絡(luò)的傳感器和蜜罐中的一種。
4. 根據(jù)權(quán)利要求1的方法,其中所述應(yīng)用程序在服務(wù)器上執(zhí)行, 并且其中所述檢測(cè)還包括在模擬該應(yīng)用程序的單獨(dú)服務(wù)器上實(shí)現(xiàn)蜜
5. 根據(jù)權(quán)利要求l的方法,其中該方法還包括響應(yīng)于導(dǎo)致該應(yīng) 用程序終止的錯(cuò)誤生成核心轉(zhuǎn)儲(chǔ)文件或其他^l告信息。
6. 根據(jù)權(quán)利要求5的方法,其中所述核心轉(zhuǎn)儲(chǔ)文件或其他信息 包括發(fā)生的錯(cuò)誤的類型、堆棧跟蹤和有助于根據(jù)脆弱的應(yīng)用程序代碼 部分定位該錯(cuò)誤的其他信息。
7. 根據(jù)權(quán)利要求5的方法,其中所述隔離導(dǎo)致該錯(cuò)誤的代碼部 分的步驟至少部分地基于響應(yīng)于檢測(cè)到該錯(cuò)誤而生成的所述核心轉(zhuǎn) 儲(chǔ)文件或其他信息。
8. 根據(jù)權(quán)利要求l的方法,其中所述錯(cuò)誤暴露了輸入向量。
9. 根據(jù)權(quán)利要求8的方法,其中所述基于仿真器的免疫程序至 少部分地基于所述輸入向量和/或其對(duì)應(yīng)用程序執(zhí)行的影響而被構(gòu)造。
10. 根據(jù)權(quán)利要求8的方法,其中所述測(cè)試所述基于仿真器的免 疫程序還包括將所述輸入向量輸入到代碼的被隔離部分的被探測(cè)版 本中。
11. 根據(jù)權(quán)利要求1的方法,其中該方法還包括記錄在代碼的被 隔離部分的被探測(cè)版本的執(zhí)行期間的存儲(chǔ)器變化。
12. 根據(jù)權(quán)利要求l的方法,其中所述被隔離部分的被探測(cè)版本 包括具有初始狀態(tài)的存儲(chǔ)器堆棧,并且該方法還包括使該存儲(chǔ)器堆棧 返回該初始狀態(tài)并且生成出錯(cuò)返回。
13. 根據(jù)權(quán)利要求l的方法,其中該方法還包括返回模擬該錯(cuò)誤 的出錯(cuò)代碼。
14. 根據(jù)權(quán)利要求1的方法,其中該方法還包括從代碼的被隔離部分模擬出錯(cuò)代碼。
15. 根據(jù)權(quán)利要求l的方法,其中該方法還包括在應(yīng)用程序的執(zhí) 行期間可能發(fā)生的錯(cuò)誤和該應(yīng)用程序被編程所處理的一組錯(cuò)誤之間 進(jìn)行映射。
16. 根據(jù)權(quán)利要求l的方法,其中所述更新應(yīng)用程序的步驟還包 括將附加代碼自動(dòng)插入到代碼的被隔離部分中。
17. —種用于從軟件錯(cuò)誤中修復(fù)應(yīng)用程序的方法,該方法包括 使用至少一個(gè)傳感器監(jiān)控該應(yīng)用程序的錯(cuò)誤,其中該應(yīng)用程序包含代碼;識(shí)別該代碼哪里易受該錯(cuò)誤影響;至少部分地基于該識(shí)別來(lái)隔離該代碼的一部分; 生成該代碼部分的被探測(cè)版本; 至少部分地基于預(yù)測(cè)和該代碼部分構(gòu)造免疫程序; 用該免疫程序模擬該被探測(cè)版本的片段;并且 至少部分地基于該模擬更新該應(yīng)用程序。
18. —種用于從軟件錯(cuò)誤中修復(fù)應(yīng)用程序的系統(tǒng),該系統(tǒng)包括 傳感器,該傳感器監(jiān)控該應(yīng)用程序以及錯(cuò)誤的對(duì)應(yīng)代碼,并且響應(yīng)于檢測(cè)到該錯(cuò)誤隔離導(dǎo)致該錯(cuò)誤的代碼部分;被選擇性地調(diào)用以模擬該代碼部分的指令級(jí)仿真器; 測(cè)試系統(tǒng),該測(cè)試系統(tǒng)^f皮配置為使用仿真器在該代碼部分上評(píng)價(jià)一個(gè)或多個(gè)潛在的免疫程序,其 中該測(cè)試系統(tǒng)在該代碼部分上應(yīng)用導(dǎo)致該錯(cuò)誤的一個(gè)或多個(gè)輸入變 量;并且響應(yīng)于修復(fù)該代碼部分來(lái)更新該應(yīng)用程序,而無(wú)需用戶輸入。
19. 根據(jù)權(quán)利要求18的系統(tǒng),其中所述錯(cuò)誤是以下情況中的至 少一個(gè)計(jì)算機(jī)病毒、蠕蟲(chóng)、木馬、惡意可執(zhí)行程序、探測(cè)器、拒絕 服務(wù)攻擊、資源消耗攻擊、緩沖溢出、緩沖下溢、非法存儲(chǔ)器訪問(wèn)、 被零除、檢查時(shí)間到使用時(shí)間違規(guī)和程序設(shè)計(jì)錯(cuò)誤。
20. 根據(jù)權(quán)利要求18的系統(tǒng),其中所述傳感器包括基于主機(jī)的 傳感器、基于網(wǎng)絡(luò)的傳感器和蜜罐中的一種。
21. 根據(jù)權(quán)利要求18的系統(tǒng),其中所述應(yīng)用程序在服務(wù)器上實(shí) 現(xiàn),并且該系統(tǒng)還包括在模擬該應(yīng)用程序的單獨(dú)服務(wù)器上實(shí)現(xiàn)的蜜
22. 根據(jù)權(quán)利要求18的系統(tǒng),其中所述測(cè)試系統(tǒng)還被配置為記 錄在該代碼的被隔離部分的評(píng)價(jià)期間的存儲(chǔ)器變化。
23. 根據(jù)權(quán)利要求18的系統(tǒng),其中所述測(cè)試系統(tǒng)還被配置為生 成模擬該錯(cuò)誤的出錯(cuò)返回。
24. 根據(jù)權(quán)利要求18的系統(tǒng),其中所述測(cè)試系統(tǒng)還被配置為在 應(yīng)用程序的執(zhí)行期間可能發(fā)生的錯(cuò)誤和該應(yīng)用程序被編程所處理的 一組錯(cuò)誤之間生成映射。
25. 根據(jù)權(quán)利要求18的系統(tǒng),其中所述指令級(jí)仿真器還被配置 為將附加代碼自動(dòng)插入到所述代碼部分中。
26. —種用于從軟件錯(cuò)誤中修復(fù)應(yīng)用程序的方法,該方法包括 定義包含多個(gè)設(shè)備的應(yīng)用程序組;為該多個(gè)設(shè)備中的每一個(gè)指定該應(yīng)用程序的一部分; 接收該多個(gè)設(shè)備之一已經(jīng)檢測(cè)到錯(cuò)誤的指示;并且 響應(yīng)于接收到該多個(gè)設(shè)備之一 已經(jīng)檢測(cè)到錯(cuò)誤的指示,將該錯(cuò)誤 告知該應(yīng)用程序組。
27. 根據(jù)權(quán)利要求26的方法,其中所述指定步驟還包括基于所 述多個(gè)設(shè)備中的每一個(gè)內(nèi)的可用存儲(chǔ)量為該多個(gè)設(shè)備中的每一個(gè)指 定該應(yīng)用程序的一部分。
28. 根據(jù)權(quán)利要求26的方法,其中所述指定步驟還包括基于所 述應(yīng)用程序組的總工作量為所述多個(gè)設(shè)備中的每一個(gè)指定該應(yīng)用程 序的一部分。
29. 根據(jù)權(quán)利要求26的方法,其中所述指定步驟還包括為所述 多個(gè)設(shè)備中的每一 個(gè)任意指定該應(yīng)用程序的 一部分。
30. 根據(jù)權(quán)利要求26的方法,其中所述指定步驟還包括允許每 個(gè)設(shè)備通過(guò)與其他設(shè)備協(xié)商而調(diào)整其工作量。
31. —種用于從軟件錯(cuò)誤中修復(fù)應(yīng)用程序的方法,其中該應(yīng)用程 序包含代碼,所述方法包括定義包含多個(gè)設(shè)備的應(yīng)用程序組;為該多個(gè)設(shè)備中的每一個(gè)指定將要監(jiān)控的錯(cuò)誤;接收該多個(gè)設(shè)備之一 已經(jīng)檢測(cè)到所指定的錯(cuò)誤的指示;并且響應(yīng)于接收到該多個(gè)設(shè)備之一 已經(jīng)檢測(cè)到所指定的錯(cuò)誤的指示, 將該錯(cuò)誤告知該應(yīng)用程序組。
32. 根據(jù)權(quán)利要求31的方法,其中所述指定步驟還包括基于所 述多個(gè)設(shè)備中的每一個(gè)內(nèi)的可用存儲(chǔ)量為該多個(gè)設(shè)備中的每一個(gè)指 定要監(jiān)控的錯(cuò)誤。
33. 根據(jù)權(quán)利要求31的方法,其中所述指定步驟還包括基于所 述應(yīng)用程序組的總工作量為所述多個(gè)設(shè)備中的每一個(gè)指定要監(jiān)控的 錯(cuò)誤。
34. 根據(jù)權(quán)利要求31的方法,其中所述指定步驟還包括為所迷 多個(gè)設(shè)備中的每一個(gè)任意指定要監(jiān)控的錯(cuò)誤。
35. 根據(jù)權(quán)利要求31的方法,其中所述指定步驟還包括允許每 個(gè)設(shè)備通過(guò)與其他設(shè)備協(xié)商而調(diào)整其工作量。
36. —種用于從軟件錯(cuò)誤中修復(fù)應(yīng)用程序的方法,其中該應(yīng)用程 序包含代碼,所述方法包括識(shí)別該應(yīng)用程序的易受錯(cuò)誤影響的源代碼的 一部分; 響應(yīng)于該識(shí)別隔離該源代碼部分;并且將附加代碼自動(dòng)插入到該源代碼的被隔離部分中,其中該附加代 碼將該錯(cuò)誤與該應(yīng)用程序被編程而為之提供出錯(cuò)代碼的其它錯(cuò)誤進(jìn) 行映射,并且其中該附加代碼允許該應(yīng)用程序繼續(xù)運(yùn)行而不會(huì)終止。
37. —種用于〗務(wù)復(fù)應(yīng)用程序的方法,該方法包括 檢測(cè)該應(yīng)用程序中的錯(cuò)誤;響應(yīng)于檢測(cè)到該錯(cuò)誤,隔離與該錯(cuò)誤相關(guān)聯(lián)的應(yīng)用程序的部分;生成基于仿真器的免疫程序以修復(fù)該錯(cuò)誤;響應(yīng)于在該應(yīng)用程序的被隔離部分上應(yīng)用基于仿真器的免疫程 序,確定該基于仿真器的免疫程序是否修復(fù)該錯(cuò)誤;并且響應(yīng)于確定該基于仿真器的免疫程序修復(fù)該錯(cuò)誤,用該基于仿真 器的免疫程序更新該應(yīng)用程序。
38. 根據(jù)權(quán)利要求37的方法,其中所述檢測(cè)錯(cuò)誤還包括使用至 少 一個(gè)傳感器監(jiān)控該應(yīng)用程序的錯(cuò)誤。
39. 根據(jù)權(quán)利要求37的方法,其中所述檢測(cè)錯(cuò)誤還包括確定該 應(yīng)用程序的一個(gè)或多個(gè)部分是否易受外部攻擊影響。
40. 根據(jù)權(quán)利要求37的方法,其中所述檢測(cè)錯(cuò)誤還包括確定該 應(yīng)用程序的一個(gè)或多個(gè)部分是否包含有故障的指令。
41. 一種用于修復(fù)在應(yīng)用程序組的第一和第二成員上操作的應(yīng) 用程序的方法,該方法包括將該應(yīng)用程序劃分成第一和第二部分;將該第一部分指定給該第一成員,以評(píng)估該第一部分內(nèi)的錯(cuò)誤; 將該第二部分指定給該第二成員,以評(píng)估該第二部分內(nèi)的錯(cuò)誤;從該第一成員接收到該第一部分內(nèi)的錯(cuò)誤和被修復(fù)的第一部分的指示;并且將該第一部分內(nèi)的錯(cuò)誤和被修復(fù)的第一部分的指示發(fā)送給該第 二成員。
全文摘要
根據(jù)本發(fā)明,提供了一種允許應(yīng)用程序從軟件錯(cuò)誤和攻擊中自動(dòng)修復(fù)的計(jì)算機(jī)實(shí)現(xiàn)方法和系統(tǒng)。使用一個(gè)或多個(gè)傳感器可以檢測(cè)出該應(yīng)用程序中的錯(cuò)誤。響應(yīng)于檢測(cè)到該錯(cuò)誤,隔離導(dǎo)致該錯(cuò)誤的應(yīng)用程序代碼部分。利用引起該錯(cuò)誤的輸入向量、關(guān)于該錯(cuò)誤的信息(例如錯(cuò)誤類型)、核心轉(zhuǎn)儲(chǔ)文件(例如堆棧跟蹤)等。構(gòu)造修復(fù)該錯(cuò)誤的基于仿真器的免疫程序。響應(yīng)于確認(rèn)該免疫程序已修復(fù)了該錯(cuò)誤的情況,用基于仿真器的免疫程序自動(dòng)更新該應(yīng)用程序,而無(wú)需用戶介入。還提供了有效利用軟件單一結(jié)構(gòu)中可用資源的應(yīng)用程序組的特征。應(yīng)用程序組可以被限定為包括多個(gè)設(shè)備,并且應(yīng)用程序代碼可以被分成較小的代碼部分,這些較小的代碼部分被分配給所述多個(gè)設(shè)備中的每個(gè)設(shè)備以用于監(jiān)控。每個(gè)設(shè)備還將該錯(cuò)誤告知其他設(shè)備。
文檔編號(hào)G06F11/00GK101529385SQ200680026240
公開(kāi)日2009年9月9日 申請(qǐng)日期2006年4月7日 優(yōu)先權(quán)日2005年6月1日
發(fā)明者安格羅斯·D·克羅米蒂斯, 斯蒂利亞諾斯·西迪羅格洛, 邁克爾·E·羅卡斯托 申請(qǐng)人:紐約市哥倫比亞大學(xué)理事會(huì)