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