本發(fā)明涉及安卓平臺軟件安全技術(shù)領(lǐng)域,特別涉及一種基于敏感子圖的安卓惡意重打包軟件檢測方法。
背景技術(shù):
安卓手機近些年得到了越來越多的關(guān)注,許多手機用戶們選擇安卓系統(tǒng)的手機并從手機APP下載市場(如Google Play)獲取優(yōu)秀的應(yīng)用軟件,然而這也導(dǎo)致安卓平臺成為惡意軟件的一大目標(biāo)?;ヂ?lián)網(wǎng)安全技術(shù)全球領(lǐng)導(dǎo)廠商360,在最新公布的《互聯(lián)網(wǎng)安全播報》中指出2015年第二季度,360互聯(lián)網(wǎng)安全中心共截獲安卓移動平臺新增惡意程序樣本550萬個,平均每天截獲新增手機惡意程序樣本近6.04萬個。累計監(jiān)測到移動端惡意程序感染用戶達(dá)6573萬人次,平均每天惡意程序感染量達(dá)到了72.2萬人次。在新增的惡意程序樣本中,惡意重打包程序占據(jù)了80%以上,惡意開發(fā)者們利用成熟的反編譯技術(shù)得到程序源碼,然后通過植入惡意代碼的方式快速生成惡意軟件并上傳到安卓平臺上引誘手機用戶進(jìn)行下載,從而非法獲取利益。惡意重打包軟件的快速增長直接危害到手機用戶們的信息以及財產(chǎn)安全。
為了解決這一難題,全球相關(guān)領(lǐng)域的研究者們提出了不同的軟件惡意性檢測方法。目前已知的惡意軟件檢測方法大致分為動態(tài)與靜態(tài)檢測兩種?,F(xiàn)有的大部分靜態(tài)分析方法需要依靠系統(tǒng)建立的模式庫,例如權(quán)限申請情況或者API的調(diào)用情況。但是由于惡意重打包軟件其載體多為良性,這種檢測方式經(jīng)常會出現(xiàn)誤報、漏報。動態(tài)分析方法通過插樁技術(shù)對程序的運行時狀態(tài)進(jìn)行監(jiān)控以獲取相關(guān)信息,進(jìn)而提取特征來描述其惡意行為。然而該檢測方式耗時量大,對資源的占用率高,并且無法保證對目標(biāo)軟件所有執(zhí)行路徑的覆蓋。
針對以上問題,我們亟需找到一種快速、有效的安卓惡意重打包軟件檢測方法,以達(dá)到保護(hù)用戶信息以及財產(chǎn)安全的目的。
技術(shù)實現(xiàn)要素:
為了克服上述現(xiàn)有技術(shù)的缺陷,本發(fā)明的目的在于提供一種基于敏感子圖的安卓惡意重打包軟件檢測方法,可以彌補上述靜態(tài)檢測方法的誤報漏報缺點并保持了其高效率、資源占用率低的優(yōu)點,實現(xiàn)了對安卓平臺惡意軟件的高準(zhǔn)確度檢測,有效的保護(hù)了手機用戶的信息財產(chǎn)安全。
為了實現(xiàn)上述目的,本發(fā)明采用的技術(shù)方案是:
一種基于敏感子圖的安卓惡意重打包程序檢測方法,包括如下步驟:
步驟S1):基于開源工具Pscout構(gòu)建敏感函數(shù)集合SA={si|1≤i≤680},其中si表示一個敏感函數(shù),然后獲取待檢測安卓程序的所屬類別c,基于TF-IDF-like計算敏感函數(shù)si相對于類別為c的良性數(shù)據(jù)集Bc以及惡意數(shù)據(jù)集M的敏感系數(shù)scs(si,c);
步驟S2):利用反編譯技術(shù)對待檢測安卓程序的安裝文件進(jìn)行反編譯生成相應(yīng)的Smali代碼,進(jìn)一步對Smali代碼進(jìn)行分析并抽取函數(shù)調(diào)用關(guān)系,從而構(gòu)建成函數(shù)調(diào)用圖SFCG(V,E),其中V表示程序中所有的函數(shù)節(jié)點集合,而表示程序中所有的函數(shù)調(diào)用的集合;
步驟S3):基于步驟S2)構(gòu)建的SFCG(V,E),根據(jù)程序調(diào)用的敏感函數(shù)集合SS={sk|1≤k≤n|n=|V|}中每一個節(jié)點元素sk在SFCG中的拓?fù)浣Y(jié)構(gòu)位置,將SFCG劃分成為若干個包含敏感函數(shù)節(jié)點的子圖,該子圖集合表示為SGS={SGj|1≤j≤m},其中m為子圖個數(shù);然后基于步驟S1)中計算所得的敏感系數(shù)計算每一個子圖的敏感系數(shù)scg(SGj,c),選擇敏感系數(shù)最大的子圖作為該目標(biāo)程序的敏感子圖SSG;
步驟S4):基于步驟S3)得到的敏感子圖SSG,抽取其三種結(jié)構(gòu)特征:敏感系數(shù)特征scg(SSG,c)、敏感距離特征tsd(SSG,c)以及三種敏感Motif數(shù)量特征tnsm1(SSG,c),tnsm2(SSG,c)tnsm3(SSG,c);
步驟S5):基于步驟S4)針對每一個樣本構(gòu)建一個五維特征向量,利用隨機森林算法對訓(xùn)練樣本的特征空間進(jìn)行評估并構(gòu)建分類器,從而對待檢測的重打包惡意軟件進(jìn)行快速、有效的檢測。
進(jìn)一步的,所述步驟S1)中敏感系數(shù)計算方法為TF-IDF-like:針對敏感函數(shù)si,統(tǒng)計其在惡意數(shù)據(jù)集M中出現(xiàn)的次數(shù)m(si)以及在良性數(shù)據(jù)集Bc中出現(xiàn)的次數(shù)b(si,c),其中c表示待檢測樣本的類別標(biāo)簽;敏感函數(shù)si的敏感系數(shù)計算公式為其中p表示惡意數(shù)據(jù)集M的樣本總數(shù),q(c)表示良性數(shù)據(jù)集Bc的樣本總數(shù)。
進(jìn)一步的,所述步驟S3)中將SFCG劃分成為若干個子圖方法為:對于程序調(diào)用的函數(shù)節(jié)點集合V={vi|1≤i≤n},依次判斷其每一個節(jié)點元素vi是否存在于敏感API集合SA中,若存在,將其添加至該程序的敏感函數(shù)節(jié)點集合SS中;對于SS中每一個敏感函數(shù)節(jié)點vk,構(gòu)建子圖SGk={vk},并將該節(jié)點附近步長為α的節(jié)點也添加至子圖中;對于子圖集合SGS={SGj|1≤j≤m},對其中任意兩個子圖SGi,SGj作合并操作,合并條件為其中SNG(SGi)表示子圖SGi中的敏感函數(shù)集合。
進(jìn)一步的,所述步驟S3)中敏感子圖選擇方法為:對于子圖SGj,首先計算其子圖敏感系數(shù)其中SNG(SGi)表示子圖SGi中的敏感函數(shù)集合,scs(si,c)表示敏感函數(shù)si相對于類別c的敏感系數(shù);在敏感子圖集合SGS={SGj|1≤j≤m}中,選擇子圖敏感系數(shù)最大的子圖作為其目標(biāo)程序的敏感子圖SSG,其計算公式為
進(jìn)一步的,所述步驟S4)中基于敏感子圖SSG,抽取三種結(jié)構(gòu)特征方法為:敏感系數(shù)特征scg(SSG,c)計算公式為其中SNG(SGi)表示敏感子圖SSG中的敏感函數(shù)集合,scs(si,c)表示敏感函數(shù)si相對于類別c的敏感系數(shù);
敏感距離特征tsd(SSG,c)計算公式為:其中dis(si,sj)表示在SSG敏感子圖中節(jié)點si到節(jié)點sj的最短距離;
三種不同敏感Motif數(shù)量計算方法為:首先使用開源工具gtrieScanner分解敏感子圖SSG,得到三種正常Motif的數(shù)量,然后統(tǒng)計帶有敏感函數(shù)節(jié)點的Motif數(shù)量,即為敏感Motif數(shù)量,分別記為tnsm1(SSG,c),tnsm2(SSG,c)和tnsm3(SSG,c)。
進(jìn)一步的,步驟S2)中抽取調(diào)用函數(shù)關(guān)系的方法具體包括以下步驟:
步驟S201:抽取待分析的Smali文件中的下一條語句;
步驟S202:判斷該語句是否是一條函數(shù)調(diào)用語句,如果是則跳至步驟S203,否則轉(zhuǎn)入步驟S201;
步驟S203:抽取該函數(shù)調(diào)用語句的函數(shù)節(jié)點以及調(diào)用關(guān)系,并存儲;
步驟S204:判斷Smali文件是否還存在待分析的語句,如果有,轉(zhuǎn)入步驟S201,否則轉(zhuǎn)入步驟S205;
步驟S205:輸出函數(shù)調(diào)用關(guān)系集合。
進(jìn)一步的,步驟S3中子圖集合SGS通過以下步驟獲?。?/p>
步驟S301:取出集合SS中的節(jié)點元素s;
步驟S302:新建一個子圖SG,添加節(jié)點元素s以及其附近距離為2的節(jié)點至SG;
步驟S303:添加相應(yīng)的邊至子圖SG;
步驟S304:添加子圖SG至子圖集合SGS中;
步驟S305:判斷集合SS是否遍歷完,如果否,則轉(zhuǎn)至步驟S301;否則,則轉(zhuǎn)入步驟S306;
步驟S306:判斷SGS中是否存在可以合并的子圖對(SGi,SGj),合并條件為其中SNG(SGi)表示子圖SGi中的敏感函數(shù)集合,如果存在則轉(zhuǎn)至步驟S307,否則轉(zhuǎn)至步驟S308;
步驟S307:對子圖對進(jìn)行合并并更新SGS,轉(zhuǎn)至步驟S306;
步驟S308:輸出子圖集合SGS。
與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果是:
本方法基于文本詞匯權(quán)重檢測TF-IDF提出了一種敏感系數(shù)計算方法TF-IDF-like,該方法使對敏感函數(shù)系數(shù)的計算不再僅僅局限于函數(shù)本身在惡意數(shù)據(jù)集中的使用分布,而是結(jié)合了該敏感函數(shù)在良性數(shù)據(jù)集中的使用分布,從而降低了部分敏感函數(shù)由于在惡意數(shù)據(jù)集和良性數(shù)據(jù)集中同時被大量調(diào)用而造成的敏感系數(shù)偏高引起的檢測誤報。
進(jìn)一步的,本發(fā)明提取了敏感子圖作為程序特征,降低程序分析的復(fù)雜度,并且能夠找到惡意軟件的相似性,避免了惡意程序載體對檢測的干擾,可以在靜態(tài)分析快速全面的基礎(chǔ)上,提高了檢測成功率。
進(jìn)一步的,本發(fā)明通過對敏感子圖抽取三種不同形式的結(jié)構(gòu)特征作為特征向量,有效地降低了因為代碼混淆等策略帶來了漏報。
附圖說明
圖1為本發(fā)明基于敏感子圖分析的安卓惡意重打包程序檢測方法整體流程圖。
圖2為本發(fā)明Smali文件靜態(tài)函數(shù)調(diào)用關(guān)系抽取流程圖。
圖3為本發(fā)明基于靜態(tài)函數(shù)調(diào)用關(guān)系圖構(gòu)建敏感子圖的算法流程圖。
具體實施方式
下面結(jié)合附圖和實施例詳細(xì)說明本發(fā)明的實施方式。
請參閱圖1所示,本發(fā)明一種基于敏感子圖分析的安卓惡意重打包程序檢測方法,包括以下步驟:
步驟S1:基于開源工具Pscout構(gòu)建敏感函數(shù)集合SA={si|1≤i≤680},其中si表示一個敏感函數(shù),然后獲取待檢測安卓程序的所屬類別c,例如天氣類。針對敏感函數(shù)si,統(tǒng)計其在惡意數(shù)據(jù)集M中出現(xiàn)的次數(shù)m(si)以及在良性數(shù)據(jù)集Bc中出現(xiàn)的次數(shù)b(si,c)?;赥F-IDF-like計算敏感函數(shù)si相對于類別為c的良性數(shù)據(jù)集Bc以及惡意數(shù)據(jù)集M的敏感系數(shù)scs(si,c),計算公式為其中p表示惡意數(shù)據(jù)集M的樣本總數(shù),q(c)表示良性數(shù)據(jù)集Bc的樣本總數(shù)。
步驟S2:利用反編譯技術(shù)對待檢測安卓程序的安裝文件(APK)進(jìn)行反編譯生成相應(yīng)的Smali代碼,進(jìn)一步對Smali代碼進(jìn)行分析并抽取函數(shù)調(diào)用關(guān)系,從而構(gòu)建成函數(shù)調(diào)用圖SFCG(V,E),其中V={vi|1≤i≤n}表示程序中所有的函數(shù)節(jié)點集合,其中n表示所有的函數(shù)節(jié)點數(shù)量,而表示程序中所有的函數(shù)調(diào)用的集合。結(jié)合圖2,其中調(diào)用函數(shù)關(guān)系抽取方法具體包括以下步驟:
步驟S201:抽取待分析的Smali文件中的下一條語句;
步驟S202:判斷該語句是否是一條函數(shù)調(diào)用語句,如果是則跳至步驟S203,否則轉(zhuǎn)入步驟S201;
步驟S203:抽取該函數(shù)調(diào)用語句的函數(shù)節(jié)點以及調(diào)用關(guān)系,并存儲;
步驟S204:判斷Smali文件是否還存在待分析的語句,如果有,轉(zhuǎn)入步驟S201,否則轉(zhuǎn)入步驟S205;
步驟S205:輸出函數(shù)調(diào)用關(guān)系集合。
步驟S3:基于步驟S2)構(gòu)建的SPCG(V,E),根據(jù)程序調(diào)用的敏感函數(shù)集合SS={sk|1≤k≤n|n=|V|}每一個節(jié)點元素s在SFCG中的拓?fù)浣Y(jié)構(gòu)位置,將SFCG劃分成為若干個包含敏感函數(shù)節(jié)點的子圖,該子圖集合表示為SGS={SGj|1≤j≤m},其中m為子圖個數(shù)。然后基于步驟S1)中計算所得的敏感系數(shù)計算每一個子圖的敏感系數(shù)scg(SGj,c),選擇敏感系數(shù)最大的子圖作為該目標(biāo)程序的敏感子圖SSG。結(jié)合圖3,其具體步驟如下:
步驟S301:取出集合SS中的節(jié)點元素s;
步驟S302:新建一個子圖SG,添加節(jié)點元素s以及其附近距離為2的節(jié)點至SG;
步驟S303:添加相應(yīng)的邊至子圖SG;
步驟S304:添加子圖SG至子圖集合SGS中;
步驟S305:判斷集合SS是否遍歷完,如果否,則轉(zhuǎn)至步驟S301;否則,則轉(zhuǎn)入步驟S306;
步驟S306:判斷SGS中是否存在可以合并的子圖對(SGi,SGj),合并條件為其中SNG(SGi)表示子圖SGi中的敏感函數(shù)集合,如果存在則轉(zhuǎn)至步驟S307,否則轉(zhuǎn)至步驟S308;
步驟S307:對子圖對進(jìn)行合并并更新SGS,轉(zhuǎn)至步驟S306;
步驟S308:輸出子圖集合SGS。
基于輸出的子圖集合SGS中的子圖SGj,首先計算其子圖敏感系數(shù)其中SNG(SGi)表示子圖SGi中的敏感函數(shù)集合,scs(si,c)表示敏感函數(shù)si相對于類別c的敏感系數(shù)。在敏感子圖集合SGS={SGj|1≤j≤M}中,選擇子圖敏感系數(shù)最大的子圖作為其目標(biāo)程序的敏感子圖SSG,其計算公式為
步驟S4:基于步驟3)得到的敏感子圖SSG,抽取其三種結(jié)構(gòu)特征:敏感系數(shù)特征(scg(SSG,c))、敏感距離特征(tsd(SSG,c))以及三種敏感Motif數(shù)量特征(tnsm1(SSG,c),tnsm2(SSG,c),tnsm3(SSG,c))。其中敏感系數(shù)特征scg(SSG,c)計算公式為其中SNG(SGi)表示敏感子圖SSG中的敏感函數(shù)集合,scs(si,c)表示敏感函數(shù)si相對于類別c的敏感系數(shù)。
敏感距離特征tsd(SSG,c)計算公式為:其中dis(si,sj)表示在SSG敏感子圖中節(jié)點si到節(jié)點sj的最短距離。
三種不同敏感Motif數(shù)量計算方法為:首先使用開源工具gtrieScanner分解敏感子圖SSG,得到三種正常Motif的數(shù)量,然后統(tǒng)計帶有敏感函數(shù)節(jié)點的Motif結(jié)構(gòu)數(shù)量,即為敏感Motif數(shù)量,分別記為tnsm1(SSG,c),tnsm2(SSG,c)和tnsm3(SSG,c)。其中普通Motif結(jié)構(gòu)與相應(yīng)的敏感Motif結(jié)構(gòu)如表1所示,圖中黑色節(jié)點為敏感API節(jié)點。
表1
步驟S5:基于步驟S4)針對每一個樣本構(gòu)建一個五維特征向量,利用隨機森林算法對訓(xùn)練樣本的特征空間進(jìn)行評估并構(gòu)建分類器,從而對待檢測的重打包惡意軟件進(jìn)行快速、有效的檢測。