?

基于ROP/JOP gadgets性質的軟件多樣化評估方法

2022-02-04 06:13遲宇寧郭云飛王亞文扈紅超
網絡與信息安全學報 2022年6期
關鍵詞:寄存器指令程序

遲宇寧,郭云飛,王亞文,扈紅超

基于ROP/JOP gadgets性質的軟件多樣化評估方法

遲宇寧,郭云飛,王亞文,扈紅超

(信息工程大學,河南 鄭州 450001)

為應對信息化生活中的網絡攻擊及威脅,降低網絡系統中同質化攻擊快速蔓延的風險,增強網絡和軟件的安全性,軟件多樣化技術被應用到系統中。軟件多樣化旨在生成功能等價但內部發生變化的程序變體,從而改變單一的運行環境,緩解同質化攻擊?,F有的多樣化技術的評估指標ROP(return-oriented programming)gadgets幸存率難以直接體現安全性影響且評估方法單一,為了更加全面有效地評估軟件多樣化方法的有效性,提出基于ROP/JOP(jump-oriented programming)gadgets性質的軟件多樣化評估方法,通過分析常見的代碼重用攻擊,將抽象的量化轉為具象的指標,從空間、時間及質量3個方面評估多樣化方法的安全增益及效果。該方法根據gadgets的相似性、損壞度和可用性3個性質探討軟件多樣化技術如何影響ROP/JOP攻擊。用指令替換、NOP插入、控制流平坦等9種多樣化方法對GNU coreutils程序集進行多樣化編譯生成多樣化程序集。對多樣化程序集進行基于gadgets性質的實驗,根據實驗結果評估不同多樣化方法的有效性及對攻擊造成的影響。實驗結果表明,該方法能夠對軟件多樣化方法的安全增益進行準確評估,多樣化技術會導致ROP/JOP攻擊所需的攻擊鏈空間增大,構造攻擊鏈的時間變長且攻擊成功率降低。不同的多樣化方法產生的效果高低不一,對后續研究具有更高安全增益的多樣化技術有指導作用。

軟件多樣化;ROP/JOP攻擊;gadgets性質;安全增益評估

0 引言

信息技術及互聯網的飛速發展,使得大眾生活越來越依賴于網絡。種類繁多、功能各異的應用軟件為人們提供生活便利的同時,也引入了安全風險,威脅人們的隱私和財產安全。究其原因是大多數的軟件在設計階段采用了相似或相同的架構、協議使得軟件漏洞易被黑客在同質化環境中利用。

為了抵御此類威脅, 各類安全機構研究了多種防御方法,如在內存中限制可執行頁面來抵抗大多數代碼注入攻擊[1],控制流完整性檢測檢測程序是否進入非預期的執行路徑[2],動態污點分析追蹤信息流識別破壞內存的攻擊[3]。在這些防御方法中, 大多數只能針對某一種漏洞進行防御,且容易被攻破[4]。

軟件多樣化技術為防御威脅提供了新的思路,其核心思想是應用軟件多樣化技術動態地改變攻擊面以提高攻擊成本。軟件多樣性的概念可以追溯到容錯。多樣性將一個給定組件的多個實現方法產生錯誤結果的可能性降到最低。軟件多樣化著眼于代碼布局隨機化,可以在不同地方用自動化的方式實現,如通過編譯器實現軟件多樣化[5]。在加載時對程序進行反匯編,替換loader加載器[6]實現多樣化等?,F代操作系統通過隨機化程序中對象的基址,如堆棧、堆、程序代碼和動態庫,實現了地址空間布局隨機化(ASLR,address space layout randomization)。

大量理論和實踐證明了軟件多樣化技術能夠有效提高攻擊成本,增強軟件安全性,但如何對軟件多樣化技術的有效性進行評估是一個難點。劉鎮武等[7]通過軟件復雜程度的靜態指標來評估軟件多樣化技術。Rossman等[8]結合香農?維納信息熵[9]的角度,通過利用物種多樣性量化公式去分析操作系統的多樣性,也有依靠邏輯認證[10]來證明改變攻擊依賴的程序屬性則表明防御成功。

評估軟件多樣性技術有效性的一種方法是計算幸存的gadgets的數量占多樣化軟件gadgets集合的比例。Coffman等[11]采用該方法,分別用相同地址的幸存gadgets占比和不考慮地址的幸存gadgets占比作為指標,對幾種多樣化技術進行了安全性評估。但是該方法所提到獲取的gadgets仍足以發動攻擊,即幸存gadgets數量的占比不能顯著體現安全性影響,且幸存gadgets占比這個指標只考慮了多樣化技術在空間角度對面向返回的編程(ROP,return-oriented programming)的部分影響。因此,本文提出了一種基于常見代碼重用攻擊(ROP/面向跳轉的編程(JOP,jump-oriented programming))的軟件多樣化技術有效性的評估方法,獲取程序中ROP/JOP攻擊采用的攻擊鏈,分別從攻擊鏈的相似性、損壞度和可用性3個方面進行定量分析,來討論軟件多樣化技術在空間角度、質量、時間角度對ROP/JOP的影響。

1 軟件多樣化評估相關研究

