二進制轉換器驅動的程序狀態重新定位的制作方法
【技術領域】
[0001] 本公開涉及裝置安全性,并且更具體地說,涉及用于通過二進制轉換器驅動的程 序狀態重新定位增強相對于惡意軟件的安全性的系統。
【背景技術】
[0002] 隨著人們越來越多地電子地執行個人和/或保密的事務,電子安全性已經演進成 更突出的關注。此外,具有惡意意圖的黑客和/或其他人在回避裝置中的現有安全措施上 正變得越來越有創造性。為了對抗通過惡意軟件和/或病毒的演進的并且無處不在的入 侵,設備和/或軟件制造商繼續采取對新裝置的硬件更內在的保護措施。例如,響應于外來 代碼被注入到程序中以從裝置盜取信息或甚至接管裝置的控制的情形,實現了包含代碼簽 名和不可執行存儲器片段的新保護方案。這些安全措施允許程序被認證,并且甚至允許某 些脆弱代碼被標記為在硬件級不可執行。例如,嘗試注入外來代碼或執行被保護代碼將使 處理器(諸如管理程序)中的硬件控制資源介入以保護系統的完整性。
[0003]然而,有事業心的編程人員想出了回避這些保護的辦法。例如,在面向返回的編程 (R0P)中,攻擊者可劫持裝置的控制流以訪問某些程序功能(例如小組件)。小組件一般可 包括程序指令集。例如,小組件可包含可支持對編程操作(例如讀數據、寫數據、數學操作 等)必要的初步功能性的程序的部分。當按有益軟件的編程人員意圖的方式、順序等執行 時,小組件對裝置操作沒有不良影響。然而,在奪取了裝置中控制流的控制時,有可能操縱 小組件(例如按不同順序、用不同變元(argument)等調用)以導致完全不同于最初意圖的 操作,并且可能能夠克服現有保護方案。而且,當前提出的保護免受R0P的安全措施實現起 來非常困難,或者可能有可能克服強力攻擊。
【附圖說明】
[0004] 隨著如下【具體實施方式】的繼續,并參考附圖,其中相似數字表示相似部分,所要求 保護的主題的各種實施例的特征和優點將變得顯而易見,并且附圖中: 圖1圖示了按照本公開的至少一個實施例的二進制轉換器驅動的程序狀態重新定位 的示例; 圖2圖示了按照本公開的至少一個實施例的可使用的裝置的示例配置; 圖3圖示了按照本公開的至少一個實施例的添加到程序以實現二進制轉換器驅動的 程序狀態重新定位的示例代碼; 圖4圖示了按照本公開的至少一個實施例可在面向返回的編程(R0P)攻擊期間發生的 示例代碼執行; 圖5圖示了按照本公開的至少一個實施例當圖4的R0P攻擊由轉換器驅動的程序狀態 重新定位來重新定向時的示例代碼執行;以及 圖6圖示了按照本公開的至少一個實施例的二進制轉換器驅動的程序狀態重新定位 的示例操作。
[0005] 盡管如下【具體實施方式】將參考說明性實施例進行,但其許多備選、修改和變化對 本領域技術人員將是顯而易見的。
【具體實施方式】
[0006] 此公開指向二進制轉換器驅動的程序狀態重新定位。一般而言,裝置可通過將脆 弱的程序功能設置為不可執行來保護它們。如果嘗試執行被保護的程序功能,則程序可設 陷(trap)到可配置成將程序狀態從(例如在棧寄存器上)已經建立的進行重新定位的裝 置中的二進制轉換器。本文所提及的程序狀態可包含程序可在執行過程期間建立的任何資 源(例如存儲在存儲器位置中的臨時數據)。二進制轉換器然后可基于重新定位的程序狀 態將程序轉換成可執行形式(例如二進制代碼),并且因此可以被執行。嘗試克服正常程序 執行并實現惡意操作(例如基于在棧寄存器中反映的原始程序狀態)的入侵代碼將不按意 圖運作,因為重新定位的程序狀態將保持未預料到的結果。
[0007] 在一個實施例中,裝置例如可包括存儲器模塊、二進制轉換器模塊和處理模塊。存 儲器模塊可保持對應于程序的程序狀態信息。二進制轉換器模塊可接收所述程序執行被保 護的功能的嘗試的指示,以便使所述程序狀態信息的至少一個元素在所述存儲器模塊中重 新定位,并基于所述程序狀態信息的重新定位的至少一個元素將所述程序中的指令轉換成 可執行二進制代碼。處理模塊可執行所述可執行的二進制代碼。
[0008] 在引起程序狀態信息的至少一個元素被重新定位時,二進制轉換器模塊可引起以 下中的至少一項:基于隨機偏移重新定位變元棧,重新定位溢出的寄存器棧,重新定位中央 處理單元(CPU)棧,或者重新定位局部變量。在一個實施例中,處理模塊還可將被保護的功 能設置成不可執行,并且當嘗試所述被保護的功能的執行時生成所述指示。二進制轉換器 模塊還可確定當嘗試執行所述程序中的第一指令時是否接收到所述指示。如果確定當試圖 執行程序中的第一指令時接收到指示,則二進制轉換器還可將移動命令插入到程序中。例 如,插入的移動命令可引起在所述存儲器模塊中重新定位所述程序狀態信息的至少一個元 素。插入的移動命令還可傳遞所需的至少一個變元以在不同于棧寄存器的寄存器中執行程 序。此外,插入的移動命令可檢索重新定位的程序狀態信息以用于執行所述功能。符合本公 開的示例方法可包含:接收程序已經嘗試執行被保護的功能的指示;標識引起所述指示的 所述程序;引起重新定位對應于所述程序的程序狀態信息的至少一個元素;基于所述程序 狀態信息的所述重新定位的至少一個元素將所述程序中的指令轉換成可執行二進制代碼; 以及執行所述可執行二進制代碼。
[0009] 在過去的數十年,惡意代碼注入已成為可能在裝置中破壞安全性的最普遍的攻 擊。作為響應,一些制造商(例如英特爾、AMD等)開始將數據執行保護(諸如,例如寫X0R 執行(W氣X)安全性特征)合并到它們的處理裝置中。W AX允許將可執行代碼的某些 部分標記為可寫或可執行,但不是二者。用這種方式,惡意的注入代碼可被寫到裝置中,但 可不被執行。WAX以及其它類似保護方案已經被廣泛采用作為硬件實現的安全性,而未 遭受基于軟件的解決方案的漏洞。
[0010] 然而,最近的備選辦法已經被設計成例如通過面向返回的編程(R0P)攻擊來回避 數據執行保護。R0P可使程序的控制流轉向,而無需惡意代碼注入。相反,攻擊可通過將小 組件的地址放在程序棧上而將裝置中已經存在的小組件(例如可由程序調用并且然后返 回到它們被調用的地方的子例程)鏈接在一起。這個棧操縱允許攻擊者"構造"來自小組 件的程序,其否則將對裝置沒有造成威脅。用這種方式構造的程序可與原始小組件創造者 所意圖的非常不同地執行,并且可用于惡意動作,諸如,例如盜取信息、破壞信息、控制裝置 等。所有這些可在沒有惡意代碼注入的情況下實現。
[0011] 嘗試減輕R0P的現有技術基于裝置中可存在的三個漏洞:程序中缺乏控制流完整 性檢查、預先對攻擊者已知的指令序列(例如小組件)位置以及在R0P攻擊中可改變目的 的小組件的豐富使用。靜態流程控制監視技術,比如,例如在現代編譯器(例如GNU編譯器 集合中的ProPolice和CRED)中已經采用棧特高頻噪聲和界限檢查。動態流程控制監視技 術例如可包含采用陰影返回棧來觀察控制流的不可侵犯。然而,這些技術的實現已經由于 性能和實現問題在行業中受到限制。代碼隨機化技術如地址空間布局隨機化(ASLR)被設 計成阻礙小組件位置察覺和可用性以在R0P攻擊中使用。ASLR在加載時間隨機化程序中每 個模塊的位置,使得攻擊者難以定位所需小組件。盡管ASLR不影響性能,但它也不是極簡 單的技術,并且仍易受概率性攻擊。研宄已經顯示,ASLR可在小于200秒內被強力R0P攻 擊破壞。盡管在行業中已經存在增大由ASLR經由位置無關的可執行(PIE)支持和內核空 間隨機化提供的熵的嘗試,但ASLR仍易受熵減小技術影響,諸如,例如,嘗試經由數據結構 (如裝置的虛擬地址空間中的*. got or *. pit)獲得位置信息的信息泄露攻擊、嘗試在堆上 分配大量存儲器以減小隨機化的范圍的"堆噴射(heap spraying)"攻擊,以及嘗試噴射不 難發現執行開發所需的信息的開發代碼的充分實例的"JIT噴射"攻擊。在實際實踐中,對 微軟的Internet Explorer (例如在國家漏洞數據庫條目CVE-2012-1875/1889中備案的) 的近來R0P攻擊已經進一步演示了 ASLR沒有可能反對熵減小攻擊。
[0012] 圖1圖示了按照本公開的至少一個實施例的二進制轉換器驅動的程序狀態重新 定位的示例。與本公開的至少一個實施例一致,裝置100可包含配置成以允許實際程序 訪問它們的小組件同時保持那些小組件的實際位置對入侵程序(例如惡意軟件)隱藏的 方式重新定位程序狀態的資源。裝置100的示例可包含但不限于