TWI468980B - 用以抑制返回導向的程式設計的動態執行防止 - Google Patents

用以抑制返回導向的程式設計的動態執行防止 Download PDF

Info

Publication number
TWI468980B
TWI468980B TW102101513A TW102101513A TWI468980B TW I468980 B TWI468980 B TW I468980B TW 102101513 A TW102101513 A TW 102101513A TW 102101513 A TW102101513 A TW 102101513A TW I468980 B TWI468980 B TW I468980B
Authority
TW
Taiwan
Prior art keywords
memory
code
subset
instruction
function
Prior art date
Application number
TW102101513A
Other languages
English (en)
Other versions
TW201342109A (zh
Inventor
Arun Balakrishnan
Alexander Gantman
Renwei Ge
Daniel Komaromy
Yinian Mao
Anand Palanigounder
Brian M Rosenberg
Original Assignee
Qualcomm Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Qualcomm Inc filed Critical Qualcomm Inc
Publication of TW201342109A publication Critical patent/TW201342109A/zh
Application granted granted Critical
Publication of TWI468980B publication Critical patent/TWI468980B/zh

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • G06F21/54Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by adding security routines or objects to programs

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Storage Device Security (AREA)
  • Executing Machine-Instructions (AREA)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Description

用以抑制返回導向的程式設計的動態執行防止
一種特徵大體而言係關於抑制惡意程式碼在軟體系統中的操作,且更特定言之,係關於實現執行防止並預設將記憶體頁標記為不可執行從而減少軟體系統中對於返回導向的程式設計利用可用的指令數目的方法和設備。
執行軟體的計算系統遭受到越來越多的攻擊。此類攻擊常常將惡意程式碼插入計算系統中,並隨後使計算系統執行該惡意程式碼。惡意程式碼可執行許多不同操作,諸如使計算系統比正常情況下執行更慢、監視計算系統上的活動、使計算系統傳送或接收使用者可能不想傳達的資訊、破壞永久和非永久記憶體中的資料、以及使計算系統崩潰。
近期,已提出了有時被稱為返回導向的程式設計(ROP)利用的攻擊機制。一類ROP利用常常被稱為返回libc(return-to-libc)攻擊(或返回進入libc攻擊:return-into-libc attack)。返回libc(或返回進入libc)攻擊可由兩個屬性來識 別:(a)其使用許多軟體系統中常駐的標準C庫,(b)其直接跳轉至libc函數(function)的入口點而不是libc函數內部。ROP利用是允許攻擊者利用軟體程式中的有效代碼序列而無需向處理器的位址空間注入任何新惡意程式碼的強大技術。藉由利用某種缺陷(bug)或弱點,攻擊可能取得對從其執行指令的下一個記憶體位址的控制。在一個實例中,此舉可以藉由覆寫保存在堆疊上的返回位址而發生。例如,此類攻擊可利用緩衝器溢出以在堆疊上將返回位址指定至合法代碼區塊,該等合法代碼區塊在合法函數返回時具有期望效果。攻擊指令指標及/或獲得對下一個記憶體位址的控制的其他方式亦是可能的。小片段的有效代碼序列(常常稱為小程式(gadget))可能被攻擊者發現並隨後串接在一起以形成新的惡意程式碼序列,由此繞過對代碼注入的防護。
在傳統的ROP利用中,小代碼片段是例如以返回或跳轉指令結束的代碼部分。其他指令亦可用作小程式終止指令。當函數被呼叫(is called)時,將該呼叫之後的指令的位址入堆疊作為被呼叫函數(called function)完成之後要返回到的位址。因此,堆疊可包括許多返回位址以供處理器在被呼叫函數完成時跳轉至該等返回位址。若攻擊能向堆疊寫入資訊,則其可用惡意返回位址來覆寫預期返回位址。該返回位址可對應於由該攻擊所識別的小程式之一。
藉由操縱多個返回位址,控制呼叫堆疊的攻擊能將多個小程式連結在一起以建立惡意程式碼序列,而完全無需向處理器位址空間注入任何新代碼。經由對該等惡意 程式碼序列及其安排的選取,攻擊能為由小程式串構成的惡意程式引起任意的行為。此種類型的攻擊是成功的,因為在大多數系統中,代碼和資料位址是可預測的。亦即,攻擊可在第一電腦中載入特定代碼,查看第一電腦的堆疊以決定該代碼如何被載入,並且當在第二(目標)電腦中載入此類代碼時使用該資訊來利用返回堆疊。此類攻擊一般可依賴於跨不同的電腦以相同方式載入代碼。
因此,需要能抑制返回導向的程式設計攻擊的穩健對策。
本揭示案的實施例包括用於抑制利用堆疊及/或記憶體中的弱點的裝置、方法和電腦可讀取媒體。
提供了一種可在處理電路中操作的方法以藉由可執行代碼的執行防止來阻礙返回導向的攻擊。記憶體設備中的複數個記憶體頁的可執行代碼的第一子集的狀態指示符可被設置為不可執行狀態。例如,該狀態指示符可用於對常駐在該複數個記憶體頁的第一子集中的可執行代碼實施執行防止。類似地,該複數個記憶體頁的第二子集的狀態指示符可被設置為可執行狀態,其中該複數個記憶體頁的第二子集包括至該複數個記憶體頁的第一子集中的函數的間接樁模組。注意,可在該複數個記憶體頁的第一子集或第二子集中的至少一者的狀態指示符已被設置為不可執行狀態之前及/或之後將該複數個記憶體頁的可執行代碼載入到記憶體設備中。該可執行代碼所常駐在其中的記憶體設備可實現虛擬記憶 體。隨後將函數呼叫定向到該複數個記憶體頁的第二子集中的相應間接樁模組,該間接樁模組在導引執行來自該複數個記憶體頁的第一子集的被呼叫函數之前修改該複數個記憶體頁的第一子集中的相應函數的狀態指示符。該間接樁模組可將該複數個記憶體頁的第一子集中的相應函數的狀態指示符從不可執行狀態修改為可執行狀態以賦能該函數的執行。在該函數呼叫完成時,該方法可返回至該複數個記憶體頁的第二子集中的相應間接樁模組,其中該相應間接樁模組隨後修改該複數個記憶體頁的第一子集中的相應函數的狀態指示符。該間接樁模組隨後可將該複數個記憶體頁的第一子集中的相應函數的狀態指示符從可執行狀態修改為不可執行狀態以去能該函數的執行。
在一個實例中,實施執行防止可包括:當該可執行代碼被處理電路獲取以進行執行時,中止常駐在處於不可執行狀態的記憶體頁中的任何可執行代碼的執行。
在一個實例中,第一指令可以是函數呼叫的一部分,並且第二指令是相應函數的初始指令。該間接樁模組可藉由將第一指令結合至第二指令以使得除非第一指令之後跟隨著第二指令否則就中止執行來實現。
該可執行代碼可對應於單個應用及/或過程。在一些實現中,該方法亦可包括:在函數呼叫完成時,清除處理電路的內部快取記憶體。在一些實現中,該間接樁模組可在該可執行代碼的編譯階段或預編譯階段產生。
根據一個實例,用於該函數的代碼可常駐在 該複數個記憶體頁的第一子集內的第一記憶體頁中。可追蹤處於可執行狀態的該第一記憶體頁的使用以確定所有正在進行的函數呼叫何時已完成該第一記憶體頁內的相應代碼的執行。一旦最後一正在進行的函數呼叫完成,該第一記憶體頁的狀態指示符隨後被設置為不可執行狀態。
亦可提供一種處理設備,包括記憶體設備和處理電路。該處理電路可被配置成:(a)將記憶體設備中的複數個記憶體頁的可執行代碼的第一子集的狀態指示符設置為不可執行狀態;(b)將該複數個記憶體頁的第二子集的狀態指示符設置為可執行狀態,其中該複數個記憶體頁的第二子集包括至該複數個記憶體頁的第一子集中的函數的間接樁模組;及/或(c)將函數呼叫定向到該複數個記憶體頁的第二子集中的相應間接樁模組,該間接樁模組在導引執行來自該複數個記憶體頁的第一子集的被呼叫函數之前修改該複數個記憶體頁的第一子集中的相應函數的狀態指示符。
根據另一態樣,該相應間接樁模組可至少包括第一指令和第二指令,該第一指令和第二指令被限製成由處理電路按順序執行。若第一指令之後跟隨著除第二指令以外的任何指令,則中止該函數呼叫的執行。
提供了可在處理電路中操作的另一種方法。產生包括複數個函數的應用原始程式碼。亦獲得及/或產生用於原始程式碼之每一者函數的間接代碼。可添加指令以使得該原始程式碼在被載入到記憶體中時被識別為不可執行。亦可添加指令以使得該間接代碼在被載入到記憶體中時被識別 為可執行。可在處理電路處變換該原始程式碼和間接代碼以產生可執行代碼。該可執行代碼可對應於單個應用及/或過程。可在該可執行代碼的編譯階段或預編譯階段產生間接樁模組。該原始程式碼和間接代碼可被編譯成使得其在被載入到記憶體中時常駐在分開的記憶體頁中。在一個實例中,第一間接代碼可在相應的第一函數被調用(invoke)以進行執行時導致該第一函數的記憶體狀態指示符從不可執行狀態切換成可執行狀態。在另一個實例中,第一間接代碼可在相應的第一函數終止執行時導致該第一函數的記憶體狀態指示符從可執行狀態切換成不可執行狀態。在又一實例中,與第一函數相關聯的第一間接代碼可適配成指向該第一函數,其中在產生可執行代碼時,該第一間接代碼和第一函數被編譯成將被載入到不同的記憶體頁中。
根據一個態樣,該間接代碼可至少包括第一指令和第二指令,該第一指令和第二指令被限製成由處理電路按順序執行。該方法可進一步包括添加指令以使得若第一指令之後跟隨著除第二指令以外的任何指令則中止該間接代碼的執行。
100‧‧‧操作環境
102‧‧‧處理電路
104‧‧‧虛擬記憶體
106‧‧‧永久存儲設備
108‧‧‧實體記憶體設備
110‧‧‧堆
112‧‧‧堆疊
114‧‧‧常數資料
116‧‧‧初始化資料
118‧‧‧可執行指令
120a‧‧‧專用位址空間
120b‧‧‧專用位址空間
120c‧‧‧專用位址空間
200‧‧‧呼叫堆疊
202A‧‧‧訊框
202B‧‧‧訊框
202C‧‧‧訊框
204‧‧‧訊框指標
206‧‧‧堆疊指標
302‧‧‧處理電路
304‧‧‧記憶體設備
306‧‧‧通訊介面
308‧‧‧輸入/輸出(I/O)介面
310‧‧‧處理器
312‧‧‧快取記憶體系統
314‧‧‧快取記憶體
316‧‧‧指令快取記憶體
318‧‧‧資料快取記憶體
320‧‧‧聯合快取記憶體
322‧‧‧執行防止模組
402‧‧‧處理電路
502‧‧‧處理電路
504‧‧‧虛擬記憶體
506‧‧‧快取記憶體
508‧‧‧傳入樁模組
510‧‧‧傳出樁模組
512‧‧‧記憶體頁k
514‧‧‧呼叫方應用
520‧‧‧步驟
522‧‧‧步驟
524‧‧‧步驟
526‧‧‧步驟
528‧‧‧步驟
530‧‧‧步驟
532‧‧‧步驟
534‧‧‧步驟
536‧‧‧模組、NX旗標核查
540‧‧‧傳入/傳出樁模組
542‧‧‧第一記憶體頁
544‧‧‧傳入/傳出樁模組F
548‧‧‧頁q
550‧‧‧函數F
552‧‧‧傳入/傳出樁模組I
554‧‧‧傳入/傳出樁模組J
600‧‧‧受損呼叫堆疊
602‧‧‧記憶體
608‧‧‧函數Z
610‧‧‧開始位址
612‧‧‧小程式A
614‧‧‧函數Y
616‧‧‧開始位址
618‧‧‧小程式B
620‧‧‧函數W
622‧‧‧開始位址
624‧‧‧小程式E
626‧‧‧函數V
628‧‧‧開始位址
630‧‧‧小程式D
632‧‧‧函數U
634‧‧‧開始位址
636‧‧‧小程式C
638‧‧‧返回位址
640‧‧‧函數X
702‧‧‧步驟
704‧‧‧步驟
706‧‧‧步驟
802‧‧‧步驟
804‧‧‧步驟
806‧‧‧步驟
808‧‧‧步驟
810‧‧‧步驟
812‧‧‧步驟
902‧‧‧步驟
904‧‧‧步驟
906‧‧‧步驟
908‧‧‧步驟
910‧‧‧步驟
912‧‧‧步驟
1000‧‧‧步驟
1002‧‧‧步驟
1004‧‧‧步驟
1006‧‧‧步驟
1008‧‧‧步驟
1010‧‧‧步驟
1012‧‧‧步驟
1014‧‧‧步驟
1016‧‧‧步驟
1018‧‧‧步驟
1020‧‧‧步驟
1102‧‧‧處理電路
1104‧‧‧間接代碼
1106‧‧‧間接代碼
1108‧‧‧可執行指令/代碼
1110‧‧‧記憶體模組
1112‧‧‧記憶體區塊
1114‧‧‧可執行代碼B(函數B)
1202‧‧‧步驟
1204‧‧‧步驟
1206‧‧‧步驟
1208‧‧‧步驟
1210‧‧‧步驟
1302‧‧‧步驟
1304‧‧‧步驟
1306‧‧‧步驟
1308‧‧‧步驟
1310‧‧‧步驟
圖1是圖示其中可實現用於抑制ROP攻擊的一或多個特徵的示例性操作環境、設備及/或系統的方塊圖。
圖2圖示了可在記憶體中實現的示例性通用呼叫堆疊。
圖3圖示了示例性處理電路,其可適配成藉由 初始將可執行代碼所常駐在其中的全部或大部分記憶體空間標注為不可執行來實施執行防止。
圖4圖示了示例性處理電路的替代配置,其中資料執行防止模組位於快取記憶體系統與記憶體設備之間。
圖5是圖示適配成執行增強的資料執行防止特徵的處理電路的實例的方塊圖。
圖6圖示了用於產生惡意程式碼序列的受損呼叫堆疊的實例,該惡意程式碼序列包括串接在一起以形成返回導向的程式設計(ROP)利用的小程式。
圖7是圖示在圖5的處理單元的上下文中對於小程式獲取所發生的情況的方塊圖。
圖8是圖示用於抑制處理電路內的代碼執行的一般性示例性方法的流程圖。
圖9是圖示可在處理電路中操作的用於保護記憶體免於ROP利用的另一示例性方法的流程圖。
圖10是圖示用於保護記憶體免於ROP利用的示例性方法的流程圖。
圖11是圖示准許在需要或呼叫記憶體區域時修改記憶體區域的狀態的間接層的示例性實現的方塊圖。
圖12圖示用於實現准許在需要或呼叫記憶體區域時修改記憶體區域的狀態的間接層的方法。
圖13圖示了用於在應用內實現間接層的方法,該間接層允許修改應用可執行代碼所常駐在其中的記憶體區域的狀態以保護對此類記憶體區域的存取。
在以下描述中參考了附圖,附圖中以說明方式圖示本案可在其中實踐的具體實施例。該等實施例意欲充分詳細地描述本案的各態樣以使得本領域技藝人士能夠實踐本發明。可利用其他實施例,以及可對所揭示的實施例作出改變而不會背離本案的範圍。以下詳細描述不被理解為限制意義,且本發明的範圍僅由所附請求項來界定。
術語「資料」可在本文中被可互換地用於指代可由處理器使用的計算指令和可由處理器操作的資料。使用術語「資料」的上下文應當能清楚明白何時「資料」是指代指令。在需要的場合,指令可被顯式地稱為指令或指令資料。
綜述
本案述及用於藉由在不使用時預設將可執行和不可執行的記憶體頁標記為「不可執行」來抑制利用記憶體堆疊中的弱點的裝置、方法和機器可讀取媒體。因此,處理電路可對標記為「不可執行」的記憶體頁中的函數/指令實現執行防止,由此抑制來自ROP攻擊的指令呼叫被執行。
根據一個特徵,實現間接(indirection)層,其中對可執行代碼的所有函數呼叫被首先重定向至樁模組(stub)代碼,樁模組代碼改變此類可執行代碼所常駐在其中的記憶體狀態。樁模組代碼可將此類可執行代碼所常駐在其中的記憶體區塊的記憶體狀態從預設的「不可執行」狀態改變為「可執行」狀態。樁模組代碼隨後指向實際的可執行代碼 。在一個實例中,此類特徵可在應用的原始程式碼中及/或在將此類應用編譯成可執行代碼時實現。亦即,間接層(例如,樁模組代碼)可在原始程式碼內天然地產生及/或其可在編譯時間產生。
根據一個態樣,處理電路可對「不可執行」記憶體頁中發現的代碼/指令實現執行防止。包含可執行指令的記憶體頁初始被載入到記憶體中並且所有頁(除了用於間接層的樁模組代碼所常駐在其中的彼等頁)預設被標記為「不可執行」。從在處理電路上操作的合法應用啟動的函數呼叫通過該間接層(亦即,樁模組代碼),該間接層在從(諸)記憶體頁取得及/或執行指令/代碼之前或併發地將此類記憶體頁的狀態從「不可執行」改變為「可執行」。在執行指令/代碼之前,處理電路可核查及/或確定其源自標記為「可執行」的記憶體頁。來自ROP攻擊的呼叫繞過該間接層(樁模組代碼)。因此,嘗試使用來自被標記為「不可執行」的記憶體頁的指令(例如,小程式)的ROP攻擊將失敗,因為處理電路將阻止或中止其執行。
根據又一態樣,該間接代碼可至少包括第一指令和第二指令,該第一指令和第二指令被限製成由處理電路按順序執行。若第一指令之後跟隨著除第二指令以外的任何指令,則中止該函數呼叫的執行。在一種示例性實現中,這態樣可避免對用於實現分開的間接層的附加指令的需要。相反,在使用成對的相應指令(例如,第一指令和第二指令)時,其可使得處理器在可執行和不可執行狀態之間切換記 憶體頁及/或執行跟隨著的代碼。在一些實現中,由於第一和第二指令被限於按順序執行,可能不需要在可執行與不可執行狀態之間切換,因為若除了第二指令以外的任何指令跟隨在第一指令之後,處理器就中止所有後續執行。
示例性操作環境
圖1是圖示其中可實現用於抑制ROP攻擊的一或多個特徵的示例性操作環境、設備及/或系統100的方塊圖。操作環境100可包括耦合至一或多個記憶體及/或存儲設備的處理電路102(例如,一或多個處理器)。在一個實例中,操作環境100可實現稱為虛擬記憶體的記憶體管理技術。虛擬記憶體是為多工核心開發的技術。虛擬記憶體將各種形式的資料及/或可執行代碼存儲(諸如隨機存取記憶體和磁碟存儲器)虛擬化,從而允許就像僅有一種記憶體(即「虛擬」記憶體)一般設計程式,「虛擬」記憶體作為可直接定址的讀/寫記憶體(RAM)而起作用。支援虛擬記憶體的許多作業系統亦可在其自己的專用位址空間(例如,其自己的虛擬記憶體)中執行每個過程,從而允許就像其具有對該虛擬記憶體的獨佔存取一般設計程式或應用。例如,此處圖示複數個專用位址空間120a、102b、120c,其中該等位址空間中的每一個可與不同的過程、程式及/或應用相關聯。
在該實例中,虛擬記憶體104代表一或多個實體記憶體設備108及/或永久存儲設備106內的可定址記憶體空間。處理電路102可適配成存取虛擬記憶體104(或由該虛擬記憶體映射的記憶體位址)以讀入(諸)實體記憶體設備108 及/或永久存儲設備106中載入的代碼及/或資料形式的可執行指令。
根據一個實例,虛擬記憶體104可被安排成堆110、堆疊112、常數資料114、初始化資料116、以及可執行指令118。堆110可用於當各種軟體程式可能在處理環境100內有效時對該等軟體程式的動態分配。各種資料(諸如常數資料114和初始化資料116)可被存儲在主記憶體設備104中以供在處理環境100上執行的一或多個程式存取。與各種程式相關聯的可執行指令118可被存儲在指令區域118、堆110或其組合中。
除非另行具體說明,否則術語「記憶體」在下文用於指代由處理電路102從其存取(例如,從其讀取及/或向其寫入)可執行指令及/或資料的虛擬記憶體及/或任何其他可定址記憶體空間。本文描述的概念在各種類型的記憶體架構中操作。例如,虛擬記憶體可實現在處理電路102外部的記憶體設備(例如,主記憶體)中及/或其可實現在處理電路102內部的記憶體設備(例如,內部快取記憶體)中。
根據一個特徵,由處理電路102實現資料執行防止以幫助防止返回導向的程式設計攻擊。根據一個態樣,在執行之前,可執行指令連同處理電路102在執行代碼時可能使用的相應的間接代碼(樁模組)可被載入到虛擬記憶體104中。處理電路102隨後可從虛擬記憶體104讀取指令/資料及/或向虛擬記憶體104寫入指令/資料。
在該特徵中,該可執行代碼所常駐在其中的 所有(或大部分)記憶體頁在其被載入(或映射)到虛擬記憶體104中時可預設被標記為不可執行。一些處理電路可使用代表「不可執行」的NX位元來隔離記憶體的各區域以供指令(或代碼)存儲使用或供資料存儲使用。(在處理電路102上執行的)作業系統在NX位元的支援下可將該可執行代碼所常駐在其中的所有虛擬記憶體104區域標記為不可執行。在一個實例中,間接代碼(樁模組)所常駐在其中的虛擬記憶體104各區域可被標記為可執行。該間接代碼(樁模組)可被插入原始程式碼或可在該應用的編譯時間產生。來自該應用的函數呼叫可呼叫(或者可被重定向至)該間接代碼,其在「不可執行」與「可執行」之間改變記憶體狀態,並且隨後將執行定向至可執行代碼的相應部分。
每次由處理電路102從虛擬記憶體104載入/獲取記憶體頁時,在處理電路102內操作的間接層(例如,樁模組)在載入/獲取之前(或同時)將NX位元從「不可執行」改變為「可執行」。亦即,當記憶體頁中的函數被正由處理電路102執行的應用/程式調用時,該記憶體頁(由間接層)從「不可執行」改變為由間接層「可執行」。若該記憶體頁已被標記為「可執行」(亦即,該記憶體頁先前已從不可執行切換成可執行),則該間接層不需要將NX位元改變為不可執行。
處理電路102可包括執行防止模組,其阻止虛擬記憶體104中標記為「不可執行」的記憶體頁中常駐的任何代碼的執行。一旦完成(諸)期望函數的執行,相應的可執 行代碼在虛擬記憶體104中所常駐在其中的記憶體頁可從「可執行」切換回「不可執行」。
嘗試從虛擬記憶體中被標記為「不可執行」的記憶體頁存取指令的ROP攻擊將失敗。藉由將彼等記憶體頁(例如,記憶體中的區域)中的所有可執行代碼(例如,指令)初始化為「不可執行」並且僅在記憶體頁(例如,區域或區段)被處理電路102呼叫/獲取時經由間接層將彼等記憶體頁的狀態改變為「可執行」,ROP攻擊被限於從當前標記為「可執行」的(虛擬記憶體104中的)彼等記憶體頁呼叫指令。來自ROP攻擊的呼叫將繞過間接層(樁模組)。因此,嘗試使用來自(虛擬記憶體104中的)其他記憶體頁的指令(例如,小程式)的ROP攻擊將失敗,因為彼等記憶體頁被標記為「不可執行」。由此,一旦取得此類「不可執行」頁,處理電路102的執行防止特徵/模組將阻止或拒絕此類記憶體頁中的指令的執行。將所有記憶體頁標記為「不可執行」極大地減少了ROP攻擊可從其使用指令的記憶體頁的數目。為了進一步減少ROP攻擊可用的「可執行」指令,一旦函數終止,相應的記憶體頁在虛擬記憶體104中被設回為「不可執行」。
注意,藉由使用NX位元的執行防止通常是在包含資料的應用堆疊和其他記憶體區塊/區域上進行的。然而,根據本特徵,包含應用的合法的可執行指令(例如,代碼、函數等)的記憶體區塊或頁被標記為不可執行。
圖2圖示了可在記憶體中實現的示例性通用呼叫堆疊200。呼叫堆疊200可用於存儲在呼叫函數時可使用 的各種資訊。入堆疊的每個函數佔用一訊框202,如由分別對應被呼叫函數A、B和C的訊框202A、202B和202C所指示的。
作為非限定性實例,呼叫堆疊200的每一訊框202可包括諸如從呼叫方函數(caller function)傳遞到被呼叫函數(called function)的參數之類的資訊。呼叫堆疊200亦可包括用於存儲可由被呼叫程式使用的各種區域變數的記憶體區域。指示在被呼叫函數已完成執行之後應在呼叫方函數執行中何處繼續的返回位址亦可被包括在呼叫堆疊200中。呼叫堆疊200可作為後入先出(LIFO)緩衝器來操作,此舉意謂最後入堆疊的資料是最先出堆疊的資料。呼叫堆疊200可相當深,指示有許多函數呼叫被嵌套在其他函數內。
訊框指標204一般指向當前被執行的函數的訊框202。堆疊指標206指向堆疊200上可用於出堆疊並返回給處理器的下一個資料位置。
ROP利用藉由將惡意位址寫入各個訊框202A、202B和202C的返回位址部分來利用堆疊資料結構。攻擊者可檢查將常駐在記憶體中的代碼,諸如舉例而言標準C庫或作業系統的各部分。攻擊者隨後可識別許多該等小程式(亦即,小代碼片段)以建立ROP指令的庫。該等ROP指令隨後可被串接在一起以建立可使用的、意外的、以及惡意程式碼序列而無需向記憶體插入任何代碼。相反,攻擊者僅需要改變呼叫堆疊200上的返回位址以指向期望小程式的開始。與呼叫堆疊相關的操作由此可被ROP利用所破壞。然而,由於此類ROP利用所使用的小程式是藉由繞過由處理電路所使用的間接層 而被取得的,因此該等小程式很可能在標記為「不可執行」的記憶體頁中被發現。因此,該處理電路將拒絕或中止其執行。
帶有資料執行防止的示例性處理電路
圖3圖示了示例性處理電路302,其可被適配成藉由初始將可執行代碼所常駐在其中的全部或大部分記憶體空間標注為不可執行來實施執行防止。處理電路302可包括一或多個處理器310以及可任選的快取記憶體系統312。處理電路302可耦合至外部設備,諸如記憶體設備304、各種通訊介面306及/或一或多個輸入/輸出(I/O)介面308。作為非限定性實例,通訊介面306可包括用於在匯流排、蜂巢網路、序列埠、平行埠、乙太網路連接、通用序列匯流排(USB)連接、IEEE 1394(「火線」)連接、藍芽無線連接、802.1 a/b/g/n類型無線連接、以及其他合適的通訊協定和介面上通訊的介面。作為非限定性實例,I/O介面308可包括至設備(諸如鍵盤、滑鼠、軌跡球、觸覺設備、音訊輸入和輸出、以及顯示器)的介面。
一些快取記憶體系統312包括多級快取記憶體,包括兩級或兩級以上快取記憶體314。在該實例中,第一級快取記憶體可包括分開的指令快取記憶體316和資料快取記憶體318。將指令與資料分開可藉由建立用於獲取資訊的並行路徑以及利用對於指令和資料可能不同的時間和空間接近度而造成效能增強。第二級快取記憶體可被配置為聯合快取記憶體320,其包括用於指令快取記憶體316的指令和用於資 料快取記憶體318的資料兩者。另外,快取記憶體系統312可包括對快取記憶體的不同配置,諸如舉例而言,組相聯快取記憶體以及用於滿的快取記憶體的各種替代協定,如快取記憶體設計領域的一般技藝人士將知曉的。
相對於不得不從主記憶體304獲取資料及/或指令,快取記憶體允許更快地取得此類指令和資料。與傳統記憶體的折衷在於尺寸。一般而言,較小的記憶體具有較高的頻寬、較低的等待時間或該兩者的組合。記憶體設備304通常實現為動態隨機存取記憶體(DRAM),其可具有相對良好的頻寬,但是可能具有相對長的等待時間。藉由將頻繁使用的資料和指令高速存取在快取記憶體系統312中,處理器312進行的獲取能以更高頻寬被快得多地接收。作為一般規則,第一級快取記憶體(亦即,最靠近處理器的快取記憶體316和318)較小、較快,並且具有較低的等待時間。第二級快取記憶體320一般較大、可能較慢,並且可具有較長的等待時間。然而,其仍比記憶體設備304更快,以使得藉由包括第二級快取記憶體達成效能改良是可能的。
根據快取記憶體系統的各種實例,可使用一或多級,並且每一級可實現為聯合快取記憶體或分開的指令快取記憶體和資料快取記憶體。本文論述的實施例主要關注指令。因此,論述可具體引述指令快取記憶體316及/或聯合快取記憶體320。然而,本領域一般技藝人士將領會,各實施例可在任一級快取記憶體上以及在指令快取記憶體316和聯合快取記憶體320兩者中實踐。
根據一個特徵,由一或多個處理器310使用的虛擬記憶體可常駐在快取記憶體系統312(例如,該快取記憶體系統內的任一級)內及/或記憶體設備304內。處理電路302亦可包括或實現執行防止模組322。在該實例中,執行防止模組322可耦合在(諸)處理器310和記憶體設備304以及快取記憶體系統312之間。在該實例中,虛擬記憶體可實現在記憶體設備304及/或快取記憶體系統312上。圖4圖示了示例性處理電路402的替代配置,其中執行防止模組322位於快取記憶體系統312與記憶體設備304之間。在該實例中,虛擬記憶體可實現在記憶體設備304中。
根據一個特徵,所有和大部分記憶體頁在其被獲取或映射到虛擬記憶體中時初始被標記為不可執行。處理電路302隨後拒絕執行常駐在主記憶體304中被標記為「不可執行」的該等區域中的任何代碼。作為替代,每次從主記憶體304載入/獲取頁到快取記憶體系統312中時,執行防止模組322在將其載入到快取記憶體系統312中之前將NX位元從不可執行改變(或使得改變)為可執行。一旦被載入到快取記憶體系統312中,該頁中的函數可被執行。
嘗試從虛擬記憶體中被標記為「不可執行」的頁存取指令的ROP攻擊將失敗。藉由將所有指令頁初始化為「不可執行」並且僅在其被獲取時經由執行防止模組322將記憶體頁狀態改變為「可執行」,ROP攻擊被限於從當前被標記為「可執行」的彼等記憶體頁呼叫指令。注意,儘管在本文描述的許多實例中使用了「記憶體頁」,但是相等或不同大 小的任何記憶體單元、區段、區塊可被標記為「不可執行」及/或「可執行」。由於來自ROP攻擊的呼叫繞過了資料執行防止模組322,其尋求執行的指令(例如,小程式)將失敗,因為該等記憶體頁被標記為「不可執行」。預設將虛擬記憶體中的所有記憶體頁標記為「不可執行」極大地減少了ROP攻擊可從其使用指令的記憶體頁的數目。為了進一步減少ROP攻擊可用的「可執行」指令,一旦函數終止,其相應的記憶體頁可從快取記憶體中清除及/或其在虛擬記憶體中被設回為不可執行。
圖5是圖示適配成執行增強的執行防止特徵的處理電路的實例的方塊圖。處理電路502可實現間接層,其包括傳入樁模組508及/或傳出樁模組510連同不執行位元模組536(在圖5中,經標示為「NX旗標核查536」)。在一個實例中,傳入樁模組508及/或傳出樁模組510可以是載入到記憶體中的應用的一部分。然而,此類傳入樁模組508及/或傳出樁模組510可被載入到被標記為「可執行」(由「X旗標」來標示)的不同記憶體區塊中,而該應用的相應的可執行代碼可被載入到預設標記為「不可執行」(由「NX旗標」來標示)的記憶體區塊中。在該實例中,間接樁模組540被載入到第一記憶體頁542中,其具有預設被設置為可執行的NX旗標。相應的可執行代碼被載入到記憶體頁k 512和q 548中。此處可以領會,每個可執行函數具有相應的傳入/傳出樁模組。例如,記憶體頁k 512中的函數F具有相應的傳入/傳出樁模組F 544。類似地,頁k 512中的函數I具有相應的傳入/傳出樁模組I 552,以 及頁q 548中的函數J具有相應的傳入/傳出樁模組J 554。在該實例中,傳入樁模組508和傳出樁模組510是傳入/傳出樁模組F 544的邏輯表示。
根據一個實例,樁模組508/510可用作間接層並且可以是正由處理電路502執行的應用的一部分。樁模組508/510可用於攔截(intercept)來自/去往應用514的函數呼叫及/或可具體地與該應用的一或多個相應函數(可執行代碼)相關聯。
出於說明目的,傳入樁模組508和傳出樁模組510在處理電路502內圖示並用於表示從虛擬記憶體504(例如,從記憶體頁1 542)載入的傳入/傳出樁模組。注意,取決於在任一時刻有效/開啟的函數呼叫的數目,多個傳入/傳出樁模組(例如,來自記憶體頁1 542)可被處理電路502載入。傳入樁模組508可用於將記憶體頁的不可執行(NX)旗標(通常是一位元)改變為可執行(X)旗標,隨後將控制傳遞給該記憶體頁內的被呼叫函數,並且一旦被呼叫函數已完成就逆轉該過程(例如,將記憶體頁從可執行(X)設置為不可執行(NX))。
在圖5中圖示的實例中,一旦由處理電路執行應用514,就可作出對函數F的呼叫520(其中函數F 550常駐在虛擬記憶體504內的記憶體頁k 512中)。並非直接從虛擬記憶體504獲取被呼叫函數(函數F),函數呼叫520被代之以發送給傳入樁模組508。例如,一旦對函數F的呼叫被調用,傳入樁模組F 544就被獲取和執行(例如,圖示為傳入樁模組508 )。在由處理電路502獲取及/或載入(524)函數F 550之前,傳入樁模組508(例如,傳入樁模組F 544)導致從函數F 550所常駐在其中的記憶體頁k 512消除/移除(522)不可執行(NX)旗標/位元(亦即,設置為可執行(X)旗標/位元設定)。在由處理電路502載入及/或執行函數F 550之前,不可執行(NX)旗標核查模組536可確定記憶體頁是被標記為可執行(X)還是不可執行(NX)。僅在虛擬記憶體504中被標記為「可執行」(X)的記憶體頁(或記憶體區域/區段)中發現的指令才被允許由處理電路502執行。
一旦記憶體頁及/或其中的指令已被驗證是在虛擬記憶體504中被標記為「可執行」並被取入處理電路502,該等指令就可由處理電路502正常地執行。此處,從載入的記憶體頁k 512執行(526)函數F 550。一旦完成函數F 550的執行,從函數F的返回528被發送給傳出樁模組510(亦即,傳出樁模組F 544)。傳出樁模組510可將執行控制返回給呼叫方應用514。另外,傳出樁模組510亦可為虛擬記憶體504中的頁k 512設置不可執行(NX)頁旗標(530)(亦即,從可執行狀態切換到不可執行狀態),以及從可由處理電路502使用的任何可任選快取記憶體中清除(534)頁k。一旦函數呼叫結束就從快取記憶體506中清除頁使得ROP攻擊可用的可執行指令數目最小化。
在替代實現中,傳入樁模組可將函數/指令移至已標記為可執行的記憶體頁中並隨後將控制傳遞給被呼叫函數(例如,呼叫預期函數F)。在被呼叫函數(例如,函數 F)已完成執行之後,返回被轉移到傳出樁模組530,其逆轉先前操作(亦即,從已標記為可執行的記憶體頁中移除該函數/指令及/或從快取記憶體清除記憶體頁k 512的任何副本)。
藉由將「呼叫方」和「被呼叫方」函數放在相同的或近旁的記憶體頁上、一次設置和消除一組或一塊記憶體頁上的不可執行旗標、及/或並非如每次函數進入和退出一般頻繁地在可執行和不可執行狀態之間切換,該系統的效能可得到改良。例如,若函數F呼叫函數M,函數M呼叫函數P,則使該等函數位於相同的記憶體頁或者可一起從虛擬記憶體504載入或獲取的頁塊中將是有利的。因此,當函數F被調用時改變不可執行(NX)頁旗標亦可用於使隨後呼叫的函數M和P可執行,而無需附加的頁載入和NX狀態改變。
由於可能位於不一定經常存取的許多不同記憶體區域的短指令片段(例如,小程式)的本質,ROP利用一般具有較差的空間接近度和較差的時間接近度。
圖6圖示了用於產生惡意程式碼序列的受損呼叫堆疊600的實例,該惡意程式碼序列包括串接在一起以形成返回導向的程式設計(ROP)利用的小程式。受損呼叫堆疊600由於攻擊者修改受損呼叫堆疊600上的一或多個返回位址而處於受損形式。圖6中亦圖示了包含指令的記憶體602的部分。
受損呼叫堆疊600可包括用於函數U、V、W、X、Y和Z的訊框(函數呼叫)。從受損呼叫堆疊600至記憶體 602的實箭頭指示出堆疊的返回位址使得處理電路在特定小程式的開頭處開始執行。從記憶體602至受損呼叫堆疊600的虛箭頭指示在該特定小程式結束處執行的返回指令從該堆疊獲取返回位址。
在受損呼叫堆疊600中,函數Z 608的返回位址已被修改為指向小程式A 612的開始位址610(亦即,GA返回位址)。類似地,函數Y 614的返回位址已被修改為指向小程式B 618的開始位址616(亦即,GB返回位址),函數W 620的返回位址已被修改為指向小程式E 624的開始位址622(亦即,GE返回位址),函數V 626的返回位址已被修改為指向小程式D 630的開始位址628(亦即,GD返回位址),以及函數U 632的返回位址已被修改為指向小程式C 636的開始位址634(亦即,GC返回位址)。在該實例中,函數X 640的返回位址638尚未被修改。
由於該等修改,當函數Z 608完成其操作並且執行返回指令時,並非返回至正確的地方,控制在小程式A 612的開頭(其位址已被放入函數Z 608的返回位址610中)繼續。每個小程式以返回指令結束。因此,當小程式A 612完成時,其返回指令指向函數Y 614的返回位址616。然而,函數Y 614的返回位址616已被修改為指向小程式B 618的開頭。因此,並非返回至正確的地方,控制在小程式B 618的開頭處繼續。繼續小程式執行,在小程式B 618完成之後,並非返回至對應函數U 632的正確的地方,控制在小程式C 636的開頭處繼續。在小程式C 636完成之後,並非返回至對應函數V 626的 正確的地方,控制在小程式D 630的開頭處繼續。在小程式D 630完成之後,並非返回至對應函數W 620的正確的地方,控制在小程式E 624的開頭處繼續。此種將小程式A-E串接在一起可執行形成ROP利用的至少一部分的重要函數。
然而,由於本文論述的處理電路利用資料執行防止並且所有記憶體頁在記憶體中預設被標記為「不可執行」,因此僅已經由間接層(例如,傳入樁模組508和傳出樁模組510)呼叫的函數/指令才被保證常駐在標記為「可執行」的記憶體頁上。因此,位於標記為「不可執行」的記憶體區域中的任何小程式將不能被處理電路執行,因為此類小程式呼叫繞過了該間接層。
圖7是圖示在圖5的處理單元的上下文中對於小程式獲取所發生的情況的方塊圖。在該實例中,各種函數已被載入到虛擬記憶體504中。該堆疊已被駭客攻擊,使得發生從頁q 548載入小程式的呼叫702。然而,此類小程式呼叫702不是經由傳入樁模組508發生的。亦即,不同於在虛擬記憶體504中具有相應的傳入/傳出樁模組的函數呼叫,小程式呼叫始於記憶體中的任意點(例如,被選擇以達成某些指令的執行)而沒有傳入/傳出樁模組。因此,由於傳入樁模組沒有被呼叫,頁q 548的狀態仍被標記為「不可執行」。當從頁q 548獲取(704)該小程式時,不可執行(NX)旗標核查模組536拒絕或阻止載入頁q 548,因為其被標記為「不可執行」。此舉亦可導致該小程式呼叫及/或過程的終止(706)。
用於抑制處理電路內的執行的示例性方法
圖8是圖示用於抑制處理電路內的代碼執行的一般性示例性方法的流程圖。該方法可例如由從記憶體(例如,虛擬記憶體、內部/外部記憶體等)獲取指令的處理電路來實現。記憶體中的可執行代碼區域被標注(例如,標記)為不可執行(802)。處理電路可監視用於從記憶體執行一或多個指令的請求(804)。若偵測到用於執行一或多個指令的請求(806),則該一或多個指令所常駐在其中的記憶體區域被標注為可執行(808)。處理電路隨後可從該記憶體區域執行該一或多個指令(810)。一旦完成,該一或多個指令所常駐在其中的記憶體區域又被標注為不可執行(812)。
圖9是圖示可在處理電路中操作的用於保護記憶體免受ROP利用的另一示例性方法的流程圖。該方法可在由處理電路執行應用或過程時實現。該應用或過程可包括使其可執行代碼被載入到記憶體及/或按以下方式受保護的指令。複數個記憶體頁的可執行代碼可被載入到記憶體設備中(902)。該可執行代碼可對應於單個應用及/或過程。該可執行代碼被載入到的記憶體設備可實現虛擬記憶體。該複數個記憶體頁的第一子集的狀態指示符可被設置為不可執行狀態(904)。類似地,該複數個記憶體頁的第二子集的狀態指示符被設置為可執行狀態,其中該複數個記憶體頁的第二子集包括至該複數個記憶體頁的第一子集中的函數的間接樁模組(906)。注意,將該複數個記憶體頁的可執行代碼載入到記憶體設備中可發生在該複數個記憶體頁的第一子集及/或第二子集中的至少一者的狀態指示符已被設置為不可執行狀態之前 及/或之後。
該間接樁模組可在該可執行代碼的編譯階段或預編譯階段產生。隨後,函數呼叫可被定向到該複數個記憶體頁的第二子集中的相應間接樁模組,其在導引執行來自該複數個記憶體頁的第一子集的被呼叫函數之前修改該複數個記憶體頁的第一子集中的相應函數的狀態指示符(908)。處理電路亦可實施常駐在該複數個記憶體頁的第一子集中的可執行代碼的執行防止(910)。例如,實施執行防止可包括:當該可執行代碼被處理電路獲取以進行執行時,中止常駐在處於不可執行狀態的記憶體頁中的任何可執行代碼的執行。處理電路亦可在該函數呼叫完成時返回至該複數個記憶體頁的第二子集中的相應間接樁模組,其中該相應間接樁模組隨後修改該複數個記憶體頁的第一子集中的相應函數的狀態指示符(912)。
在一個實例中,該間接樁模組可將該複數個記憶體頁的第一子集中的相應函數的狀態指示符從不可執行狀態修改為可執行狀態以賦能該函數的執行。該間接樁模組亦可將該複數個記憶體頁的第一子集中的相應函數的狀態指示符從可執行狀態修改為不可執行狀態以去能該函數的執行。
根據一個態樣,處理電路的內部快取記憶體可在該函數呼叫完成時清除(消除)該函數呼叫。
在另一實例中,在用於該函數呼叫的代碼常駐在該複數個記憶體頁的第一子集內的第一記憶體頁中的場 合,該方法可進一步包括:(a)追蹤處於可執行狀態的該第一記憶體頁的使用;(b)確定所有正在進行的函數呼叫何時已完成該第一記憶體頁內的相應代碼的執行;及/或(c)一旦最後一個正在進行的函數呼叫完成,將該第一記憶體頁的狀態指示符設置為不可執行狀態。
圖10是圖示用於保護記憶體免受ROP利用的示例性方法的流程圖。該方法可在從記憶體(例如,虛擬記憶體)存取可執行代碼或指令的處理電路中操作。
根據可任選特徵,嵌套的或相關的函數的可執行代碼可在執行之前被安排在相同的記憶體頁中(1000)。例如,該安排可在可執行代碼的編譯期間或在將可執行代碼載入到記憶體中時發生。以此方式預安排代碼可將相關的代碼在記憶體中緊密地在一起放置,由此避免過多記憶體頁獲取,並且作為擴展,使得頁狀態(例如,在可執行與不可執行之間的)改變最少。
處理電路可將複數個記憶體頁的可執行代碼載入到記憶體中(1002)並將每個記憶體頁的狀態指示符設置為不可執行狀態(1004)。在一個實例中,此類記憶體可被稱為虛擬記憶體,其可以是主記憶體及/或快取記憶體設備的實體記憶體位址的映射。一旦執行應用,處理電路及/或作業系統就可在從記憶體獲取相應的可執行代碼之前偵測、監視及/或截斷來自該應用的函數呼叫(1006)。在第一可執行代碼常駐在記憶體中的場合,第一記憶體頁的狀態指示符被設置及/或改變為可執行狀態(1008)。隨後可從記憶體獲取 第一記憶體頁(1010)。在從第一記憶體頁執行指令之前,作出關於第一記憶體頁狀態指示符是否被設置為可執行狀態的決定(1012)。若該記憶體頁狀態不是可執行狀態,則(由處理電路對)第一記憶體頁的載入/執行被中止(1014)。否則,若第一記憶體頁狀態的確是可執行狀態,則第一可執行代碼被(處理電路)執行(1016)。一旦完成第一可執行代碼的執行,處理電路可從任何內部快取記憶體(若存在)清除第一記憶體頁(1018)。
另外,處理電路亦可將記憶體中的狀態指示符設置回不可執行(1020)。以此方式,在應用外部發生的呼叫不被攔截並且其相應的指令將很可能在具有「不可執行」狀態的記憶體頁中發現。
在一些實現中,可能存在對一或多個記憶體頁中的函數的多個嵌套呼叫。根據一個態樣,可由執行應用的處理電路維持一或多個計數器,其中每個計數器用於追蹤特定記憶體頁中的函數及/或指令的執行是否已終止。例如,在嵌套函數呼叫的情況下,在第一記憶體頁中的函數可能呼叫第二頁中的函數的場合,多個記憶體頁可能同時保持開啟。該一或多個計數器可用於追蹤例如進入特定記憶體頁的次數以及退出的次數,由此確定記憶體頁的使用何時已完成並且可被清除或改變回到「不可執行」。在一些實現中,編譯器可將相關的可執行代碼安排在一起,從而其常駐在相同的(諸)記憶體頁中。此舉准許從記憶體頁執行指令而無需頻繁地消除和設置該記憶體頁的「不可執行」狀態。
根據另一態樣,可從本文描述的執行防止特徵排除引導代碼及/或某些啟動作業系統可執行代碼。亦即,包含此類代碼的記憶體頁可預設被標記為「可執行」(而非「不可執行」)。此舉將准許更快的引導,直至在處理電路或其上執行的作業系統處已達成最小限度的操作功能性。
示例性間接層
圖11是圖示准許在需要或呼叫記憶體區域時修改記憶體區域的狀態的間接層的示例性實現的方塊圖。在該實例中,處理電路1102可耦合至包括可執行指令/代碼1108及/或相應的間接代碼1104/1106(亦即,間接層)的記憶體模組1110(例如,虛擬記憶體、記憶體設備等)。在一個實例中,間接代碼1104/1106可以是已(例如,在預編譯時、在編譯時及/或在後編譯時)專門添加或插入到可執行代碼中的分開的指令。在另一實例中,間接代碼1104/1106可以是由處理器配置/解讀以達成保護對常駐在記憶體中的某些指令的存取安全的期望函數的現有指令。
在一個實例中,間接代碼1104/1106可用於設置/消除可執行指令1108的記憶體狀態。例如,當從由處理電路執行的應用內呼叫函數A時,相應的間接代碼A 1104實際上被呼叫。間接代碼A 1104將用於可執行代碼A(函數A)的相應記憶體區塊1112的狀態從「不可執行」設置為「可執行」,從而該等指令可由處理電路1102執行。一旦該等指令完成,間接代碼1104就將用於可執行代碼A(函數A)的相應記憶體區塊1112的狀態從「可執行」設置為「不可執行」,從而 該等指令不可用於(例如,由ROP攻擊)執行。可針對其他函數重複相同的過程。例如,第二函數B可能具有相應的間接代碼B 1106,其用於存取可執行代碼B(函數B)1114。
不同於可執行指令1108所常駐在其中的記憶體空間(其預設被標記為「不可執行’),間接代碼1104及/或1106可常駐在被標記為「可執行」的記憶體空間中,從而處理電路1102能執行此類代碼。間接代碼1104及/或1106可在特定應用的編譯時間產生,其中此類間接代碼是與該等可執行指令分開地組織的。替代地,間接代碼1104及/或1106可以在將可執行指令1108載入到記憶體中時動態地產生。
在一個實例中,每個可執行代碼1112/1114(或函數)可具有相應的間接代碼1104/1106。因此,每個間接代碼(樁模組)1104/1106可知道其相應的可執行代碼1112/1114常駐在記憶體中何處並且可以能夠指向此類記憶體位址。此類記憶體位址以及與每個函數相關聯的可執行代碼的大小可以是在(應用的)編譯時間知道的。因此,間接代碼1104/1106能夠決定相應的可執行代碼1112/1114常駐在哪些以及多少記憶體頁中。取決於任一個函數的可執行代碼的大小以及記憶體頁的大小,在用於給定函數呼叫的任何一個時間,一或多個記憶體頁可從「不可執行」切換成「可執行」(或保持在「可執行」狀態)。另外,在一些實現中,僅對應於最當前的、未解決的及/或待決的函數呼叫的可執行代碼所常駐在其中的記憶體區塊/(諸)記憶體頁保持在「可執行」狀態。在其他實現中,為了改良效能,在最後n個函數呼 叫中使用的(諸)記憶體頁保持在「可執行」記憶體狀態。
圖12圖示用於實現准許在需要或呼叫記憶體區域時修改記憶體區域的狀態的間接層的方法。該方法可在作業系統級別或在應用級別實現。函數呼叫(例如,對記憶體中的可執行代碼的呼叫)可在應用的執行期間被攔截(1202)。在載入/執行被呼叫函數之前,該間接層可將與用於被呼叫函數的可執行代碼相關聯的記憶體狀態從不可執行改變為可執行(1204)。處理電路隨後可獲取及/或執行用於被呼叫函數的該可執行代碼(1206)。根據一個特徵,處理電路可追蹤對該可執行代碼的嵌套進入及/或退出以確定該函數呼叫何時完成(1208)。一旦被呼叫函數完成,該間接層可將與用於被呼叫函數的該可執行代碼相關聯的記憶體狀態從可執行改變為不可執行(1210)。
圖13圖示了用於在應用內實現間接層的方法,該間接層允許修改應用可執行代碼所常駐在其中的記憶體區域的狀態以保護對此類記憶體區域的存取。可產生包括复數個函數的應用原始程式碼(1302)。亦可為原始程式碼之每一者函數產生間接代碼(1304)。可添加指令以使得該原始程式碼在被載入到記憶體中時被識別為不可執行(1306)。亦可添加指令以使得該間接代碼在被載入到記憶體中時被識別為可執行(1308)。該原始程式碼和間接代碼可在處理電路處被變換(例如,編譯)以產生可執行代碼(1310)。該可執行代碼可對應於單個應用及/或過程。可在該可執行代碼的編譯階段或預編譯階段產生間接樁模組。該原始程式碼 和間接代碼可被編譯成使得其在被載入到記憶體中以進行執行時常駐在分開的記憶體頁中。例如,與第一函數相關聯的第一間接代碼適配成指向該第一函數,其中在產生可執行代碼時,該第一間接代碼和第一函數被編譯成將被載入到不同的記憶體頁中。
在一個實例中,第一間接代碼可在相應的第一函數被調用以進行執行時導致該第一函數的記憶體狀態指示符從不可執行狀態切換成可執行狀態。
在另一個實例中,第一間接代碼在相應的第一函數終止執行時導致該第一函數的記憶體狀態指示符從可執行狀態切換成不可執行狀態。
在示例性實現中,圖8、圖9、圖10、圖12及/或圖13中揭示的一或多個特徵可在一或多個處理器中並行地(例如,併發地)及/或串列地(例如,順序地)實現。在多個處理器執行一或多個步驟的場合,該多個處理器中的每一個處理器可實現不同的步驟、相同的步驟及/或該等步驟的子集。
在本文提及的一些示例性實現中,間接層的函數可實現為在應用的編譯之前、期間及/或之後添加到該應用中的相異的指令/代碼。然而,其他實現可重用指令集中的現有指令及/或避免在可執行和不可執行狀態之間切換。
在另一示例性實現中,「間接層」可實現為指令集中的兩個(或更多個)互補指令的集合。例如,處理器可被配置成使得當第一指令被執行時,處理器拒絕獲取除 了接下來的第二指令以外的任何指令。例如,此類配置可在內部進行(例如,硬佈線到處理器中)或由載入到處理器中的指令進行(例如,載入程式配置)。若第二指令是在第一指令執行之後來到的指令,則處理器繼續執行。否則,處理器可中止或重置執行。在該辦法中,為包含可執行代碼的記憶體區段設置「不可執行」狀態可以是可任選的及/或非必需的。例如,並非具有圖5中的分開的傳入/傳出樁模組540,應用內的函數呼叫指令(亦即,第一指令)被限制為其後僅跟隨著被呼叫函數的初始指令(亦即,第二指令)。若處理器注意到除了該初始指令以外的任何其他指令跟隨在該函數呼叫指令之後,則其中止執行。此類函數呼叫指令(第一指令)和初始指令(第二指令)可以是添加到指令集的新/專用指令。替代地,已是指令集一部分的普通指令可被用於該目的,但是可使用位元或記號來註釋第一指令後必須跟隨著第二指令。以此方式,處理器可核查此類指令序列並且若除了第二指令以外的任何指令跟隨在第一指令之後(例如,返回導向的攻擊將是此種情形)則中止執行。
在此類互補指令對的一個實例中,第一指令可用作「呼叫」(例如,呼叫特定函數),而第二指令可用作「著陸」,其可被放在函數入口處。在一個實例中,此類指令對可在指令集內被專門定義為互補指令,其中第二指令必須跟隨在第一指令之後,否則處理器中止執行。在一個實例中,可存在兩組此類指令,第一對指令用於啟動函數呼叫(例如,傳入樁模組),而第二對指令用於退出/終止函數呼 叫(例如,傳出樁模組)。
在替代實例中,並非使用兩個專用指令(例如,互補的第一和第二指令),可用專用位元來編碼或標記普通指令,該專用位元用於指示其是否為樁模組指令。例如,普通的第一指令(例如,「呼叫」指令)若用於載入函數則可具有設定的位元/記號。類似地,普通的第二指令(例如,「著陸」指令)若用作函數載入的一部分則可具有類似的設定的位元/記號。因此,處理器在執行第一及/或第二指令時可核查此類位元/記號以確保其正按順序被執行,否則執行被中止。注意,第一指令(例如,「呼叫」指令)可以是各種類型的指令,包括跳轉(JMP)指令、載入指令等。類似地,在相反操作中(例如,當函數完成時)第一指令可以是各種類型的指令,包括返回指令、結束指令等。
注意,在一個實例中,「呼叫」指令的執行可導致處理器自動將被呼叫函數所常駐在其中的記憶體區段/頁的狀態從不可執行狀態切換成可執行狀態。一旦完成被呼叫函數的執行,該操作被逆轉並且該記憶體區段/頁被設置回到不可執行狀態。在替代實施例中,該記憶體區段/頁根本不被標記為不可執行。相反,可經藉由限制函數呼叫指令(第一指令)之後必須跟隨著被呼叫函數的初始指令(第二指令)來阻礙返回導向的程式設計攻擊。此舉抑制了返回導向的程式設計攻擊選擇性地跳轉到記憶體中的特定指令,因為呼叫方指令被限製成其後跟隨著著陸指令。
除非在本文中另行指出,否則所圖示和所描 述的具體實現僅僅是實例並且不應解釋成用於實現本案的僅有的方式。本領域一般技藝人士將容易明白,本案中的各個實例可藉由眾多其他劃分解決方案來實踐。
本文描述的以及附圖中圖示的一或多個元件、動作、特徵及/或功能可以被重新安排及/或組合成單個元件、動作、特徵或功能,或實施在數個元件、動作、特徵或功能中。亦可添加附加的組件、元件、動作及/或功能而不會脫離本發明。本文中描述的演算法亦可以高效地實現在軟體中及/或嵌入硬體中。
在該描述中,組件、電路和功能可能以方塊圖形式圖示以免將本案湮沒在不必要的細節中。相反,除非在本文中另行指出,否則所圖示和所描述的具體實現僅僅是示例性的並且不應解釋成用於實現本案的僅有的方式。另外,塊定義和各個區塊之間的邏輯劃分對於具體實現是示例性的。本領域一般技藝人士將容易明白,本案可藉由眾多其他劃分解決方案來實踐。對於大部分而言,涉及時序考量及諸如此類的細節已被省略,其中此類細節對於獲得對本案的完整理解並不是必需的且在相關領域一般技藝人士的能力之內。
亦應注意,該等實施例可能是作為被圖示為流程圖、流程圖、結構圖或方塊圖的過程來描述的。儘管流程圖可能會把諸操作描述為順序過程,但是該等操作中有許多能夠並行或併發地執行。另外,該等操作的次序可以被重新安排。過程在其操作完成時終止。過程可以對應於方法、 函數、程序、子常式、子程式等。當過程對應於函數時,其終止對應於該函數返回到呼叫方函數或主函數。
本領域一般技藝人士將可理解,資訊和信號可使用各種不同技術和技藝中的任一種來表示。例如,貫穿本描述可能述及的資料、指令、命令、資訊、信號、位元、符號和碼片可由電壓、電流、電磁波、磁場或磁粒子、光場或光粒子或其任何組合來表示。為了陳述和描述的清楚性,一些附圖可能將諸信號圖示為單個信號。本領域一般技藝人士將理解,信號可表示信號匯流排,其中該匯流排可具有各種各樣的位元寬度並且本案可在任何數目的資料信號上實現,包括單個資料信號。
應當理解,本文中使用諸如「第一」、「第二」等指定對元素的任何引述並不限制該等元素的量或次序,除非顯式陳述此類限制。相反,該等指定可在本文中用作區別兩個或兩個以上元素或者元素實例的便捷方法。因此,對第一和第二元素的引述並不意謂此處可採用僅兩個元素或者第一元素必須以某種方式位於第二元素之前。另外,除非另行說明,否則元素集可包括一或多個元素。
此外,存儲媒體可表示用於存儲資料的一或多個設備,包括唯讀記憶體(ROM)、隨機存取記憶體(RAM)、磁碟存儲媒體、光學儲存媒體、快閃記憶體設備及/或其他用於存儲資訊的機器可讀取媒體、以及處理器可讀取媒體、及/或電腦可讀取媒體。術語「機器可讀取媒體」、「電腦可讀取媒體」及/或「處理器可讀取媒體」可包括,但不限於 非瞬態媒體,諸如便攜或固定的存儲設備、光學存儲設備、以及能夠存儲、包含或承載指令及/或資料的各種其他媒體。因此,本文中描述的各種方法可全部或部分地由可存儲在「機器可讀取媒體」、「電腦可讀取媒體」及/或「處理器可讀取媒體」中並由一或多個處理器、機器及/或設備執行的指令及/或資料來實現。
此外,諸實施例可以由硬體、軟體、韌體、中介軟體、微代碼或其任何組合來實現。當在軟體、韌體、中介軟體或微碼中實現時,執行必要任務的程式碼或代碼區段可被存儲在諸如存儲媒體或其他存儲器之類的機器可讀取媒體中。處理器可以執行該等必要的任務。代碼區段可表示程序、函數、子程式、程式、常式、子常式、模組、套裝軟體、軟體組件,或是指令、資料結構或程式敘述的任何組合。藉由傳遞及/或接收資訊、資料、引數、參數或記憶體內容,一代碼區段可被耦合到另一代碼區段或硬體電路。資訊、引數、參數、資料等可以經由包括記憶體共享、訊息傳遞、符記傳遞、網路傳輸等任何合適的手段被傳遞、轉發或傳輸。
結合本文中揭示的實例描述的各個說明性邏輯區塊、模組、電路、組件及/或元件可用通用處理器、數位訊號處理器(DSP)、特殊應用積體電路(ASIC)、現場可程式閘陣列(FPGA)或其他可程式邏輯元件、個別閘門或電晶體邏輯、個別的硬體元件或其設計成執行本文中描述的功能的任意組合來實現或執行。通用處理器可以是微處理器, 但在替代方案中,處理器可以是任何習知的處理器、控制器、微控制器或狀態機。處理器亦可以實現為計算元件的組合,例如DSP與微處理器的組合、數個微處理器、與DSP核心協調的一或多個微處理器或任何其他此類配置。配置成用於執行本文描述的實施例的通用處理器被認為是執行此類實施例的專用處理器。類似地,通用電腦在配置成用於執行本文描述的實施例時被認為是專用電腦。
結合本文中揭示的實例描述的方法或演算法可直接在硬體中、在能由處理器執行的軟體模組中、或在該兩者的組合中,以處理單元、程式設計指令、或其他指示的形式實施,並且可包含在單個設備中或跨多個設備分佈。軟體模組可常駐在RAM記憶體、快閃記憶體、ROM記憶體、EPROM記憶體、EEPROM記憶體、暫存器、硬碟、可移除磁碟、CD-ROM或本領域所知的任何其他形式的存儲媒體中。存儲媒體可被耦合到處理器以使得該處理器能從/向該存儲媒體讀取和寫入資訊。在替代方案中,存儲媒體可以被整合到處理器。
本領域技藝人士將可進一步領會,結合本文中揭示的實施例描述的各種說明性邏輯區塊、模組、電路和演算法步驟可被實現為電子硬體、電腦軟體或兩者的組合。為清楚地說明硬體與軟體的該可互換性,以上已經以其功能性的形式一般化地描述了各種說明性元件、方塊、模組、電路和步驟。此類功能性是被實現為硬體、軟體還是其組合取決於具體應用和加諸於整體系統的設計選擇。
本文中所描述的本發明的各種特徵可實現於不同系統中而不脫離本發明。應注意,以上實施例僅是實例,且不應被解釋成限定本發明。該等實施例的描述意欲說明,而並非意欲限定請求項的範圍。由此,本發明的教示可以現成地應用於其他類型的裝置,並且許多替代、修改和變形對於本領域技藝人士將是顯而易見的。
100‧‧‧操作環境
102‧‧‧處理電路
104‧‧‧虛擬記憶體
106‧‧‧永久存儲設備
108‧‧‧實體記憶體設備
110‧‧‧堆
112‧‧‧堆疊
114‧‧‧常數資料
116‧‧‧初始化資料
118‧‧‧可執行指令
120a‧‧‧專用位址空間
120b‧‧‧專用位址空間
120c‧‧‧專用位址空間

Claims (40)

  1. 一種在一處理電路中操作的方法,包括以下步驟:將一記憶體設備中針對可執行代碼的複數個記憶體頁之一第一子集的一狀態指示符設置為一不可執行狀態;將針對該等複數個記憶體頁之一第二子集的該狀態指示符設置為一可執行狀態,其中該等複數個記憶體頁之該第二子集包括對在該等複數個記憶體頁之該第一子集中的函數的間接樁模組(indirection stub);及將針對該等複數個記憶體頁之該第一子集中的該等函數中之一者的一函數呼叫(function call)導引到該等複數個記憶體頁之該第二子集中的一相應間接樁模組,其中在導引執行來自該等複數個記憶體頁之該第一子集的被呼叫函數(called function)之前,該相應間接樁模組修改針對該等複數個記憶體頁之該第一子集的該狀態指示符。
  2. 如請求項1所述之方法,其中該可執行代碼對應於一單個應用程式及/或程序。
  3. 如請求項1所述之方法,進一步包括以下步驟:在針對該等複數個記憶體頁之該第一子集或該第二子集中之至少一者的該狀態指示符已被設置為該不可執行狀態之後,將可執行代碼的該等複數個記憶體頁載入到該記憶體設備中。
  4. 如請求項1所述之方法,進一步包括以下步驟:在針對該等複數個記憶體頁之該第一子集或該第二子集中之至少一者的該狀態指示符已被設置為該不可執行狀態之前,將可執行代碼的該等複數個記憶體頁載入到該記憶體設備中。
  5. 如請求項1所述之方法,其中該可執行代碼所常駐在其中之該記憶體設備實現一虛擬記憶體。
  6. 如請求項1所述之方法,進一步包括以下步驟:對常駐在該等複數個記憶體頁之該第一子集中的可執行代碼實施執行防止(execution prevention)。
  7. 如請求項6所述之方法,其中實施執行防止之步驟包括以下步驟:當該可執行代碼由該處理電路所獲取(fetch)以進行執行時,中止對常駐在處於該不可執行狀態的一記憶體頁中的任何可執行代碼的執行。
  8. 如請求項1所述之方法,其中該相應間接樁模組將針對該等複數個記憶體頁之該第一子集的該狀態指示符從該不可執行狀態修改為該可執行狀態,以賦能該被呼叫函數的執行。
  9. 如請求項1所述之方法,進一步包括以下步驟: 在該函數呼叫完成時,就返回至在該等複數個記憶體頁之該第二子集中的該相應間接樁模組,其中該相應間接樁模組隨後修改針對該等複數個記憶體頁之該第一子集的該狀態指示符。
  10. 如請求項9所述之方法,其中該相應間接樁模組將針對該等複數個記憶體頁之該第一子集的該狀態指示符從該可執行狀態修改為該不可執行狀態,以去能該被呼叫函數的執行。
  11. 如請求項1所述之方法,進一步包括以下步驟:在該函數呼叫完成時,就清除該處理電路的一內部快取記憶體。
  12. 如請求項1所述之方法,其中該等間接樁模組是在該可執行代碼的一編譯階段或預編譯階段所產生的。
  13. 如請求項1所述之方法,其中該相應間接樁模組包括至少一第一指令和一第二指令,該第一指令和該第二指令被限制為由該處理電路按順序來執行。
  14. 如請求項13所述之方法,進一步包括以下步驟:若該第一指令之後跟著是除了該第二指令以外的任何指令,則中止該函數呼叫的執行。
  15. 如請求項13所述之方法,其中該第一指令是該函數呼叫的一部分,且該第二指令是該被呼叫函數的一初始指令。
  16. 如請求項15所述之方法,其中該相應間接樁模組是藉由將該第一指令結合至該第二指令以使得除非該第一指令之後跟著是該第二指令否則就中止執行來實現的。
  17. 如請求項1所述之方法,其中針對該被呼叫函數的代碼常駐在該等複數個記憶體頁之該第一子集內的一第一記憶體頁中,該方法進一步包括以下步驟:追蹤處於該可執行狀態的該第一記憶體頁的使用(usage);確定何時所有正在進行的函數呼叫已完成在該第一記憶體頁內的相應代碼的執行;及在一最後正在進行的函數呼叫完成時,就將針對該第一記憶體頁的該狀態指示符設置為該不可執行狀態。
  18. 一種處理設備,包括:一記憶體設備;及一處理電路,該處理電路耦合到該記憶體設備,該處理電路被配置以執行以下步驟:將該記憶體設備中針對可執行代碼的複數個記憶體頁之一第一子集的一狀態指示符設置為一不可執行狀態;將針對該等複數個記憶體頁之一第二子集的該狀態指示 符設置為一可執行狀態,其中該等複數個記憶體頁之該第二子集包括對在該等複數個記憶體頁之該第一子集中的函數的間接樁模組;及將針對該等複數個記憶體頁之該第一子集中的該等函數中之一者的一函數呼叫導引到該等複數個記憶體頁之該第二子集中的一相應間接樁模組,其中在導引執行來自該等複數個記憶體頁之該第一子集的被呼叫函數之前,該相應間接樁模組修改針對該等複數個記憶體頁之該第一子集的該狀態指示符。
  19. 如請求項18所述之處理設備,其中該處理電路被進一步配置以執行以下步驟:對常駐在該等複數個記憶體頁之該第一子集中的可執行代碼實施執行防止。
  20. 如請求項19所述之處理設備,其中對於實施執行防止的步驟,該處理電路被進一步配置以執行以下步驟:當該可執行代碼由該處理電路所獲取以進行執行時,中止對常駐在處於該不可執行狀態的一記憶體頁中的任何可執行代碼的執行。
  21. 如請求項18所述之處理設備,其中該相應間接樁模組將針對該等複數個記憶體頁之該第一子集的該狀態指示符從該不可執行狀態修改為該可執行狀態,以賦能該被呼叫函數的 執行。
  22. 如請求項18所述之處理設備,其中該處理電路被進一步配置以執行以下步驟:在該函數呼叫完成時,就返回至在該等複數個記憶體頁之該第二子集中的該相應間接樁模組,其中該相應間接樁模組隨後修改針對該等複數個記憶體頁之該第一子集的該狀態指示符。
  23. 如請求項18所述之處理設備,其中該相應間接樁模組將針對該等複數個記憶體頁之該第一子集的該狀態指示符從該可執行狀態修改為該不可執行狀態,以去能該被呼叫函數的執行。
  24. 如請求項18所述之處理設備,其中該相應間接樁模組包括至少一第一指令和一第二指令,該第一指令和該第二指令被限制為由該處理電路按順序來執行,其中該處理電路被進一步配置以執行以下步驟:若該第一指令之後跟著是除了該第二指令以外的任何指令,則中止該函數呼叫的執行。
  25. 一種處理設備,包括:用於將可執行代碼的複數個記憶體頁載入到一記憶體設備中的構件; 用於將該等複數個記憶體頁之一第一子集的一狀態指示符設置為一不可執行狀態的構件;用於將針對該等複數個記憶體頁之一第二子集的該狀態指示符設置為一可執行狀態的構件,其中該等複數個記憶體頁之該第二子集包括對在該等複數個記憶體頁之該第一子集中的函數的間接樁模組;及用於將針對該等複數個記憶體頁之該第一子集中的該等函數中之一者的一函數呼叫導引到該等複數個記憶體頁之該第二子集中的一相應間接樁模組的構件,其中在導引執行來自該等複數個記憶體頁之該第一子集的被呼叫函數之前,該相應間接樁模組修改針對該等複數個記憶體頁之該第一子集的該狀態指示符。
  26. 一種其上存儲有指令的非暫態處理器可讀取媒體,該等指令在由至少一個處理器執行時,使得該至少一個處理器執行以下步驟:將一記憶體設備中針對可執行代碼的複數個記憶體頁之一第一子集的一狀態指示符設置為一不可執行狀態;將針對該等複數個記憶體頁之一第二子集的該狀態指示符設置為一可執行狀態,其中該等複數個記憶體頁之該該第二子集包括對在該等複數個記憶體頁之該第一子集中的函數的間接樁模組;及將針對該等複數個記憶體頁之該第一子集中的該等函數中之一者的一函數呼叫導引到該等複數個記憶體頁之該第二 子集中的一相應間接樁模組,其中在導引執行來自該等複數個記憶體頁之該第一子集的被呼叫函數之前,該相應間接樁模組修改針對該等複數個記憶體頁之該第一子集的該狀態指示符。
  27. 一種在一處理電路中操作的方法,包括以下步驟:產生包括複數個函數的一應用程式原始碼(source code);針對在該原始程式碼中之每一函數來產生一間接代碼(indirection code);添加指令以使得該原始碼在被載入到記憶體中時被識別為不可執行的;添加指令以使得該間接代碼在被載入到記憶體中時被識別為可執行的;及在該處理電路處轉換該原始碼和該間接代碼以產生一可執行代碼(executable code)。
  28. 如請求項27所述之方法,其中該可執行代碼對應於一單個應用程式及/或程序。
  29. 如請求項27所述之方法,其中該間接代碼是在該可執行代碼的一編譯階段或一預編譯階段所產生的。
  30. 如請求項27所述之方法,其中該原始碼和該間接代碼被 編譯,以致於該原始碼和該間接代碼在被載入到記憶體中時,常駐在分開的記憶體頁中。
  31. 如請求項27所述之方法,其中一第一間接代碼在一相應第一函數被調用(invoke)來執行時,使得針對該相應第一函數的一記憶體狀態指示符從一不可執行狀態切換為一可執行狀態。
  32. 如請求項27所述之方法,其中一第一間接代碼在一相應第一函數終止執行時,使得針對該相應第一函數的一記憶體狀態指示符從一可執行狀態切換為一不可執行狀態。
  33. 如請求項27所述之方法,其中與一第一函數相關聯的一第一間接代碼指向(point to)該第一函數,其中在產生該可執行代碼時,該第一間接代碼和該第一函數被編譯以被載入到不同的記憶體頁中。
  34. 如請求項27所述之方法,其中該間接代碼包括至少一第一指令和一第二指令,該第一指令和該第二指令被限制為由一處理電路按順序來執行。
  35. 如請求項34所述之方法,進一步包括以下步驟:添加指令以使得若該第一指令之後跟著是除了該第二指令以外的任何指令則中止該間接代碼的執行。
  36. 一種其上存儲有指令的非暫態處理器可讀取媒體,該等指令在由至少一個處理器執行時,使得該至少一個處理器執行以下步驟:產生包括複數個函數的一應用程式原始碼;針對在該原始程式碼中之每一函數來產生一間接代碼;添加指令以使得該原始碼在被載入到記憶體中時被識別為不可執行的;添加指令以使得該間接代碼在被載入到記憶體中時被識別為可執行的;及在該處理電路處轉換該原始碼和該間接代碼以產生一可執行代碼。
  37. 如請求項36所述之非暫態處理器可讀取媒體,其中該可執行代碼對應於一單個應用程式及/或程序。
  38. 如請求項36所述之非暫態處理器可讀取媒體,其中該間接代碼是在該可執行代碼的一編譯階段或一預編譯階段所產生的。
  39. 如請求項36所述之非暫態處理器可讀取媒體,其中一第一間接代碼在一相應第一函數被調用來執行時,使得針對該相應第一函數的一記憶體狀態指示符從一不可執行狀態切換為一可執行狀態。
  40. 如請求項36所述之非暫態處理器可讀取媒體,其中一第一間接代碼在一相應第一函數終止執行時,使得針對該相應第一函數的一記憶體狀態指示符從一可執行狀態切換為一不可執行狀態。
TW102101513A 2012-01-16 2013-01-15 用以抑制返回導向的程式設計的動態執行防止 TWI468980B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US13/351,006 US8776223B2 (en) 2012-01-16 2012-01-16 Dynamic execution prevention to inhibit return-oriented programming

Publications (2)

Publication Number Publication Date
TW201342109A TW201342109A (zh) 2013-10-16
TWI468980B true TWI468980B (zh) 2015-01-11

Family

ID=47604256

Family Applications (1)

Application Number Title Priority Date Filing Date
TW102101513A TWI468980B (zh) 2012-01-16 2013-01-15 用以抑制返回導向的程式設計的動態執行防止

Country Status (8)

Country Link
US (1) US8776223B2 (zh)
EP (1) EP2805246B1 (zh)
JP (1) JP5769891B2 (zh)
KR (1) KR101480821B1 (zh)
CN (2) CN105303104B (zh)
BR (1) BR112014017156A8 (zh)
TW (1) TWI468980B (zh)
WO (1) WO2013109546A1 (zh)

Families Citing this family (33)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9256730B2 (en) * 2012-09-07 2016-02-09 Crowdstrike, Inc. Threat detection for return oriented programming
US9177147B2 (en) * 2012-09-28 2015-11-03 Intel Corporation Protection against return oriented programming attacks
US9223979B2 (en) 2012-10-31 2015-12-29 Intel Corporation Detection of return oriented programming attacks
WO2014189510A1 (en) * 2013-05-23 2014-11-27 Intel Corporation Techniques for detecting return-oriented programming
US9189214B2 (en) * 2013-10-30 2015-11-17 International Business Machines Corporation Code stack management
US9703948B2 (en) * 2014-03-28 2017-07-11 Intel Corporation Return-target restrictive return from procedure instructions, processors, methods, and systems
US9390264B2 (en) 2014-04-18 2016-07-12 Qualcomm Incorporated Hardware-based stack control information protection
US9904780B2 (en) * 2014-07-31 2018-02-27 Nec Corporation Transparent detection and extraction of return-oriented-programming attacks
EP2996034B1 (en) * 2014-09-11 2018-08-15 Nxp B.V. Execution flow protection in microcontrollers
WO2016041592A1 (en) * 2014-09-17 2016-03-24 Irdeto B.V. Generating and executing protected items of software
US9646154B2 (en) * 2014-12-12 2017-05-09 Microsoft Technology Licensing, Llc Return oriented programming (ROP) attack protection
US9569613B2 (en) * 2014-12-23 2017-02-14 Intel Corporation Techniques for enforcing control flow integrity using binary translation
SG10201504066QA (en) * 2015-05-25 2016-12-29 Huawei Internat Pte Ltd Method and system for defense against return oriented programming (rop) based attacks
US9576138B1 (en) 2015-09-30 2017-02-21 International Business Machines Corporation Mitigating ROP attacks
US9767292B2 (en) 2015-10-11 2017-09-19 Unexploitable Holdings Llc Systems and methods to identify security exploits by generating a type based self-assembling indirect control flow graph
US9904782B2 (en) * 2015-10-27 2018-02-27 Mcafee, Llc Synchronous execution of designated computing events using hardware-assisted virtualization
US10152592B2 (en) 2015-12-11 2018-12-11 International Business Machines Corporation Compiler assisted protection against arbitrary code execution
US10762199B2 (en) 2015-12-11 2020-09-01 International Business Machines Corporation Compiler assisted protection against arbitrary code execution
US10007787B2 (en) 2015-12-28 2018-06-26 International Business Machines Corporation Runtime return-oriented programming detection
CN109074453B (zh) * 2016-04-26 2021-10-26 三菱电机株式会社 入侵检测装置、入侵检测方法以及计算机能读取的存储介质
US10423792B2 (en) 2016-09-23 2019-09-24 Red Hat, Inc. Identifying exploitable code sequences
US10437990B2 (en) 2016-09-30 2019-10-08 Mcafee, Llc Detection of return oriented programming attacks in a processor
KR101908573B1 (ko) 2016-11-01 2018-10-16 성균관대학교 산학협력단 효율적인 리턴-지향형 프로그래밍 공격을 방어할 수 있도록 컴퓨터 프로그램을 생성하는 방법
US10599835B2 (en) 2018-02-06 2020-03-24 Vmware, Inc. 32-bit address space containment to secure processes from speculative rogue cache loads
CN110598406B (zh) * 2018-06-12 2022-08-23 杨力祥 一种数据保护方法及计算装置
EP3877881A1 (en) * 2018-11-07 2021-09-15 C2A-SEC, Ltd. Return-oriented programming protection
US11016762B2 (en) 2019-06-06 2021-05-25 International Business Machines Corporation Determining caller of a module in real-time
US10915426B2 (en) 2019-06-06 2021-02-09 International Business Machines Corporation Intercepting and recording calls to a module in real-time
US11074069B2 (en) 2019-06-06 2021-07-27 International Business Machines Corporation Replaying interactions with transactional and database environments with re-arrangement
US10929126B2 (en) 2019-06-06 2021-02-23 International Business Machines Corporation Intercepting and replaying interactions with transactional and database environments
US11036619B2 (en) 2019-06-06 2021-06-15 International Business Machines Corporation Bypassing execution of a module in real-time
US20220358210A1 (en) * 2021-05-07 2022-11-10 Ventana Micro Systems Inc. Conditioning store-to-load forwarding (stlf) on past observations of stlf propriety
US20220358040A1 (en) * 2021-05-07 2022-11-10 Ventana Micro Systems Inc. Unforwardable load instruction re-execution eligibility based on cache update by identified store instruction

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TW200720974A (en) * 2005-09-17 2007-06-01 Technology Group Northwest Inc System and method for foiling code-injection attacks in a computing device
TW200813776A (en) * 2006-05-12 2008-03-16 Sharp Kk Computer system having memory protection function
US20110320681A1 (en) * 2010-06-28 2011-12-29 International Business Machines Corporation Memory management computer
US20110321165A1 (en) * 2010-06-24 2011-12-29 Alen Capalik System and Method for Sampling Forensic Data of Unauthorized Activities Using Executability States

Family Cites Families (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5742840A (en) * 1995-08-16 1998-04-21 Microunity Systems Engineering, Inc. General purpose, multiple precision parallel operation, programmable media processor
US6317870B1 (en) * 1999-02-26 2001-11-13 Hewlett-Packard Company System and method for optimization of inter-module procedure calls
US6654888B1 (en) * 1999-12-31 2003-11-25 International Business Machines Corporation Installing and controlling trial software
GB0226874D0 (en) * 2002-11-18 2002-12-24 Advanced Risc Mach Ltd Switching between secure and non-secure processing modes
US7475220B1 (en) 2003-08-18 2009-01-06 Cray Incorporated Buffer overflow detection
US7287283B1 (en) 2003-09-25 2007-10-23 Symantec Corporation Return-to-LIBC attack blocking system and method
WO2006052703A2 (en) 2004-11-04 2006-05-18 Board Of Trustees Of Michigan State University Secure bit
US7540026B1 (en) 2005-01-24 2009-05-26 Symantec Corporation No-execute processor feature global disabling prevention system and method
GB0525871D0 (en) * 2005-12-20 2006-02-01 Symbian Software Ltd Malicious software detecting in a computing device
US8041958B2 (en) * 2006-02-14 2011-10-18 Lenovo (Singapore) Pte. Ltd. Method for preventing malicious software from execution within a computer system
US7464226B2 (en) * 2006-02-23 2008-12-09 Lars Andreas Reinertsen Fractional caching
US8079032B2 (en) * 2006-03-22 2011-12-13 Webroot Software, Inc. Method and system for rendering harmless a locked pestware executable object
WO2007117567A2 (en) * 2006-04-06 2007-10-18 Smobile Systems Inc. Malware detection system and method for limited access mobile platforms
US8286238B2 (en) * 2006-09-29 2012-10-09 Intel Corporation Method and apparatus for run-time in-memory patching of code from a service processor
CN101093531B (zh) * 2007-04-30 2011-05-11 李宏强 一种提高计算机软件安全的方法
CN100541509C (zh) * 2007-12-10 2009-09-16 上海北大方正科技电脑系统有限公司 一种查杀电脑病毒的方法
US8074281B2 (en) * 2008-01-14 2011-12-06 Microsoft Corporation Malware detection with taint tracking
US8578483B2 (en) 2008-07-31 2013-11-05 Carnegie Mellon University Systems and methods for preventing unauthorized modification of an operating system
CN101446905B (zh) * 2008-12-29 2012-06-27 飞天诚信科技股份有限公司 编译方法
EP2256659A1 (en) * 2009-05-27 2010-12-01 NTT DoCoMo, Inc. Method and apparatus for preventing modification of a program execution flow
US8352797B2 (en) 2009-12-08 2013-01-08 Microsoft Corporation Software fault isolation using byte-granularity memory protection
US8464233B2 (en) * 2010-06-21 2013-06-11 Microsoft Corporation Compile time interpretation of markup codes
US8756590B2 (en) * 2010-06-22 2014-06-17 Microsoft Corporation Binding data parallel device source code
US9116717B2 (en) * 2011-05-27 2015-08-25 Cylance Inc. Run-time interception of software methods
US20120331303A1 (en) * 2011-06-23 2012-12-27 Andersson Jonathan E Method and system for preventing execution of malware

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TW200720974A (en) * 2005-09-17 2007-06-01 Technology Group Northwest Inc System and method for foiling code-injection attacks in a computing device
TW200813776A (en) * 2006-05-12 2008-03-16 Sharp Kk Computer system having memory protection function
US20110321165A1 (en) * 2010-06-24 2011-12-29 Alen Capalik System and Method for Sampling Forensic Data of Unauthorized Activities Using Executability States
US20110320681A1 (en) * 2010-06-28 2011-12-29 International Business Machines Corporation Memory management computer

Also Published As

Publication number Publication date
WO2013109546A1 (en) 2013-07-25
TW201342109A (zh) 2013-10-16
US8776223B2 (en) 2014-07-08
BR112014017156A8 (pt) 2017-07-04
CN104054061B (zh) 2015-11-25
EP2805246B1 (en) 2017-03-01
EP2805246A1 (en) 2014-11-26
CN105303104A (zh) 2016-02-03
KR101480821B1 (ko) 2015-01-09
US20130185792A1 (en) 2013-07-18
JP2015503815A (ja) 2015-02-02
BR112014017156A2 (pt) 2017-06-13
CN104054061A (zh) 2014-09-17
KR20140114433A (ko) 2014-09-26
JP5769891B2 (ja) 2015-08-26
CN105303104B (zh) 2019-03-22

Similar Documents

Publication Publication Date Title
TWI468980B (zh) 用以抑制返回導向的程式設計的動態執行防止
US11599628B2 (en) Detecting return-oriented programming payloads by evaluating data for a gadget address space address and determining whether operations associated with instructions beginning at the address indicate a return-oriented programming payload
ES2785350T3 (es) Evaluación de procesos para la detección de programas malignos en máquinas virtuales
KR101504857B1 (ko) 보안 시스템에서 랜덤하게 할당된 메모리 범위로 jit를 지원하는 시스템 및 방법
CN103946855A (zh) 用于检测面向返回编程攻击的方法、装置和系统
US10528729B2 (en) Methods and systems for defending against cyber-attacks
US10579791B2 (en) Technologies to defeat secure enclave side-channel attacks using fault-oriented programming
Chen Reversing and exploiting an Apple firmware update
US10572666B2 (en) Return-oriented programming mitigation
CN115510430A (zh) 一种函数指针及其数据依赖的识别与保护方法、装置
US20070083770A1 (en) System and method for foiling code-injection attacks in a computing device
US10885184B1 (en) Rearranging executables in memory to prevent rop attacks
US20140283060A1 (en) Mitigating vulnerabilities associated with return-oriented programming
US11893113B2 (en) Return-oriented programming protection
US10515217B2 (en) Technologies for mitigating call-oriented programming using an inter-module control flow policy
EP3040895A1 (en) System and method for protecting a device against return-oriented programming attacks
Friedman et al. Chronomorphic programs: Using runtime diversity to prevent code reuse attacks
US20220407695A1 (en) Electronic device and control method thereof
KR101930596B1 (ko) 데이터 히든 장치 및 이에 있어서 프로그램 구동 방법

Legal Events

Date Code Title Description
MM4A Annulment or lapse of patent due to non-payment of fees