Coppens等[12]使用BinDiff補丁對比算法,利用該算法研究不同補丁之間共同的指令、函數、代碼等。該方法被用在衡量對抗補丁攻擊[13]的有效性上,將補丁前和補丁后的程序視為具有多樣性的程序。

Banescu等[14-15]用符號執行來評估各種代碼混淆方法的強度。發現符號執行對執行了代碼混淆的程序造成覆蓋率減緩,代表對程序進行逆向分析的困難增加。但符號執行主要關注對程序逆向的干擾程度,受程序大小的空間限制。

Pagani等[16]采用模糊哈希研究了二進制文件基于局部敏感哈希(LSH)方法的庫標識、重新編譯和程序相似度。而后Coffman等[17]采用了3種模糊哈希算法,對多樣化的二進制文件的符號表進行相似性分析,并對比了不同模糊哈希算法的優劣。

Homescu等[18]采用相同地址上幸存gadgets占比為指標,利用該指標衡量不同插入方案的NOP(無操作)插入多樣化技術的安全性。Coffman等[11]以采用了Homescu等的幸存gadgets占比為其中一個指標,提出在不考慮地址的情況下,將相同gadgets占比作為指標,對幾種多樣化技術進行有效性評估。

多樣化技術的多層次性使得在部署之前很難確定它的有效性,因此多樣化的目標——引入異構度,干擾同質化攻擊,從而使攻擊者的成本增加——變得難以直接測量。以上工作中,Banescu等[14-15]側重于衡量代碼混淆技術對抗符號執行和程序逆向的有效性。Homescu 等[18]和文獻[11]通過ROP gadgets的兩種幸存指標評估多樣化技術的有效性,但僅減少幸存的gadget占比不能增加其對ROP攻擊的安全性,故幸存指標難以真實反映多樣化技術的有效性。通常來說,軟件多樣性對攻擊引入的多樣化越強,攻擊者利用成本越高,則該軟件的安全性也就越高,最理想的狀態是攻擊者需要在有效攻擊時間內構建一套全新的可靠的攻擊鏈。因此,為了量化軟件多樣化真正造成的攻擊干擾程度以及安全性,需要對多樣化技術有基于攻擊角度的更全面的評估準則和模型。

2 相關技術

2.1 代碼重用攻擊

攻擊者利用緩沖區溢出漏洞,在存在漏洞的內存地址處重寫緩沖區外的返回指針,重定向控制流,以執行事先注入的代碼。除了緩沖區溢出外,整數溢出、格式化字符串等內存損壞類的漏洞大多是同一利用方法。為了應對這種利用脆弱內存漏洞達到代碼注入的攻擊,在操作系統中引入了可執行保護,該方法將內存的每個頁,根據其脆弱性,標記為可寫或可執行,兩種狀態不能同時存在。若試圖在不可執行頁上執行代碼,大多數情況下保護機制會直接終止程序的運行。因此,可執行空間保護使得攻擊者難以執行注入的代碼,為了繞過這種保護方法,引出了一種新的攻擊類型——代碼重用攻擊。

代碼重用攻擊完全放棄了代碼注入的思想,而是將重點放在重用現有的機器碼上,以達到攻擊效果。其中,常見的代碼重用攻擊為面向返回的編程[19]和面向跳轉的編程[20]。ROP和JOP均利用二進制可執行文件中已有的代碼片段來進行攻擊。ROP/JOP攻擊的核心組件是“小工具(gadgets)”,即緊接在返回/跳轉指令之前發生的指令序列。ROP/JOP gadgets是一個匯編指令序列,表示返回值的字節結束,可以解釋為指令和參數(如寄存器或即時值)。

與代碼注入攻擊(攻擊者利用漏洞,如越界寫?注入自己的注入漏洞)不同,ROP/JOP攻擊通過執行由程序和庫代碼構建的gadgets鏈來危害應用程序。攻擊者利用gadgets鏈重定向到內存中的任意字節,如果它們位于可執行段,則可直接執行。ROP使用ret指令來改變程序的控制流,而 JOP 攻擊利用程序間接跳轉和間接調用指令(call指令和jmp指令)來改變程序的控制流。

2020年,英特爾表示將在自己的Tiger Lake系列移動CPU上配置CET安全功能,該功能旨在防范控制流劫持類攻擊,因此可以防止ROP/JOP攻擊。但該功能目前只支持Intel Tiger Lake系列,且對Linux系統的適配性還需要進一步整合,即該功能的支持范圍有限,還需要時間擴大對操作系統、硬件及軟件棧的普適性。故ROP/JOP仍將長期成為可用的攻擊方法,因此本文依舊具有較大的研究意義和價值。

2.2 軟件多樣化方法

軟件多樣化最初由Cohen等[21]提出,Cohen等指出程序進化是一種防御策略,即程序“進化”成與原始程序不同,但語義上相同的版本,并提出了指令重排序和垃圾代碼插入等程序“進化”方式。常用的軟件多樣化技術由編譯器來實現,本文結合multicompiler[22]和LLVM Obfuscator[23]構建了具有多種軟件多樣化功能的編譯器,其具體功能如下。

