TWI717762B - 動態分段位址空間佈局隨機化技術 - Google Patents

動態分段位址空間佈局隨機化技術 Download PDF

Info

Publication number
TWI717762B
TWI717762B TW108121111A TW108121111A TWI717762B TW I717762 B TWI717762 B TW I717762B TW 108121111 A TW108121111 A TW 108121111A TW 108121111 A TW108121111 A TW 108121111A TW I717762 B TWI717762 B TW I717762B
Authority
TW
Taiwan
Prior art keywords
instructions
relocatable
instruction
commands
code
Prior art date
Application number
TW108121111A
Other languages
English (en)
Other versions
TW202013178A (zh
Inventor
派翠克 W 洪
Original Assignee
美商雷神公司
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 美商雷神公司 filed Critical 美商雷神公司
Publication of TW202013178A publication Critical patent/TW202013178A/zh
Application granted granted Critical
Publication of TWI717762B publication Critical patent/TWI717762B/zh

Links

Images

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/51Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems at application loading time, e.g. accepting, rejecting, starting or inhibiting executable software based on integrity or source reliability
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • 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
    • 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/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/71Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information
    • G06F21/75Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information by inhibiting the analysis of circuitry or operation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/30149Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms
    • G06F9/4486Formation of subprogram jump address
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/21Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/2125Just-in-time application of countermeasures, e.g., on-the-fly decryption, just-in-time obfuscation or de-obfuscation

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Executing Machine-Instructions (AREA)
  • Storage Device Security (AREA)

Abstract

一種方法可包括識別出該等指令的固定指令及該等指令的可重新定位指令,該等固定指令參考該等指令的另一個指令而該等可重新定位指令不參考該等指令的另一個指令,改變在該記憶體中相對於彼此之該等可重新定位指令的該位置,並把各別的參考指令添加到該等固定指令及可重新定位指令,該等各別的參考指令致使該等指令將會以與假如該位置沒被改變之原來順序相同的一順序被執行,以及從在該記憶體中它們被改變的位置執行該等固定指令及該等可重新定位指令。

Description

動態分段位址空間佈局隨機化技術
發明領域
本文所討論的實施例涉及用於增加一軟體應用程式之安全性的裝置、系統、以及方法。更具體地說,實施例可有助於防止程式碼重用攻擊或需要知道在該程式碼庫內實體位置之其他基於應用程式的安全性漏洞。
發明背景
至少在某種程度上,由於防止程式碼注入及執行攻擊的資料執行保護(DEP),最近的網路攻擊已經轉移到重新設計一應用程式的現有程式碼庫以實現其惡意的效果。程式碼重用攻擊係一常見的網路攻擊技術,其可以重新編寫在一程式碼庫中現有的程式碼區段。攻擊者從該現有的程式碼庫中創建功能性的「小工具」,並執行小工具鏈以實現其惡意的目的。
由於其可變長度指令集,該x86架構特別容易來重新利用程式碼。藉由從指令的中間執行,而不是按順序執行該等指令,可以創建出新的、非預期的程式碼片段。攻擊者可以使用現有的程式碼中創建出稱為「小工具」的程式碼區段。小工具係程式碼序列,它執行具有一或多個副作用的基本操作,並以一返回作為結束。由於鏈接小工具通常需要一小工具來結束在一跳躍類型指令中,因此可以透過識別出在該指令集或串流中對應到返回運算碼(0xc2、0xc3、0xca、等等)或pop+jmp指令的該值集來識別出潛在的小工具。識別出足夠的這些小工具可以讓該攻擊者創建出一圖靈(Turing)完整語言。藉由把小工具鏈接在一起,該攻擊者可以實現他們的目的。
由於程式碼重用攻擊需要知道該等小工具的位置,因此已經開發了程式碼佈局隨機化技術,以藉由使得該等小工具難以找到來防止小工具的使用。程式碼佈局隨機化的一般類別被稱為位址空間佈局隨機化(ASLR)。一ASLR技術該使程式碼佈局隨機化的程度被稱為熵。通常,該熵越高,該ASLR技術越強。ASLR技術也以不同的粒度進行隨機化。更精細的區塊(具有更少指令的區塊)會導致更強的ASLR技術。
依據本發明之一實施例,係特地提出一種裝置,其被組配來執行動態分段位址空間佈局隨機化,該裝置包含有:一記憶體以儲存將被執行之一應用程式的指令,該等指令包括有固定指令及可重新定位指令;處理電路用以:實現一編譯器來識別出該等固定指令及該等可重新定位指令,該等固定指令參考該等指令的另一個指令而該等可重新定位指令不參考該等指令的另一個指令;用以實現一載入器來改變在該記憶體中相對於彼此之該等可重新定位指令的一位置,並把各別的參考指令添加到該等固定指令及可重新定位指令,該等各別的參考指令致使該等指令將會以與假如該位置沒被改變之原來順序相同的一順序被執行;以及從在該記憶體中它們被改變的位置執行該等固定指令及該等可重新定位指令。
較佳實施例之詳細說明
實施例一般係涉及裝置、系統、以及方法,用以降低一裝置將受到一網路攻擊不利影響的可能性。更具體地說,一或多個實施例涉及動態分段ASLR技術、裝置、方法、以及機器可讀取媒體。
網路入侵以及用於檢測及防止網路攻擊的方法係運算世界的一項課題。隨著系統變得越來越互聯,網路攻擊的機會以及成功網路攻擊所帶來的回報正在遞增中。
如先前所討論的,程式碼重用攻擊,諸如返回導向程式設計(ROP)或跳躍導向程式設計(JOP),仰賴識別出可被鏈接在一起的程式碼塊以執行對於該攻擊者來說一有用的效果。這些程式碼塊通常被稱為「小工具」。有用的小工具可以自然地存在於該程式碼中,但另外,由於x86係一可變長度指令集,因此可藉由從一指令的中間執行以創建一非故意的小工具,從而有效地創建出新的指令串流。
為了防止這些類型的攻擊,程式碼多樣性技術,諸如ASLR,已經試圖阻止攻擊者查找及使用小工具。ASLR透過程式碼佈局隨機化及隱藏或阻止程式碼庫的讀取來嘗試此操作。ASLR藉由模糊小工具的該位置來操作使得該攻擊者無法部署它們。
然而,並非所有的ASLR技術都是相同的。程式碼佈局隨機化的強度可以藉由隨機化的量,即該隨機化技術所添加的熵、隨機化的粒度、以及隨機化的頻率來測量。由於低熵及粗粒度,當前ASLR及資訊隱藏的形式已被證明是弱的,並且隨機化的低頻率使得它們易受程式碼映射技術的影響,諸如記憶體洩露及側通道攻擊。
存在有透過降低ASLR技術的熵來擊敗ASLR的不同方法。側通道及記憶體洩露攻擊可以藉由向該攻擊者洩露在該程式碼庫內一已知實體的該位置來擊敗這些ASLR技術的絕大部分。通常,在該攻擊者已經發現在該程式碼中之一參考的該位置之後,該攻擊者可以推斷出在該程式碼中其他參考的該位置。該攻擊者可從一已知參考的該洩露中推斷出多少,取決於該ASLR技術的粒度。在文獻中當前攻擊的實例包括諸如ASLR及快取(AnC),這些攻擊經由側通道攻擊已經擊敗了Windows®及Linux的ASLR實現方式。
現代的作業系統諸如Android、Windows®、iOS以及Linux的ASLR提供具有低熵之粗粒度的隨機化。例如,Windows ASLR及Linux ASLR僅在該模組、或區段邊界處隨機化。模組或區段邊界的實例包括動態鏈接程式庫(DLL)位置或主要可執行碼基底位址。此外,Windows®僅提供24位元的熵,而Linux ASLR僅提供28位元的熵。
例如,考慮該Linux ASLR,其隨機化一DLL的該基底位址。如果一攻擊者確定在該基底位址內之任何實體的一位置並且知道相對於該重新定位單元之其他指令的位置,則可以容易地辨別其他指令的位置。
考慮一種二元攪拌ASLR的另一實例。在一種二元攪拌ASLR中,指令在一基本區塊層級被移動,其包括移動一整個迴圈,諸如一整個for迴圈(從該for迴圈的該進入指令到離開指令)、或整個if或巢狀if敘述層級(從該進入指令到一返回的執行)。因此,一模組或區段會大於一單一組合語言程式碼指令或一單一機器碼指令層級。形成對比的是,在本文的實施例中,在一for迴圈內的指令或在一if-else敘述內的指令可以與該for迴圈或if-else敘述被分開重新定位。
側通道攻擊係由一攻擊者對可觀察的效果或物件所執行的分析攻擊,以推斷出該攻擊者無法直接觀察到之一物件的資訊。側通道快取及側通道分頁表分析攻擊已被證明能夠在某些條件下擊敗Windows®及Linux ASLR。
側通道攻擊需要了解該等特性以及該應用程式執行之一些或所有的輸入。致盲係一種把一輸入改變或屏蔽成為一不可預測狀態的技術,因此「致盲」一攻擊者對該等輸入的了解可防止側通道分析。
本文的實施例,有時稱為動態分段位址空間佈局隨機化(DFASLR),可以提供一可組配粒度之載入時及真正的運行時程式碼佈局隨機化。DFASLR可以提供低至該單一指令層級的隨機化,從而提供ASLR可能有的最精細的粒度/最高的熵。DFASLR還提供了一種實用、有效的方法用於該程式碼佈局之運行時重新隨機化、恢復熵以及針對程式碼映射技術提供一移動目標。由於本文所討論之該DFASLR隨機化的性質,DFASLR可以破壞x86小工具、可以檢測控制流程完整性(CFI)攻擊企圖、可以提供運行時修補的一手段、可以提供運行時插入隱蔽技術的一手段、可以提供側通道致盲、以及可藉由設置為執行且不讀取(XnR)來有助於保護該程式碼庫的一部分。
可以把該可執行區段設置為XnR,以防止一攻擊者直接讀取程式碼並發現小工具。如果存在有某漏洞其允許一攻擊者從該程式碼區段做讀取,則一攻擊可以讀取並映射該程式碼區段以發現小工具。可執行區段未被設置為僅執行(XnR)的一原因係可執行區段有時包含常數以及該軟體需要讀取的其他資料。這主要是為了最佳化目的而做。
DFASLR,在載入時之前,可以分離出在該可執行區段中的標籤,其包括在該可執行區段中所有的嵌入資料。這意味著存在有一明確的劃分:可重新定位片段不包含必須在運行時讀取的任何內容。如果該可重新定位片段因此被放置在與該等固定片段不同的分頁中,則包含有該可重新定位片段的該等分頁可被設置為XnR,因為它們不包含任何該軟體將必須讀取的內容。
實施例可把位置獨立指令與該程式碼庫之其餘部分(該程式碼庫之該等位置相依的指令)區分以及把這些可重新定位指令(該等位置獨立指令)細分成被稱為可重新定位片段的群組。軟體強化可以被施加到該等可重新定位片段的一或多個,諸如藉由添加一無效的運算碼(即不被該處理架構在一機器碼層級所支援的一指令號碼)。該等可重新定位片段可被重新定位(例如,隨機地定位)並被重新連接,諸如由各別的參考指令(例如,跳躍指令),諸如在載入或運行時。實施例可以提供可組配的隨機化粒度,甚至提供使各個指令位置不相交及隨機化的能力。實施例能夠允許真正的運行時ASLR。
一ASLR技術的強度還取決於隨機化的頻率。更頻繁的隨機化會縮短一攻擊者已發現之任何參考的該生命週期。先前的ASLR技術在載入時隨機化。因此,一攻擊者所發現之任何的參考在整個程式的生命週期內都保持有效。本發明人不知道任何其他可行的、一般適用的運行時ASLR。DFASLR運行時隨機化把所發現參考的該生命週期降低到運行時隨機化操作的該週期。
實施例可以提供側通道致盲。實施例可以抵抗現有技術(SOTA)ASLR攻擊,諸如側通道分析及記憶體洩漏攻擊。實施例可以提供一載入時及一運行時ASLR。實施例可以提供隱蔽技術插入、小工具粉碎能力、ROP/JOP陷阱、以及其他的益處。
藉由示例的方式,圖1圖示出一種用於DFASLR之方法100之一實施例的示意圖。如圖所示的該方法100包括在操作102處,把一應用程式的程式碼區分為固定及可重新定位指令;在操作104處,把軟體強化套用到可重新定位指令群組;在操作106處,隨機化一可重新定位片段的一位置並與跳躍指令連接;在操作108處,在運行時期間重新隨機化可重新定位指令的位置。
該操作102把該程式碼區段分解為固定及可重新定位指令。藉由示例的方式,圖2圖示出一簡單函式分解為固定指令202及可重新定位指令204之一實施例的示意圖。
在操作102的該程式碼劃分期間,識別出所有的標籤及對在該程式碼庫中之一標籤的相對參考,並把其宣告為固定指令202。在這種情況下,一標籤指的是可被跳躍到的任何指令。就一較高階的語言而言,諸如C,標籤的實例包括一函式的該第一指令、在一for迴圈之該頂端處的該指令、在一if區塊之後的該指令、以及最明顯地在一函式呼叫之後的該指令。在一函式呼叫之後的該第一指令被視為一標籤,因為它將被一返回指令參考到。在一或多個實施例中,一函式呼叫的該返回指令可能不是一固定指令,因為雖然它將參考一標籤(該返回位址),但它不以一種相對方式(例如,以一偏移方式)參考該標籤,相反的,它由該完整位址參考該標籤。在該程式碼庫中的標籤還可以包括在該程式碼庫中的嵌入式資料,其有時會因編譯器最佳化而發生。
在所有的固定或可重新定位指令都已被識別出之後,在該程式碼庫中其餘的指令分別是可重新定位指令204A-204D或固定指令202A-202D。固定指令202A-D及可重新定位指令204A-204D的該等集合然後可被傳遞給該操作104。請注意,在組合語言中,該等固定指令202A-202B及202D等同於一單一組合語言指令。該固定指令202C等同於兩個組合語言指令,一個組合語言指令用於對該函式的呼叫,因為這是對一標籤(函式test_func_2)的參考;以及下一個指令,因為這是一個為一標籤的位址,正被使用來從該呼叫返回到其。
在一或多個實施例中,該操作102可被執行作為該編譯程序的一部分,諸如由一編譯器來執行。把該操作102整合到該編譯中提供了該分析一更為容易的實現方式。依編譯器基礎結構,諸如來自LLVM開發者群組的LLVM,提供了用於把該DFASLR分析操作102整合到該構建程序中的一可行且相當簡單的機制。然而,對於有限的元資料(例如,符號表、可執行及可鏈接格式(ELF)元資料),這種類型的x86二進制分析已經證明是有可能的。
在操作104處,該可重新定位指令204可以被劃分成被稱為可重新定位片段的指令群組。該等可重新定位片段可以是任何的粒度,包括有僅使用一單一指令來創建的片段。在操作104處,軟體強化對策可被套用到該等可重新定位片段。這些軟體強化對策可以包括保護指令以捕獲程式碼重用攻擊或探測以及小工具粉碎技術。一保護指令可以包括一無效的運算碼。
在一或多個實施例中,操作104,在編譯時(有時被稱為構建時)期間被執行。操作104,可以接收該操作102的該輸出,即該位置獨立的、可重新定位的指令集204,並把這個集合片段化成被稱為可重新定位片段的指令群組。因此,該DFASLR隨機化粒度係處於該片段層級,諸如可以低至該指令層級。片段化粒度可由該使用者來組配,直至DFASLR可以有效地隨機化每一個指令該位置的該點。
該片段化準則可以是使用者可組配的,並且可以根據該使用者的該安全性及性能目標來做變化。例如,儘管可以藉由隨機化每一個可重新定位指令的該位置來實現該最大的安全性,但是這種組配會導致一性能的降低。這至少部分係由於連接該等片段的之該等額外分支指令以及該降低的指令快取性能。性能片段化準則可包括把片段化設置為一快取列邊界,以便更好地利用該指令快取。用以在性能與安全性間權衡的隨機化參數也可以從操作104作為元資料來被傳遞,諸如用於使用在該載入或運行時的操作。這些類型的性能參數以及在載入及運行時的步驟中使用它們對該使用者提供了ASLR可組配性,這是DFASLR的一項新穎的功能。
在操作104處,還可以部署軟體強化對策。重新組合兩個相鄰指令之部分的小工具可藉由選擇劃分小工具的片段點來被消除。當識別出一跳躍類型運算碼(0xc2,0xc3,0xca等)或pop+jmp序列(小工具通常必須以一跳躍結束才有用)時,可以啟動一個新片段,該片段以包含該返回\跳躍運算碼的該運算碼做開始。
其他軟體強化對策包括在一片段的一跳躍指令之後插入一無效的運算碼。該無效的運算碼可以充當一保護指令。這些無效的運算碼可以創建一些陷阱來檢測及阻止無法精確對準該等正確位置的程式碼重用攻擊嘗試。這些無效的運算碼也強制指令對齊,防止程式碼重用攻擊在一片段中間跳躍並繼續到下一個片段。如果重新結合指令的任何小工具仍然保留在一片段內,則可以透過一或多個nop指令在這一步驟中進一步使得這些指令無效,諸如可以是一nop-對齊滑道區塊(一系列連續的無操作(nop))指令)的一部分以強制對齊包含該返回/跳躍運算碼的該指令。
藉由示例的方式,圖3圖示出在操作104之前及之後圖2之該程式碼的一實施例示意圖。在圖3中該圖示出的操作104包括添加具有一無效運算碼形式的一保護指令。該等固定片段202A-202D中的每一個被轉換為一對應的固定片段302A-302D,其在該固定指令202A-202D之後包括一無效的運算碼。該等可重新定位片段204A-204D的每一個被轉換為一對應的可重新定位片段304A-304D,其在該可重新定位指令204A-204D之後包括一無效的運算碼。可以使用更少或更多的無效運算碼來填充每一個片段,諸如向每一個片段添加一隨機數量的無效運算碼、把一指定數量的無效運算碼添加到每一個其他的片段、僅添加一指定數量的無效運算碼到該等可重新定位片段或該等固定的片段、等等。
在操作106處,該等可重新定位的片段304A-304D的該位置可被隨機化。在操作106處,該等片段可被連接,諸如用跳躍指令,來重新建立該執行流程。在操作106期間,可以插入附加的隱蔽技術,諸如一應用程式、函式、或其他程式碼完整性檢查;一程式碼的修補或更新以減少該應用程式的漏洞;一商業秘密或不然為其他敏感的、專有的、或機密的程式碼;堆疊框填充;資料權限管理程式碼;臨時拼湊功能;等等。例如,考慮為一商業秘密的某程式碼,該商業秘密的程式碼可以在運行時被載入。在另一實例中,一堆疊框填充可以向堆疊框添加(隨機的)填充量,以使得難以對堆疊變數進行緩衝區溢位類型的攻擊。臨時拼湊功能可被添加,例如,如果一使用者購買了一產品的一完整版本,則該所購買的功能可被添加,諸如在運行時期間。
該操作106始於當一應用程式被載入到記憶體中並且在該應用程式開始執行之前結束。該操作106獲取來自該操作104的該輸出並執行該程式碼庫的載入時隨機化。
該操作106可以包括(首先)放置在操作104中所產生的該等固定片段302A-302D。為簡單起見,該等固定片段302A-302D可被保持在該等原始位置中。該等固定片段302A-302D的該位置可被隨機化。例如,該等固定片段302A-302D可根據其他ASLR實現方式,諸如Windows及Linux ASLR來被隨機化。該等固定片段302A-302D它們本身中不包含小工具。由於DFASLR片段化,在一函式中的指令可以與該函式起始點脫節,刪除任何參考位置。因此,把該等固定片段302A-302D留在該等原來的位置不會帶來一固有的安全性風險。
在放置該等固定片段302A-302D之後,該操作106可以包括改變(例如,隨機化)該等可重新定位片段304A-304D的該等位置。如果需要的話,該等可重新定位片段304A-304D的該位置改變可以遵守由該使用者在該等構建步驟期間所設置的規則。這將在本文其他地方被進一步地詳細討論。
藉由示例的方式,圖4圖示出包括可重新定位片段之隨機化的一載入操作的一示意圖。為了簡化說明,圖4圖示出在操作106處所執行之片段隨機化的一高階實例。在實際的實踐中,該等固定片段302A-302D及該等可重新定位片段304A-304D可以比C語言敘述更為精細,諸如組合語言指令。然後可以藉由直接跳躍來連接該等可重新定位片段304A-304D及該等固定片段302A-302D以重構該原始的執行流程。
藉由示例的方式,圖5圖示出使用跳躍指令連接該等可重新定位片段304A-304D及該等固定片段302A-302D的一實施例的示意圖。可以在操作106處執行該等片段302A-302D及304A-304D的該連接。該等箭頭表示在每一個片段之後插入的直接跳躍以引導到下一片段。操作106之該等連接的片段302A-302D及304A-304D可以被認為是片段302A-302D及304A-304D的一鏈接串列。鏈接串列係用於插入、刪除、以及重新排序的理想選擇,並且有助於實現在以下各節中被討論的技術。
該操作108可以不斷地重新隨機化該等可新重定位片段304A-304D。由於該等固定片段302A-302D可以保持固定,因此不需要改變該等可重新定位片段304A-304D的該等跳躍指令。然而,該等固定片段302A-302D的該等跳躍指令將需要被改變如果它們參考一跳躍到一可重新定位片段304A-304D的話。
元資料可被包括在該程式碼中。該方法100可以包括在構建時(例如,操作102或104)添加元資料以在該隨機化中向該等DFASLR操作106或108提供參數。例如,為了提高性能,該使用者可以指定每一個函式之片段的隨機化應保持在同一分頁表條目內以防止分頁表抖動。可以在元資料中指出這些類型的參數。
對於可用性,該使用者可以控制在安全性與性能之間的權衡。對於DFASLR,可以在操作102之前選擇這些參數,並且可以影響該方法的該等操作102、104、106、以及108。例如,該使用者可以具有組配該片段化之該粒度的能力,如在本文其他地方所討論的。該使用者可以組配該等可重新定位片段304A-304D如何被放置的方式。DFASLR的可組配性可提供在性能與安全性間做權衡,此能力係一新穎的功能。
該使用者,諸如透過一使用者介面,可以透過有關於該隨機化粒度或該等隨機化參數的使用者輸入來提供可組配的安全性及性能。隨機化的參數包括針對性能把以函式分組的片段(例如,在一函式或物件層級)放置到相同的分頁表條目中,或者把以函式分組的片段放置到不同的分頁表條目中以提供對抗側通道分析的致盲。該元資料可有助於做出決策來為性能或安全性做最佳化。
該操作106或108可提供藉由插入軟體修補或更新來在載入時或運行時更新該程式碼庫的能力。至少部分地由於該等片段302A-302D及304A-304D的該鏈接串列性質,對各個片段302A-302D及304A-304D的修補、整個函式、或把函式及程式碼新插入到該程式碼庫中會像把一節點插入一鏈接串列中一樣簡單。在該應用程式正在運行時執行此操作可以被視為一熱修補。Windows允許在一函式的該開始之前及該開始時透過虛擬指令進行熱修補,但這只允許在一函式的該開頭處進行處進行熱修補。DFASLR片段允許在任何片段的位置處進行熱修補,從而實現更精細粒度的熱修補。
用於載入時或運行時修補之一特定的用例係對一應用程式添加隱蔽技術。該操作106或108可以包括把來自一隱蔽技術的程式碼添加到將被執行的該程式碼庫中。這些技術的實例包括儀表、加密致盲、程式碼混淆、或一系統僅在運行時期間希望可用之其他額外的安全特徵。藉由僅在載入時或運行時載入這些能力(例如,在操作106或108處),這防止了向該開發者公開披露這些隱蔽技術。這也潛在地允許自適應系統,其回應於網路攻擊而動態地修補程式碼。可以藉由把該等技術載入到記憶體中,然後把該等適當的片段重新連接到該載入的程式碼來插入隱蔽技術。由於該等片段的該鏈接串列性質,把新的片段插入程式碼流程中係非常簡單的。
藉由示例的方式,圖6圖示出用於把隱蔽技術插入到一函式中之一技術600的一實施例示意圖。該函式由片段602、604、以及606表示。該等片段602、604、以及606可以是可重新定位片段304A-304D或固定片段302A-302D。該等片段602、604、以及606可被載入到執行記憶體中。該隱蔽技術608可以在某個點處被載入到該執行記憶體中,無論是在該等片段602、604、以及606中之一或多個之前、之後、還是與其同時。該等片段602、604、及606以及該隱藏技術608可然後被連接,諸如藉由跳躍指令。該隱蔽技術608可包括將在由該等片段602、604、以及606所實現之該函式上被執行的一安全性檢查(例如,一控制流完整性檢查、邊界檢查、等等),或在該等片段602、604、606它們自己之上被執行的一安全性檢查。
在操作106,該等片段602、604、以及606可被載入到執行記憶體中。在操作106,可以把該隱蔽技術608載入到執行記憶體中。在操作106,從該隱蔽技術608到一片段602、604、或606的一跳躍指令可被添加到該隱蔽技術608(由該箭頭610指出)。在操作106,在從該隱蔽技術608到該片段602、604、以及606的該跳躍指令之後,來自一片段602、604、或606的一跳躍指令可被添加(由該箭頭612指出)。該隱藏技術608因此可在載入時被載入到該執行記憶體中。
實施例的該操作108允許在程式執行期間該等可重新定位片段304A-304D的重新隨機化。這是真正的運行時ASLR,因為它可以在不用停止或明顯影響該應用程式的情況下被執行。運行時ASLR意味著該程式碼不斷被隨機化,在運行時向該應用程式添加熵並阻止欲映射該程式碼的嘗試。這為映射及側通道攻擊提供了一正在移動的目標。
如之前所討論的,在操作108,程式碼片段的一真正的運行時重新隨機化可被執行。藉由示例的方式,圖7圖示出該操作108的一實施例的示意圖。該操作108可以包括程式碼片段的運行時重新隨機化。實施例提供該程式碼佈局的一真正的運行時重新隨機化。因為該等可重新定位的片段304A-304D藉由識別出在該程式碼庫中所有的標籤及對標籤的參考被識別出,這些可重新定位的片段304A-304D係位置獨立的,因為它們將僅由一跳躍指令被參考,但不被任何的變數所參考。由於沒有參考到在該可重新定位片段304A-304D中的任何位置,可重新定位片段304A-304D的該位置可以被重新隨機化,而不需要對任何變數或資料結構做任何修正,唯一的更新係對跳躍指令更新,該等跳躍指令比變數參考更容易被更新。由於可重新定位片段304A-304D被鏈接在一鏈接串列中,因此在運行時對該等片段做插入、移除、以及重新排序可以是容易的。實施例的該運行時隨機化可以是獨一無二的,因為它不需要停止該應用程式,易於實現,並且不需要任何變數參考的修正,只需要更新跳躍指令目的地即可。
因此,該運行時DFASLR程序可被視為用該片段的新位置替換在一鏈接串列中之一片段的一種情況。該程序在圖7中被示出。在圖7中,該等片段602、604、以及606被圖示為被載入到執行記憶體中,伴隨該片段604的一副本在執行記憶體中的一新位置中,如該片段716所指出的。該片段716之該副本可已經包括對該片段606的一參考或者該副本可在該跳躍指令被添加到該片段604之前被創建。在一些實施例中,該片段716被鏈接到該片段606,諸如藉由添加一跳躍指令。在該片段716被鏈接到將被執行之下一個連續片段606之後,該片段602可被鏈接到該片段716,諸如藉由添加一跳躍指令720或者改變一跳躍指令718的一目的地以對應到該片段716的該開始處。
因為該等片段602、604、606、716、等等允許運行時重新隨機化,隱蔽技術可以在一應用程式正載運行之後在運行時被加入。該程序可以以類似於有關於圖6所討論的該載入時隱藏技術插入。在來自前一片段的該跳躍指令目的地被連接到該隱蔽技術之前,可以更新從該隱蔽技術到下一個片段之該跳躍指令目的地。依此順序的操作可以允許程式碼的運行時插入。
許多針對ASLR的攻擊已經在學術界及其他地方被提出。這些攻擊旨在透過把熵減少到ASLR技術之去隨機化的該點來擊敗ASLR。所有的攻擊都旨在發現一已知實體的該位置,然後推斷出在該程式碼庫中其他實體的該位置,最終目標係小工具的該位置。一旦識別出任何實體的該位置,相對於該實體的程式碼就可被映射。
對抗這些攻擊之實施例的一強度就是該攻擊者無法理解該等程式碼片段之該相對位置的該能力。由於實施例具有一精細粒度隨機化能力的特性,實施例提供對這些類型的攻擊的抵抗。藉由在實施例中該片段化的特性,在片段之間所有參考的地方可被去除。在該程式碼庫中一實體的任何映射僅揭示在該特定片段內的程式碼的該位置。例如,如果一攻擊者發現了函式foo()的該位址,那麼這只會洩露函式foo()之該第一行指令或第一片段。實施例可以隨機化及重新定位foo()的其他內容。即使foo()可能已被定位,但這些攻擊的該終極目標,小工具的該位置不會被實現。
此外,實施例中的該運行時重新隨機化針對攻擊者提出一移動的目標。由該攻擊者所收集的任何資訊都有一有限的壽命。一片段的運行時重新隨機化將使得一攻擊者已經發現有關該片段的任何資訊都無效。
以下討論ASLR擊敗技術之一些顯著的最新技術,以及實施例係如何有抵抗性、免疫力、或降低一成功攻擊的影響。
側通道攻擊諸如AnC、記憶體重複資料刪除、執行緒或記憶體堆疊噴濺攻擊全都藉由減少ASLR的熵來攻擊ASLR,最終目標是映射該被重新定位的模組/程式碼庫以及定位小工具。例如,執行緒或記憶體堆疊噴濺攻擊反覆地生成執行緒或分配記憶體以映射出不可分配的記憶體空洞。這些空洞是該程式碼庫之該隨機化位置的候選者。
AnC透過分頁表分配的側通道分析來減少熵。這依賴於x86分頁表條目的該結構來顯示在該程式碼庫中函式或參考的該位址。攻擊,諸如執行緒及記憶體堆疊噴濺攻擊顯示了該程式碼庫的該等位置。這顯示沒有有關於小工具內該位置的資訊,因為實施例移除了所有的參考地點。片段不再被相對定位或以任何可計算的方式與該原始程式碼庫的開頭相關聯。
DFASLR的該隱蔽技術插入能力允許插入「致盲片段」。致盲片段可以在函式上係良性的,但會影響快取及分頁表利用率。實例可以包括在隨機快取列上執行一快取觸碰的一片段,或額外片段的放置以在執行期間由於把該片段拉入該快取而引入額外快取列及分頁表分配。
實施例還有效地包括用於諸如AnC攻擊的側通道致盲。側通道分析需要了解該程序的該等特徵以及該等輸入之部分或全部的知識。在該等輸入中不確定性越大,該資料會越多雜訊,該分析會越困難。至少部分地由於在實施例中的分段化,多個分頁表條目將在一函式執行時被拉入到快取中。來自實施例之在輸入及雜訊中的不確定性有效地增加了側通道致盲,以防止這些類型的側通道攻擊。
類似於側通道攻擊,資訊及記憶體洩漏攻擊的目的係藉由映射一已知實體的位址來打敗ASLR。一旦知道該位置,相對於該實體之所有的程式碼就可被計算出。如以上所述,實施例減少了這些類型攻擊的影響,因為僅可以推斷出在該被定位片段內的該等指令。在其他片段中的該指令位置係無法計算的。
實施例會招致有額外的運行時間及性能成本。每一個片段添加至少一個額外的跳躍指令以把該片段連接到下一個片段。鏈接片段的該性能成本與一單一片段的該大小成反比,使用一較大的片段大小其增加的執行時間會小於使用一較小的片段大小。由於實施例允許分段大小的可組配性,因此一使用者可以權衡安全性與性能,反之亦然。
與實施例分段化相關聯的另一個性能開銷係用於額外分頁表查找的開銷及在快取性能中可能的降低。如果片段不是一快取列大小的倍數,則快取利用率將會是次優的。此外,由於程式碼的該線性,函式通常具有相對一致的快取集使用。片段化可能會導致在該快取集利用率中出現一些額外的不均勻性,儘管從統計上來說,片段放置的隨機性會導致此效果被正規化。為該片段化大小選擇快取列的倍數(該鏈接jmp指令為-1指令)將大部分地消除該快取性能開銷。
與額外的分頁表遍歷相關聯的開銷也可以在付出該安全性的成本下被減輕。選擇一重新定位方案以重新排序在同一分頁表條目內屬於相同函式的片段(例如,每一個分頁表映射4KB)將避免在該該原始程式碼上任何額外的分頁表遍歷。然而,這可能會削弱實施例所提供有關於攻擊的致盲,諸如AnC。為了引入最大的雜訊並針對諸如AnC之類的攻擊進行最佳保護,該使用者可設置該隨機化策略以把在相同函式內的片段放置在不同4KB區塊。
總之,實施例可以提供一種可行的可組配粒度的ASLR技術,提供隨機化的粒度可達每一個指令。這導致極高的程式碼異樣性/熵,其阻止了側通道及記憶體洩漏攻擊的成功。藉由把該程式碼分解成小片段,實施例可以移除局部性,甚至係在一函式內的指令之間。即使一攻擊者在記憶體洩漏或側通道成功攻擊中成功,實施例的該粒度意味著只有一個片段的該位置將被揭示。另外,實施例的該粒度為側通道分析攻擊增加雜訊,並消除正被分析之該參考的知識。當程式碼被執行並且片段被遍歷時,多個分頁表條目及快取列可以一種攻擊者未知的方式來被使用。來自實施例之該等輸入及雜訊中的不確定性因此有效地增加了側通道致盲,以防止諸如快取或分頁表側通道分析之類的側通道攻擊。
藉由示例的方式,圖8圖示出用以實現該方法100之一系統800的一實施例的示意圖。該示出的系統800包括一編譯器802、一載入器804、一記憶體806、以及處理電路808。該編譯器802接收要被編譯的程式資料以及可選擇的元資料801。該元資料可以指出將被執行之分段化的一粒度。例如,該元資料可以指定要包括在一片段中之指令的一最小數量,例諸一或多個指令。
該編譯器802係把一高階指令轉換為一機器碼或一低階形式的一程式。該程式碼形式允許該處理電路808執行該等指令,並且有時被稱為一可執行程式。編譯器的類型包括一交叉編譯器、自我編譯器、標準編譯器、原始碼至原始碼編譯器、等等。編譯器通常執行預處理、詞法分析、解析、語義分析、把輸入程式轉換為一中間表示、程式碼最佳化、以及程式碼產生。該編譯器802可以執行操作102及104中的至少一個。
該載入器804從該編譯器802接收該可執行程式。該載入器804係一作業系統(OS)的一部分,其負責載入程式及函式庫。該載入器804把指令放入該記憶體806中。該載入器804可以執行操作104及106中的至少一個。
該記憶體806可以包括一隨機存取記憶體(RAM)。該記憶體806可以儲存來自該載入器804的該可執行程式。該載入器804可以改變一片段302A-302D或304A-304D被儲存在該記憶體806中的該位置。該載入器804可以執行操作106。
該處理電路808可以包括一硬體處理器,諸如可以包括一中央處理單元(CPU)、一圖形處理單元(GPU)、一特定應用積體電路(ASIC)、電路,諸如一或多個電晶體、電阻器、電容器、電感器、二極體、邏輯閘、多工器、振盪器、緩衝器、調變器、調整器、放大器、解調器、等等。該處理電路808可以執行被儲存在該記憶體806中的該可執行程式。該處理電路808可以執行操作108,諸如藉由改變被儲存在該記憶體806上該可執行程式的一執行流程。
藉由示例的方式,圖9圖示出一機器900之一實施例的方塊圖,在該機器上該等方法的一或多個,諸如有關於圖1-7以及本文其他地方所討論的那些方法可被實現。在一或多個實施例中,該系統800的一或多個項目可以由該機器900來實現。在一備選的實施例中,該機器900可作為一獨立裝置操作或可被連接(例如,經網路)到其他機器。在一或多個實施例中,該系統800的一或多個項目可以包括該機器900之該等項目的一或多個。在一連上網路的部署中,該機器900可以在伺服器-客戶端網路環境中以一伺服器或一客戶端機器的能力來運行,或在一對等式(或分散式)的網路環境中運行為一對等的機器。該機器900可以係一個人電腦(PC)、一平板PC、一機上盒(STB)、一個人數位助理(PDA)、一蜂巢式電話、一網路家電、一網路路由器、交換器或橋接器、嵌入式電腦或硬體、或任何能夠執行指定該機器所要採取動作之指令(依順序或其他)的機器。此外,雖然僅圖示出一單一機器,但術語「機器」還應被視為包括單獨或聯合執行一組(或多組)指令以執行本文所討論之該等方法論之任意一或多種之機器的任何集合。
該實例機器900包括處理電路902,諸如可以類似於處理電路808,(例如,一硬體處理器,諸如可以包括一CPU、一GPU、一ASIC、電路,諸如一或多個電晶體、電阻器、電容器、電感器、二極體、邏輯閘、多工器、振盪器、緩衝器、調變器、調節器、放大器,解調器、或無線電(例如,發射電路或接收電路或收發器電路,諸如RF或其他電磁、光學、音訊、非可聽聞聲音、等等)。該機器900可以包括感測器921(例如,將一種能量形式(例如,光、熱、電、機械、或其他的能量)轉換為另一種能量形式的一轉能器)、或類似物、或其組合)、一主記憶體904及一靜態記憶體906,其經由一匯流排908彼此通信以及與機器900之所有其他的元件通信。發送電路或接收電路可包括一或多個天線、振盪器,調變器、調節器、放大器、解調器、光學接收器或發射器、聲學接收器(例如,麥克風)或發射器(例如,揚聲器)等等。該RF發射電路可以被組配為以一指定的主頻率產生能量以包括一指定的諧波頻率。
該機器900(例如,電腦系統)可以進一步包括一視訊顯示器裝置910(例如,一液晶顯示器(LCD)或一陰極射線管(CRT))。該機器900還包括一字母數字輸入裝置912(例如,一鍵盤)、一使用者介面(UI)導航裝置914(例如,一滑鼠)、一磁碟或大容量記憶體單元916、一信號產生裝置918(例如,一揚聲器)以及一網路介面裝置920。
該大容量記憶體單元916包括一機器可讀取媒體922,在其上儲存有一或多組指令及資料結構(例如,軟體)924,該等指令及資料結構具體實現本文所描述之該等方法論或功能中的一或多個,諸如有關於圖1-7所討論的那些,或由該等方法論或功能所使用。在執行期間該等指令924還可以完全地或至少部分地駐留在該主記憶體904內、該靜態記憶體906內、及/或在該處理電路902內,因此由該機器900與該主記憶體904、靜態記憶體906、以及該處理電路902也構成機器可讀取媒體。該主記憶體904、該大容量儲存單元916、或其他記憶體裝置中的一或多個可以儲存用於執行圖1-7之該方法的該作業資料、發射器特性、或其他的資料。
如圖所示,該機器900包括一輸出控制器928。該輸出控制器928管理流進/流出該機器900的資料流。該輸出控制器928有時被稱為一裝置控制器,具有被稱為係一裝置驅動程式之軟體直接與該輸出控制器928互動。
雖然在一示例性實施例中被展示出的該機器可讀取媒體922為一單一媒體,但是術語「機器可讀取媒體」可以包括一單一媒體或多個媒體(例如,一集中式或分散式資料庫、及/或相關聯的快取及伺服器)其儲存該等一或多個指令或資料結構。術語「機器可讀取媒體」還應被視為包括任何有形的媒體,其可以儲存、編碼或攜帶由該機器所執行的指令並其致使該機器執行本發明之該等方法論的任何一或多種,諸如有如關於圖1-7所討論的那些,或者其可以儲存、編碼或攜帶由這些指令所使用或與之相關聯的資料結構。因此,術語「機器可讀取媒體」應被視為包括,但不侷限於,固態記憶體、以及光學及磁性媒體。機器可讀取媒體的具體實例包括非依電性記憶體,包括例如半導體記憶體裝置,例如,可擦除式可規劃唯讀記憶體(EPROM)、電子可擦除式可規劃唯讀記憶體(EEPROM)、以及快閃記憶體裝置;磁碟,諸如內部硬碟及可移除式磁碟;磁光碟;以及CD-ROM及DVD-ROM碟。
該等指令924還可以使用一傳輸媒體在一通信網路926上被發送或接收。該等指令924可以使用網路介面裝置920及幾種眾所周知的傳輸協定(例如,超文字傳輸協定(HTTP)、使用者資料報協定(UDP)、傳輸控制協定(TCP)/網際網路協定(IP))中的任何一種來傳輸。該網路926可包括使用一串列協定的一點對點鏈路,或其他公知的傳輸協定。通信網路的實例包括一區域網路(「LAN」)、一廣域網路(「WAN」)、網際網路、行動電話網路、普通老式電話(POTS)網路、以及無線資料網路(例如,WiFi及WiMax網路)。術語「傳輸媒體」應被視為包括可以儲存、編碼或攜帶由該機器執行之指令的任何無形的媒體,並且包括數位或類比通信信號或可以有助於這種軟體通信之其他無形的媒體。
實施例及附加說明。
實例1可包括一種裝置,其被組配來執行動態分段位址空間佈局隨機化,該裝置包含有記憶體以儲存將被執行之一應用程式的指令,該等指令包括有固定指令及可重新定位指令,處理電路以實現一編譯器來識別出該等固定指令及該等可重新定位指令,該等固定指令參考該等指令的另一個指令而該等可重新定位指令不參考該等指令的另一個指令,以實現一載入器來改變在該記憶體中相對於彼此之該等可重新定位指令的一位置,並把各別的參考指令添加到該等固定指令及可重新定位指令,該等各別的參考指令致使該等指令將會以與假如該位置沒被改變之原來順序相同的一順序被執行,並從在該記憶體中它們被改變的位置執行該等固定指令及該等可重新定位指令。
在實例2中,實例1更包括,其中該等指令係組合語言程式碼指令。
在實例3中,實例1-2中的至少一個更包括,其中該載入器更在該等參考指令之至少一個之後添加一無效的運算碼。
在實例4中,實例1-3中的至少一個更包括,其中在該應用程式的執行期間該處理電路更改變該等可重新定位指令之一或多個的該位置,並更新該等固定指令之一或多個的一各別的參考指令,其參考該相應的可重新定位指令。
在實例5中,實例1-4中的至少一個更包括,其中在該應用程式的執行期間該處理電路更執行在載入時未由該載入器被載入到該記憶體中的附加指令。
在實例6中,實例5更包括,其中該等附加指令致使該處理電路在該應用程式上執行一安全性檢查。
在實例7中,實例5更包括,其中該等附加指令致使該處理電路改變一可重新定位指令來修補該應用程式的一漏洞。
在實例8中,實例1-7中的至少一個更包括,其中該等固定指令的至少一個以及該等重新定位指令的至少一個僅包括一單一指令。
在實例9中,實例1-8中的至少一個更包括,其中該編譯器更將識別出在該等指令中的一返回運算碼並創建以該返回運算碼開始的一新的片段。
在實例10中,實例9,其中該編譯器更將在緊接在該識別出之返回運算碼之前插入nop指令。
在實例11中,實例1-10中的至少一個更包括,其中該裝置更包含一使用者介面,一使用者可以透過該使用者介面指定將被包括在一可重新定位片段中的多數個指令,該可重新定位片段包括有連續的可重新定位指令,並且其中該載入器透過該等可重新定位片段的重新定位來改變該等可重新定位指令的該位置。
實例12包括至少一個非暫時性的機器可讀取媒體,其包括有指令,當該等指令由一機器執行時,致使該機器執行操作,該等操作包含有識別出該等指令的固定指令及該等指令的可重新定位指令,該等固定指令參考該等指令的另一個指令而該等可重新定位指令不參考該等指令的另一個指令,改變在該記憶體中相對於彼此之該等可重新定位指令的該位置,並把各別的參考指令添加到該等固定指令及可重新定位指令,該等各別的參考指令致使該等指令將會以與假如該位置沒被改變之原來順序相同的一順序被執行,並從在該媒體中它們被改變的位置執行該等固定指令及該等可重新定位指令。
在實例13中,實例12更包括,其中該等指令係組合語言程式碼指令。
在實例14中,實例12-13中的至少一個更包括,其中該等操作更在該等參考指令之至少一個之後添加一無效的運算碼。
在實例15中,實例12-14中的至少一個更包括,其中該等操作更包括,在該應用程式的執行期間,改變該等可重新定位指令之一或多個的該位置,並更新該等固定指令之一或多個的一各別的參考指令,其參考該相應的可重新定位指令。
在實例16中,實例12-15中的至少一個更包括,其中該等操作更包括,在該應用程式的執行期間,執行在載入時未由一載入器被載入到該媒體中的附加指令。
在實例17中,實例16更包括,其中該等附加指令致使該機器在該應用程式上執行一安全性檢查或改變一可重新定位指令來修補該應用程式的一漏洞。
實例18包括一種用於動態分段位址空間佈局隨機化的方法,該方法由一電腦裝置來執行,該方法包含有識別出該等指令的固定指令及該等指令的可重新定位指令,該等固定指令參考該等指令的另一個指令而該等可重新定位指令不參考該等指令的另一個指令,改變在該記憶體中相對於彼此之該等可重新定位指令的該位置,並把各別的參考指令添加到該等固定指令及可重新定位指令,該等各別的參考指令致使該等指令將會以與假如該位置沒被改變之原來順序相同的一順序被執行,並從在該媒體中它們被改變的位置執行該等固定指令及該等可重新定位指令。
在實例19中,實例18更包括,其中該等固定指令的至少一個以及該等重新定位指令的至少一個僅包括一單一指令。
在實例20中,實例18-19中的至少一個更包括,其中該方法更包含把該等指令拆開成不同的片段,在一片段中指令的該數目係基於元資料來確定。
在實例21中,實例18-20中的至少一個更包括,識別出在該等指令中的一返回運算碼並創建以返回運算碼做開始之一新的片段。
儘管一實施例已經參照特定實例實施例被描述,但顯而易見的是,可以對這些實施例做出各種的修改及改變而不脫離本發明之更寬廣的精神及範圍。因此,本說明書及附圖應被視為係說明性的而非限制性的。形成本說明書之一部分的附圖藉由說明的方式而非限制的方式圖示出可實踐該技術主題之特定的實施例。該等被描述的實施例以足夠的細節被描述,以使本領域的習知技藝者能夠實踐本文所公開的教導。也可以利用其他的實施例並從中得出其他實施例,使得可以在不脫離本發明之範圍的情況下進行結構及邏輯替換及改變。因此,該較佳實施例之詳細說明不應被視為具有限制性的意義,並且各種實施例的範圍僅由所附請求項以及這些請求項所賦予的等同物的全部範圍來限定。
100:方法 102、104、106、108:操作 200:函式 202A-202D:固定指令 204A-204D:可重新定位指令 302A-302D:固定片段 304A-304D:可重新定位片段 600:技術 602、604、606、716:片段 608:隱蔽技術 610、612:箭頭 718、720:跳躍指令 800:系統 801:程式資料/元資料 802:編譯器 804:載入器 806:記憶體 808:處理電路 900:機器 902:處理電路 904:主記憶體 906:靜態記憶體 908:匯流排 910:顯示器裝置 912:輸入裝置 914:UI導航裝置 916:大容量儲存器 918:信號產生裝置 920:網路介面裝置 921:感測器 922:機器可讀取媒體 924:指令 926:網路 928:輸出控制器
在不一定按比例被繪製的該等附圖中,相同的數字可以描述在不同圖示中的類似組件。具有不同字母字尾的相同數字可表示類似組件的不同實例。該等附圖係藉由示例性的方式而非藉由限制性的方式展示出在本文中所討論之各種實施例或實例。
圖1藉由示例的方式圖示出一種用於動態分段ASLR(DFASLR)之方法的一實施例示意圖。
圖2藉由示例的方式圖示出一簡單函式被分解為固定指令及可重新定位指令的一實施例示意圖。
圖3藉由示例的方式圖示出在一載入操作之前及之後圖2之該程式碼的一實施例示意圖。
圖4藉由示例的方式圖示出包括可重新定位片段之隨機化的一載入操作的一示意圖。
圖5藉由示例的方式圖示出使用參考指令連接該等可重新定位片段及固定片段的一實施例示意圖。
圖6藉由示例的方式圖示出用於把隱蔽技術插入到一函式中之一技術600的一實施例示意圖。
圖7藉由示例的方式圖示出一運行時操作的一實施例示意圖。
圖8藉由示例的方式圖示出用以實現一方法或技術之一系統的一實施例示意圖,諸如有關於圖1及本文其他地方所討論的那些方法可被實現。
圖9藉由示例的方式圖示出一機器之一實施例的方塊圖,在該機器上該等方法的一或多個,諸如有關於圖1-7以及本文其他地方所討論的那些方法可被實現。
100:方法
102~106:操作

