楊宏宇,王在明
(中國民航大學計算機科學與技術學院,天津 300300)
隨著移動智能終端的普及,Android系統所面臨的安全威脅越來越多。Android共謀攻擊是近年來新出現的一種安全威脅,具有攻擊形式多樣、隱蔽性強和攻擊范圍廣等特點,已成為Android安全的研究熱點課題[1]。
共謀攻擊主要通過繞過Android安全機制(簽名、沙盒等)的檢查實施攻擊[2-3],相比其他類型的攻擊,Android共謀攻擊隱蔽性更好、檢測難度更高[4-6]。與檢測惡意應用不同,檢測共謀攻擊不僅需要檢測安全威脅的特征屬性,還需檢測應用間是否存在通信行為。由于現有大多數惡意應用檢測技術未檢測應用間的通信,因此不適用于檢測共謀攻擊[7]。為此,有研究提出如 FlowDroid[6]和Amandroid[8]等基于污點分析技術的共謀攻擊檢測方法,通過設置污點追蹤敏感信息流的泄露路徑,達到檢測共謀攻擊的目的,但在效率方面表現不佳。為改善上述檢測方法的效率,APKCombiner通過分析應用間的信息流提高檢測共謀攻擊的準確率,但該工具僅能檢測出2個應用間的共謀攻擊行為[9]。Schlegel等[10]通過提取應用的公開和隱蔽信道信息來檢測隱私數據泄露,但該方法單一且檢測數據有限。Bartel等[11]提出一種基于權限的共謀攻擊檢測方法,通過提取應用權限特征并靜態分析函數調用檢測共謀攻擊,但檢測準確率和效率不高。Sadeghi[12]提出一種檢測應用間共謀攻擊的COVERT工具,該工具雖然能夠檢測并顯示組件間的通信,但在檢測隱式組件方面誤差大,導致檢測攻擊準確率低。
針對以上研究中檢測共謀攻擊效率差和準確率低的問題,本文提出基于組件通信的Android共謀攻擊檢測模型,目的是有效提高檢測共謀攻擊的效率和準確率。
本文提出的Android共謀攻擊檢測模型結構如圖1所示,該模型由訓練階段和檢測階段組成。
1) 訓練階段。提取已知樣本所需的特征,生成特征向量集合;分析統計已知樣本的特征關系圖,保存組件通信與權限組合特征。
2) 檢測階段。提取未知樣本指定的特征,生成特征向量集合;分析統計并生成未知樣本的特征關系圖,保存組件通信與權限組合特征;根據訓練階段的特征序列,在特征庫中與檢測階段特征序列進行匹配;根據匹配結果輸出未知樣本的類型。
訓練階段負責對已知樣本的訓練和分類,并將樣本的各種特征序列保存到數據庫中;檢測階段則對未知樣本進行檢測,訓練先于檢測執行,并在數據庫中將特征序列與檢測階段的特征序列進行匹配,輸出匹配后的分類結果。
該模型的檢測流程設計如下。
步驟1 首先,使用Androguard[13]反編譯APK,得到AndroidManifest.xml文件,再使用python編程,通過xml.dom模塊和I/O模塊對此文件解析,解析后將權限屬性集、組件屬性集、通信屬性集保存到相應的文件中。然后,分別計算這3類屬性集的數量并按使用頻率從高到低排序后保存,得到新特征向量屬性集。最后,將新特征向量屬性集分成權限特征向量集、組件特征向量集及通信方式特征向量集并保存。
步驟 2 訓練階段。首先,使用改進貝葉斯的分類方法處理2類應用的權限特征向量集,對樣本進行訓練和分類后,將分類后的共謀應用權限組合集作為安全策略規則集保存到數據庫中。然后,使用基于有限狀態機的組件通信檢測方法處理組件和通信方式特征向量集,生成應用間組件狀態圖。隨后,編程實現狀態機,檢測應用通信狀況,刪除不存在通信行為的安全策略規則集。最后,將規則集與組件通信狀態機保存到數據庫中。
步驟 3 檢測階段。首先,使用改進貝葉斯的分類方法處理待測應用的權限特征向量集,提取出權限組合集并保存。然后,使用基于有限狀態機的組件通信檢測方法處理組件和通信方式特征向量集,提取組件通信狀態機數據。最后,將權限組合集作為有限狀態機的輸入字符集生成新權限狀態機,再與檢測階段保存的安全策略規則集進行匹配,輸出匹配結果作為檢測結果集。該階段如算法1所示。