1) 控制流平坦:利用分發器控制[24]基本塊之間的直接跳轉,破壞基本塊的跳轉關系,將整個程序的跳轉邏輯變得模糊。分發器的控制讓基本塊都出現在同一層,隱藏了程序的原始跳轉結構。

2) 偽控制流:通過插入不影響程序功能的無效跳轉基本塊[25],構造一些必真或必假的條件,打亂程序原來的控制流圖。

3) NOP插入:NOP是處理器在不修改寄存器文件或內存的情況下執行的指令,NOP插入是隨機在當前指令之前插入0或1個NOP。在本文實驗中,NOP插入的方式為40%的隨機選擇插入30%的NOP指令。

4) 指令替換:功能一致的指令有不同的表達方法,如a?5=a+(?5)。該方法在不更改功能的前提下,用一個等價的指令序列替換數值上的二進制和布爾操作。

5) 全局變量洗牌:隨機排列全局變量,打亂了編譯器生成的目標代碼中全局變量的順序。

6) 函數隨機化:這種方法在整個可執行文件中進行全局性的函數重排列,改變了編譯器生成的目標代碼中函數的順序。

7) 棧反轉:傳統的棧布局為棧底為高地址,棧頂為低地址,棧向低地址生長,棧反轉技術將棧的生長方式反轉為向高地址生長。

8) 棧填充:往??臻g里填充無用數據,使實際執行的??臻g增加。本文實驗的填充率為50%,將預留的??臻g填充至利用率達到50%。

3 評估模型

3.1 使用的數據集

本文選擇了一個開源大數據集進行評估:GNU核心實用程序[17]。表1列出了關于數據集的基本統計信息,使用David A. Wheeler的“SLOC Count”(2.26)計算了數千行代碼的數量(KLOC)。GNU核心實用程序是一組在類Unix操作系統上可以直接通過命令行使用的常用工具,源代碼是開源的,方便利用多樣化編譯器進行編譯生成變體。GNU核心實用程序包含如ls、base64、rm、kill等大量Unix/Linux系統常用工具,提供了源代碼功能上的多樣性。單個應用程序在實驗中只提供一個數據點,并采用整個數據集的平均值作為評估指標。

表1 GNU核心程序集

3.2 評估方法

本文構建了用于評估多樣化變體對原始程序ROP/JOP攻擊的干擾程度的測量方法。為量化多樣化技術引起的攻擊差異,最直接的方法是分析ROP/JOP 賴以使用的gadgets。同質化的可靠ROP/JOP 攻擊,對gadgets集的相似度、攻擊鏈質量和可用性有較高的要求,本文從這3個方面進行評估。同質環境下,未進行多樣化的軟件的gadgets應具有較高的相似性甚至完全一致,攻擊鏈質量高并且gadgets數量足夠構建可靠的攻擊鏈。多樣化技術如果能夠達到抗攻擊或減緩攻擊效果,則對應的gadgets應當降低相似性,并破壞鏈質量。

3.2.1 Gadgets相似性算法

已有的軟件多樣性技術評估通過分析不同多樣化技術中幸存的gadgets的數量或百分比[11]來量化其安全性影響。該方法被認為可靠性較低,且只考慮了多樣化技術的gadgets集變化,未將正常執行體和多樣化執行體作為一個整體進行比較。

評估軟件多樣化技術帶來的攻擊差異化程度的另一種方法是研究多樣化技術引起的相似性降低程度。對于ROP/JOP攻擊來說,從空間的角度,直觀的衡量方法是對比正常軟件和多樣化軟件gadgets集合的相似性。多樣化軟件的gadgets集與正常執行體的gadgets集相似性越低,說明多樣化方法引入的gadgets變化越大,針對多樣化軟件構建的攻擊鏈差異度越大,攻擊者所需的空間成本越高。

為實現相似性評估,本文提出gadgets相似度計算。本文定義相似度是兩個可執行程序不考慮地址的情況下共享的具有相同gadgets鏈的比例。Gadgets集合代表攻擊者能采用的攻擊鏈集合,可用的gadgets鏈可能因為多樣化方法在不同變體中呈現差異。

本文使用Jaccard相似系數[17]來計算相似度。Jaccard相似系數是一種衡量兩個集合的相似度指標,定義為集合與集合交集的大小除以并集的大小,公式為

在本文實驗中,固定正常執行體集合Normal為集合,其余9種多樣化方法生成的變體集合依次為集合,并計算集合A與集合B的Jaccard相似系數。如圖1所示,正常GNU核心程序集中的ls為gadgetsA集合,控制流平坦程序集(CFF-GNU)的ls為gadgetsB集合,gadgetsA和gadgetsB分別取交集和并集進行計算得到Jaccard相似系數。

隨著中國社會經濟發展水平不斷提高,“工業反哺農業,城市支持農村”方針提上國家發展日程,新農村建設、美麗鄉村建設、精準扶貧等國家政策在逐步實施,農村公共服務需求增加。新的形勢對農村公共服務供給提出新的要求。本階段的研究主要有城鄉公共服務的均等化問題、新型城鎮化建設對農村公共服務供給的影響、供給側改革對農村公共服務的影響、農村公共服務供給新的模式和機制探索[12-14]。

