1. 程式人生 > >Boosting Static Representation Robustness for Binary Clone Search against Code Obfuscation and Compiler Optimization

Boosting Static Representation Robustness for Binary Clone Search against Code Obfuscation and Compiler Optimization

  用於理解惡意軟體的內部工作原理,並發現系統中的漏洞,逆向工程是一種耗費人工的卻很重要的技術。彙編克隆搜尋引擎是通過識別那些重複的或者已知的部件來幫助逆向工程師的工作,要想設計健壯的克隆搜尋引擎是一項挑戰,因為存在各種編譯器的優化和程式碼混熊技術。

  一個實用的克隆搜尋引擎依賴於彙編程式碼的健壯向量表示,現有的方法依賴於人工特徵提取過程從現有的彙編函式中提取特徵向量,沒有考慮到特徵之間的關係,沒有確定出能夠靜態區分彙編函式的這種獨特模式。為了解決這個問題,基於彙編程式碼的彙編函式的詞法語義關係和向量表示模型Asm2Vec誕生了,此模型用來彙編程式碼表示學習。

  這個模型只需要彙編程式碼作為程式的輸入,可以發現和合並在彙編程式碼中出現的token之間的豐富語義關係

。利用最先進的靜態方法和動態克隆搜尋方法,進行了大量的實驗和檢測了這模型,展示了模型學到表示形式更加健壯並且在對抗混淆和優化的引入方面。其效能更加優於現有的方法。

  彙編程式碼克隆搜尋是一種新興的資訊檢索技術,有助於解決安全相關的問題。它已經被用來通過定位改變的部分來區別不同的二進位制檔案[4],識別已知的庫函式[5],在現有的軟體或者IoT裝置韌體中尋找已知的程式設計錯誤或者zero-day漏洞[6][7],以及當原始碼不可獲取時檢測軟體剽竊或GNU許可侵權行為。

  困難點:因為各種編譯器優化和混淆技術使得邏輯上相似的彙編函式看起來有很大的不同,優化或者混淆彙編函式破壞了控制流程和基本塊的完整性,將這些語義相似但結構和語法不同的彙編函式作為克隆來識別是具有挑戰性的。

  開發克隆搜尋解決方案需要彙編程式碼的健壯向量表示,通過這種表示可以度量查詢和索引函式之間的相似性。根據人工工程的特點,相關研究可以分為靜態研究和動態研究。動態方法通過動態分析彙編程式碼[10][11][12]的I/O行為來建模語義相似性。靜態方法通過查詢彙編程式碼在語法或描述性統計資訊[6][7][8][14][15][16][17][18]方面的靜態差異來為它們之間的相似性建模。靜態方法比動態方法更具可伸縮性並提供更好的覆蓋率,動態方法在語法變化時更健壯,但可伸縮性更差。這篇文章確定了兩個可以減輕的問題,以提高靜態特性的語義豐富性和魯棒性。實驗結果表明,考慮這兩個因素,靜態方法能夠獲得比最先進的動態方法更好的效能。

  P1:現有的最先進的靜態方法沒有考慮到特徵之間的關係。LSH-S[16],ngram[8],n-perm[8],BinClone[15]和Kam1n0[17]將彙編程式碼片段建模為操作頻率值和分類運算元;Tracelet[14]將彙編程式碼建模為指令之間的編輯距離;Discovre[7]和Genius[6]構造描述性特徵,如算術彙編指令的比例,傳輸指令的的數量,基本塊的數量等。所有這些方法都假設每個特性或類別都是一個獨立的維度。然而,SSE暫存器和SSE運算元相關;fclose libc函式呼叫與其他檔案相關的libc呼叫(如fopen)相關;可以用memcpy替換strcpy libc呼叫。這些關係提供的語義資訊比單個tokens或描述性統計資訊更多。為了解決這個問題,提出將詞彙語義關係奶如刀特徵工程過程中。在實踐中,從組合語言的先驗知識中手動指定所有可能的關係是費時的,這是不可行的。相反,直接從普通匯編程式碼中學習這些關係。

  Asm2Vec探索了tokens之間的共生關係,並發現了tokens之間豐富的詞彙語義關係,Asm2Vec在訓練過程中不需要任何先驗知識。

  P2:現有的靜態方法假設特徵是同等重要的[14][15][16][17],或者需要一個等效彙編函式的對映來學習權重[6][7]所選的權重可能不包含區分一個彙編函式和另一個彙編函式的重要模式和多樣性。一個有經驗的逆向工程師不會通過平等地檢視整個內容或邏輯來識別一個已知的函式,而是根據二進位制分析的過去經驗來確定識別特定函式的關鍵點和重要模式,還不需要等效彙編函式的對映。為了解決這個問題,可以模擬一個有經驗的逆向工程師的工作方式。受近年來表示學習[19][20],提出訓練一個神經網路模型來讀取許多彙編程式碼資料,並讓模型確定區分一個函式和其他函式的最佳表示形式。

  本文貢獻:

  1.提出了一種新的彙編克隆檢測的方法。這是第一個使用表示學習為彙編程式碼構造特徵向量的工作,作為減輕當前手工特性中的P1和P2問題的一種方法。

  2.開發了一個用於彙編程式碼語法和控制流程圖的表示學習模型,即Asm2Vec。該模型學習了tokens之間潛在詞彙語義,並將彙編函式表示為內部加權混合的集合語義。學習過程不需要任何關於彙編程式碼的先驗知識,只需要將彙編程式碼函式作為輸入即可。

  3.證明了Asm2Vec比最先進的靜態特徵和動態方法更能適應程式碼混淆和編譯器優化。事宜按包括不同編譯器配置和一個強大的混淆器,它替換指令,分割基本塊,新增為邏輯,並完全破壞原始的控制流圖。在對一個公開的漏洞資料集進行了漏洞搜尋案例研究,其中Asm2Vec實現了零誤報和100%召回。它的效能優於動態最先進的漏洞搜尋方法。

  Asm2Vec作為一種靜態方法不能完全消除程式碼混淆。然而,它比最先進的靜態特性更能適應程式碼混淆。