Claims (21)

  1. 一種組配來執行動態分段位址空間佈局隨機化之裝置,該裝置包含有:一記憶體,其用以儲存將執行之一應用程式的指令,該等指令包括有固定指令及可重新定位指令;處理電路,其用以:實現一編譯器來識別出該等固定指令及該等可重新定位指令,該等固定指令參考該等指令中的另一個指令,而該等可重新定位指令則不參考該等指令中的另一個指令;實現一載入器來改變該等可重新定位指令在該記憶體中彼此相對的一位置,並把個別的參考指令添加到該應用程式,該等個別的參考指令致使該等指令將會以與假如該位置沒被改變之原來順序相同的一順序來執行;以及從在該記憶體中它們被改變的位置執行該等固定指令及該等可重新定位指令。
  2. 如請求項1之裝置,其中該等指令係組合語言程式碼指令。
  3. 如請求項1之裝置,其中該載入器更將在該等參考指令中之至少一個之後添加一無效的運算碼。
  4. 如請求項1之裝置,其中在該應用程式執行期間,該處理電路更將改變該等可重新定位指令中之一或多個的位置,以及添加一跳躍指令給該應用程式以參考該可重新定位指令被改變的該位置。
  5. 如請求項1之裝置,其中在該應用程式執 行期間,該處理電路更將執行在載入時未由該載入器載入到該記憶體中的附加指令。
  6. 如請求項5之裝置,其中該等附加指令致使該處理電路對該應用程式執行一安全性檢查。
  7. 如請求項5之裝置,其中該等附加指令致使該處理電路改變一可重新定位指令來修補該應用程式的一漏洞。
  8. 如請求項1之裝置,其中該等指令中的至少一個僅包括一單一指令。
  9. 如請求項1之裝置,其中該編譯器更將識別出在該等指令中的一返回運算碼,並創建以該返回運算碼做開始的一新片段。
  10. 如請求項9之裝置,其中該編譯器更將在緊接在該識別出之返回運算碼之前插入nop指令。
  11. 如請求項1之裝置,其中該裝置更包含一使用者介面,透過該使用者介面一使用者可以指定將被包括在一可重新定位片段中的多數個指令,該可重新定位片段包括有連續的可重新定位指令,以及其中該載入器透過該等可重新定位片段的重新定位來改變該等可重新定位指令的位置。
  12. 一種包括有指令之非暫時性機器可讀媒體,其包括有至少一個非暫時性機器可讀媒體,該等指令在由一機器執行時,致使該機器執行包含下列動作之操作:識別出多個指令中的固定指令及該等指令中的可重新 定位指令,該等固定指令參考該等指令中的另一個指令,而該等可重新定位指令則不參考該等指令中的另一個指令;改變該等可重新定位指令在記憶體中彼此相對的一位置,並把個別的參考指令添加到該應用程式,該等個別的參考指令致使該等指令將會以與假如該位置沒被改變之原來順序相同的一順序來執行;以及從在該媒體中它們被改變的位置執行該等固定指令及該等可重新定位指令。
  13. 如請求項12之機器可讀媒體,其中該等指令係組合語言程式碼指令。
  14. 如請求項12之機器可讀媒體,其中該等操作更包括在該等參考指令中之至少一個之後添加一無效的運算碼。
  15. 如請求項12之機器可讀媒體,其中該等操作更包括,在該應用程式執行期間,改變該等可重新定位指令中之一或多個的位置,以及添加一跳躍指令給該應用程式以參考個別的該可重新定位指令被改變的該位置。
  16. 如請求項12之機器可讀媒體,其中該等操作更包括,在該應用程式執行期間,執行在載入時未由一載入器載入到該媒體中的附加指令,其中該等附加指令致使該機器對該應用程式執行一安全性檢查、或改變一可重新定位指令來修補該應用程式的一漏洞。
  17. 一種用於動態分段位址空間佈局隨機化的方法,該方法由電腦裝置來執行,該方法包含有:識別出多個指令中的固定指令及該等指令中的可重新定位指令,該等固定指令參考該等指令中的另一個指令, 而該等可重新定位指令則不參考該等指令中的另一個指令;改變該等可重新定位指令在記憶體中彼此相對的一位置,並把個別的參考指令添加到該應用程式,該等個別的參考指令致使該等指令將會以與假如該位置沒被改變之原來順序相同的一順序來執行;以及從在該記憶體中它們被改變的位置執行該等固定指令及該等可重新定位指令。
  18. 如請求項17之方法,其中該方法更包含把該等指令拆開成不同的片段,在一片段中指令的數目係基於元資料來決定。
  19. 如請求項17之方法,更包含有識別出在該等指令中的一返回運算碼,及創建以返回運算碼做開始之一新片段。
  20. 如請求項19之方法,更包含有在緊接在所識別出之該返回運算碼之前插入nop指令。
  21. 如請求項18之方法,更包含有識別出在該等指令中的一返回運算碼,及創建以返回運算碼做開始之一新片段。