表2 用于ROP/JOP 攻擊的TC gadgets

本文編寫腳本自動對比兩個gadgets集合文件,搜索并統計相同的gadgets數量得到交集,用gadgets總數減去交集得到并集,最后實現jaccard相似系數的計算。

3.2.2 Gadgets鏈質量

一些gadgets具備圖靈完整性的能力,這類gadgets是攻擊時采用的核心攻擊指令,此處定義為圖靈完整gadgets(TC gadgets)[26]。其中,ROP中有加載內存LM、存儲內存SM、算術操作AM、棧操作SP、加載寄存器LR,移動寄存器MR等為圖靈完備的。JOP額外有跳轉操作JMP和函數調用CALL為圖靈完備的。具體分類方法如表2所示。

圖1 控制流平坦和正常編譯的ls程序gadgets交并集

Figure1 Gadgets intersection and union of control flow flattening and normal compilers ls program

攻擊者需要使用gadgets改變原有的寄存器相關調用和存儲值,所以用于生成攻擊鏈的gadgets鏈質量至關重要。多樣化技術可能會改變指令對寄存器的調用和寄存器的存儲值,導致在ROP/JOP的攻擊中,寄存器無法正常發揮原來的作用。為度量gadgets鏈的整體質量,本文參考Ahmed等[26]評估不同粒度ASLR方案采用的JIT-ROP gadgets損壞率指標,并針對JOP擴展了TC gadgets,針對ROP和JOP,對原方法采用的指令進行了修改,對具有圖靈完備性的每一條gadgets鏈進行損壞分析。

通常,一個gadgets鏈包含一個核心指令。如“mov eax, 0x6083e0; cmove rdi, rax; mov eax, [rdi]; ret;”包含mov eax,[rdi]作為核心指令,以及在核心指令之前/之后的一些附加指令。核心指令是攻擊者必要的指令,附加指令可能會修改核心指令的源寄存器或目標寄存器,如果發生這種情況,則視該gadgets已損壞。核心指令被修改的情況有以下3種。

1) 被核心指令前的指令修改:“and [rax], al; mov rbx,[rip+0x205bd7]; pop rbx; ret;”,“pop rbx”為核心指令,rbx被前面的“mov rbx,[rip+0x205bd7]”修改。

2) 被核心指令后的指令修改:“add [eax], rax; add rax, cl; ret;”,核心指令“add [eax],rax”中rax被后面的“add rax,cl”修改。

3) 核心指令前/后的指令均可修改:“and eax, ebx ; mov eax, [r9+0x4]; mov [r9+0x4], esi; ret;” ,核心指令“mox eax [r9+0x4]”中eax和esi分別被前后的指令修改。

本文通過分析附加指令是否修改小工具的核心指令來測量寄存器損壞率。根據以上3種場景判斷gadgets損壞情況。確定一組可以修改核心指令的源寄存器或目標寄存器的附加指令(mov、lea、add、sub、cmove、pop、inc、dec、xchg、and、or、xor、shl和shr),將這類指令使用的寄存器視為沖突寄存器。

如果在一組有以上附加指令和表2中核心指令的gadgets鏈中,附加指令修改了核心指令寄存器,則該條gadgets鏈視為被損壞。

通過以上方法,獲得被損壞的gadgets鏈數量,用損壞的gadgets鏈數量除以所有gadgets鏈的數量來測量寄存器損壞率。

3.2.3 Gadgets收集效率

多樣化技術對ROP/JOP的重要影響是改變gadgets的數量和收斂時間。多樣化技術可能帶來gadgets數量的減少或增加,并增長或縮短收集完整gadgets集的收斂時間。存在一種情況:盡管多樣化技術使gadgets數量減少,由于擾亂了各種層次的布局,反而增加了收集gadgets的時間,提高了攻擊者的時間成本。構建一個完整可用的攻擊鏈需要有足夠數量的gadgets,而在真實環境中每一次攻擊受到有效攻擊時間的約束,減少軟件中可用的gadgets總數,延長收集有效gadgets的時間,增加了構建攻擊鏈的難度和成本,因此可以減少其受到有效攻擊的次數。為了評估以上情況,本文提出gadgets收集效率這一指標。

為度量gadgets收集效率,本文對所有執行體運行gadgets收集函數,記錄收斂到完整gadgets集所需的時間,并計算每秒可收集gadgets個數,得出收集效率,該指標不僅反映多樣化技術對gadgets收集造成的時間成本影響,也反映了數量的變化。對于攻擊者來說,越低的時間成本內收集的gadgets越多,收集效率越高,則gadgets的可用性越高,攻擊的成功率越高。

4 實驗結果與分析

本文實驗在使用Ubuntu 18.04 LTS 64位操作系統的Linux機器上進行,采用內生安全軟件開發環境(ES2,endogenous security studio)生成執行體。ES2是集軟件代碼開發、異構化編譯、多樣化執行體生成等功能于一體的軟件開發環境,具備業界領先的進程級細粒度多樣化編譯性能。

本文采用基于Python的開源gadgets收集工具——ropper,并針對實驗需求對源碼進行改進。改造后的ropper添加了計算收集完整gadgets時間的功能函數,增加了只收集ROP或JOP gadgets的功能。

