中國人民解放軍63637部隊 劉曜碩 張曉楠 夏文君
智能手機的使用給人們學習、生活提供了便利的同時,Android平臺惡意代碼會對系統正常運行產生不利影響。目前使用的Android惡意代碼分析方法應用范圍有限,實際效果并不是很好。為了改善這種情況,本文通過分析Android平臺的特點,提出了基于惡意軟件基因的檢測框架和分類框架,從而改善檢測效果,為Android平臺安全提供可靠保障。
Android系統操作性比較強,目前普遍應用在移動終端上,用戶可以獲得更好的體驗。由于系統具有開放性,在網絡環境下容易受到惡意軟件的侵入,導致用戶隱私泄露,造成巨大經濟損失。為了有效預防侵害,要注重Android惡意軟件檢測和分類的研究,并將其有效應用到實際中去,不斷提升手機應用安全性。
所謂軟件基因,是指軟件中攜帶功能信息的二進制片段,其接近于生物體基因,可以將軟件體信息表達出來,研究軟件基因的重點要放在軟件的同源性和相似性分析上。惡意軟件中的二進制片段具有功能信息,也就是惡意軟件基因,Android惡意軟件中的惡意基因非常多,對系統運行構成了嚴重威脅。
目前提取代碼段基因最常用的方式是對數據流進行分析,為了便于更好的研究,需要轉化數據流的形式,使其變為use-def鏈,將軟件中的數據從使用到定義的流向準確表現出來。研究中用Soot工具來分析代碼段,可以獲取usedef鏈。采用Jimple語言,這是一種三地扯語句,非常的方便,運用下列算法可以獲取use-def鏈。
算法1
輸入:Android apk文件
1 遍歷 一個apk的所有基本塊的控制流圖:
2 遍歷 一個基本塊中的每一條語句:
3 獲取語句中的定義值和使用值:
......
......
......
在算法1中,我們進行分析時采用Soot工具,之后會產生一種控制流圖,從基本塊控制流圖中將所有數據的定義值和使用值提取出來。對一個值定義時就產生了相應的use-def鏈。為了深入的研究,要用形式化方式將use-def鏈表示出來,轉變為新的形式。Jimple語句調用語句會產生方法的調用,可以獲取代碼段的軟件基因。
獲取Android軟件資源文件可以采用多種方法,運用apktool工具進行反編譯會產生文件夾,資源文件被有效保存。資源文件有多種形式,其中比較常見的是圖片文件和配置文件,要進行提取基因的操作。采用圖像指紋方法處理圖片文件;同其他技術相比較,圖像指紋具有適用性強的特點。在實際處理過程中,為了獲得圖像指紋,在整個過程中要進行有效處理,嚴格按照流程執行,可以達到預期效果。
預備基因庫是指獲取軟件代碼段和資源段基因,惡意軟件的預備基因庫和其他預備基因庫不同,其最顯著特征是數據量大。語句序列的類型和調用方法為代碼段基因組成形式,而且沒有方法調用的語句序列存在重復率高的情況,這時會發現多種語句序列提取出的基因是相同的。有的基因沒有普遍性,存在于少數惡意樣本中,檢測、分類惡意代碼面臨更大難度。
區分惡意性樣本和非惡意性樣本,軟件基因庫構建之前需要進行相應處理,這是關鍵的一個環節。預處理惡意代碼基因和非惡意代碼基因,結束之后再進行綜合和去重,惡意軟件檢測基因庫就可以獲得。
提取出所有訓練集樣本的基因,檢測模型分類器選擇支持向量機,用惡意樣本訓練集和非惡意樣本訓練集訓練支持向量集的參數,在樣本測試集樣本中采用分類器。
處理訓練集樣本時,將每個測試集樣本中的軟件基因提取出來,進而量化惡意軟件檢測基因庫。測試集樣本中包含惡意性標簽,對本檢測模型的準確性進行驗證,將檢測結果標簽和參考標簽相比較,檢驗模型準確性的指標采用機器學習中常用的準確率和召回率。準確率和召回率分別是指惡意樣本中被正確判斷為惡意的比例和所有非惡意樣本中被正確檢測為非惡意樣本的比例。
研究軟件基因惡意代碼的目的是分析惡意代碼的同源性,對于家族特性將惡意軟件分類模型構建出來,有效分類惡意代碼,并起到驗證作用。
無法對惡意性與非惡意性樣本的基因進行區分就稱之為惡意性特征的基因,需將這類基因刪除。非惡意性樣本在本次實驗中總共有2000個,惡意與非惡意軟件基因有重合部分,在刪除重合部分之前要先提取出惡意軟件基因,確保刪除的可靠性。各家族惡意軟件特性的反映僅靠惡意軟件基因庫的構建是不行的。對惡意軟件研究之前要進行分類處理,各家族惡意軟件分類的前提條件是篩選,刪除掉出現頻率較低的基因,就可以獲得各家族的基因庫。最后要綜合各家族基因庫,就形成了惡意代碼分類基因庫。
構建惡意代碼分類基因庫時要分類已知惡意代碼的家族,但從實際情況來看,通常使用的惡意代碼沒有家族標簽。在本文研究中對標簽惡意代碼樣本有兩種方法。一種方法是在獲取家族標簽時要采用AVClass,運用反病毒引擎來命名惡意代碼,通過分析將各命名中表示家族名稱的關鍵字段提取出,再命名惡意代碼。另一種方法是以基因為中心聚類惡意代碼,根據惡意代碼基礎基因庫,從惡意代碼樣本中提取向量。
確定基于SVM的分類器為分類框架,以往SVM是一個二分分類器,應用范圍有限,對一個集合的樣本進行劃分,變為正負兩類。傳統模式存在一些問題,為了改善效果要采用“單對多”的方法,構造出功能強大的SVM多分類器,對多個家族進行區分。多分類支持向量機的訓練和二分分類器的訓練幾乎相同,對所有訓練集惡意代碼要進行抽象處理,樣本集合用于訓練支持向量機,可以獲得多分類器的所有參數,為后期研究做好準備。
基于惡意軟件分類基因庫,提出測試集樣本基因后轉變為高維向量。準確率數組、召回率數組等是分析分類結果的重要依據,要將每個家族看作是正樣本,可以保證計算的正確性,其余的是負樣本,將每個家族的分類準確率和召回率計算出來。
數據集準備,本文中樣本集中的惡意樣本和非惡意樣本分別是19998個和2000個,要進行處理才可有效。基于樣本集獲取惡意樣本基因有4411條,非惡意樣本基因2082條,為了提升實驗的準確性,對惡意樣本和非惡意樣本采用隨意抽取方法;并對其進行測試,發現準確率要高于召回率。對檢測結果進行分析,可以發現召回率高和對惡意代碼的惡意性檢測準確性較高有著直接關系。這樣可以得到重要結論,基于惡意代碼基因的分析框架的關鍵是惡意代碼間的同源性,正常代碼處理時非常接近于原始代碼基因,非惡意代碼檢測錯誤的情況容易出現。為了提升系統安全性,目前采用的防病毒引擎存在不足之處,會引發一系列問題。
在惡意代碼分類實驗中,對樣本集中的惡意代碼進行劃分,使其變為多個家族。由于很難實現全面研究,對所有惡意代碼家族進行了選擇,排序依據為樣本容量。基于長尾效應,這20個家族只保留了13567個惡意樣本。為了確保實驗統一性,要控制變量,在實驗中采用同樣數量的惡意樣本。在賦予標簽中對樣本進行分類。在兩個分類實驗中要選擇不同家族。分析不同分類器的測試結果性能度量值,基于基因對惡意代碼的家族進行研究具有重要意義。AVClass為參考標簽,不適用于少數家族的惡意代碼分類。對反病毒引擎檢測結果進行整理、分析,發現本實驗中Android惡意代碼檢測率較高。基于基因的研究方法和以往的反病毒引擎有著明顯差別,從分類結果上來看,較高重合率對基因對惡意軟件分類分析可以起到促進作用。基于聚類結果的參考標簽和分類結果基本相同,對基于基因的分類可以基本契合聚類結果進行驗證。
結語:綜上所述,惡意軟件對Android系統會產生不利影響,造成一系列問題,為了有效應對,要加強惡意檢測軟件的開發,為系統安全性提供可靠保障。本文從基因的角度出發,對Android惡意軟件檢測與分類進行分析,可以及時發現并處理惡意軟件,保證系統處于正常運行狀態中,讓用戶獲得更佳使用體驗。