肖玉強(qiáng),郭云飛,王亞文
基于符號(hào)執(zhí)行和-scope復(fù)雜度的代碼混淆度量方法
肖玉強(qiáng),郭云飛,王亞文
(信息工程大學(xué),河南 鄭州 450001)
代碼混淆可有效對(duì)抗逆向工程等各類MATE攻擊威脅,作為攻擊緩和性質(zhì)的內(nèi)生安全技術(shù)發(fā)展較為成熟,對(duì)代碼混淆效果的合理度量具有重要價(jià)值。代碼混淆度量研究相對(duì)較少,針對(duì)代碼混淆彈性的度量方法與泛化性、實(shí)用性度量方法相對(duì)缺乏。符號(hào)執(zhí)行技術(shù)廣泛應(yīng)用于反混淆攻擊,其生成遍歷程序完整路徑輸入測(cè)試集的難度可為混淆彈性度量提供參考,然而基于程序嵌套結(jié)構(gòu)的對(duì)抗技術(shù)可顯著降低符號(hào)執(zhí)行效率,增加其混淆彈性參考誤差。針對(duì)上述問題,提出結(jié)合符號(hào)執(zhí)行技術(shù)和-scope復(fù)雜度的代碼混淆度量方法,該方法首先基于程序符號(hào)執(zhí)行時(shí)間定義程序混淆彈性;其次提出適配符號(hào)執(zhí)行的-scope復(fù)雜度,定義程序混淆強(qiáng)度同時(shí)增強(qiáng)符號(hào)執(zhí)行對(duì)多層嵌套結(jié)構(gòu)程序的混淆彈性度量魯棒性;進(jìn)而提出結(jié)合動(dòng)態(tài)分析與靜態(tài)分析的混淆效果關(guān)聯(lián)性分析,通過對(duì)程序進(jìn)行符號(hào)執(zhí)行與控制流圖提取量化混淆效果。面向C程序構(gòu)建了該度量方法的一種實(shí)現(xiàn)框架并驗(yàn)證,實(shí)驗(yàn)對(duì)3個(gè)公開程序集及其混淆后程序集約4000個(gè)程序進(jìn)行混淆效果度量,度量結(jié)果表明,提出的度量方法在較好地刻畫混淆效果的同時(shí)擁有一定的泛化能力與實(shí)用價(jià)值;模擬真實(shí)混淆應(yīng)用場(chǎng)景給出了該度量方法的使用樣例,為混淆技術(shù)使用人員提供有效的混淆技術(shù)度量與技術(shù)配置參考。
代碼混淆;混淆度量;符號(hào)執(zhí)行;-scope
代碼混淆是以對(duì)抗軟件面臨的逆向工程和篡改攻擊等威脅為目的,對(duì)程序進(jìn)行等價(jià)語(yǔ)義轉(zhuǎn)換的安全技術(shù)。近年來,軟件技術(shù)的發(fā)展與軟件市場(chǎng)需求的擴(kuò)大帶來了巨大的經(jīng)濟(jì)效益,攻擊者和安全人員隨之進(jìn)行相應(yīng)的安全博弈和技術(shù)更新,代碼混淆技術(shù)作為軟件安全技術(shù)受到了關(guān)注。具體來說,以軟件篡改和逆向攻擊為代表的MATE(man-at-the-end)[1]攻擊建立在軟件和主機(jī)的使用權(quán)限之上,其多樣性的攻擊形式難以被預(yù)測(cè),使傳統(tǒng)的防御形式難以招架,而代碼混淆作為內(nèi)生安全技術(shù),在不改變軟件功能的情況下更改軟件的內(nèi)容與結(jié)構(gòu),以增加MATE攻擊的難度和成本,受到安全攻守兩方的重視并廣泛應(yīng)用。
代碼混淆技術(shù)發(fā)展了近30年,研究人員開發(fā)了包括控制流混淆[2]、關(guān)聯(lián)混淆[4]、數(shù)據(jù)混淆[5]、布局混淆[7]等方法在內(nèi)的眾多混淆技術(shù),以Tigress、LLVM-obfuscator、VMProtect等為代表的各類混淆集成工具,為具有軟件安全需求的用戶提供了多樣化選擇。值得注意的是,代碼混淆本質(zhì)上并非絕對(duì)安全,而是混淆者與反混淆者基于資源的技術(shù)博弈,研究表明擁有充足資源的攻擊者在足夠長(zhǎng)時(shí)間內(nèi)可以攻破絕大多數(shù)混淆[8]。盡管代碼混淆的各類技術(shù)趨于成熟,除對(duì)混淆技術(shù)進(jìn)行邏輯說明[9]外,目前對(duì)混淆效果的相關(guān)度量方法與研究仍相對(duì)較少,缺乏實(shí)用性混淆度量方法,使混淆使用者無(wú)法較準(zhǔn)確地評(píng)價(jià)混淆效果[10],造成為求安全“貪得無(wú)厭式”疊加大量混淆方法或?yàn)楸P省巴妒蠹善魇健鄙偌踊虿患踊煜木骄砙11]。從目的而言,不論逆向工程、篡改攻擊或復(fù)制攻擊,都需要對(duì)程序完整或部分邏輯進(jìn)行分析,即對(duì)程序“理解”。最早由Collberg等[12]定義的3個(gè)經(jīng)典度量指標(biāo)中:Potency強(qiáng)度指基于人類理解能力的程序混淆復(fù)雜度,Resilience彈性指基于機(jī)器反混淆技術(shù)的混淆抵抗力,Cost開銷指混淆帶來的額外資源開銷?,F(xiàn)有的混淆效果度量研究主要針對(duì)混淆強(qiáng)度, 而針對(duì)混淆彈性的度量相對(duì)較少,各種度量研究大致可分為以下4類。
1) 其他度量指標(biāo)的遷移:研究人員?;诮?jīng)典軟件度量指標(biāo)與混淆強(qiáng)度的概念相似或出于經(jīng)驗(yàn)使用信息論度量指標(biāo)定義混淆強(qiáng)度指標(biāo)。如Anckaert等[13]提出了一種遷移一系列軟件復(fù)雜度指標(biāo),建立評(píng)估二進(jìn)制程序指令、控制流、數(shù)據(jù)流和數(shù)據(jù)在內(nèi)的復(fù)合度量方法,通過每個(gè)對(duì)象的對(duì)應(yīng)指標(biāo)綜合評(píng)價(jià)混淆強(qiáng)度;Kirk等[14]提出基于信息論的混淆度量方式,將Kolmogorov復(fù)雜度遷移應(yīng)用到二進(jìn)制文件上進(jìn)行混淆效果計(jì)算;Mohsen等[15]則進(jìn)一步用約束的Kolmogorov復(fù)雜度確定代碼混淆的規(guī)律性并給出代碼混淆的相應(yīng)規(guī)范化定義,進(jìn)而度量無(wú)自動(dòng)化工具影響下的混淆強(qiáng)度。
2) 基于控制流圖的度量:控制流混淆在一些度量指標(biāo)中取得較高的混淆強(qiáng)度、彈性得分[16],而基于控制流圖的度量方法可以較準(zhǔn)確地描繪程序邏輯,表現(xiàn)出與程序語(yǔ)義的強(qiáng)相關(guān)性。Tsai等[18]將控制流混淆分解為一系列原子操作符并對(duì)眾多控制流混淆算法進(jìn)行形式化,提出了基于控制流圖的距離度量方案MGE并結(jié)合基于嵌套級(jí)別的混淆強(qiáng)度度量-Scope作為混淆效果的度量方案;Gao等[19]提出一種結(jié)合符號(hào)執(zhí)行與定理證明器的圖同構(gòu)技術(shù)對(duì)程序控制流進(jìn)行分析,從而對(duì)比二進(jìn)制文件的語(yǔ)義差異;Luo等[20]通過構(gòu)建符號(hào)執(zhí)行與定理證明器檢測(cè)二進(jìn)制基本塊的等價(jià)語(yǔ)義,以等價(jià)基本塊為基本元素計(jì)算混淆程序與原程序線性獨(dú)立路徑的最長(zhǎng)公共子序列,并將其比例作為路徑得分,從而計(jì)算函數(shù)與程序的相似性。
3) 基于抽象語(yǔ)義的度量:Pucella等[21]通過對(duì)混淆防御能力及其面臨攻擊進(jìn)行精確定義,給出以多樣性為防御前提的攻擊性質(zhì)描述,通過類比展示了類型系統(tǒng)與混淆器的良好近似能力;Dalla等[22]推導(dǎo)了一個(gè)基于抽象解釋的格點(diǎn)隱藏性質(zhì)進(jìn)行混淆效能度量的理論模型,通過抽象指標(biāo)比較攻擊者,從而進(jìn)一步通過對(duì)比抽象解釋的隱藏屬性對(duì)代碼混淆的強(qiáng)度進(jìn)行測(cè)量,同時(shí)對(duì)代碼混淆度量模型進(jìn)行了一般性推廣,即任意程序轉(zhuǎn)換都可能作為潛在的代碼混淆器使用。
4) 基于具體攻擊的度量:Viticchi′e等[23]對(duì)代碼混淆應(yīng)用的真實(shí)攻擊進(jìn)行對(duì)比實(shí)驗(yàn),通過比較攻擊混淆和原程序時(shí)間、攻擊成功效率對(duì)代碼混淆彈性進(jìn)行度量;Ceccato等[24]模擬真實(shí)逆向場(chǎng)景,實(shí)驗(yàn)中被測(cè)試人員理解經(jīng)過混淆后被反編譯與未經(jīng)過混淆反編譯的兩種Java代碼,反映出代碼混淆對(duì)抗逆向的有效程度以及緩解基于系統(tǒng)特性攻擊的價(jià)值;Banescu等[25]通過對(duì)比混淆前后符號(hào)執(zhí)行遍歷程序所有路徑執(zhí)行時(shí)間,來模擬自動(dòng)化攻擊與動(dòng)態(tài)分析場(chǎng)景,描述混淆程序?qū)狗?hào)執(zhí)行攻擊的代碼混淆彈性;Majumdar等[26]對(duì)防御切片技術(shù)的切片混淆方法提出了5個(gè)度量指標(biāo)并證明切片混淆的有效性。
各種度量方式有其優(yōu)點(diǎn)和缺點(diǎn),如其他度量指標(biāo)的遷移展現(xiàn)出與混淆強(qiáng)度有較強(qiáng)的相關(guān)性,然而對(duì)混淆彈性的刻畫則可能存在較大偏差;基于控制流圖的度量通過結(jié)合基本塊符號(hào)執(zhí)行可以較好地刻畫程序間靜態(tài)相似性,然而該方法實(shí)際操作過程中需要遍歷程序不同路徑對(duì)基本塊一一比較,方法消耗的資源巨大,因此實(shí)際場(chǎng)景中不適合直接用作混淆度量,基于抽象語(yǔ)義的度量可將復(fù)雜混淆轉(zhuǎn)換通過語(yǔ)義近似及抽象屬性進(jìn)行描述,但該方法在使用時(shí)需根據(jù)實(shí)際情況進(jìn)行語(yǔ)義精確匹配,尚不能實(shí)際應(yīng)用該類方法;基于具體攻擊的度量對(duì)真實(shí)攻擊場(chǎng)景進(jìn)行了良好的復(fù)現(xiàn),然而人力的攻擊度量無(wú)法大規(guī)模應(yīng)用且度量結(jié)果較依賴于攻擊人員的水平。
本文提出一種基于符號(hào)執(zhí)行-scope復(fù)雜度的代碼混淆度量方法,結(jié)合對(duì)程序的動(dòng)態(tài)執(zhí)行與靜態(tài)基本塊級(jí)控制流分析,通過計(jì)算程序-scope復(fù)雜度度量混淆強(qiáng)度與符號(hào)執(zhí)行評(píng)估混淆強(qiáng)度彈性,將這二者相互補(bǔ)充,能夠較好地描述混淆效果,實(shí)現(xiàn)真實(shí)場(chǎng)景下考慮自動(dòng)化分析的混淆效果度量方法。本文度量方法對(duì)總數(shù)超過4 000個(gè)混淆程序的程序集進(jìn)行了充分評(píng)估,表明該度量方法能較好刻畫混淆效果的同時(shí)擁有一定的泛化能力與實(shí)用價(jià)值。
符號(hào)執(zhí)行技術(shù)是通過符號(hào)值代替真實(shí)值作為程序輸入執(zhí)行程序的技術(shù),當(dāng)執(zhí)行到分支語(yǔ)句,則添加約束分別執(zhí)行分支路徑,盡可能遍歷所有路徑之后利用約束求解器及可達(dá)性推理求解程序各路徑輸入與路徑信息,達(dá)到進(jìn)一步分析程序與獲取程序執(zhí)行結(jié)果的目的。
在分析大規(guī)?;煜绦驎r(shí),對(duì)分析工具的時(shí)間成本與泛化分析能力有一定要求,通過符號(hào)執(zhí)行技術(shù)可以較高效地尋找系統(tǒng)漏洞[27],其動(dòng)態(tài)分析的特性提供了優(yōu)秀的泛化分析能力并使一部分代碼混淆技術(shù)無(wú)效化,因而符號(hào)執(zhí)行被廣泛應(yīng)用于程序測(cè)試分析、二進(jìn)制分析及漏洞挖掘等安全相關(guān)領(lǐng)域,尤其對(duì)MATE攻擊者而言,代碼混淆作為其面對(duì)的主要防御手段之一,有重要的實(shí)用價(jià)值。例如,一些先進(jìn)的自動(dòng)化攻擊經(jīng)常針對(duì)如控制流混淆和代碼虛擬化等代碼混淆防御手段實(shí)現(xiàn)對(duì)抗措施,這些自動(dòng)化攻擊依賴于以程序有效輸入為先決條件的動(dòng)態(tài)分析,因此符號(hào)執(zhí)行通過生成測(cè)試集遍歷完整代碼路徑的能力是這些分析技術(shù)的前提,其執(zhí)行程序并生成完整測(cè)試集的難度可以作為混淆彈性指標(biāo)。
符號(hào)執(zhí)行技術(shù)的目的在于完整的測(cè)試集生成,而路徑爆炸是其面臨的主要限制之一。具體來說,由于現(xiàn)實(shí)場(chǎng)景中軟件路徑數(shù)量龐大,執(zhí)行單個(gè)路徑的開銷,導(dǎo)致有限時(shí)間內(nèi)符號(hào)執(zhí)行引擎僅能執(zhí)行有限的路徑,從而降低符號(hào)執(zhí)行引擎的測(cè)試集生成效率;另外,研究人員為對(duì)抗符號(hào)執(zhí)行面向路徑爆炸特點(diǎn)的混淆算法,如Wang等[28]基于數(shù)學(xué)難題提出一種將符號(hào)值與循環(huán)邊界關(guān)聯(lián)的程序混淆方法,致使分析程序時(shí)符號(hào)執(zhí)行引擎路徑爆炸,Banescu等[25]提出基于軟件多樣化方法的輸入相關(guān)等價(jià)分支構(gòu)建混淆技術(shù),有效降低符號(hào)執(zhí)行效率?;谝陨涎芯?,對(duì)抗符號(hào)執(zhí)行的混淆技術(shù)與程序中的循環(huán)結(jié)構(gòu)存在較強(qiáng)的依賴或相關(guān)性,混淆技術(shù)研究者常借助該結(jié)構(gòu)增加符號(hào)執(zhí)行預(yù)測(cè)分支的數(shù)量和執(zhí)行次數(shù)而達(dá)到降低符號(hào)執(zhí)行效率的目的。
-scope最早由Harrison和Megal[29]提出以程序的嵌套程度來計(jì)算連續(xù)程序的控制流圖復(fù)雜度,而嵌套程度與控制流圖的大小可以較恰當(dāng)描述程序控制流混淆方法造成的控制流圖變化。具體來說,嵌套復(fù)雜度可以計(jì)算程序的不同層次中的循環(huán)數(shù)量和大小,在實(shí)際應(yīng)用中研究人員給出了不同的定義方式[30]:采用以循環(huán)層數(shù)加權(quán)的循環(huán)計(jì)算方法作為嵌套值,將程序混淆前后嵌套差值與原程序嵌套值的比例作為嵌套復(fù)雜度的得分。
這種計(jì)算方式未考慮控制流平坦化等方法降低程序嵌套度的控制流混淆方法,在得分為負(fù)值時(shí)以零計(jì)算;文獻(xiàn)[18]將一個(gè)基本塊的scope復(fù)雜度則定義為:
本文提出基于兩種關(guān)聯(lián)性指標(biāo)的代碼混淆度量方法,在綜合符號(hào)執(zhí)行混淆彈性度量和控制復(fù)雜度度量?jī)?yōu)勢(shì)的基礎(chǔ)上,針對(duì)性地提出改進(jìn)的基于程序多層嵌套結(jié)構(gòu)的-scope復(fù)雜度,完善了現(xiàn)有符號(hào)執(zhí)行分析在代碼混淆彈性度量上的不足,同時(shí)給出符號(hào)執(zhí)行作為彈性度量指標(biāo)基于相對(duì)執(zhí)行時(shí)間的規(guī)范性定義。
通過對(duì)兩種指標(biāo)的關(guān)聯(lián)性分析,不僅能夠清晰刻畫程序混淆前后的混淆彈性變化與控制流復(fù)雜度變化趨勢(shì),還可以解決單獨(dú)使用符號(hào)執(zhí)行彈性度量對(duì)多層嵌套程序的度量限制問題,提高了對(duì)此類程序的度量準(zhǔn)確性與度量效率。諸如-scope復(fù)雜度的程序控制流復(fù)雜度度量方法僅能對(duì)程序的靜態(tài)控制流進(jìn)行評(píng)價(jià)分析,而符號(hào)執(zhí)行作為動(dòng)態(tài)程序分析技術(shù)可以為整體混淆度量提供更全面的關(guān)聯(lián)性分析參考,平衡此類靜態(tài)分析指標(biāo)對(duì)控制流混淆技術(shù)的高敏感特征。
相對(duì)現(xiàn)有的單一代碼混淆度量方法存在的缺點(diǎn)和限制,組合具有關(guān)聯(lián)性指標(biāo)的度量方法的評(píng)估更全面,如文獻(xiàn)[18]將-scope與混淆程序距離相結(jié)合,混淆距離計(jì)算提高了度量方法對(duì)程序執(zhí)行路徑的變化敏感度,改善了-scope復(fù)雜度對(duì)某些混淆方法不敏感的特點(diǎn)。需要說明的是,研究人員多遵循Collberg等[12]定義代碼混淆的指標(biāo)方法,即從混淆強(qiáng)度、混淆彈性、混淆開銷3個(gè)方面進(jìn)行混淆效果度量框架設(shè)計(jì),然而在實(shí)際場(chǎng)景中,攻擊者常將自動(dòng)化代碼分析工具和人工逆向分析結(jié)合,現(xiàn)有的代碼混淆度量方法研究則缺少對(duì)此場(chǎng)景的適配度量方法,從實(shí)用的角度出發(fā),混淆度量方法應(yīng)對(duì)特定混淆有較好的適配性和敏感性,同時(shí)將度量開銷限制在合理范圍內(nèi)。
復(fù)雜混淆程序在符號(hào)執(zhí)行過程可能出現(xiàn)路徑爆炸等問題,導(dǎo)致符號(hào)執(zhí)行時(shí)間過長(zhǎng)或超時(shí),使得到的程序混淆彈性失去參考意義,因而設(shè)置最大符號(hào)執(zhí)行時(shí)間t為時(shí)間約束,得到約束的程序混淆彈性為
本文考慮符號(hào)執(zhí)行在執(zhí)行程序嵌套邏輯的路徑與循環(huán)體的多層嵌套結(jié)構(gòu),首先定義式(1)中基于控制流圖的程序嵌套值中嵌套層數(shù)為
算法1 DFS
輸入 控制流圖,當(dāng)前節(jié)點(diǎn)v,初始節(jié)點(diǎn)0,當(dāng)前循環(huán)path,所有循環(huán)路徑looplist
算法C_Nesting()計(jì)算了程序控制流圖中以基本塊為節(jié)點(diǎn)的程序嵌套值Cnesting,該問題可抽象為求解有向圖中所有環(huán)和計(jì)算環(huán)的嵌套度兩個(gè)子問題。本文首先對(duì)程序節(jié)點(diǎn)按照名稱排序并設(shè)置所有節(jié)點(diǎn)為未訪問狀態(tài)(算法2第3~5行),按此排序遍歷圖中節(jié)點(diǎn),將自環(huán)加入循環(huán)路徑后(算法2第8~9行),以當(dāng)前節(jié)點(diǎn)為根節(jié)點(diǎn)對(duì)圖進(jìn)行深度優(yōu)先搜索,在遍歷時(shí)只將排序大于根節(jié)點(diǎn)的鄰接點(diǎn)加入path中(算法1第1行),保證了DFS主循環(huán)只搜索最小節(jié)點(diǎn)為根節(jié)點(diǎn)的環(huán),同時(shí)訪問狀態(tài)的約束與設(shè)置,保證了環(huán)內(nèi)部不相交(算法1第2、7、11行),在求解得到所有環(huán)后對(duì)環(huán)列表遍歷計(jì)算每個(gè)環(huán)的被嵌套數(shù),按此嵌套數(shù)對(duì)環(huán)長(zhǎng)度加權(quán)求和得到程序的嵌套度。
算法2 C_Nesting
輸入 控制流圖
輸出 嵌套值Cnesting
本文提出的度量方法從混淆彈性和混淆強(qiáng)度兩個(gè)方面出發(fā),結(jié)合動(dòng)態(tài)分析與靜態(tài)分析對(duì)代碼混淆效果綜合度量,一方面結(jié)合符號(hào)執(zhí)行在真實(shí)逆向等攻擊場(chǎng)景的常用性與代碼混淆中程序控制流的關(guān)鍵性,使本度量方法具有真實(shí)場(chǎng)景下的應(yīng)用價(jià)值,另一方面針對(duì)單一度量方法的局限性,本度量方法使用符號(hào)執(zhí)行技術(shù)反映程序路徑執(zhí)行難度,提出適配符號(hào)執(zhí)行的-scope復(fù)雜度算法,在準(zhǔn)確表達(dá)程序嵌套度的同時(shí),針對(duì)符號(hào)執(zhí)行對(duì)抗技術(shù)依賴程序循環(huán)結(jié)構(gòu)的特點(diǎn),提高符號(hào)執(zhí)行度量的魯棒性。
本文使用程序混淆工具Tigress學(xué)術(shù)版本對(duì)實(shí)驗(yàn)程序進(jìn)行混淆,采用LLVM9版本的KLEE符號(hào)執(zhí)行引擎及與其適配的SMT約束求解器、klee-uclibc等作為本文實(shí)驗(yàn)的符號(hào)執(zhí)行環(huán)境,使用Jakstab開源二進(jìn)制反編譯工具與python庫(kù)pydot作為混淆文件的-Scope計(jì)算接口,度量方法實(shí)現(xiàn)流程如圖1所示。本文使用的實(shí)驗(yàn)環(huán)境為64位Ubuntu18.04操作系統(tǒng),4核頻率為3.20 GHz的Intel Core i7-8700 CPU及4 GB物理內(nèi)存,Window7操作系統(tǒng),12核頻率為3.20 GHz的Intel Core i7-8700 CPU及16.0 GB物理內(nèi)存。
Tigress為C語(yǔ)言的源碼混淆工具,具備防御靜態(tài)與動(dòng)態(tài)逆向、反虛擬化攻擊等混淆功能,本文實(shí)驗(yàn)主要使用程序控制流混淆相關(guān)功能,使在混淆后的靜態(tài)控制流或動(dòng)態(tài)執(zhí)行路徑產(chǎn)生變化,增加分析程序真實(shí)控制流的難度;KLEE是基于LLVM編譯框架開發(fā)的動(dòng)態(tài)符號(hào)執(zhí)行引擎,對(duì)LLVMbitcode進(jìn)行操作,使用uclibc庫(kù)支持對(duì)常規(guī)C文件的符號(hào)執(zhí)行,本實(shí)驗(yàn)的符號(hào)執(zhí)行時(shí)間通過其內(nèi)置工具klee-stats獲得,實(shí)驗(yàn)中KLEE的-sym-arg參數(shù)統(tǒng)一設(shè)置為3;Jaskstab是一個(gè)基于抽象解釋的反匯編和靜態(tài)分析集成框架,采用自定義指令譯碼,可應(yīng)用于多種操作系統(tǒng),基于x86處理器處理32位的WindowsPE或linuxELF可執(zhí)行文件,基于此特性,本文使用Windows系統(tǒng)下MingW64支持的GCC將C語(yǔ)言源文件編譯為32位PE文件并交由Linux下Jakstab處理(如圖1所示)。Jakstab動(dòng)態(tài)地將機(jī)器碼轉(zhuǎn)換為低級(jí)中間語(yǔ)言,同時(shí)對(duì)增加的控制流進(jìn)行數(shù)據(jù)分析得到數(shù)據(jù)流信息,進(jìn)而定位預(yù)測(cè)分支目標(biāo)與代碼位置,本文實(shí)驗(yàn)使用該工具分析32位可執(zhí)行文件得到其.dot格式的控制流圖文件,進(jìn)而使用python的pydot模塊對(duì)其進(jìn)一步處理。
圖1 度量方法實(shí)現(xiàn)流程
Figure 1 Flow chart of measurement method implementation
本文使用該度量方法對(duì)兩個(gè)公開程序集及其對(duì)應(yīng)的混淆程序集共約4 000個(gè)程序進(jìn)行了度量,程序集1中程序?yàn)楦鞣Nif分支和循環(huán)結(jié)構(gòu)的簡(jiǎn)單組合,程序集2為常見的基本算法,程序集3為使用Tigress混淆工具自動(dòng)生成的程序集。由于混淆程序代碼量可能為原程序的幾倍至幾十倍,受限于實(shí)驗(yàn)環(huán)境,程序集1、程序集2的原程序在100行以內(nèi),程序集3的原程序介于100行與200行之間,在防止程序集混淆版本程序過大導(dǎo)致本文實(shí)驗(yàn)環(huán)境中符號(hào)執(zhí)行引擎運(yùn)行超時(shí)的前提下,保證了程序樣本的多樣性。
實(shí)驗(yàn)1 不同結(jié)構(gòu)原程序符號(hào)執(zhí)行
使用程序集1具有不同結(jié)構(gòu)的未混淆程序進(jìn)行符號(hào)執(zhí)行,實(shí)驗(yàn)樣本結(jié)構(gòu)主要由if和loop兩種結(jié)構(gòu)進(jìn)行疊加或嵌套組成(不同結(jié)構(gòu)的程序樣本如圖2所示),同時(shí)為了保證符號(hào)執(zhí)行的時(shí)間差異性,約30%的程序樣本與輸入無(wú)關(guān),而按比例將約70%程序輸入與循環(huán)判斷條件及if分支判斷條件結(jié)合,增加符號(hào)執(zhí)行時(shí)間。
圖2 不同結(jié)構(gòu)的程序樣本
Figure 2 Program samples with different structures
如表1所示,不同結(jié)構(gòu)程序符號(hào)執(zhí)行時(shí)間展現(xiàn)出明顯差異,在無(wú)嵌套狀態(tài)下loop結(jié)構(gòu)程序的平均符號(hào)執(zhí)行時(shí)間約為if結(jié)構(gòu)程序的2~5倍,而在有嵌套的狀態(tài)下if嵌套,loop中嵌套if與loop嵌套loop展現(xiàn)出數(shù)量級(jí)的遞增差異,表明loop結(jié)構(gòu)及l(fā)oop嵌套結(jié)構(gòu)具有增加符號(hào)執(zhí)行時(shí)間的顯著優(yōu)勢(shì)。
當(dāng)兩種結(jié)構(gòu)的分支判斷語(yǔ)句與程序輸入相關(guān)聯(lián)時(shí),if結(jié)構(gòu)程序的符號(hào)執(zhí)行時(shí)間變化可忽略,而執(zhí)行l(wèi)oop結(jié)構(gòu)程序的時(shí)間則有較大增加,表明與輸入相關(guān)聯(lián)的loop結(jié)構(gòu)相比單一loop結(jié)構(gòu)具有更強(qiáng)的抗符號(hào)執(zhí)行能力。需要注意的是,在loop嵌套層數(shù)增加時(shí),不同的loop結(jié)構(gòu)執(zhí)行時(shí)間將展現(xiàn)出更強(qiáng)的差異性,使標(biāo)準(zhǔn)差顯著增大。
表1 不同結(jié)構(gòu)程序符號(hào)執(zhí)行時(shí)間
實(shí)驗(yàn)2 程序集1混淆與效果度量
為驗(yàn)證本文混淆效果度量方法并探究不同混淆技術(shù)在本度量方法下的表現(xiàn),本文使用tigress混淆工具對(duì)程序集1進(jìn)行混淆,由于本文度量算法側(cè)重于對(duì)程序的符號(hào)執(zhí)行難度與控制流進(jìn)行評(píng)估,同時(shí)為了保證混淆程序與klee引擎的兼容性,選取5種Tigress混淆技術(shù)(如表2所示)并對(duì)其進(jìn)行排列組合共24種混淆方案,由于tigress混淆需指定函數(shù)名的特點(diǎn),函數(shù)拆分僅單獨(dú)使用或作為后置技術(shù)與其他技術(shù)組合使用。
表2 Tigress混淆技術(shù)介紹
實(shí)驗(yàn)中對(duì)程序集1進(jìn)行混淆得到約1 000個(gè)混淆程序,將這些程序按照使用的混淆方法分類,ubuntu實(shí)驗(yàn)環(huán)境下使用klee進(jìn)行符號(hào)執(zhí)行,執(zhí)行共計(jì)約30 h,設(shè)置最大執(zhí)行時(shí)間為10 min,使用klee內(nèi)置工具klee-stats統(tǒng)計(jì)符號(hào)執(zhí)行時(shí)間并根據(jù)原程序執(zhí)行時(shí)間對(duì)每種混淆方法下混淆程序集進(jìn)行混淆彈性統(tǒng)計(jì),程序集1各混淆彈性統(tǒng)計(jì)如圖3所示;將混淆程序置于Windows環(huán)境下編譯為32位PE可執(zhí)行文件,在ubuntu下使用Jakstab得到控制流(.dot)文件,計(jì)算其-scope復(fù)雜度,各混淆方法程序集1-scope復(fù)雜度如圖4所示。為進(jìn)一步分析不同混淆方法對(duì)混淆彈性與混淆強(qiáng)度關(guān)聯(lián)性的影響,按序?qū)⑼N混淆方法的彈性與-scope復(fù)雜度進(jìn)行逐一對(duì)比,如圖5所示。
圖3 程序集1混淆彈性統(tǒng)計(jì)
Figure 3 Obfuscation resilience statistics of assembly 1
圖4 程序集1 N-scope復(fù)雜度統(tǒng)計(jì)
Figure 4-scope complexity statistics of assembly 1
由于程序集與混淆技術(shù)使程序樣本中嵌套結(jié)構(gòu)較多,為得到更清晰的-scope復(fù)雜度分布,調(diào)整參數(shù)將其設(shè)置為0.2,避免嵌套結(jié)構(gòu)過多造成-scope復(fù)雜度差異性過小。由于使用的混淆技術(shù)特性,原程序的-scope復(fù)雜度與混淆程序最小-scope復(fù)雜度可視作相同。
圖5 程序集1混淆彈性與混淆強(qiáng)度關(guān)聯(lián)性
Figure 5 Assembly 1 obfuscation resilience and potency correlation
分析實(shí)驗(yàn)結(jié)果如下。
1) 兩次代碼虛擬化的混淆彈性最高且遠(yuǎn)高于其他混淆組合,其-scope得分亦最高,代碼虛擬化后函數(shù)內(nèi)代碼以字節(jié)碼的形式由函數(shù)中解釋器執(zhí)行,相當(dāng)于程序內(nèi)部代碼與解釋器構(gòu)成了多層嵌套循環(huán)結(jié)構(gòu),而兩次虛擬化則使得循環(huán)執(zhí)行路徑指數(shù)化增加,導(dǎo)致符號(hào)執(zhí)行引擎時(shí)間的爆炸式增加。值得注意的是,雖然代碼虛擬化相關(guān)混淆-scope復(fù)雜度明顯高于其他混淆,然而其對(duì)混淆彈性的增益可能低于其他混淆(如AddO16-EncA),表明增加符號(hào)執(zhí)行的路徑求解難度與增加程序嵌套度都可能對(duì)混淆彈性產(chǎn)生較大增益。
2) 應(yīng)用單次混淆時(shí),數(shù)學(xué)運(yùn)算加密對(duì)混淆彈性的增益較為明顯,然而其對(duì)程序控制流影響較小,因而對(duì)-scope復(fù)雜度增益可忽略,而模糊謂詞技術(shù)雖然絕對(duì)意義上增加了程序分支數(shù)量,相比于其他控制流混淆技術(shù)對(duì)-scope的增益卻較為有限。
3) 應(yīng)用混淆組合時(shí),混淆組合的不同順序可能對(duì)混淆彈性和混淆強(qiáng)度產(chǎn)生不同影響。如Flat-AddO16與AddO16-Flat相比混淆彈性與-Scope復(fù)雜度均較低,而Virt-AddO16和AddO16- Virt則與單混淆技術(shù)具有相似的混淆效果。造成上述差異的原因可能是本程序集在程序分支數(shù)量提升時(shí)控制流平坦化,使增加代碼嵌套的能力更強(qiáng),而代碼虛擬化解釋執(zhí)行則對(duì)該變化不敏感。
4) 使用函數(shù)拆分作為后置混淆技術(shù)時(shí),程序-Scope復(fù)雜度增加明顯,而程序混淆彈性則變化不一致。如與代碼虛擬化組合的混淆程序彈性有所提升,而控制流平坦化的混淆彈性則下降,說明函數(shù)拆分可能降低了控制流平坦混淆程序的路徑求解難度。
5) 隨著程序混淆彈性增加,混淆彈性的標(biāo)準(zhǔn)差呈現(xiàn)上升趨勢(shì),表明具有多樣性結(jié)構(gòu)的程序樣本在混淆彈性增加時(shí)其彈性差異隨之變大,即混淆方法提升的彈性在一定程度上依賴程序樣本的原有結(jié)構(gòu)。
6)按序?qū)⑼N混淆方法的混淆彈性與混淆強(qiáng)度進(jìn)行關(guān)聯(lián)性分析可知,混淆強(qiáng)度與混淆彈性的相對(duì)變化存在多種情形,這些變化與混淆程序的符號(hào)執(zhí)行求解路徑數(shù)量、路徑求解難度強(qiáng)相關(guān),通過將符號(hào)執(zhí)行時(shí)間與-scope復(fù)雜度進(jìn)行關(guān)聯(lián)性分析歸納如下:①應(yīng)用代碼虛擬化與控制流平坦的混淆程序中,混淆彈性與混淆強(qiáng)度都有明顯提升;②應(yīng)用數(shù)學(xué)加密的混淆程序中,混淆彈性增加而混淆強(qiáng)度未見明顯變化;③應(yīng)用模糊謂詞為后置混淆技術(shù),混淆彈性無(wú)明顯增加而混淆強(qiáng)度增加明顯;④應(yīng)用函數(shù)拆分為后置混淆技術(shù)時(shí),混淆彈性表現(xiàn)與前置技術(shù)相關(guān),而混淆強(qiáng)度有所提升;⑤應(yīng)用數(shù)學(xué)加密為后置混淆技術(shù)時(shí)混淆強(qiáng)度普遍變化較小,而部分混淆程序彈性增加明顯。
實(shí)驗(yàn)3 程序集2混淆與效果度量
為檢驗(yàn)本文混淆度量方法的泛化能力,實(shí)驗(yàn)3中使用經(jīng)典算法程序集對(duì)其進(jìn)行混淆與泛化度量,該數(shù)據(jù)集包含排序、字符串比較、計(jì)算公因數(shù)等40個(gè)經(jīng)典算法,相比程序集1程序結(jié)構(gòu)更加多樣化并有更高的實(shí)用價(jià)值。本實(shí)驗(yàn)其余實(shí)驗(yàn)配置與實(shí)驗(yàn)2相同,經(jīng)過混淆后得到其混淆彈性統(tǒng)計(jì)如圖6所示。-scope復(fù)雜度統(tǒng)計(jì)如圖7所示。從實(shí)驗(yàn)結(jié)果看,對(duì)兩個(gè)程序集的混淆效果整體上差異較小,而程序集2的混淆彈性總體低于程序集1,其中幾種混淆技術(shù)的混淆效果有所不同。
1) 與程序集1相比,單次使用數(shù)學(xué)運(yùn)算加密的混淆彈性較低,而單次使用控制流平坦、代碼虛擬化等提升-Scope復(fù)雜度較高的混淆時(shí)彈性提升較大,造成該現(xiàn)象的原因可能是本程序集中原有數(shù)學(xué)運(yùn)算復(fù)雜性較強(qiáng)而程序嵌套度較低,使與后者相關(guān)的混淆技術(shù)在混淆彈性上表現(xiàn)較好。
2) 與程序集1相比,模糊謂詞對(duì)程序的混淆彈性提升更明顯,可能程序集2程序結(jié)構(gòu)較復(fù)雜,導(dǎo)致符號(hào)執(zhí)行路徑求解難度較大,因而在增加絕對(duì)分支數(shù)量時(shí)提升更高的混淆強(qiáng)度;然而由于程序本身嵌套結(jié)構(gòu)較少及-Scope參數(shù)限制,模糊謂詞對(duì)-scope的增益不明顯。
3) 與程序集1中Flat與AddO16不同順序的技術(shù)組合產(chǎn)生顯著安全增益差異不同,程序集2中兩種組合的混淆彈性差異不十分明顯,前者-Scope甚至略高于后者,一方面是程序集差異導(dǎo)致的混淆技術(shù)使用效果差異,另一方面是在符號(hào)執(zhí)行與控制流解析過程中可能存在一定誤差,導(dǎo)致混淆效果的度量偏差。
4) 按序?qū)⒊绦蚣?程序使用同種混淆方法的混淆彈性與混淆強(qiáng)度進(jìn)行關(guān)聯(lián)性分析可知(如圖8所示),相同混淆技術(shù)對(duì)混淆程序的彈性與強(qiáng)度增益與程序集1的混淆增益方向基本一致,而在增益程度上表現(xiàn)出一定差異。
圖6 程序集2混淆彈性統(tǒng)計(jì)
Figure 6 Obfuscation resilience statistics of assembly 2
圖7 程序集2 N-scope復(fù)雜度統(tǒng)計(jì)
Figure 7-scope complexity statistics of assembly 2
圖8 程序集2混淆彈性與混淆強(qiáng)度關(guān)聯(lián)性
Figure 8 Assembly 2 obfuscation resilience and potency correlation
實(shí)驗(yàn)4 程序集3混淆與效果度量
為模擬本文代碼混淆方法在實(shí)際場(chǎng)景中的應(yīng)用,實(shí)驗(yàn)4中使用Tigress混淆工具Random Function模塊隨機(jī)生成的100個(gè)具有不同結(jié)構(gòu)的差異化程序集。這些差異化包括但不限于:控制流嵌套度、控制流語(yǔ)法樹節(jié)點(diǎn)數(shù)、基本塊數(shù)量、程序、函數(shù)、基本塊大小、程序輸入輸出類型、全局變量、局部變量、動(dòng)態(tài)變量等各類型變量,分支條件與程序輸出是否依賴等。本實(shí)驗(yàn)從Tigress超過40種混淆技術(shù)中隨機(jī)選取19組混淆組合對(duì)程序進(jìn)行混淆,每組5種基礎(chǔ)混淆技術(shù),Tigress混淆技術(shù)補(bǔ)充介紹如表3所示。
表3 Tigress混淆技術(shù)補(bǔ)充介紹
使用本文代碼混淆效果度量方法對(duì)混淆程序進(jìn)行混淆,由于本實(shí)驗(yàn)中使用混淆技術(shù)數(shù)量增加,故將-scope復(fù)雜度參數(shù)設(shè)置為0.01,設(shè)置最大符號(hào)執(zhí)行時(shí)間t為4 min,其余設(shè)置與實(shí)驗(yàn)2相同。程序集3混淆效果分析如表4所示。不同結(jié)構(gòu)、使用不同混淆組合的混淆程序在本文度量方法上表現(xiàn)出較大差異,表明本文度量方法的良好泛化能力;符號(hào)執(zhí)行時(shí)間標(biāo)準(zhǔn)差顯示程序集在同一混淆技術(shù)組合后的程序彈性增益較小,出現(xiàn)此現(xiàn)象一方面是多種混淆技術(shù)的使用使各程序的混淆彈性普遍較高,另一方面是程序集的實(shí)際代碼量差異不大,結(jié)構(gòu)差異性在多次混淆后的彈性對(duì)比不明顯。
在實(shí)際應(yīng)用場(chǎng)景中,通過分析不同混淆組合的混淆彈性與混淆強(qiáng)度指標(biāo),可以幫助混淆使用者更有效地對(duì)程序進(jìn)行混淆。本實(shí)驗(yàn)中推薦混淆強(qiáng)度與混淆彈性都較強(qiáng)的混淆技術(shù)組合,通常選擇較高的-scope復(fù)雜度與較長(zhǎng)符號(hào)執(zhí)行時(shí)間中位數(shù),推薦混淆技術(shù)組合為序號(hào)1,3,6,7,8的混淆組合。專業(yè)安全人員根據(jù)各基礎(chǔ)混淆技術(shù)特性與安全需求可進(jìn)一步進(jìn)行選擇。
現(xiàn)有混淆度量方法缺少對(duì)混淆彈性度量,復(fù)雜控制流圖度量算法實(shí)現(xiàn)困難,抽象語(yǔ)義度量實(shí)用性不高,使得混淆技術(shù)使用者難以對(duì)混淆效果進(jìn)行客觀評(píng)價(jià)并及時(shí)調(diào)整混淆策略,造成混淆技術(shù)過度累加導(dǎo)致的資源浪費(fèi)。為解決上述問題,本文利用符號(hào)執(zhí)行技術(shù)在真實(shí)代碼逆向、漏洞挖掘等攻擊場(chǎng)景中的常用性,結(jié)合-scope復(fù)雜度度量方法,對(duì)混淆程序進(jìn)行動(dòng)態(tài)的符號(hào)執(zhí)行路徑遍歷與靜態(tài)的程序基本塊拓?fù)淝短锥确治?,從混淆彈性和混淆?qiáng)度兩個(gè)方向進(jìn)行綜合度量,對(duì)超過4 000個(gè)混淆程序進(jìn)行混淆度量的實(shí)驗(yàn)結(jié)果表明,使用不同混淆方法的混淆程序在本代碼混淆度量方法中展現(xiàn)出差異化的混淆彈性與強(qiáng)度,同時(shí)在不同程序集上本方法表現(xiàn)出良好的泛化能力,可以為安全人員對(duì)混淆技術(shù)的評(píng)價(jià)以及混淆技術(shù)的組合提供合理參考。
本文設(shè)計(jì)的基于符號(hào)執(zhí)行和-scope復(fù)雜度的混淆度量方法目前僅在有限的程序集與特定混淆技術(shù)上展開驗(yàn)證,且本度量方法在使用上要求使用者具備一定程度的相關(guān)知識(shí),如設(shè)置參數(shù)并分析混淆彈性和-scope復(fù)雜度,未來希望在更多樣化的程序集中和混淆技術(shù)上探究本度量方法的普適性與準(zhǔn)確性并加以改進(jìn),同時(shí)基于機(jī)器學(xué)習(xí)等方法對(duì)程序集的混淆度量結(jié)果進(jìn)行更全面的分析并制定推薦混淆策略。
表4 程序集3混淆效果分析
[1] AKHUNZADA A, SOOKHAK M, ANUAR N, et al. Man-at-the-end attacks: analysis, taxonomy, human aspects, motivation and future directions[J]. Journal of Network and Computer Applications, 2015, 48(6):44-57.
[2] VAN DEN BROECK J, COPPENS B, DE SUTTER B. Flexible software protection[J]. Computers & Security, 2022, 10(2): 6-36.
[3] 耿普, 祝躍飛. 一種基于分支條件混淆的代碼加密技術(shù)[J]. 計(jì)算機(jī)研究與發(fā)展, 2019, 56(10): 2183-2192.
GENG P, ZHU Y F. A code encrypt technique based on branch condition obfuscation[J]. Journal of Computer Research and Development, 2019, 56(10): 2183-2192.
[4] 陳喆, 王志, 王曉初, 等. 基于代碼移動(dòng)的二進(jìn)制程序控制流混淆方法[J]. 計(jì)算機(jī)研究與發(fā)展, 2015, 52(8): 1902-1909.
CHEN Z,WANG Z, WANG XC, et al. Using code mobility to obfuscate control flow in binary codes[J]. Journal of Computer Research and Development, 2015, 52(8): 1902-1909.
[5] AHIRE P, ABRAHAM J. Mechanisms for source code obfuscation in C: novel techniques and implementation[C]//2020 International Conference on Emerging Smart Computing and Informatics. 2020.
[6] PIZZOLOTTO D, FELLIN R, CECCATO M. OBLIVE: seamless code obfuscation for Java programs and Android Apps[C]//2019 IEEE 26th International Conference on Software Analysis, Evolution and Reengineering. 2019.
[7] VAN DEN BROECK J, COPPENS B, DE SUTTER B. Obfuscated integration of software protections[J]. International Journal of Information Security, 2021, 20(1): 73-101.
[8] CECCATO M, ANDREA C, PAOLO F, et al. A large study on the effect of code obfuscation on the quality of Java code[J]. Empirical Software Engineering, 2015, 20(6): 1486–1524.
[9] LARSEN P, HOMESCU A, BRUNTHALER S,et al. SoK: automated software diversity[C]//Symposium on Security and Privacy. 2014.
[10] XU H, ZHOU Y, MING J, et al. Layered obfuscation: a taxonomy of software obfuscation techniques for layered security[J]. Cybersecurity, 2020, 3(1): 1-18.
[11] PENG Y, CHEN Y, SHEN B. An adaptive approach to recommending obfuscation rules for java bytecode obfuscators[C]//2019 IEEE 43rd Annual Computer Software and Applications Conference. 2019.
[12] COLLBERG C, THOMBORSON C, LOW D. A taxonomy of obfuscating transformations[R]. 1997.
[13] ANCKAERT B, MADOU M, DE SUTTER B, et al. Program obfuscation: quantitative approach[C]//ACM Workshop on Quality of Protection, 2007.
[14] KIRK SR, JENKINS S. Information theory-based software metrics and obfuscation[J]. Journal of Systems and Software, 2004, 72(2):179-186.
[15] MOHSEN R, PINTO AM. Evaluating obfuscation security: A quantitative approach[C]//International Symposium on Foundations and Practice of Security. 2016.
[16] MOHSEN R. Quantitative measures for code obfuscation security[D]. London: Imperial College London, 2016.
[17] RODRíGUEZ-VELIZ M, NU?EZ-MUSA Y, LIMA R S. Call graph obfuscation and diversification: an approach[J]. IET Inf Secur, 2020, 14(2): 241-252.
[18] TSAI HY, HUANG YL, WAGNER D. A graph approach to quantitative analysis of control-flow obfuscating transformations[J]. IEEE Transactions on Information Forensics and Security, 2009, 4(2): 257-267.
[19] GAO D, REITER MK, SONG D. BinHunt: automatically finding semantic differences in binary programs[C]//International Conference on Information and Communications Security. 2008.
[20] LUO L, MING J, WU D, et al. Semantics-based obfuscation-resilient binary code similarity comparison with applications to software plagiarism detection[C]//ACM Sigsoft International Symposium on Foundations of Software Engineering. 2014.
[21] PUCELLA R, SCHNEIDER FB. Independence from obfuscation: a semantic framework for diversity[J]. Computers & Security, 2010, 18(5):701-749.
[22] DALLA M, GIACOBAZZI R. Semantic-based code obfuscation by abstract interpretation[C]//International Colloquium on Automata, Languages, and Programming. 2005.
[23] VITICCHIE A, REGANO L, TORCHIANO M, et al. Assessment of source code obfuscation techniques[C]//International Working Conference on Source Code Analysis and Manipulation. 2016.
[24] CECCATO M, DI PENTA M, NAGRA J, et al. The effectiveness of source code obfuscation: an experimental assessment[C]//International Conference on Program Comprehension. 2009.
[25] BANESCU S, COLLBERG C, GANESH V, et al. Code obfuscation against symbolic execution attacks[C]//Annual Conference on Computer Security Applications. 2016.
[26] MAJUMDAR A, DRAPE S, THOMBORSON C. Metrics-based evaluation of slicing obfuscations[C]// International Symposium on Information Assurance and Security. 2007.
[27] MOLNAR D, LI XC, WAGNER DA. Dynamic test generation to find integer bugs in x86 binary linux programs[C]//USENIX Security Symposium. 2009.
[28] WANG Z, MING J, JIA C, GAO D. Linear obfuscation to combat symbolic execution[C]//European Symposium on Research in Computer Security. 2011.
[29] ZUSE H. Software complexity: measures and methods[R]. Berlin, Walter de Gruyter GmbH & Co KG, 1991.
[30] KARNICK M, MACBRIDE J, MCGINNIS S, et al. A qualitative analysis of Java obfuscation[C]//IASTED International Conference on Software Engineering and Applications. 2006.
Metrics for code obfuscation based on symbolic execution and-scope complexity
XIAO Yuqiang, GUO Yunfei, WANG Yawen
Information Engineering University, Zhengzhou 450001, China
Code obfuscation has been well developed as mitigated endogenous security technology, to effectively resist MATE attacks (e.g. reverse engineering). And it also has important value for the reasonable metrics of code obfuscation effect. Since symbolic execution is widely used in anti-obfuscation attacks, metrics for code obfuscation resilience can refer to the efforts of generating input test set for executing all program paths. However, some adversarial techniques could reduce the symbol execution efficiency significantly based on the nested structure of the program and increase the error of the resilience reference. To solve the above problems, a metrics for code obfuscation was proposed based on symbolic execution and N-scope complexity. The obfuscation resilience was defined with symbolic execution time and obfuscation potency was defined based on the proposed N-scope complexity for better robustness in measuring the resilience of multi-nested structure programs. Furthermore, the correlation analysis of obfuscation effect was proposed and the effect was quantified by symbolic execution and control flow diagram extraction of programs. Over 4000 obfuscated programs from 3 open-sourced assemblies were evaluated with proposed metrics in the experiment, which indicated the generalization performance and practicality of the metrics. And an example of this metrics application was presented in a simulated obfuscation scenario which provided references of obfuscation technology metrics and obfuscation configuration for obfuscation users.
code obfuscation, obfuscation metrics, symbolic execution,-scope
TP393
A
10.11959/j.issn.2096?109x.2022085
2021?07?07;
2022?05?11
肖玉強(qiáng),516162560@sjtu.edu.cn
國(guó)家重點(diǎn)研發(fā)計(jì)劃(2021YFB1006200,2021YFB1006201),國(guó)家自然科學(xué)基金(62072467)
The National Key R&D Program of China (2021YFB1006200, 2021YFB1006201), The National Natural Science Foundation of China(62072467)
肖玉強(qiáng), 郭云飛, 王亞文. 基于符號(hào)執(zhí)行和-scope復(fù)雜度的代碼混淆度量方法[J]. 網(wǎng)絡(luò)與信息安全學(xué)報(bào), 2022, 8(6): 123-134.
XIAO Y Q, GUO Y F, WANG Y W. Metrics for code obfuscation based on symbolic execution and-scope complexity[J]. Chinese Journal of Network and Information Security, 2022, 8(6): 123-134.
肖玉強(qiáng)(1997?),男,吉林遼源人,信息工程大學(xué)碩士生,主要研究方向?yàn)榫W(wǎng)絡(luò)空間安全、代碼混淆、機(jī)器學(xué)習(xí)。
郭云飛(1963?),男,河南鄭州人,信息工程大學(xué)教授、博士生導(dǎo)師,主要研究方向?yàn)樵瓢踩?、電信網(wǎng)絡(luò)安全、網(wǎng)絡(luò)安全。
王亞文(1990?),男,河南鄭州人,信息工程大學(xué)講師,主要研究方向?yàn)樵朴?jì)算、入侵容忍、網(wǎng)絡(luò)安全。