本文采用9種多樣化技術(控制流平坦(CFF)、虛假控制流(FCF)、NOP插入(NI)、指令替換(IR)、全局變量洗牌(GVS)、函數隨機化(FR)、棧反轉(RS)、棧填充(FS)和堆棧交換(ESH))以及一種正常編譯方法Normal。對于每種多樣化技術,利用GNU核心程序集,用ES2集中編譯連接。其中,每個核心程序均使用不同的多樣化技術進行編譯,生成900個多樣化變體,加上正常編譯未使用多樣化技術的100個執行體,共計1 000個執行體,10個不同的GNU核心程序集。

利用3.2節所述的各類方法,得到每個GNU核心程序集的每個程序對應數據,并取該程序集的平均值,作為實驗的最終數據。

4.1 Gadgets相似度的評估

假設隨著gadgets的共同集減少,攻擊者的成本增加。理想情況下,兩個多樣化的二進制文件應該完全沒有共同的gadgets,攻擊者必須為每個多樣化的二進制文件構建一個新的ROP鏈。

本實驗計算了正常執行體和其他所有多樣化變體的gadgets集相似度。對于每一對執行體和變體,使用相同gadgets來確定每個可執行文件的交集,使用Jaccard算法得到相似度,并取程序集的平均值。

對于每種多樣性技術,圖2顯示了每個GNU核心程序集中ROP gadgets的平均相似度,即Jaccard相似系數。在采用的多樣化技術中,發現NOP插入效率最高,相似度不到5%,說明相同的gadgets的數量最少,因為額外的NOP使gadgets的數量變化較大??刂屏髌教辜夹g的相似度僅為6.73%。除了NOP插入和控制流平坦外,其他的多樣化技術最終達到高于7%低于8%的相似度。

圖2 ROP gadgets的相似度

Figure 2 The similarity of ROP gadgets

函數隨機化排序因打亂了函數的順序,干擾了內存中函數存放的位置,相似度較小。而細粒度指令替換和全局變量洗牌以及虛假控制流較為接近。因為ROP攻擊以ret指令為結尾,需要多次調用棧達到實現執行gadgets鏈的目的,堆棧交換引入的堆棧布局多樣性優于棧反轉和棧填充。

Coffman等[11]采用不考慮地址的幸存gadgets占比這一指標從空間角度上度量多樣化技術。Coffman的實驗結果中,NOP插入、控制流平坦、指令替換、偽控制流這4種方法的指標依次升高,這與本文的實驗結果是吻合的,也側面證明了本文采用指標的可信度。

圖3是每個GNU核心程序集中JOP gadgets的平均相似度。JOP gadgets的平均相似度整體高于ROP gadgets。與ROP的情況類似,NOP插入依舊是相似度最低的多樣化技術,因其帶來了較多的無用過程??刂屏髌教辜夹g相似性僅為6.66%。其他的多樣化技術則維持在8.5%~9%。

圖3 JOP gadgets的相似度

Figure 3 The similarity of JOP gadgets

與ROP gadgets相似度不同的是,全局變量洗牌、函數隨機化和虛假控制流比指令替換引入了更多的多樣性。因為JOP以跳轉為主,函數和變量的變化對跳轉地址的干擾更大。但是JOP攻擊通過修改棧內容來修改寄存器值,實現對棧操作,達到跳轉的目的,所以棧多樣化技術基本不分上下。

Gadgets相似度為多樣性技術的有效性提供了一些見解。不同的多樣化對ROP/JOP gadgets產生不同程度的影響,均未使得相似度趨近于0。這一結果說明即便采用了多樣化技術,執行體的gadgets中始終有共同存在的部分。這個部分或許是一些初始指令,或許是完成攻擊的核心指令。并且不同技術對ROP和JOP產生的多樣性效果也不相同,取決了該多樣化技術對ROP和JOP主要利用的地址和內存布局有怎樣程度的改變。

4.2 Gadgets鏈質量的評估

這個實驗的目的是分析gadgets鏈的質量和寄存器的可用性。根據3.2.2節描述的方法,通過對單個gadget的寄存器損壞分析來衡量gadget的質量。本文測量了圖靈完備的gadgets集的寄存器損壞情況,并通過將損壞的小工具的數量除以所有小工具的數量來計算gadgets的寄存器損壞率。

圖4為圖靈完備的ROP gadgets的寄存器損壞率分析結果??刂屏髌教箤е聯p壞率高達34%,NOP插入也造成了gadgets質量的較大損失。細粒度的指令替換和全局變量洗牌整體損壞率略高于粗粒度的函數隨機化和虛假控制流(約為4%)。這個略高的寄存器損壞率表明,細粒度多樣化技術中gadget鏈的形成和使用比粗粒度多樣化技術略難。因為棧反轉只是將棧的生長方向對調,ROP對棧頂指針的調用受方向的干擾較小,故棧反轉的效果較差。

圖4 圖靈完備的ROP gadgets寄存器損壞率

Figure 4 Register damage rate of TC ROP gadgets