圖1 Android共謀攻擊檢測模型結構
算法1 檢測階段
輸入 應用數據集Λ={app1,app2, app3,…,appn}
輸出 共謀應用對集合?={pair1, pair2, pair3,…,pairm}
if|Λ| ≥ 2 then
讓Θ = Λ中所有可能的app組合;
for each pairjin Θ do
改進貝葉斯的分類方法并計算Lτ;
if Lτ≥ threshold then
基于有限狀態機的組件通信檢測方法并計算Lcom;
if Lcom== 1 then
return (pairj)
計算Lc
end if
end if
end for
end if
在該模型中,設計了一種改進貝葉斯的分類方法和一種基于有限狀態機的組件通信檢測方法,上述2種方法為模型的核心方法,下面分別對2種方法進行說明。
本文中的符號說明如表1所示。
針對貝葉斯易出現無法比較、下溢出和分類差錯率較高的問題,本文在貝葉斯算法的基礎上對其進行了改進,以提高分類性能,改進過程如下。
首先,假設應用的權限為Wi,共謀應用為C,非共謀應用為H。判斷應用共謀與否,即判斷權限集中是否包含權限Wi,記為P(C|Wi),根據貝葉斯理論可得

其中,P(C|Wi)為出現權限 Wi的應用是共謀應用的條件概率;P(C)為訓練階段應用中存在共謀應用的概率;P(Wi|C)為共謀應用中權限 Wi出現的概率;P(H)為訓練階段應用中非共謀應用的概率;P(Wi|H)為非共謀應用中權限Wi出現的概率。
考慮到每個權限出現的獨立性,計算 P(C|Wi)的聯合概率P(C|W),W={W1, W2, W3,…,Wn},如式(2)所示。


