專利名稱:通過(guò)操作碼隨機(jī)化的安全的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)安全,尤其涉及操作碼的隨機(jī)化。
背景技術(shù):
大多數(shù)計(jì)算機(jī)系統(tǒng)通過(guò)提供接收?qǐng)?zhí)行基本低級(jí)操作的一個(gè)或多個(gè)操作碼的中央處理單元(CPU)來(lái)工作。一個(gè)示例是流行的英特爾X86體系結(jié)構(gòu),它提供用于移動(dòng)數(shù)據(jù)的指令(例如,mov、push、pop)、對(duì)數(shù)字的數(shù)學(xué)運(yùn)算的指令(例如,add、adc、sub、sbb、div、 fdiv、imul)、邏輯運(yùn)算的指令(例如,and、or、xor)、分支到不同執(zhí)行路徑的指令(例如, jmp、jne、jz、ret)、中斷指令(例如int)等等。編譯器通過(guò)編譯、鏈接和匯編的過(guò)程將軟件開(kāi)發(fā)者用編程語(yǔ)言編寫的人類可讀的源代碼轉(zhuǎn)換成二進(jìn)制操作碼以產(chǎn)生可執(zhí)行文件。在從用戶接收到執(zhí)行可執(zhí)行文件的指令后,操作系統(tǒng)將二進(jìn)制操作碼提供給處理器,處理器執(zhí)行由可執(zhí)行文件表示的程序的指令?,F(xiàn)代程序利用一般涉及使CPU執(zhí)行除了應(yīng)用的作者原先想要的指令之外的指令。 這可包括將新的二進(jìn)制代碼以操作碼的形式插入到應(yīng)用的進(jìn)程中。通常,這通過(guò)超出緩沖器的長(zhǎng)度(即,緩沖器溢出)來(lái)發(fā)生,這么做具有蓋寫函數(shù)的返回地址以使得該函數(shù)的退出導(dǎo)致控制流分支到被插入到緩沖器中的惡意代碼。因?yàn)閼?yīng)用程序布局的可預(yù)測(cè)的本質(zhì),這些攻擊主要以廣泛的方式產(chǎn)生效果。如果每次程序運(yùn)行時(shí)都將數(shù)據(jù)放在同一位置且用同一方法來(lái)處理數(shù)據(jù),則攻擊者能夠可靠地確保同一攻擊向量將在許多計(jì)算機(jī)系統(tǒng)上起作用。這些攻擊全部都以攻擊者理解和預(yù)測(cè)系統(tǒng)行為的能力為基礎(chǔ)。攻擊者需要理解的最基本的行為就是機(jī)器指令代碼集(即操作碼)以及要執(zhí)行什么指令以便獲得所需行為。 為什么許多類型的計(jì)算設(shè)備沒(méi)有像個(gè)人計(jì)算機(jī)那樣頻繁地遭受黑客入侵的一個(gè)很大的因素就是它們使用不同的指令集。例如,許多移動(dòng)電話使用ARM處理器或具有非x86指令集的其他處理器。涉及阻止惡意代碼執(zhí)行的大多數(shù)解決方案依賴于開(kāi)發(fā)期間的阻止、對(duì)惡意代碼的軟件檢測(cè)(例如,反病毒掃描)或管理進(jìn)程狀態(tài)的其他手段(例如,隨機(jī)化堆布局和其他修改的存儲(chǔ)器管理程序)。盡管這些方法取得了一些成功,但惡意代碼執(zhí)行仍然是一個(gè)重大的問(wèn)題。
發(fā)明內(nèi)容
本文描述了一種操作碼模糊系統(tǒng),其當(dāng)應(yīng)用存儲(chǔ)在存儲(chǔ)器中時(shí)改變操作系統(tǒng)或應(yīng)用代碼使用的操作碼的值。應(yīng)用被存儲(chǔ)在存儲(chǔ)器期間的時(shí)間段以及執(zhí)行之前是最常見(jiàn)的注入惡意代碼的時(shí)間。該系統(tǒng)在應(yīng)用代碼被加載時(shí)使應(yīng)用代碼經(jīng)受轉(zhuǎn)換過(guò)程,從而使得具有隨機(jī)指令集的代碼位于存儲(chǔ)器中。如果新的和潛在的惡意代碼被注入到進(jìn)程中,它的指令集將無(wú)法匹配經(jīng)轉(zhuǎn)換的應(yīng)用代碼的指令集。隨著執(zhí)行應(yīng)用代碼的時(shí)間的臨近,該系統(tǒng)使應(yīng)用代碼經(jīng)受將應(yīng)用代碼轉(zhuǎn)換回原始操作碼的逆轉(zhuǎn)換過(guò)程。被注入到進(jìn)程中的任何惡意代碼也將經(jīng)受逆轉(zhuǎn)換,這將檢測(cè)到無(wú)效操作碼,或者具有使惡意代碼執(zhí)行未知且可能無(wú)意義的指令集(可能造成CPU出錯(cuò))的效果。由未結(jié)構(gòu)化的操作碼組成的代碼在引起由操作系統(tǒng)捕捉的、終止進(jìn)程的某種中斷或陷阱之前,一般不會(huì)執(zhí)行很長(zhǎng)時(shí)間。因此,盡管惡意代碼會(huì)引起可察覺(jué)的錯(cuò)誤,但應(yīng)用代碼仍將很好地運(yùn)行。提供本發(fā)明內(nèi)容以便以簡(jiǎn)化的形式介紹將在以下具體實(shí)施方式
中進(jìn)一步描述的一些概念。本發(fā)明內(nèi)容并不旨在標(biāo)識(shí)所要求保護(hù)主題的關(guān)鍵特征或必要特征,也不旨在用于限制所要求保護(hù)主題的范圍。
圖I是示出在一個(gè)實(shí)施例中的操作碼模糊系統(tǒng)的各組件的框圖。圖2是示出在一個(gè)實(shí)施例中,在為了執(zhí)行應(yīng)用代碼之前對(duì)其進(jìn)行保持而將其從存儲(chǔ)加載到模糊域中時(shí),操作碼模糊系統(tǒng)轉(zhuǎn)換應(yīng)用代碼的處理的流程圖。圖3是示出在一個(gè)實(shí)施例中,在應(yīng)用代碼執(zhí)行時(shí),操作碼模糊系統(tǒng)將應(yīng)用代碼從模糊域逆轉(zhuǎn)換到本機(jī)域的處理的流程圖。圖4是示出在一個(gè)實(shí)施例中,在操作碼模糊系統(tǒng)的操作期間,含有可執(zhí)行代碼的模塊的三個(gè)階段的框圖。圖5是示出在一個(gè)實(shí)施例中的操作碼模糊系統(tǒng)提供的保護(hù)以及保護(hù)在什么情況下可發(fā)生的框圖。
具體實(shí)施例方式本文描述了一種當(dāng)應(yīng)用被存儲(chǔ)在存儲(chǔ)器中時(shí)改變操作系統(tǒng)或應(yīng)用代碼使用的操作碼的值的操作碼模糊系統(tǒng)。應(yīng)用被存儲(chǔ)在存儲(chǔ)器期間的時(shí)間段以及在應(yīng)用執(zhí)行之前是最常見(jiàn)的注入惡意代碼到該存儲(chǔ)器中的時(shí)間。該操作碼模糊系統(tǒng)在應(yīng)用代碼被加載時(shí)使應(yīng)用代碼經(jīng)受轉(zhuǎn)換過(guò)程,從而使得具有隨機(jī)或偽隨機(jī)指令集的代碼位于存儲(chǔ)器中。如果新的和潛在的惡意代碼被注入到進(jìn)程中,它的指令集將無(wú)法匹配經(jīng)轉(zhuǎn)換的應(yīng)用代碼的指令集。隨著執(zhí)行應(yīng)用代碼的時(shí)間的臨近,該操作碼模糊系統(tǒng)使應(yīng)用代碼經(jīng)受將應(yīng)用代碼轉(zhuǎn)換回原始操作碼的逆轉(zhuǎn)換過(guò)程。被注入到進(jìn)程中的任何惡意代碼也將經(jīng)受這一轉(zhuǎn)換,這將具有使惡意代碼執(zhí)行未知且可能無(wú)意義的指令集或?qū)?huì)造成CPU出錯(cuò)的效果。由未結(jié)構(gòu)化的操作碼組成的代碼在引起由操作系統(tǒng)捕捉的、終止進(jìn)程的某種中斷或陷阱之前,一般不會(huì)執(zhí)行很長(zhǎng)時(shí)間。逆轉(zhuǎn)換可發(fā)生在硬件或軟件中。例如,處理器可被修改以在執(zhí)行之前執(zhí)行轉(zhuǎn)換。在一種簡(jiǎn)單的實(shí)現(xiàn)中,轉(zhuǎn)換和逆轉(zhuǎn)換組件可共享數(shù)字密鑰,該系統(tǒng)將該數(shù)字密鑰與操作碼一起經(jīng)受異或邏輯運(yùn)算來(lái)創(chuàng)建容易逆轉(zhuǎn)但有效的轉(zhuǎn)換過(guò)程。以此方式,盡管惡意代碼會(huì)引起可察覺(jué)的錯(cuò)誤,但應(yīng)用代碼仍將很好地運(yùn)行。除了隨機(jī)或無(wú)意義的操作碼之外,存在檢測(cè)是否被注入了惡意代碼的許多可能的手段。例如,如果發(fā)現(xiàn)無(wú)效的隨機(jī)化操作碼,則逆轉(zhuǎn)換組件可生成差錯(cuò)。 該組件還可確認(rèn)任何給定操作碼的自變量且如果遇到無(wú)效自變量則報(bào)錯(cuò)。通過(guò)在機(jī)器操作碼存儲(chǔ)在存儲(chǔ)器中時(shí)隨機(jī)化機(jī)器操作碼的實(shí)際值,操作碼模糊系統(tǒng)阻止了攻擊者可能利用的可預(yù)測(cè)的機(jī)器行為。一種副作用是自修改代碼也受到影響,雖然不太常見(jiàn)。隨機(jī)化在機(jī)器的生存期至少發(fā)生一次,但還可每次引導(dǎo)甚至每個(gè)進(jìn)程發(fā)生一次,取決于硬件設(shè)計(jì)。理想地,操作碼隨機(jī)化將得到正交的結(jié)果集,所以不發(fā)生碰撞(例如, xnx'=0)o所得的兩個(gè)集之間的公共操作碼集越小,逆轉(zhuǎn)換越可能預(yù)先檢測(cè)到惡意代碼。
5在某些實(shí)施例中,操作碼模糊系統(tǒng)隨機(jī)化機(jī)器操作碼,并使用查找表來(lái)將經(jīng)移位的操作碼轉(zhuǎn)換成對(duì)CPU而言是本機(jī)的操作碼。該系統(tǒng)經(jīng)操作系統(tǒng)在逐進(jìn)程的基礎(chǔ)上應(yīng)用這一技術(shù)。 例如,該系統(tǒng)可招致性能損失,使得系統(tǒng)實(shí)現(xiàn)者選擇將該系統(tǒng)應(yīng)用于更易受攻擊的進(jìn)程而不將該系統(tǒng)應(yīng)用于受信的或性能重要的進(jìn)程。因此,操作碼模糊系統(tǒng)保護(hù)計(jì)算設(shè)備和所選進(jìn)程免受惡意代碼并為應(yīng)用提供更安全的執(zhí)行環(huán)境。在某些實(shí)施例中,操作碼模糊系統(tǒng)充分利用對(duì)計(jì)算機(jī)硬件和操作系統(tǒng)兩者的修改來(lái)執(zhí)行本文描述的應(yīng)用進(jìn)程。在以下段落中進(jìn)一步描述選擇修改。另外,可能的實(shí)現(xiàn)上存在許多可能的變型,取決于適于特定實(shí)現(xiàn)目標(biāo)的保護(hù)級(jí)別(例如,是只保護(hù)特定進(jìn)程還是保護(hù)在機(jī)器上運(yùn)行的所有可執(zhí)行代碼)。在第一種變型中,操作碼模糊系統(tǒng)保護(hù)所有的可執(zhí)行代碼。在這種情況下,保護(hù)存儲(chǔ)器中的任何可執(zhí)行頁(yè),且加載到可執(zhí)行頁(yè)中的所有代碼都經(jīng)受轉(zhuǎn)換過(guò)程以變更操作碼。 現(xiàn)代CPU提供對(duì)存儲(chǔ)器中的頁(yè)的指定,該指定確定特定頁(yè)是否可被執(zhí)行(例如,用于X86處理器的NX “不執(zhí)行”位)。在硬件支持不可用的情況下,許多操作系統(tǒng)已經(jīng)被修改為在分配和管理虛擬存儲(chǔ)器頁(yè)的存儲(chǔ)器管理單元(MMU)中提供類似的支持。這種變型提供了簡(jiǎn)易性,因?yàn)楸Wo(hù)所有代碼,但也可招致某些計(jì)算設(shè)備無(wú)法接受的性能折衷。在第二中變型中,操作碼模糊系統(tǒng)只保護(hù)具體標(biāo)記的進(jìn)程。在這種情況下,特定進(jìn)程被標(biāo)記為受保護(hù)的,且用于存儲(chǔ)操作碼的頁(yè)被標(biāo)記為“受保護(hù)執(zhí)行”或可由CPU和/或操作系統(tǒng)和MMU解釋的另一指定。如前所述,存在與將操作碼從它們的本機(jī)域轉(zhuǎn)換到經(jīng)變更的域以及再將它們轉(zhuǎn)換回來(lái)相關(guān)聯(lián)的某些成本。通過(guò)只保護(hù)特定進(jìn)程,實(shí)現(xiàn)者可在任何有用的地方(例如,在處理未證實(shí)的輸入時(shí))充分利用操作碼模糊系統(tǒng)的保護(hù),而在其他位置避免性能損失。本文描述的保護(hù)可發(fā)生在各個(gè)位置,諸如在沒(méi)有CPU高速緩存時(shí)可發(fā)生在CPU中, 在有CPU高速緩存時(shí)可發(fā)生在CPU的高速緩存控制器中,或者在有CPU外高速緩存時(shí)可發(fā)生在高速緩存控制器中,可發(fā)生在MMU中等等。在高速緩存控制器保護(hù)代碼的情況下,當(dāng)代碼被加載到存儲(chǔ)器中時(shí),操作系統(tǒng)調(diào)用指示高速緩存控制器應(yīng)用本機(jī)和變更操作碼域之間的操作碼映射的例程。相反,在CPU中的高速緩存代碼加載存儲(chǔ)器時(shí),高速緩存控制器將執(zhí)行從變更域到本機(jī)域的反向轉(zhuǎn)換。因此,在CPU高速緩存內(nèi),指令將在本機(jī)域中。以非正式的方式加載的任何代碼將經(jīng)受第二轉(zhuǎn)換而非第一轉(zhuǎn)換,從而導(dǎo)致不可預(yù)測(cè)的操作。這一解決方法允許容易維護(hù)CPU高速緩存內(nèi)的現(xiàn)有分支預(yù)測(cè)代碼。在CPU保護(hù)代碼的情況下,在變更域中,甚至在CPU 2級(jí)高速緩存中維護(hù)可執(zhí)行代碼,且在I級(jí)高速緩存中完成轉(zhuǎn)換或在評(píng)估之前直接由處理器完成轉(zhuǎn)換。處理器負(fù)責(zé)將可執(zhí)行代碼加載到存儲(chǔ)器中,并且由此可實(shí)施其他約束(諸如足以加載可執(zhí)行代碼的特定特權(quán)級(jí)別)。這種變型提供了較高的安全級(jí)別,因?yàn)榭蓤?zhí)行代碼在它的本機(jī)域中只停留了很短的時(shí)間段,但這種變型涉及可能昂貴的CPU的再次工作或性能降級(jí)。圖I是示出在一個(gè)實(shí)施例中的操作碼模糊系統(tǒng)的各組件的框圖。系統(tǒng)100包括代碼加載組件110、操作碼轉(zhuǎn)換組件120、代碼數(shù)據(jù)存儲(chǔ)130、代碼執(zhí)行組件140、逆轉(zhuǎn)換組件 150、錯(cuò)誤檢測(cè)組件160和進(jìn)程選擇組件170。這些組件中的每一個(gè)都在此處進(jìn)一步詳細(xì)討論。代碼加載組件110將可執(zhí)行代碼從存儲(chǔ)位置加載到預(yù)執(zhí)行存儲(chǔ)區(qū)域。預(yù)執(zhí)行存儲(chǔ)區(qū)域可包括個(gè)人計(jì)算機(jī)的主存儲(chǔ)器、一個(gè)或多個(gè)高速緩存級(jí)等等。對(duì)于具有固態(tài)持久存儲(chǔ)的設(shè)備,組件110可將可執(zhí)行代碼的一部分預(yù)先高速緩存或存儲(chǔ)在固態(tài)存儲(chǔ)設(shè)備(例如,微軟 WINDOWS Ready Boost)中。代碼加載組件110接收從操作系統(tǒng)外殼或加載器加載可執(zhí)行代碼的請(qǐng)求,并標(biāo)識(shí)與可執(zhí)行代碼相關(guān)聯(lián)的一個(gè)或多個(gè)模塊。在某些實(shí)施例中,代碼加載組件110可被內(nèi)置于操作系統(tǒng)的加載器中以截取加載應(yīng)用代碼的所有請(qǐng)求,或者被內(nèi)置于基本輸入輸出系統(tǒng)(BIOS)或其他固件層中,諸如可擴(kuò)展固件接口(EFI)。操作碼轉(zhuǎn)換組件120將經(jīng)加載的可執(zhí)行代碼從本機(jī)域轉(zhuǎn)換到模糊域。代碼轉(zhuǎn)換修改至少操作碼以及可執(zhí)行代碼的指令流中的可能的其他數(shù)據(jù),從而造成難以預(yù)測(cè)可執(zhí)行代碼的變更。在某些實(shí)施例中,該系統(tǒng)在計(jì)算機(jī)系統(tǒng)每次引導(dǎo)時(shí)或在每一進(jìn)程啟動(dòng)時(shí)選擇隨機(jī)數(shù)或加密鹽并用某種方式使用該值來(lái)滾動(dòng)操作碼(例如,邏輯XOR或其他可逆運(yùn)算)。即使計(jì)算機(jī)系統(tǒng)在安裝操作系統(tǒng)時(shí)只選擇了隨機(jī)數(shù),用來(lái)模糊操作碼的每一計(jì)算機(jī)系統(tǒng)具有可能不同的數(shù)的這一事實(shí)也可使得惡意代碼作者感到灰心并使得難以在計(jì)算機(jī)系統(tǒng)上安裝將作出任何破壞的代碼。隨機(jī)數(shù)生成器的強(qiáng)度、密鑰大小和系統(tǒng)熵將確定共享同一變更域的機(jī)器的實(shí)際數(shù)量。代碼數(shù)據(jù)存儲(chǔ)130存儲(chǔ)經(jīng)加載的和經(jīng)轉(zhuǎn)換的可執(zhí)行代碼以供稍后執(zhí)行。代碼數(shù)據(jù)存儲(chǔ)130可包括一個(gè)或多個(gè)存儲(chǔ)器內(nèi)的數(shù)據(jù)結(jié)構(gòu)、文件、文件系統(tǒng)、硬盤驅(qū)動(dòng)器、數(shù)據(jù)庫(kù)、基于云的存儲(chǔ)服務(wù)或用于存儲(chǔ)數(shù)據(jù)的其他設(shè)施。如今的計(jì)算機(jī)系統(tǒng)運(yùn)行許多類型的應(yīng)用代碼,包括在安裝在代碼要在其上運(yùn)行的計(jì)算設(shè)備上之后經(jīng)受即時(shí)(JIT)編譯的托管應(yīng)用代碼。例如,微軟 NET生產(chǎn)了從中間語(yǔ)言(IL)代碼中編譯的且準(zhǔn)備好被加載并在計(jì)算機(jī)系統(tǒng)上運(yùn)行的模塊的全局匯編高速緩存(GAC)。在某些實(shí)施例中,操作碼轉(zhuǎn)換組件120可在這一階段操作以在程序模塊被JIT編譯時(shí)對(duì)它們進(jìn)行模糊處理。每一次請(qǐng)求加載更傳統(tǒng)的本機(jī)應(yīng)用代碼時(shí),可在存儲(chǔ)器中轉(zhuǎn)換該代碼,或者系統(tǒng)可高速緩存本機(jī)應(yīng)用代碼的經(jīng)轉(zhuǎn)換的版本。如今某些操作系統(tǒng)產(chǎn)生模塊的預(yù)先提取的存儲(chǔ)器截圖以加速執(zhí)行(例如,微軟 WINDOWS Superfetch),且可修改這些特征以執(zhí)行并高速緩存上述轉(zhuǎn)換。這節(jié)約了進(jìn)程執(zhí)行期間的時(shí)間,因?yàn)槎M(jìn)制代碼的經(jīng)轉(zhuǎn)換的版本在高速緩存中可能已經(jīng)準(zhǔn)備好可供使用。代碼執(zhí)行組件140接收要執(zhí)行所標(biāo)識(shí)的存儲(chǔ)器內(nèi)的程序代碼的指令。組件140可作為操作系統(tǒng)的存儲(chǔ)器管理程序的一部分來(lái)操作,或者位于在可執(zhí)行頁(yè)要執(zhí)行的時(shí)間略前將其從存儲(chǔ)器加載到CPU高速緩存的CPU控制器或高速緩存控制器內(nèi)。代碼執(zhí)行組件140 可從代碼數(shù)據(jù)存儲(chǔ)130訪問(wèn)經(jīng)轉(zhuǎn)換的可執(zhí)行代碼并調(diào)用逆轉(zhuǎn)換組件150來(lái)逆轉(zhuǎn)該轉(zhuǎn)換。如果自轉(zhuǎn)換時(shí)起經(jīng)轉(zhuǎn)換的代碼已經(jīng)被修改過(guò),諸如由于緩沖器溢出而被注入了惡意代碼,則逆轉(zhuǎn)換組件150將原始程序代碼轉(zhuǎn)換成本機(jī)域操作碼并將惡意代碼轉(zhuǎn)換成混亂的或引起錯(cuò)誤的操作碼。逆轉(zhuǎn)換組件150逆轉(zhuǎn)操作碼轉(zhuǎn)換組件120的轉(zhuǎn)換,以將模糊域可執(zhí)行代碼轉(zhuǎn)換成處理器可執(zhí)行的本機(jī)域可執(zhí)行代碼。逆轉(zhuǎn)換組件150可在CPU中操作以轉(zhuǎn)化傳入指令流, 可在MMU中操作,可在操作系統(tǒng)的各組件中操作,等等。逆轉(zhuǎn)換組件150可接收原始轉(zhuǎn)換所使用的隨機(jī)數(shù)或加密鹽以使得轉(zhuǎn)換過(guò)程可被逆轉(zhuǎn)。在用邏輯XOR來(lái)置亂操作碼的情況中, 逆轉(zhuǎn)換簡(jiǎn)單地再次執(zhí)行同一操一作,而輸出是原始操作碼集。在更復(fù)雜的實(shí)現(xiàn)中,操作碼轉(zhuǎn)換組件120和逆轉(zhuǎn)換組件150可采用公鑰/私鑰對(duì)或其他匹配密鑰集來(lái)轉(zhuǎn)換和逆轉(zhuǎn)換操作碼。
錯(cuò)誤檢測(cè)組件160檢測(cè)執(zhí)行流中的錯(cuò)誤操作碼。操作碼因?yàn)橐韵略蚨赡苁清e(cuò)誤的因?yàn)樗鼈兪菬o(wú)效的、因?yàn)樗鼈儾贿m合特定上下文、因?yàn)樗鼈冊(cè)L問(wèn)了該指令不具有訪問(wèn)權(quán)的數(shù)據(jù)(例如,訪問(wèn)違規(guī))、因?yàn)樗鼈円鹆酥袛嗷蛞绯龅鹊?。逆轉(zhuǎn)換過(guò)程使得在應(yīng)用最初被加載時(shí)被置于應(yīng)用的可執(zhí)行空間中的任何惡意代碼被轉(zhuǎn)換成隨機(jī)或無(wú)意義操作碼或者引起差錯(cuò)。因?yàn)檎3绦虿僮鞔a的精確且仔細(xì)制作的本質(zhì),隨機(jī)操作碼將很快地引起某種類型或另一類型的錯(cuò)誤,或者可容易地被檢測(cè)為超出范圍或是無(wú)效的。此時(shí),錯(cuò)誤檢測(cè)組件160檢測(cè)到該錯(cuò)誤并采取適當(dāng)?shù)膭?dòng)作,諸如終止該應(yīng)用進(jìn)程。檢測(cè)錯(cuò)誤可通過(guò)對(duì)錯(cuò)誤代碼設(shè)陷阱并避免對(duì)數(shù)據(jù)的破壞的正常CPU和操作系統(tǒng)機(jī)制來(lái)發(fā)生。進(jìn)程選擇組件170選擇要對(duì)哪些進(jìn)程應(yīng)用操作碼轉(zhuǎn)換組件120以產(chǎn)生模糊操作碼。在某些實(shí)施例中,系統(tǒng)100不對(duì)所有進(jìn)程應(yīng)用轉(zhuǎn)換,而進(jìn)程選擇組件170確定給定的進(jìn)程是否要接收轉(zhuǎn)換。該系統(tǒng)從用戶或操作系統(tǒng)廠商接收標(biāo)識(shí)了要為其轉(zhuǎn)換操作碼的進(jìn)程的配置信息。在某些實(shí)施例中,操作系統(tǒng)廠商可簽署被允許在平臺(tái)上運(yùn)行的二進(jìn)制代碼,并使未簽署的或不受信的二進(jìn)制代碼遭受轉(zhuǎn)換而受信代碼不必遭受轉(zhuǎn)換。作為另一示例,系統(tǒng) 100可只對(duì)與網(wǎng)絡(luò)交互或不與網(wǎng)絡(luò)交互的代碼執(zhí)行轉(zhuǎn)換。這些和其他變型可用于系統(tǒng)100 以實(shí)現(xiàn)合適的安全和性能級(jí)別。其上實(shí)現(xiàn)操作碼模糊系統(tǒng)的計(jì)算設(shè)備可包括中央處理單元、存儲(chǔ)器、輸入設(shè)備 (例如,鍵盤和定點(diǎn)設(shè)備)、輸出設(shè)備(例如,顯示設(shè)備),以及存儲(chǔ)設(shè)備(例如,磁盤驅(qū)動(dòng)器或其他非易失性存儲(chǔ)介質(zhì))。存儲(chǔ)器和存儲(chǔ)設(shè)備是可以用實(shí)現(xiàn)或啟用該系統(tǒng)的計(jì)算機(jī)可執(zhí)行指令(例如,軟件)來(lái)編碼的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)。另外,數(shù)據(jù)結(jié)構(gòu)和消息結(jié)構(gòu)可被存儲(chǔ)或經(jīng)由諸如通信鏈路上的信號(hào)等數(shù)據(jù)傳送介質(zhì)發(fā)送??梢允褂酶鞣N通信鏈路,諸如因特網(wǎng)、 局域網(wǎng)、廣域網(wǎng)、點(diǎn)對(duì)點(diǎn)撥號(hào)連接、蜂窩電話網(wǎng)絡(luò)等。該系統(tǒng)的實(shí)施例可以在各種操作環(huán)境中實(shí)現(xiàn),這些操作環(huán)境包括個(gè)人計(jì)算機(jī)、服務(wù)器計(jì)算機(jī)、手持式或膝上型設(shè)備、多處理器系統(tǒng)、基于微處理器的系統(tǒng)、可編程消費(fèi)電子產(chǎn)品、數(shù)碼照相機(jī)、網(wǎng)絡(luò)PC、小型計(jì)算機(jī)、大型計(jì)算機(jī)、包括任何上述系統(tǒng)或設(shè)備、機(jī)頂盒、片上系統(tǒng)(SOC)等中任一種的分布式計(jì)算環(huán)境等。計(jì)算機(jī)系統(tǒng)可以是蜂窩電話、個(gè)人數(shù)字助理、智能電話、個(gè)人計(jì)算機(jī)、可編程消費(fèi)電子設(shè)備、數(shù)碼相機(jī)等。該系統(tǒng)可以在由一個(gè)或多個(gè)計(jì)算機(jī)或其他設(shè)備執(zhí)行的諸如程序模塊等計(jì)算機(jī)可執(zhí)行指令的通用上下文中描述。一般而言,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、對(duì)象、組件、數(shù)據(jù)結(jié)構(gòu)等等。通常,程序模塊的功能可在各個(gè)實(shí)施例中按需進(jìn)行組合或分布。圖2是示出在一個(gè)實(shí)施例中,在為了執(zhí)行應(yīng)用代碼之前對(duì)其進(jìn)行保持而將其從存儲(chǔ)加載到模糊域中時(shí),操作碼模糊系統(tǒng)轉(zhuǎn)換應(yīng)用代碼的處理的流程圖。圖2和3中描述的過(guò)程通常連續(xù)地發(fā)生,這些過(guò)程之間經(jīng)過(guò)某一時(shí)間量。在該時(shí)間期間,應(yīng)用代碼通常位于存儲(chǔ)器中,在該情況下應(yīng)用代碼易遭受惡意黑客企圖的干擾。參考圖2描述的轉(zhuǎn)換過(guò)程呈現(xiàn)由于圖3的逆轉(zhuǎn)換而無(wú)效的黑客企圖,這將具有使得原始應(yīng)用代碼正常執(zhí)行以及任何惡意代碼執(zhí)行弓I起可檢測(cè)的錯(cuò)誤的未預(yù)期的操作的凈效果。在框210中開(kāi)始,系統(tǒng)接收指定要加載到進(jìn)程中以供執(zhí)行的一個(gè)或多個(gè)可執(zhí)行模塊的模塊執(zhí)行請(qǐng)求。操作系統(tǒng)通常定義用于包含可執(zhí)行二進(jìn)制代碼的可執(zhí)行模塊的二進(jìn)制模塊格式,諸如可移植可執(zhí)行(PE)格式。模塊可靜態(tài)地引用其他模塊(例如,PE圖像的導(dǎo)入表),和動(dòng)態(tài)地加載其他模塊(例如,通過(guò)調(diào)用微軟 WIN32 平臺(tái)上LoadLibrary/ GetProcAddress)。相比于在應(yīng)用的執(zhí)行期間在該進(jìn)程外加載的二進(jìn)制代碼,以此方式加載的二進(jìn)制代碼可被信任是無(wú)害的或受到其他機(jī)制的保護(hù),諸如代碼簽署。在框220中繼續(xù),系統(tǒng)標(biāo)識(shí)指定的可執(zhí)行模塊中的可執(zhí)行代碼。在大部分情況下, 模塊的已知格式將指示模塊中包含可執(zhí)行代碼的部分。例如,PE圖像常常包含指定模塊內(nèi)可執(zhí)行代碼的入口點(diǎn)的“文本”部分或頭部。對(duì)于預(yù)先高速緩存或JIT編譯的代碼,計(jì)算機(jī)系統(tǒng)可包含標(biāo)識(shí)可執(zhí)行區(qū)域的調(diào)試符號(hào)或其他元數(shù)據(jù)。在框230中繼續(xù),系統(tǒng)加載所標(biāo)識(shí)的可執(zhí)行代碼。操作系統(tǒng)加載程序通常處理可執(zhí)行代碼的加載,包括處理任何靜態(tài)鏈接的模塊、二進(jìn)制重定位以避免地址空間沖突、指令流中的絕對(duì)地址的修補(bǔ)等等。操作碼模糊系統(tǒng)掛鉤或修改加載程序進(jìn)程以插入將可執(zhí)行代碼的操作碼從本機(jī)域轉(zhuǎn)換到模糊域的步驟。作為一個(gè)簡(jiǎn)單的示例,系統(tǒng)可向每一操作碼加 0x20從而使得0x55 (PUSH EBP,在函數(shù)入口處常見(jiàn)的x86棧幀的建立)變成0x75 (如果執(zhí)行將是JNE指令)。在判定框240中繼續(xù),如果系統(tǒng)確定當(dāng)前過(guò)程將由操作碼轉(zhuǎn)換保護(hù),則系統(tǒng)在框 260繼續(xù),否則系統(tǒng)在框250繼續(xù)。在框250中繼續(xù),系統(tǒng)存儲(chǔ)已加載的、未轉(zhuǎn)換的可執(zhí)行代碼以供正常執(zhí)行。系統(tǒng)可將存儲(chǔ)器中的代碼存儲(chǔ)在先前分配的、被標(biāo)記為以供執(zhí)行的頁(yè)中。在框250后,系統(tǒng)完成。在框260中繼續(xù),系統(tǒng)將已加載的可執(zhí)彳丁從本機(jī)域轉(zhuǎn)換到I旲糊域。在某些實(shí)施例中,系統(tǒng)反匯編可執(zhí)行代碼以標(biāo)識(shí)每一操作碼,隨后使用良好定義的且可逆的過(guò)程來(lái)加擾操作碼,不過(guò)該過(guò)程是惡意代碼難以預(yù)測(cè)的。因?yàn)閻阂獯a無(wú)法正確地加擾其自身,所以參考圖3描述的去除干擾過(guò)程將把惡意軟件呈現(xiàn)為無(wú)害于它最初的目的。在框270中繼續(xù),系統(tǒng)存儲(chǔ)經(jīng)轉(zhuǎn)換的可執(zhí)行代碼以準(zhǔn)備執(zhí)行。系統(tǒng)可將可執(zhí)行代碼存儲(chǔ)在主存儲(chǔ)器中、存儲(chǔ)在快速存儲(chǔ)器高速緩存中、或者存儲(chǔ)準(zhǔn)備好被執(zhí)行的代碼的另一位置中。當(dāng)執(zhí)行代碼的時(shí)間到來(lái)時(shí),系統(tǒng)逆轉(zhuǎn)如參考圖3所述的轉(zhuǎn)換過(guò)程。在框270之后,這些步驟結(jié)束。圖3是示出在一個(gè)實(shí)施例中,在應(yīng)用代碼執(zhí)行時(shí),操作碼模糊系統(tǒng)將應(yīng)用代碼從模糊域逆轉(zhuǎn)換到本機(jī)域的處理的流程圖。在框310中開(kāi)始,系統(tǒng)標(biāo)識(shí)應(yīng)用代碼的當(dāng)前執(zhí)行位置。該標(biāo)識(shí)可包括接收正從存儲(chǔ)器請(qǐng)求可執(zhí)行頁(yè)的通知、遵循CPU的指令指針的通知、在 CPU中操作以預(yù)先處理指令流的通知等等。系統(tǒng)等到足夠接近指出要被執(zhí)行的操作碼的時(shí)間才逆轉(zhuǎn)換存儲(chǔ)在存儲(chǔ)器中的代碼的操作碼,以減小惡意代碼可能滲入合法應(yīng)用代碼的時(shí)間窗口。在框320中繼續(xù),系統(tǒng)基于所標(biāo)識(shí)的當(dāng)前執(zhí)行位置來(lái)檢索要被執(zhí)行的下一批代碼。該批可包括存儲(chǔ)器頁(yè)、函數(shù)、接下來(lái)的N個(gè)操作碼或代碼的其他子集。例如,系統(tǒng)可在操作系統(tǒng)存儲(chǔ)器管理程序中操作以檢測(cè)存儲(chǔ)器的可執(zhí)行頁(yè)的訪問(wèn),或在CPU內(nèi)操作以準(zhǔn)備要執(zhí)行的指令流。在判定框330中繼續(xù),如果系統(tǒng)確定下一批代碼已經(jīng)被轉(zhuǎn)換到模糊域,則系統(tǒng)在框340繼續(xù),否則系統(tǒng)在框350繼續(xù)。允許未轉(zhuǎn)換的代碼照常執(zhí)行,除非系統(tǒng)被設(shè)置成轉(zhuǎn)換所有代碼。操作碼模糊系統(tǒng)允許操作系統(tǒng)或應(yīng)用請(qǐng)求只用所述過(guò)程保護(hù)某些代碼的安全, 而系統(tǒng)基于代碼是否被標(biāo)記為已經(jīng)經(jīng)歷參考圖2所述的初始轉(zhuǎn)換來(lái)有條件地逆轉(zhuǎn)該過(guò)程。在框340中繼續(xù),系統(tǒng)將檢索到的該批代碼從模糊域逆轉(zhuǎn)換到處理器可執(zhí)行的本機(jī)域。例如,本機(jī)域可包括英特爾x86指令集,而模糊域可包括x86指令集的隨機(jī)擾動(dòng)。逆轉(zhuǎn)換將逆轉(zhuǎn)操作應(yīng)用于先前被應(yīng)用的轉(zhuǎn)換,并為合法的應(yīng)用代碼產(chǎn)生準(zhǔn)備由處理器執(zhí)行的二進(jìn)制代碼。對(duì)于在原始轉(zhuǎn)換時(shí)不存在的惡意代碼,逆轉(zhuǎn)換過(guò)程產(chǎn)生不可預(yù)測(cè)的、易于出錯(cuò)的二進(jìn)制代碼,預(yù)期該二進(jìn)制代碼很快將產(chǎn)生一個(gè)或多個(gè)可檢測(cè)的錯(cuò)誤。在判定框345中繼續(xù),如果系統(tǒng)在逆轉(zhuǎn)換期間檢測(cè)到報(bào)錯(cuò),則系統(tǒng)跳轉(zhuǎn)至框370以終止過(guò)程,否則系統(tǒng)在框 350中繼續(xù)。在框350中繼續(xù),系統(tǒng)將經(jīng)逆轉(zhuǎn)換的代碼提交給處理器以供執(zhí)行。如果代碼是正常應(yīng)用代碼,則它將如程序的作者所設(shè)計(jì)的那樣執(zhí)行以執(zhí)行任何它期望的目的。然而如果代碼包含被逆轉(zhuǎn)換過(guò)程加擾的惡意程序代碼,則它在產(chǎn)生某種類型的錯(cuò)誤(例如,訪問(wèn)違規(guī)、范圍錯(cuò)誤、溢出等等)之前可能執(zhí)行若干指令。在判定框360中繼續(xù),如果系統(tǒng)檢測(cè)到執(zhí)行錯(cuò)誤,則系統(tǒng)在框370中繼續(xù),否則系統(tǒng)完成。執(zhí)行錯(cuò)誤可包括由處理器或操作系統(tǒng)設(shè)陷捕捉到的一個(gè)或多個(gè)異常,諸如中斷、訪問(wèn)違規(guī)、保護(hù)報(bào)錯(cuò)等等。在某些實(shí)施例中,系統(tǒng)使用查找表來(lái)逆轉(zhuǎn)換可執(zhí)行代碼。系統(tǒng)可用已知的錯(cuò)誤指令來(lái)替換要轉(zhuǎn)換無(wú)效操作碼的任何請(qǐng)求。在大多數(shù)指令集中,存在未使用的、 被棄用的、被保留以供將來(lái)使用等的操作碼。系統(tǒng)可將這些代碼轉(zhuǎn)換為例如中斷,以進(jìn)一步確保要執(zhí)行經(jīng)加擾的惡意代碼的嘗試將產(chǎn)生異常或其他異常停機(jī)結(jié)果。在框370中繼續(xù),系統(tǒng)終止應(yīng)用代碼的執(zhí)行。系統(tǒng)可向用戶顯示錯(cuò)誤、提供附連一調(diào)試程序、或向中央服務(wù)提交自動(dòng)錯(cuò)誤報(bào)告以供將來(lái)處理。在任何情況下,應(yīng)用代碼在它已經(jīng)被破壞之后不會(huì)繼續(xù)運(yùn)行很長(zhǎng)時(shí)間,從而確保惡意代碼無(wú)法進(jìn)行任何破壞。在框370之后,這些步驟結(jié)束。圖4是示出在一個(gè)實(shí)施例中,在操作碼模糊系統(tǒng)的操作期間,含有可執(zhí)行代碼的模塊的三個(gè)階段的框圖。第一階段410示出模塊的存儲(chǔ)在磁盤上的版本。該模塊包括一個(gè)或多個(gè)函數(shù)440或用于執(zhí)行模塊的目的的其他可執(zhí)行代碼。操作碼模糊系統(tǒng)將該模塊加載到存儲(chǔ)器中以產(chǎn)生第二階段420。該圖的陰影區(qū)域示出使用本文描述的技術(shù)被轉(zhuǎn)換或加擾的區(qū)域。如第二階段420所示,函數(shù)450在該模塊被加載時(shí)被轉(zhuǎn)換。稍后,惡意代碼460通過(guò)緩沖器溢出或其他攻擊向量將它本身注入到模塊中。因?yàn)閻阂獯a460在模塊被加載時(shí)還不在,所以它未使用本文描述的技術(shù)來(lái)進(jìn)行轉(zhuǎn)換。第三階段430示出模塊處于馬上要執(zhí)行的狀態(tài)。它可能被保持在CPU高速緩存中、存儲(chǔ)器高速緩存中、或CPU內(nèi)馬上要執(zhí)行的其他位置中。系統(tǒng)已經(jīng)逆轉(zhuǎn)了模塊的可執(zhí)行代碼的轉(zhuǎn)換過(guò)程,具有函數(shù)470回到它們?cè)碱A(yù)先轉(zhuǎn)換的狀態(tài)的效果,但惡意代碼480已經(jīng)被加擾了。在模塊執(zhí)行時(shí),函數(shù)470將照常工作, 但惡意代碼480將產(chǎn)生包括一個(gè)或多個(gè)錯(cuò)誤的非預(yù)期的結(jié)果。以此方式,操作碼模糊系統(tǒng)使得進(jìn)程的執(zhí)行更安全。圖5是示出在一個(gè)實(shí)施例中的操作碼模糊系統(tǒng)提供的保護(hù)以及保護(hù)在什么情況下可發(fā)生的框圖。該圖包括主存儲(chǔ)器510、CPU前高速緩存520以及CPU 530(它還可具有一個(gè)或多個(gè)內(nèi)部的高速緩存層)。在所示的實(shí)施例中,系統(tǒng)在將代碼加載到主存儲(chǔ)器510中之前轉(zhuǎn)換代碼的操作碼,而高速緩存控制器或其他實(shí)體在代碼從主存儲(chǔ)器510移動(dòng)至高速緩存520時(shí)轉(zhuǎn)換操作碼。因此,在高速緩存520和CPU 530周圍存在概念上受信的區(qū)域540。 注意,系統(tǒng)在各實(shí)施例中可被實(shí)現(xiàn)為用不同方式來(lái)定位受信區(qū)域540。例如,在某些實(shí)施例中,受信區(qū)域540可包括CPU 530但不包括高速緩存520。
在某些實(shí)施例中,操作碼模糊系統(tǒng)轉(zhuǎn)換數(shù)據(jù)以及操作碼。某些指令集比其他指令集更難以標(biāo)識(shí)操作碼。例如,復(fù)雜指令集架構(gòu)(CISC)常常包括可變長(zhǎng)度的操作碼,從而使得在不反匯編的情況下難以分辨一條代碼在哪里停止而另一條代碼在哪里開(kāi)始。在這樣的情況下,系統(tǒng)可選擇轉(zhuǎn)換整個(gè)指令流,包括諸如跳轉(zhuǎn)地址、操作數(shù)值等的任何數(shù)據(jù)。還對(duì)數(shù)據(jù)進(jìn)行轉(zhuǎn)換沒(méi)有壞處,因?yàn)樗€會(huì)由逆轉(zhuǎn)換過(guò)程被反向轉(zhuǎn)換,除了會(huì)招致潛在的額外時(shí)間。 然而,匹配值是相對(duì)快速的操作。在某些實(shí)施例中,操作碼模糊系統(tǒng)可將逆轉(zhuǎn)換階段定位在各個(gè)級(jí)別處。例如,逆轉(zhuǎn)換可發(fā)生在主存儲(chǔ)器中、發(fā)生在MMU中、發(fā)生在2級(jí)高速緩存中、發(fā)生在I級(jí)高速緩存中或發(fā)生在CPU本身中。系統(tǒng)實(shí)現(xiàn)者可基于安全的目標(biāo)級(jí)別和安排在各個(gè)階段的成本來(lái)選擇定位。一般地,轉(zhuǎn)換發(fā)生得越晚且越接近CPU,進(jìn)程將越安全。然而,較晚階段的轉(zhuǎn)換還涉及成本可能很高的硬件修改,諸如修訂的CPU。類似地,前向轉(zhuǎn)換可發(fā)生在各個(gè)階段,諸如在磁盤上、在加載期間、在主存儲(chǔ)器中等等。一般地,轉(zhuǎn)換將在應(yīng)用代碼位于存儲(chǔ)器中以等待執(zhí)行之前發(fā)生。從前面的描述中可以看出,可以理解,此處描述的操作碼模糊系統(tǒng)的特定實(shí)施例只是為了說(shuō)明,但是,在不偏離本發(fā)明的精神和范圍的情況下,可以進(jìn)行各種修改。因此,本發(fā)明只受所附權(quán)利要求限制。
權(quán)利要求
1.一種計(jì)算機(jī)實(shí)現(xiàn)的方法,用于為了在應(yīng)用代碼執(zhí)行之前對(duì)其進(jìn)行保持而在將應(yīng)用代碼從存儲(chǔ)加載到模糊域中時(shí)轉(zhuǎn)換應(yīng)用代碼,所述方法包括接收模塊執(zhí)行請(qǐng)求,所述模塊執(zhí)行請(qǐng)求指定要加載到進(jìn)程中以供執(zhí)行的一個(gè)或多個(gè)可執(zhí)行模塊;標(biāo)識(shí)所指定的可執(zhí)行模塊中的可執(zhí)行代碼;加載所標(biāo)識(shí)的可執(zhí)行代碼;在確定所述進(jìn)程將用操作碼轉(zhuǎn)換來(lái)保護(hù)之后,將已加載的可執(zhí)行代碼從本機(jī)域轉(zhuǎn)換到模糊域;以及存儲(chǔ)經(jīng)轉(zhuǎn)換的可執(zhí)行代碼以準(zhǔn)備執(zhí)行,其中,前面的各步驟由至少一個(gè)處理器來(lái)執(zhí)行。
2.如權(quán)利要求I所述的方法,其特征在于,接收所述模塊執(zhí)行請(qǐng)求包括標(biāo)識(shí)包含可執(zhí)行二進(jìn)制代碼的已存儲(chǔ)可執(zhí)行模塊。
3.如權(quán)利要求I所述的方法,其特征在于,接收所述模塊執(zhí)行請(qǐng)求包括標(biāo)識(shí)由主模塊引用的一個(gè)或多個(gè)靜態(tài)鏈接的模塊并加載所述靜態(tài)鏈接的模塊。
4.如權(quán)利要求I所述的方法,其特征在于,標(biāo)識(shí)可執(zhí)行代碼包括基于模塊格式來(lái)確定模塊中的可執(zhí)行代碼的位置。
5.如權(quán)利要求I所述的方法,其特征在于,標(biāo)識(shí)可執(zhí)行代碼包括加載標(biāo)識(shí)可執(zhí)行區(qū)域的調(diào)試符號(hào)或其他元數(shù)據(jù)。
6.如權(quán)利要求I所述的方法,其特征在于,加載所述可執(zhí)行代碼包括掛鉤或修改操作系統(tǒng)加載程序進(jìn)程以插入將所述可執(zhí)行代碼的操作碼從本機(jī)域轉(zhuǎn)換到模糊域的步驟。
7.如權(quán)利要求I所述的方法,其特征在于,還包括,在確定所述進(jìn)程將不用操作碼轉(zhuǎn)換來(lái)保護(hù)后,存儲(chǔ)所加載的、未轉(zhuǎn)換的可執(zhí)行代碼以供正常執(zhí)行。
8.如權(quán)利要求I所述的方法,其特征在于,轉(zhuǎn)換所述可執(zhí)行代碼包括用查找表中標(biāo)識(shí)的新操作碼來(lái)替換每一操作碼。
9.如權(quán)利要求I所述的方法,其特征在于,轉(zhuǎn)換所述可執(zhí)行代碼包括標(biāo)識(shí)每一操作碼并使用良好定義的且可逆的過(guò)程來(lái)加擾所標(biāo)識(shí)的操作碼,所述過(guò)程對(duì)于惡意代碼是難以預(yù)測(cè)的。
10.如權(quán)利要求I所述的方法,其特征在于,存儲(chǔ)經(jīng)轉(zhuǎn)換的可執(zhí)行代碼包括將所述可執(zhí)行代碼存儲(chǔ)在主存儲(chǔ)器中,并且在檢測(cè)到所述代碼的即將到來(lái)的執(zhí)行后,逆轉(zhuǎn)所述轉(zhuǎn)換過(guò)程以將模塊代碼轉(zhuǎn)換成它的原始形式,并將任何惡意代碼轉(zhuǎn)換成無(wú)效形式。
11.一種用于通過(guò)操作碼隨機(jī)化來(lái)提供應(yīng)用進(jìn)程安全的計(jì)算機(jī)系統(tǒng),所述系統(tǒng)包括被配置成執(zhí)行包含在以下組件內(nèi)的軟件指令的處理器和存儲(chǔ)器;將可執(zhí)行代碼從存儲(chǔ)位置加載到預(yù)執(zhí)行存儲(chǔ)區(qū)域的代碼加載組件;將經(jīng)加載的可執(zhí)行代碼從本機(jī)域轉(zhuǎn)換到模糊域的操作碼轉(zhuǎn)換組件;存儲(chǔ)經(jīng)加載的和經(jīng)轉(zhuǎn)換的可執(zhí)行代碼以供稍后執(zhí)行的代碼數(shù)據(jù)存儲(chǔ)。接收要執(zhí)行所標(biāo)識(shí)的存儲(chǔ)器內(nèi)的程序代碼的指令的代碼執(zhí)行組件;逆轉(zhuǎn)換組件,所述逆轉(zhuǎn)換組件逆轉(zhuǎn)操作碼轉(zhuǎn)換組件的轉(zhuǎn)換以將模糊域可執(zhí)行代碼轉(zhuǎn)換成處理器可執(zhí)行的本機(jī)域可執(zhí)行代碼;以及錯(cuò)誤檢測(cè)組件,所述錯(cuò)誤檢測(cè)組件檢測(cè)執(zhí)行流中的錯(cuò)誤操作碼并阻止惡意或經(jīng)修改的代碼正確執(zhí)行。
12.如權(quán)利要求11所述的系統(tǒng),其特征在于,所述代碼加載組件預(yù)執(zhí)行存儲(chǔ)區(qū)域包括個(gè)人計(jì)算機(jī)的主存儲(chǔ)器,且所述組件接收要從操作系統(tǒng)外殼或加載程序加載可執(zhí)行代碼的請(qǐng)求,并標(biāo)識(shí)與所述可執(zhí)行代碼相關(guān)聯(lián)的一個(gè)或多個(gè)模塊。
13.如權(quán)利要求11所述的系統(tǒng),其特征在于,所述操作碼轉(zhuǎn)換組件用于本機(jī)域和模糊域,所述本機(jī)域包含處理器指令集的操作碼而所述模糊域包含能夠檢測(cè)到錯(cuò)誤的操作碼。
14.如權(quán)利要求11所述的系統(tǒng),其特征在于,所述操作碼轉(zhuǎn)換組件至少修改所述可執(zhí)行代碼的指令流中的操作碼,以造成難以預(yù)測(cè)所述可執(zhí)行代碼的變更,并在所述計(jì)算機(jī)系統(tǒng)的固件層的加載期間操作。
15.如權(quán)利要求11所述的系統(tǒng),其特征在于,所述代碼數(shù)據(jù)存儲(chǔ)包括用于即時(shí)(JIT)編譯的可執(zhí)行模塊的匯編高速緩存。
16.如權(quán)利要求11所述的系統(tǒng),其特征在于,所述代碼執(zhí)行組件用作操作系統(tǒng)的存儲(chǔ)器管理程序的一部分,所述存儲(chǔ)器管理程序在每一可執(zhí)行頁(yè)要執(zhí)行的時(shí)間之前將所述可執(zhí)行頁(yè)從存儲(chǔ)器加載到CPU高速緩存中。
17.如權(quán)利要求11所述的系統(tǒng),其特征在于,所述代碼執(zhí)行組件從所述代碼數(shù)據(jù)存儲(chǔ)訪問(wèn)經(jīng)轉(zhuǎn)換的可執(zhí)行代碼并調(diào)用所述逆轉(zhuǎn)換組件以逆轉(zhuǎn)所述轉(zhuǎn)換,如果所述經(jīng)轉(zhuǎn)換的代碼自從它被轉(zhuǎn)換以來(lái)已經(jīng)被修改,則所述逆轉(zhuǎn)換組件將原始程序代碼轉(zhuǎn)換成本機(jī)域操作碼并將任何惡意代碼轉(zhuǎn)換成引起錯(cuò)誤的操作碼。
18.如權(quán)利要求11所述的系統(tǒng),其特征在于,所述逆轉(zhuǎn)換組件在所述處理器內(nèi)操作以將傳入指令流轉(zhuǎn)換成未轉(zhuǎn)換的可執(zhí)行代碼。
19.如權(quán)利要求11所述的系統(tǒng),其特征在于,還包括進(jìn)程選擇組件,所述進(jìn)程選擇組件選擇要向哪些進(jìn)程應(yīng)用所述操作碼轉(zhuǎn)換組件以產(chǎn)生模糊操作碼,其中所述系統(tǒng)不將所述轉(zhuǎn)換應(yīng)用到所有進(jìn)程,且所述進(jìn)程選擇組件確定給定進(jìn)程是否將接收轉(zhuǎn)換。
20.一種包括用于控制計(jì)算機(jī)系統(tǒng)以在應(yīng)用代碼執(zhí)行時(shí)將應(yīng)用代碼從模糊域逆轉(zhuǎn)換到本機(jī)域的指令的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),所述指令在執(zhí)行時(shí),使得處理器執(zhí)行以下動(dòng)作,包括標(biāo)識(shí)所述應(yīng)用代碼的當(dāng)前執(zhí)行位置;基于所標(biāo)識(shí)的當(dāng)前執(zhí)行位置來(lái)檢索要執(zhí)行的下一批代碼;在確定所述下一批代碼已經(jīng)被轉(zhuǎn)換到模糊域之后,將所檢索的這批代碼從模糊域逆轉(zhuǎn)換到處理器可執(zhí)行的本機(jī)域;向所述處理器提交經(jīng)逆轉(zhuǎn)換的代碼以供執(zhí)行;在基于不正確的操作碼檢測(cè)到執(zhí)行錯(cuò)誤之后,終止所述應(yīng)用代碼的執(zhí)行。
全文摘要
本文涉及通過(guò)操作碼隨機(jī)化的安全。本文描述了一種當(dāng)應(yīng)用被存儲(chǔ)在存儲(chǔ)器中時(shí)改變操作系統(tǒng)或應(yīng)用代碼所使用的操作碼的值的操作碼模糊系統(tǒng)。該系統(tǒng)在應(yīng)用代碼被加載時(shí)使應(yīng)用代碼經(jīng)受轉(zhuǎn)換過(guò)程,從而使得具有變更指令集的代碼位于存儲(chǔ)器中。如果新的和潛在的惡意代碼被注入到進(jìn)程中,則它的指令集將無(wú)法匹配經(jīng)轉(zhuǎn)換的應(yīng)用代碼的指令集。隨著執(zhí)行應(yīng)用代碼的時(shí)間的臨近,該系統(tǒng)使應(yīng)用代碼經(jīng)受將應(yīng)用代碼轉(zhuǎn)換回原始操作碼的逆轉(zhuǎn)換過(guò)程。被注入到進(jìn)程中的任何惡意代碼也將經(jīng)受逆轉(zhuǎn)換,它將具有使得惡意代碼能夠被檢測(cè)為無(wú)效或錯(cuò)誤的效果。
文檔編號(hào)G06F21/00GK102592082SQ201110443529
公開(kāi)日2012年7月18日 申請(qǐng)日期2011年12月16日 優(yōu)先權(quán)日2010年12月18日
發(fā)明者J·C·斯普拉德林 申請(qǐng)人:微軟公司