TW108121111A 2018-09-17 2019-06-18 動態分段位址空間佈局隨機化技術 TWI717762B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/132,698 US11809871B2 (en) 2018-09-17 2018-09-17 Dynamic fragmented address space layout randomization
US16/132,698 2018-09-17

Publications (2)

Publication Number Publication Date
TW202013178A TW202013178A (zh) 2020-04-01
TWI717762B true TWI717762B (zh) 2021-02-01

Family

ID=67480438

Family Applications (1)

Application Number Title Priority Date Filing Date
TW108121111A TWI717762B (zh) 2018-09-17 2019-06-18 動態分段位址空間佈局隨機化技術

Country Status (3)

Country Link
US (1) US11809871B2 (zh)
TW (1) TWI717762B (zh)
WO (1) WO2020060662A1 (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11809871B2 (en) 2018-09-17 2023-11-07 Raytheon Company Dynamic fragmented address space layout randomization
US11042634B2 (en) * 2018-12-21 2021-06-22 Fujitsu Limited Determining information leakage of computer-readable programs
TWI755112B (zh) * 2020-10-23 2022-02-11 財團法人工業技術研究院 電腦程式碼之優化方法、優化系統及應用其之電子裝置
FR3116356B1 (fr) * 2020-11-13 2024-01-05 Stmicroelectronics Grand Ouest Sas Procédé de compilation d’un code source
US11599625B2 (en) * 2021-01-28 2023-03-07 Qualcomm Incorporated Techniques for instruction perturbation for improved device security
US11681794B2 (en) 2021-04-07 2023-06-20 Oracle International Corporation ASLR bypass

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7546430B1 (en) * 2005-08-15 2009-06-09 Wehnus, Llc Method of address space layout randomization for windows operating systems
CN102231180A (zh) * 2011-07-30 2011-11-02 张鹏 处理器指令编码可重定义的方法
TW201224933A (en) * 2010-09-23 2012-06-16 Apple Inc Systems and methods for compiler-based vectorization of non-leaf code
TW201227394A (en) * 2010-12-18 2012-07-01 Microsoft Corp Security through opcode randomization
WO2015023502A1 (en) * 2013-08-12 2015-02-19 Cisco Technology, Inc. Binary translation and randomization system for application security
US20180046585A1 (en) * 2016-08-11 2018-02-15 Massachusetts Institute Of Technology Timely address space randomization

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7770016B2 (en) * 1999-07-29 2010-08-03 Intertrust Technologies Corporation Systems and methods for watermarking software and other media
US20070063745A1 (en) * 2003-04-16 2007-03-22 Koninklijke Philips Electronics N.V. Support for conditional operations in time-stationary processors
US8141162B2 (en) * 2007-10-25 2012-03-20 International Business Machines Corporation Method and system for hiding information in the instruction processing pipeline
JP2011258055A (ja) * 2010-06-10 2011-12-22 Fujitsu Ltd 情報処理システム及び情報処理システムの障害処理方法
US9576138B1 (en) 2015-09-30 2017-02-21 International Business Machines Corporation Mitigating ROP attacks
US11809871B2 (en) 2018-09-17 2023-11-07 Raytheon Company Dynamic fragmented address space layout randomization

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7546430B1 (en) * 2005-08-15 2009-06-09 Wehnus, Llc Method of address space layout randomization for windows operating systems
TW201224933A (en) * 2010-09-23 2012-06-16 Apple Inc Systems and methods for compiler-based vectorization of non-leaf code
TW201227394A (en) * 2010-12-18 2012-07-01 Microsoft Corp Security through opcode randomization
CN102231180A (zh) * 2011-07-30 2011-11-02 张鹏 处理器指令编码可重定义的方法
WO2015023502A1 (en) * 2013-08-12 2015-02-19 Cisco Technology, Inc. Binary translation and randomization system for application security
US20180046585A1 (en) * 2016-08-11 2018-02-15 Massachusetts Institute Of Technology Timely address space randomization

Also Published As

Publication number Publication date
WO2020060662A1 (en) 2020-03-26
US11809871B2 (en) 2023-11-07
US20200089502A1 (en) 2020-03-19
TW202013178A (zh) 2020-04-01

Similar Documents

Publication Publication Date Title
TWI717762B (zh) 動態分段位址空間佈局隨機化技術
Davi et al. Isomeron: Code Randomization Resilient to (Just-In-Time) Return-Oriented Programming.
US10402179B1 (en) Application randomization mechanism
US9250937B1 (en) Code randomization for just-in-time compilers
US10339837B1 (en) Distribution of scrambled binary output using a randomized compiler
JP6837064B2 (ja) ランタイム生成コードにおける悪意のあるコードの検出のためのシステムおよび方法
KR101504857B1 (ko) 보안 시스템에서 랜덤하게 할당된 메모리 범위로 jit를 지원하는 시스템 및 방법
Jackson et al. Diversifying the software stack using randomized NOP insertion
US8689201B2 (en) Automated diversity using return oriented programming
TW201807570A (zh) 使用基於偏移的虛擬位址映射對目標應用功能的基於核心的偵測
Chen et al. A practical approach for adaptive data structure layout randomization
Chen et al. JITSafe: a framework against Just‐in‐time spraying attacks
US20160196427A1 (en) System and Method for Detecting Branch Oriented Programming Anomalies
Shioji et al. Code shredding: byte-granular randomization of program layout for detecting code-reuse attacks
Sun et al. Blender: Self-randomizing address space layout for android apps
US11947663B2 (en) Control flow protection based on phantom addressing
US20210150028A1 (en) Method of defending against memory sharing-based side-channel attacks by embedding random value in binaries
Mäki et al. Interface diversification in IoT operating systems
US10152592B2 (en) Compiler assisted protection against arbitrary code execution
Pappas et al. Practical software diversification using in-place code randomization
Jangda et al. Adaptive just-in-time code diversification
Follner et al. Ropocop—dynamic mitigation of code-reuse attacks
Murphy et al. Software profiling options and their effects on security based diversification
Wan et al. Defending application cache integrity of android runtime
US20190095617A1 (en) Systems and methods for intrinsic runtime security

Legal Events

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