表1 符號說明
其中,P=P(C|W)為出現權限 W={W1,W2,W3,…,Wn}的應用為共謀應用的條件概率;Pi=P(C|Wi)為出現權限Wi的應用是共謀應用的條件概率。
其次,鑒于貝葉斯計算概率時存在無法比較和下溢出的問題[14],當權限不存在,即Wi=0時,Pi=0,P=0,則無法比較;當Pi較小時,計算P會造成下溢出問題。針對上述2個問題,本文分別提出2種解決方案。
判斷樣本中權限特征向量W={W1,W2,W3,…,Wn}中的權限Wi=0是否為0,如果為0,則計算P(Wi|C)和 P(Wi|H)時,將所有權限初始化出現的次數均記為1,再進行計算得到Pi。
當 Pi<0.000 1 時,若要計算 P(Wi|C)和 P(Wi|H),取P(C|Wi)的對數ln{(P(C|Wi))?1},將最終結果變為計 算 P(W1|C)P(W2|C)...P(Wn|C)P(C)和 P(W1|H)P(W2|H)...P(Wn|H)P(H)的大小。
最后,為降低分類差錯率,在計算聯合概率P(C|W)時引入一個變量調整因子 θ,其作用是調整權限列表中某一權限組合共謀的聯合概率。θ值越小表示分類越準確,θ的選取范圍為[0.01, 0.1]。通過 Adaboost算法[15]對調整因子 θ迭代多次后取最佳值。改進貝葉斯的分類方法如算法2所示。
算法2 改進貝葉斯的分類方法輸入 權限特征向量集
輸出 權限組合集和P(C|W)等
1) count =n /*設定 Adaboost循環次數count*/
2) sample=2 000 /*選擇2 000個樣本*/
3) |θ|=|S| /*θ 初始化為和權限列表大小相等的向量*/
4) for t =0 to count /*迭代*/
5) inf =0.5 % /*設定最小分類差錯率為inf*/
6) value=classfy(sample) /*對于每一個樣分類*/
7) if(value == error) /*如果分類出錯*/
8) if(alpha(pc)>alpha(ph) )/*計算出錯的程度即比較P(C)和P(H)的相差alpha*/
10) else /*若樣本原
12) inf=compute(S) /*計算差錯率*/
13) Save(inf,P(Wi|C),P(Wi|H) /*保存差錯率和此時的權限集、P(Wi|C)和P(Wi|H)、θ等信息*/
通過執行改進貝葉斯的分類方法,得到權限組合集和聯合概率P(C|W)等信息。為方便計算,設定Lτ(S)=ln{(P(C|W))–1},取值為[0,1],當 Lτ(S)>0.5 時,將權限組合集保存為安全策略規則集。
為檢測應用間的通信情況,本文設計一種基于有限狀態機的組件通信檢測方法,用G=<Q, Σ, δ, q0,F>表示有限狀態機[16],其中,Q表示應用所有組件狀態的非空有限集合;Σ表示輸入字符表(符號的非空有限集合);q0是組件的某一初始狀態,它是Q的元素;δ是狀態轉移函數,即δ:Q×Σ→Q;F是接受(最終)狀態的集合。
以此為基礎,基于有限狀態機的組件通信檢測方法的設計步驟如下。
步驟1 將應用轉化為圖。
若用A表示一個應用,α表示A中Activities組件的集合,β表示A中Services組件的集合,γ表示A中Broadcast Receivers組件的集合,ξ表示A 中與Intent相關的 API調用,ζ(ξ)表示 ξ中所有操作字符串的集合。

定義點集合V為本是H,錯分成C*/
其中,V代表應用的點集合。
用S(ξ)表示ξ中發送Intent傳遞信息的組件集,S(ξ) ={(x,i)|x{∈α∪β∪γ}, x發送Intent i∈ξ},T(ξ)表示接收 Intent處理信息的組件集,T(ξ)={(x,i)|x{∈α∪β∪γ}, x接收Intent i∈ξ}。
定義邊集E為

用圖G(V, E)表示應用A,圖2為4個Android典型應用的狀態圖。
步驟2 圖的融合。
為處理應用間的隱式Intent調用問題,將應用圖G(V,E)融合。設有n個應用,由步驟1將應用轉化為對應的狀態圖,所有圖的融合表示為Gu

圖2 4個典型應用的狀態圖

Gu=(V, E),其中,V=V1∪V2∪V3··∪Vn,E=E1∪E2∪E3··∪En∪E′,E′表示應用間發送和接收隱式Intent信息的邊。任意Ai和Aj(i≠j∈{1,··,n}),都有對應的圖 Gi和 Gj,用 ξi或 ξj表示 Ai或 Aj中與Intent有關的API調用。令k=i,j (i≠j∈{1,··,n}),則S(ξk)和 T(ξk)分別表示 ξk中發送和接收 Intent的組件集。因此,E′可表示為:E′={(x, y)| ? i, j∈{ 1 , ··,n}s.t. x∈S(ξk), y∈T(ξk), i≠j}。
將4個Android典型應用的狀態圖融合后的結果如圖3所示。

圖3 經融合后的4個典型應用的狀態圖
步驟3 融合圖的優化。
為保證融合圖的計算效率和算法的執行速度,需刪除動作字符串的節點(即在 Gu中刪除 ζ(ξ))。刪除融合圖節點的規則設計如下。
1) 若某個組件(圖節點)沒有進來的邊,只有出去的邊,則刪掉此節點。
2) 若某個組件(圖節點)有來自其他組件的邊,則保留組件(圖節點)的邊并刪掉對應的動作字符串節點。
融合圖優化后,Gu記為 Gd=(Vd, Ed),邊記為Ed=E∪{S(ξ)→T(ξ)|S(ξ)→x→T(ξ), x∈ζ}{{(x, y) | x∈S(ξ), y ∈ζ(ξ)}{(∪x, y) | x ∈T(ξ) , y ∈ζ(ξ)}},點記為Vd=V-ζ(ξ)。4個典型應用的融合圖優化后的結果如圖4所示。

圖4 4個典型應用融合圖優化后的結果
步驟4 優化圖的狀態機設計。
將優化圖Gd設計成狀態機M中對應的元素,Gd節點作為狀態機中接受狀態集F。初始狀態為q0,權限集Q=F{∪q0},狀態轉移函數δ包含從q0→F的轉換,且能夠訪問F中的元素和Gd中的所有邊。4個典型應用的狀態機如圖5所示。