圖5為圖靈完備的JOP gadgets的寄存器損壞率分析結果。JOP gadgets的整體寄存器損壞率比ROP gadgets的略低,最高不超過30%。細粒度的指令替換和全局變量洗牌與粗粒度的函數隨機化和虛假控制流損壞率接近,表明對于JOP攻擊,這兩類技術中gadgets鏈的形成和使用成本接近。JOP攻擊對堆棧的依賴較小,對寄存器的調用也沒有ROP嚴格,因此無論是堆棧多樣性技術還是其他的多樣性技術,JOP gadgets總體損壞率都略低于ROP gadgets的損壞率。

圖5 圖靈完備的JOP gadgets寄存器損壞率

Figure 5 Register damage rate of TC JOP gadgets

通過衡量gadgets的寄存器損壞率,可以發現ROP和JOP對寄存器及堆棧的依賴程度不同。但多樣化技術都帶來不同程度的寄存器損壞,使gadgets鏈質量下降,可靠性降低。未來的多樣化技術發展方向,可以考慮以增加gadgets中的寄存器損壞率為研究目標,因為越高的寄存器損壞率讓攻擊變得越不可靠,攻擊能正常使用的寄存器越少。

4.3 Gadgets可用性的評估

為了度量gadgets收斂時間和收集效率,本文采用3.2.3節描述的方法,收集了ROP和JOP各自所有的gadgets,并獲得了收集完整gadgets的收斂時間,再計算得到平均每秒能收集的gadgets個數。

圖6中列出了各種生成的GNU程序集的ROP gadgets平均每秒收集的gadgets個數。從該指標可看出,多樣化技術讓ROP gadgets數量有減少的趨勢,降低了gadgets的收集效率和可用性。NOP插入帶來的減少程度是倍數級的。NOP插入讓軟件膨脹,且插入的NOP指令是無效的,很大限度增加了收斂完整gadgets的時間,導致每秒收集數量急劇降低。而堆棧級和函數指令級多樣化技術整體表現相似。因為理想情況下,這兩類的多樣化技術不會破壞gadgets,只會將gadgets從一個位置轉移到另一個位置。由于程序執行流的混亂和寄存器分配的隨機化,控制流平坦這種基本塊級的技術對ROP gadgets的破壞程度較大。

圖6 平均每秒收集的ROP gadgets數量

Figure 6 Average of ROP gadgets collected per second

JOP 的情況與ROP不太一樣。由圖7可知,除了NOP插入帶來JOP gadgets的減少外,其他多樣化技術均展現出令人意外的收斂情況。包括在其他指標中表現優越的控制流平坦技術,其指標與其余多樣化技術接近。這個情況揭示了大多數多樣化技術在一定限度上增加了JOP gadgets數量。因為JOP不用ret來連接原始操作和指令,所以需要收集更多可用的以jmp和call結尾的gadgets來達到攻擊目標。而多樣化技術對ret結尾的gadgets有削減的作用,因此在JOP攻擊中需要收集更多的jmp和call gadgets來彌補這一缺失。

圖7 平均每秒收集的JOP gadgets數量

Figure 7 Average of JOP gadgets collected per second

通過分析gadgets的收斂情況可知,對于ROP來說,多樣性越大的技術使得gadgets的收集效率越低,造成的可用性越低,并且增加越多的攻擊時間成本。但是JOP受到相關影響,要完成圖靈完備攻擊則需要收集更多的JOP gadgets??偟膩碚f,多樣化技術讓gadgets的收斂速度和數量有改變,在實際情況中應該綜合影響兩種攻擊的平衡性去考慮多樣化技術的有效性。

4.4 評估總結

通過對9種多樣化技術和正常編譯產生的GNU核心程序集的ROP/JOP gadgets不同角度的分析發現,多樣化技術均對ROP/JOP攻擊產生了不同程度的干擾,會導致ROP/JOP攻擊所需的攻擊鏈空間增大,構造攻擊鏈的時間發生變化且攻擊成功率降低。綜合而言,NOP插入和控制流平坦都發揮出色,使3個指標有了較為明顯的變幅,具有更高的安全增益。其他多樣化技術根據攻擊的需求和多樣化的粒度,對攻擊呈現不同的限制效果。堆棧多樣化技術總體對執行體的改變局限于堆棧區域,帶來的安全增益也較弱。

表3 多樣化技術評估結果

本文的評估方法在ROP/JOP攻擊層面,對多個影響攻擊的gadgets指標進行分析,從同質化攻擊的不同角度對各類軟件多樣化技術進行定量比較,給出多樣化效果的安全增益和有效性的綜合評估結果,并能更加深入地挖掘ROP/JOP gadgets的性質,日后可根據這些指標和性質研究更加具有安全性的多樣化技術。

5 結束語

現有的ROP gadgets幸存率指標存在難以直接體現多樣化技術的安全性影響且評估方法單一的問題。為了更加全面地從攻擊視角評估多樣化技術的有效性,本文根據常見的代碼重用攻擊ROP和JOP及其 gadgets的不同性質來確定多樣化技術對網絡攻擊產生的影響,建立評估體系。本文利用GNU核心程序數據集開展實驗,評估了9種不同的多樣化技術對gadget相似度、鏈質量、可用性等方面的影響,從gadgets的空間角度、時間角度和質量可靠角度3個方面進行量化和比較,驗證了所提方法在軟件多樣化領域的適用性以及有效性。