圖5 4個典型應用的狀態機
圖 5中,Main()是狀態機的初始狀態,根據組件間的關系便可定義狀態轉換函數δ,最終狀態為 ReadMessage.ReadActivity、AddressBoost.ReadAcitvty、SeedMessage.sendService、Online Music.seadService。算法3為計算δ的算法,算法4為計算基于有限狀態機的組件通信檢測的算法。
算法 3 計算 δ(Q,Σ)
1) m = length[Q]
2) for q=0 to m
3) for each character a ∈Σ /*Σ 為訓練得到的輸入字符*/
4) k=min(m+1,q+2) /*危險權限狀態值取最小*/
5) repeat
6) k=k–1
7) until Pk>Pqa
8) δ (q,a) = k /*加進權限a后的狀態值為k*/
9) return δ
算法 4 計算基于有限狀態機的組件通信檢測(Q,δ,F)
1) n = length[Q]
2) q0=0 /初始狀態q0/
3) for j=1 to n
4) do q0=δ(q0,Q[j]) /*δ函數是一張圖表*/
5) if q0=F /*F為接受狀態*/
6) then print “組件間存在通信狀態轉換”j~F
7) Lcom(S)=1
8) else
9) then print “不存在通信狀態轉換”j~F
10) Lcom(S)=0
經過基于有限狀態機的組件通信檢測方法處理,若應用間存在通信,則Lcom(S)=1,保存應用組件通信相關的數據,以便將優化安全策略規則集和將權限特征向量集作為輸入字符集生成新權限狀態機。
分別對本文提出的檢測模型進行可行性驗證、分類效果驗證、共謀攻擊與權限的關聯性驗證、不同方法的對比檢測等實驗,實驗環境和樣本設置如下。
實驗環境:Dell PC機;處理器Interl(R) Core(TM)i7-3210 CPU;內存4 GB;Pycharm2016編譯器;Matlab R2014a;
樣本:訓練樣本為1 000個非共謀應用[17]和1 000個共謀應用[18],非共謀應用從Google Play以及國內應用市場中下載,共謀應用從VirusShare[18]中獲得。檢測樣本為300個共謀應用和200個非共謀應用。為保證樣本的純度,所有樣本均在VirusTotal[19]中檢測后使用。
為衡量分類器的分類效果,定義了以下檢測指標。
指標1 真正(TP):實際為共謀應用,被檢測為共謀應用。
指標2 誤報(FP):實際為非共謀應用,被檢測為共謀應用。
指標3 真負(TN):實際為非共謀應用,被檢測為非共謀應用;
指標4 漏報(FN):實際為共謀應用,被檢測為非共謀應用。
進一步定義以下指標。
實驗中采用分層 10折交叉法來提高模型的泛化能力,選取2 000個訓練樣本作為訓練集,選取500個檢測樣本作為測試集。迭代10次,每次隨機選取測試集計算分類器的TPR、FPR、ACC、ERR,然后取平均值。
首先,使用Stateflow[20]工具對有限狀態機進行仿真,仿真的設計如下。
1) 根據應用所求狀態的數量、狀態轉移的條件(權限組合形式)和各狀態輸出信號的賦值,畫出狀態轉移圖。
2) 按照狀態轉移圖編寫狀態機的設計程序。
3) 利用Stateflow工具對狀態機的功能進行仿真驗證。
4) 匹配成功則將權限所屬應用標為共謀應用,否則為非共謀應用。
以4個共謀應用生成的狀態轉移圖(如圖6所示)為例。由圖6可知,應用的組件間存在共謀攻擊,此時安全策略規則集為權限WRITE_EXTERNAL_STORAGE、SEND_SMS、INTERNET和READ_CONTACT的組合,仿真結果輸出這些應用為共謀應用。仿真結果輸出為共謀應用的標記為1,否則為0。
然后,在Pycharm和Matlab中編程實現模型檢測流程,對樣本進行處理和檢測分類。通過將 500個檢測樣本導入檢測模型,計算標記為1的應用數量,再通過python編寫腳本對檢測過程可視化,將檢測的過程轉換為標記0或1的過程,觀察檢測過程的變化,以驗證模型的可行性。以1 800 s為間隔按時序截取8張檢測過程圖并記錄下當時對樣本的檢測結果。圖7為檢測過程,黑色標記表示為1的樣本,初始值根據樣本總量全標為 1,最終檢測結果為發現286個共謀應用。

圖6 4個共謀應用生成的新狀態轉移圖

圖7 檢測過程
由圖7可知,從時序a到h標記為1的樣本由481個最終穩定為286個,說明檢測完成且共謀應用為 286個,此時得到各個指標分別為TPR=93.33%,FPR=14.66%,ACC=92.45%,ERR=12.37%。實驗表明本文模型檢測共謀應用的真正率和準確率較高,且誤報率較低。
為驗證模型的分類檢測效果,將檢測樣本輸入檢測模型,經處理得到分類效果,如圖8所示。由圖8可知,樣本中共謀應用與非共謀應用在Lτ約為0.5處(圖8中黑色線)分離,此值上方樣本均為共謀應用,下方樣本均為非公謀應用,這一結果表明本文模型的分類效果較好且分類的閾值穩定。

圖8 模型的分類效果
為驗證共謀攻擊與權限之間的關聯性,統計出2類樣本中10個最常用權限占各自樣本使用權限總量的概率,并進行排名,結果如表2所示。由表2可知,在權限相同的情況下,共謀應用概率大于非共謀應用概率,說明共謀應用申請的權限數量更多,表明應用申請的權限數量越多,其存在共謀風險的可能性就越大。
為進一步驗證應用申請權限數量與共謀攻擊之間存在的關聯性,對共謀樣本的每個應用中 10個最常用權限的數量與共謀攻擊之間的關系進行統計,統計結果如圖9所示。由圖9可知,10個權限中隨著申請數量的增加,產生共謀風險的可能性增大。依據是權限數量越多,可能的共謀權限組合也就越多。

表2 共謀與非共謀應用權限概率排名對比

圖9 共謀風險與權限數量的關系
為驗證本文模型的檢測準確率和檢測效率,使用本文模型、當前的檢測模型和工具,在相同條件下對樣本進行檢測并對比。
首先,編程實現IC3工具[21]和本文模型,然后對共謀測試套件DroidBench[22]和共謀樣本APP進行檢測,其中,DroidBench包含29個共謀測試應用,共謀樣本 APP是從樣本中隨機選取的100個APP,分別獲取檢測失敗的APP數、Intent傳遞個數、耗時,并對上述檢測數據進行統計,統計結果如表3所示。由表3可知,本文模型與IC3相比,在檢測的準確率、Intent傳遞數目、耗時方面均具有一定優勢。
為進一步比較本文模型的檢測性能,從共謀樣本中隨機抽取20個應用,分別使用DroidBench和共謀測試套件ICC-Bench[23],對Amandroid工具[8]、COVERT工具[13]、DroidSafe模型[24]和本文模型進行共謀攻擊檢測實驗。使用上述工具和模型分別測試10次,測試結果如表4所示。由表4可知,在DroidBench和 ICC-Bench測試環境下,與Amandroid、COVERT和DroidSafe相比,本文模型在檢測共謀攻擊方面的準確率更高。

表3 IC3工具和本文模型的對比分析

表4 不同工具不同平臺下相同樣本檢測效果對比
針對Android共謀攻擊隱蔽性好、檢測效率差、檢測準確率低的問題,提出基于組件通信的Android共謀攻擊檢測模型。模型分為訓練階段和檢測階段。訓練階段負責對訓練樣本的權限特征向量集學習和分類生成安全策略規則集,使用組件和通信方式特征向量集設計基于有限狀態機的組件通信檢測方法優化安全策略規則集;檢測階段負責將待測應用的特征向量集生成新權限狀態機,通過匹配訓練階段的安全策略規則集完成共謀攻擊的檢測。實驗結果表明所提模型具有較高的準確率和較好的檢測效率。
未來考慮通過 Xposed框架將本文所提模型整合到Android系統中,在真實環境下驗證模型對共謀攻擊的檢測效果并對模型和方法進行持續改進。