但是本文的評估方法主要評估了Linux下的X86-64架構軟件多樣化方法,未來需要進一步對Windows系統和其他架構(如ARM的軟件多樣化技術)進行評估驗證。此外,可以創建新的指標,對正常軟件和多樣化軟件的函數、指令、基本塊等粒度進行差異分析,提出一套不依賴特定攻擊方法的評估體系。

[1] LITCHFIELD D. Buffer Underruns, DEP, ASLR and improving the exploitation prevention mechanisms (XPMs) on the Windows platform[EB].

[2] ABADI M, BUDIU M H, ERLINGSSON ú, et al. Control-flow integrity[C]//Proceedings of the 12th ACM conference on Computer and Communications Security CCS '05. 2005: 340-353.

[3] LIVSHITS V B, LAM M S. Finding security vulnerabilities in Java applications with static analysis[J]. 14th USENIX Security Symposium, 2005: 271-286.

[4] 姚東, 張錚, 張高斐, 等. 多變體執行安全防御技術研究綜述[J]. 信息安全學報, 2020, 5(5): 77-94.

YAO D, ZHANG Z, ZHANG G F, et al. A survey on multi-variant execution security defense technology[J]. Journal of Cyber Security, 2020, 5(5): 77-94.

[5] GIUFFRIDA C, KUIJSTEN A, TANENBAUM A S. Enhanced operating system security through efficient and fine-grained address space randomization[C]//Proceedings of the 21st USENIX Conference on Security symposium. 2012: 40.

[6] HISER J, NGUYEN-TUONG A, CO M, et al. ILR: where'd my gadgets go[C]//Proceedings of 2012 IEEE Symposium on Security and Privacy. Piscataway: IEEE Press, 2012: 571-585.

[7] 劉鎮武, 隋然, 張錚, 等. 基于信息熵與軟件復雜度的軟件多樣性評估方法[J]. 信息工程大學學報, 2020, 21(2): 207-213.

LIU Z W, SUI R, ZHANG Z, et al. Software diversity evaluation method based on information entropy and software complexity[J]. Journal of Information Engineering University, 2020, 21(2): 207-213.

[8] HERNANDEZ-CASTRO J, ROSSMAN J. Measuring software diversity, with applications to security[J]. arXiv: 1310.3307, 2013.

[9] SHANNON C E. A mathematical theory of communication[J]. Bell System Technical Journal, 1948, 27(3): 379-423.

[10] COHEN F B. Operating system protection through program evolution[J]. Computers & Security, 1993, 12(6): 565-584.

[11] COFFMAN J, KELLY D M, WELLONS C C, et al. ROP gadget prevalence and survival under compiler-based binary diversification schemes[C]//Proceedings of the 2016 ACM Workshop on Software Protection. 2016: 15-26.

[12] COPPENS B, DE SUTTER B, MAEBE J. Feedback-driven binary code diversification[J]. ACM Transactions on Architecture and Code Optimization, 2013, 9(4): 1-26.

[13] BRUMLEY D, POOSANKAM P, SONG D, et al. Automatic patch-based exploit generation is possible: techniques and implications[C]//Proceedings of 2008 IEEE Symposium on Security and Privacy. 2008: 143-157.

[14] SEBASTIAN B, CHRISTIAN C, VIJAY G, et al. Code obfuscation against symbolic execution attacks[C]//Proceedings of the 32nd Annual Conference on Computer Security Applications (ACSAC ’16). 2016: 189-200.

[15] SEBASTIAN B, CHRISTIAN C, AND ALEXANDER P. Predicting the resilience of obfuscated code against symbolic execution attacks via machine learning[C]//Proceedings of the 26th USENIX Security Symposium. 2017: 661-678

[16] FABIO P, MATTEO D’A, DAVIDE B. Beyond precision and recall: understanding uses (and misuses) of similarity hashes in binary analysis[C]//Proceedings of the Eighth ACM Conference on Data and Application Security and Privacy (CODASPY ’18). 2018: 354-365.

[17] COFFMAN J, CHAKRAVARTY A, RUSSO J A, et al. Quantifying the effectiveness of software diversity using near-duplicate detection algorithms[C]//Proceedings of the 5th ACM Workshop on Moving Target Defense. 2018: 1-10.

[18] HOMESCU A, NEISIUS S, LARSEN P, et al. Profile-guided automated software diversity[C]//Proceedings of the 2013 IEEE/ACM International Symposium on Code Generation and Optimization (CGO). Piscataway: IEEE Press, 2013: 1-11.

[19] ROEMER R, BUCHANAN E, SHACHAM H, et al. Return-oriented programming[J]. ACM Transactions on Information and System Security, 2012, 15(1): 1-34.

[20] BLETSCH T, JIANG X X, FREEH V, et al. Jump-oriented programming: a new class of code-reuse attack[C]//Proceedings of ASIACCS '11. 2011.

[20] BLETSCH T, JIANG X X, FREEH V W, et al. Jump-oriented programming: a new class of code-reuse attack[C]//Proceedings of the 6th ACM Symposium on Information, Computer and Communications Security - ASIACCS '11. 2011: 30-40.

[21] COHEN F B. Operating system protection through program evolution[J]. Computers & Security, 1993, 12(6): 565-584.

[22] CRANE S, LIEBCHEN C, HOMESCU A, et al. Readactor: practical code randomization resilient to memory disclosure[C]// Proceedings of 2015 IEEE Symposium on Security and Privacy. Piscataway: IEEE Press, 2015: 763-780.

[23] JUNOD P, RINALDINI J, WEHRLI J, et al. Obfuscator-LLVM: software protection for the masses[C]//Proceedings of 2015 IEEE/ACM 1st International Workshop on Software Protection. 2015: 3-9.

[24] L′ASZL′O T, KISS ′A. Obfuscating C++ programs via control flow flattening[C]//Processing of Annales Universitatis Scientarum 25 Budapestinensis de Rolando E¨otv¨os Nominatae, Sectio. 2009.

[25] COLLBERG C, THOMBORSON C, LOW D. Manufacturing cheap, resilient, and stealthy opaque constructs[C]//Proceedings of the 25th ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages - POPL '98.1998: 184-196.

[26] AHMED S, XIAO Y, SNOW K Z, et al. Methodologies for quantifying (re-) randomization security and timing under JIT-ROP[C]// Proceedings of the 2020 ACM SIGSAC Conference on Computer and Communications Security. 2020: 1803-1820.

Software diversity evaluation method based on the properties of ROP/JOP gadgets

CHI Yuning, GUO Yunfei, WANG Yawen, HU Hongchao

Information Engineering University, Zhengzhou 450001, China

In order to reduce the risk of rapid spread of homogeneous attacks in network systems, and enhance network and software security, software diversification technologies are applied widely nowadays. Software diversification aims to generate functionally equivalent but internally changed program variants, thereby alter a single operating environment and mitigating homogenization attacks. The existing diversified technical evaluation index ROP gadgets survival rate is difficult to directly reflect the safety impact and the evaluation method is single. In order to evaluate the effectiveness of the diversification method more comprehensively and effectively, a software diversification evaluation method based on the properties of ROP/JOP gadgets is proposed, by analyzing common code reuse attacks, and turns abstract quantification into concrete indicators evaluates the security gain and effect of diversified methods from three aspects of space, time and quality. The method first discusses how diversification techniques affect ROP/JOP attacks according to the three properties of gadgets similarity, damage degree and availability. Nine kinds of diversification methods, such as instruction replacement, NOP insertion, and control flow flattening, are used to diversify the GNU coreutils assembly to generate diversification assembly. Experiments based on the property of gadgets are carried out on the diverse assemblies, and the effectiveness of different diversification methods and the impact on attacks are evaluated according to the experimental results. The experimental results show that this method can accurately evaluate the security gain of software diversification methods, the diversification technology will lead to the increase of the attack chain space required by the ROP/JOP attack, the longer time to construct the attack chain and the lower the attack success rate. The effects of different diversification methods are different, it has a guiding role for the follow-up research on diversified technologies with higher safety gains.

software diversification, ROP/JOP attack, gadgets properties, safety gain evaluation

TP393

A

10.11959/j.issn.2096?109x.2022086

2021?09?28;

2021?12?28

遲宇寧,cyn_091981@163.com

國家重點研發計劃(2021YFB1006200,2021YFB1006201);國家自然科學基金(62072467)

The National Key R&D Program of China (2021YFB1006200, 2021YFB1006201), The National Natural Science Foundation of China (62072467)

遲宇寧, 郭云飛, 王亞文, 等. 基于ROP/JOP gadgets性質的軟件多樣化評估方法[J]. 網絡與信息安全學報, 2022, 8(6): 135-145.

CHI Y N, GUO Y F, WANG Y W, et al. Software diversity evaluation method based on the properties of ROP/JOP gadgets[J]. Chinese Journal of Network and Information Security, 2022, 8(6): 135-145.

遲宇寧(1995?),女,云南楚雄人,信息工程大學碩士生,主要研究方向為網絡主動防御、軟件多樣化。

郭云飛(1963?),男,河南鄭州人,信息工程大學教授、博士生導師,主要研究方向為網絡空間安全、云安全和電信網安全。

王亞文(1990?),男,河南鄭州人,信息工程大學助理研究員,主要研究方向為擬態防御和云計算。

扈紅超(1982?),男,河南商丘人,信息工程大學教授、博士生導師,主要研究方向為網絡空間安全和主動防御技術。

猜你喜歡
寄存器指令程序
STM32和51單片機寄存器映射原理異同分析
《單一形狀固定循環指令G90車外圓仿真》教案設計
Lite寄存器模型的設計與實現
試論我國未決羈押程序的立法完善
移位寄存器及算術運算應用
“程序猿”的生活什么樣
英國與歐盟正式啟動“離婚”程序程序
創衛暗訪程序有待改進
中斷與跳轉操作對指令串的影響
一種基于滑窗的余度指令判別算法
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合