郭 平
(廣東交通職業技術學院 廣東 廣州 510650)
隨著科技不斷發展進步,智能化終端設備普及率越來越高,逐漸深入到日常生活中的方方面面,為大眾帶來了實實在在的便利。Android由于其開源性的強大優勢,已普遍應用在各種手持設備和操作系統中。但也正是由于其開源優勢大大降低了開發成本,大批惡意應用不斷涌現,嚴重威脅用戶使用安全。360互聯網安全中心發布的《2017年中國手機安全狀況報告》中指出,Android平臺2017全年截獲新增惡意程序樣本累計1 403.3萬個,每天平均新增3.8萬個惡意程序樣本[1]。Android平臺提供了幾種應對惡意軟件威脅的方法:沙箱、訪問控制、簽名機制、權限機制等,但是這些機制都把注意力集中在申請權限上,對于不具備相關專業知識的用戶就會盲目的賦予未知應用程序權限,無法避免惡意軟件威脅。目前大多數的檢測手段主要是動態分析以及靜態分析,但效果極其有限。后來,有人提出采用機器學習算法進行惡意軟件檢測分類,在檢測效果上確實有了顯著的改善。由于基于Android的惡意樣本存在較高難度和準確性不足的缺點,因此適合樣本數量少、準確率高、花費小的支持向量機(SVM)算法被廣泛應用[2-4]。
本文在SVM算法基礎上提出采用多核模糊SVM算法進行惡意軟件分類,主要通過惡意軟件特征值提取對惡意軟件進行分類檢測,最后和一般支持向量機的結果進行比對。
進程注入指的是將自行實現的程序文件注入到目標文件中,即通過程序操作使其在指定的進程中被裝載。具體的注入過程大致如下:
(1) attach上目標函數;
(2) 讓目標進程的執行流程跳轉到mmap函數來分配內存空間;
(3) 加載注入so;
(4) 讓目標進程跳轉到注入so中的代碼執行。
通常來說,hook技術可與進程注入融合,進而實現自定義。hook技術可調用系統函數,即通過控制目標來實現自定義行為。當目標函數被調用時,實際上調用的是自定義的函數,在該函數中可以解析原函數的參數獲得數據,實現行為攔截。
Android是基于Linux來開發的,并且Linux內部集成了豐富的內核和通信機制,例如跟蹤、信號、報文隊列等,但Android并沒有上述的一種通信機制,只采用了Binder機制。
Binder是與COM和CORBA極為相似的分布式組件架構,Binder的實質功能是提供遠程過程調用(RPC)。該機制的通信模式采用客戶端-服務器的形式,包括四部分組件:Client、Binder Driver、Server和Server Manager,其基本通信架構如圖1所示。

圖1 Binder機制基本通信架構
Server:它定義實現了各種方法(服務),并且繼承了Binder的對象。
Binder Driver:當一個新的Binder對象被創建的時候,Binder驅動器則會創建mRemote對象。
Client:通過獲取Binder驅動的mRemote對象就可以調用相應的Binder對象的服務。
Server Manager:用來管理Server,并向Client提供查詢Server接口的能力。Binder機制的基本通信過程即服務器定義服務,客戶端通過獲取服務器的對象引用的方式就可以調用服務器定義的各種服務。應用程序調用系統函數執行敏感行為的過程,就是使用Binder機制進行進程間通信的過程。
目前惡意軟件的種類很多且改變很多,給檢測工作帶來了相當大的困難。雖然不同的惡意應用程序一直出現,但在安裝方式、功能觸發和惡意負載方面都具有以下典型特征:
(1) 惡意應用通常會以非常熱門應用的方式來包裝,從而吸引客戶下載,而主要的方式有應用更新、重打包、偷渡下載等方式。
(2) 安裝完畢后,應用會誘導客戶誤點擊運行,從而秘密地進行竊聽行為。
(3) 惡意負載包括遠程控制、特權提升、吸取話費、竊取隱私和自我保護等。
目前流行的提取方式有Smali hook、Binder IPC 注入、ROM定制、Zygote注入和虛擬機自省(VMI)。本文使用IPC注入方法來對惡意應用進行特征提取,并用ioctl()函數進行通信,此函數可通過解析BINDER_WRITE_READ來實現攔截。在攔截到應用行為后,即可輸出攔截日志,形成特征向量,并將該向量作為分類器的輸入,獲得檢測效果。
Smali hook:在對監控模塊進行插入前,需要對APK編譯后的代碼進行修改。
Binder IPC注入:利用Android進程間通信機制binder注入關鍵函數ioctl(),以此獲取進程敏感行為調用的信息。
ROM定制:插入監控模塊后,對內核模塊重新編譯。
Zygote注入:利用zygote進程創建新進程,注入并監控應用程序框架層的API調用。
虛擬機自省:基于hypervisor的虛擬化解決方案,從Android虛擬器外部監控系統及應用程序的狀態。
在系統對惡意行為進行攔截并形成攔截日志后,輸出攔截特征,構造對應樣本的特征向量,并作為分類器的輸入。
分類工作的一個很關鍵步驟是構造特征向量,在對已有方案的應用存在的不足作出了描述,本文將采取系統函數及其組合來對應用行為進行描述。具體地,該種方式具備以下優勢:與靜態的檢測方法相比,抗代碼混淆和加密能力更為突出;與采取CPU使用率和網絡流量等系統數據作為特征向量相比,瞬時攻擊可被識別,能檢測出更多的惡意應用;與底層系統描述行為相比,該種方式更為細致,范圍也更加廣闊。
系統函數和權限有著非常緊密的對應關系,根據官方文檔,當前可申請的權限達137項,另外,部分對應權限的分類和敏感權限的界定如表1所示。

表1 部分敏感權限列表
由于敏感權限與敏感API之間存在著映射關系,因此從敏感權限中去發掘敏感API,并參考存在Android應用行為的研究,可更加改善確定攔截的行為。
通常敏感行為可大致分為兩種,單一組合和行為組合。首先單一組合指的是可通過系統函數來描述的行為,而行為組合指的是用多個系統函數進行描述的行為,一般來說,后轉更具有威脅性。比如,將獲取聯系人信息看似一個系統函數,那么一些良性的應用就會調用它,如果只是獲取該應用所需的信息來完成某個功能,這種行為并不過敏,但如果獲取完畢后進行了聯網,則這個行為很有可能泄露用戶隱私,因此該組合比單一的獲取聯系人的信息更為敏感。通過上述類似原理,本文自定義了需要攔截的一系列行為組合,它們的共同特征都是需要獲取用戶隱私信息,并通過與外網連接等手段將信息泄露出去,除此之外,后臺發送短信也是一種非常敏感的行為[6]。本方案最終定義需要記錄的敏感行為和敏感行為組合,共計 17項作為特征值來構造特征向量,均在表2中列出。

表2 需要記錄的敏感行為

續表2
Android惡意應用的可變性和模糊性是很多分類算法所不能很好處理的。綜合已有的這些實際問題,支持向量機(SVM)在針對小樣本、高維度的確定性分類問題上,表現出特別的優勢,并且其分類算法有嚴格的統計學論據,在編程邏輯上是透明的,這使得該算法更容易切入實際分類需求[9]。
Android惡意應用具有非線性、樣本分布不平坦、噪聲大等問題,支持向量機雖然在解決小樣本數據上表現出許多特有的優勢,但對于Android惡意應用的模糊性等問題,仍存在如下的缺陷[10]:
(1) 所有的訓練點在支持向量機下被視為同等地位,具有局限性,在實際應用中,會盡可能維持支持向量的作用,弱化非支持向量的租用。
基于此,本文采用Lin等提出的模糊支持向量機FSVM(Fuzzy support vector machine)作為分類的基本方法,以減小非重要樣本對SVM分類器學習的干擾[7]。
(2) SVM在解決非線性分類或回歸問題過程中,核函數的選取非常重要。傳統的SVM或者FSVM都是基于單個核函數的。對于Android惡意應用分類工作,由于分類樣本間的差異化,如何選擇一個合適的核函數是非常棘手的任務,一般要通過大量反復的實驗來完成。這樣操作對于智能分類來說,顯然并不科學。
基于此,本文將在FSVM的基礎上引入多個核函數映射,利用不同核函數之間的互補性特性來更加準確地適應Android惡意應用模糊、噪聲大、樣本差異不顯著的特點。我們提出一種基于多核的FSVM算法用于Android惡意應用分類,來更有效地模擬Android惡意應用數據模糊性等實際問題。此算法決策樹中的模糊核權重主要借助于樣本無監督自學習來確定,能根據實際Android惡意應用數據的模糊性,形成一種更合適的分類算法。
MSVM算法分類流程如圖2所示。

圖2 MSVM分類流程圖
SVM是基于統計學習理論的機器學習方法,從它的提出開始,就受到數據分類領域的廣泛關注和歡迎。SVM擁有嚴整統計學理論基礎作為支撐,在解決小樣本、高維度和非線性模式識別中具有很大的優勢,與其他類經驗風險最小化算法相比,它的泛化能力更強,在減少訓練和識別時間上有很重要的實際意義。
支持向量機分類器的數學模型原理圖如圖3所示。

圖3 支持向量機分類模型圖
定義1設X是一個非空集合,則稱
F={〈x,uF(xi)〉|x∈X,i=1,2,…,l}
(1)
式中:F為模糊集,uF(xi)為模糊隸屬度矩陣中,樣本集x中第i個樣本屬于模糊集F的隸屬度,uF(xi)取值范圍在[0,1]之間。
在對FSVM分類器進行訓練前,首先對數據執行預處理,計算得到合適的隸屬度函數后,將獲得每一個數據樣本xi的隸屬度uF(xi)矩陣。隸屬度函數uF(xi),本文根據數據去類標無監督自學習的方式得到。
模糊隸屬度uF{xi}是指訓練集{xl,yl,uF(x)}隸屬某一類的程度,而εi是對錯分程度的度量,因此用uF(xi)·εi(i=1,2,…,l)衡量對于重要程度不同的變量錯分程度。由此得到最優分類超平面的目標函數的最優結構:
(2)
s.t.yi[ω·φ(xi)+b]-1+εi≥0
(3)
εi≥0,i=1,2,…,l
式中:懲罰因子C為常量,ω表示線性分類函數的權系數,ε=(ε1,ε2,…,εl)T,φ(xi)表示將xi從多維特征空間映射到高維特征空間。相應的最優分類超平面的判別函數式為:
(4)
式中:K(xi,x)是核函數,是將高維空間的復雜運算轉換為低維空間的簡單函數運算。
模糊因子uF(xi)的確定是決定FSVM性能的關鍵所在,當uF(xi)的值比較小時,該樣本點對支持向量機的訓練作用將大為降低,從而降低了它對訓練SVM分類器過程的影響。
模糊C均值聚類FCM (Fuzzy C-Means)算法是比較有效的一種模糊聚類方法。在很多應用當中,它較之其他硬聚類算法更為靈活。
模糊隸屬度函數的確定采用FCM算法ui矩陣的無監督、不斷自學習的方法,這是算法的關鍵。
FCM算法給定聚類數目C=2,以及樣本空間X,其中X包含N個l=17維的樣本xi,i為樣本序列號,FCM算法輸出隸屬度值uic,即樣本xi屬于第c類的可能性。于是我們需要最小化以下目標函數:
(5)

(6)
式中:m為模糊化程度,其值大于1;d(·,·)是歐氏距離;vc是第c個類的中心;U=[uic]i=1..N,c=1..C是一個N×C隸屬度矩陣,其元素由uic組成;V=[v1,v2,…,vC]是一個l×C矩陣,其列向量對應C個聚類中心。我們可以通過拉格朗日乘數法求解約束優化問題,得:
(7)
可以用迭代更新隸屬度(固定聚類中心)和更新各類中心點(固定隸屬度)去解決問題,由式(7)求偏導并設為0可導出以下式子:
(8)
(9)
在這,沒有將式(6)中的非負約束加入到拉格朗日乘數法中是因為上述的公式結果已經蘊涵uic≥0,?i,c。此外,當m值接近1時候,FCM算法退化成為k-means(k-means 與c-means在不同的文獻中都有表述,為同一算法)算法。據此,通過無監督的學習,得到uic。
FCM算法的實現步驟如下:

Step1Procedure FCM(DataX, NumberC);
Step2初始化隸屬度矩陣U(0);
Step3重復計算第4、5步,
循環條件:‖U(t)-U(t-1)‖<ε;

更新U(t)=[uic];
Step6ReturnU(t);
Step7End Procedure。
在上節中,式(4)的決策樹只能對應于某些特定核函數的組合,但不能對應于混合的核函數組合。
應用分類中,組合多核函數的模糊支持向量機算法,其決策樹和算法調整如下:
(10)


(11)
引理1Mercer核的非負線性組合仍為Mercer核。

以定理2為理論邏輯基礎,可以利用現有常用‘linear’、‘poly’、‘rbf’、‘erbf’核函數構造新的模糊多核核函數,使其能夠適用于樣本集的訓練學習。
MSVM算法分類步驟如下:
Step1將特征矩陣里的數據進行歸一化處理。
Step2按照式(9),構建分類數據的模糊集。
Step3根據式(8) 和式(9)計算樣本點模糊隸屬度。
Step4根據式(11)選擇不同的核函數進行組合。
Step5根據式(10)的決策樹,運用數據對MSVM算法進行訓練,然后進行樣本測試。
本實驗中使用到的良性應用樣本均搜集自第三方應用市場,惡意應用樣本從各個安全論壇的病毒樣本區搜集。使用到良性應用 150 個,惡意應用 150 個。
據訓練數據集得到的用于測試的MSVM經過訓練,算法中′linear′、′poly′、′rbf′、′erbf′等4個核函數的權值及參數值如表3所示[8]。

表3 采用數據集訓練得到的MSVM參數
其中權值為上述核函數線性組合的權重,參數為對應核函數的調節因子。
為了評估MSVM算法的分類性能,Kappa系數的計算被引入進來,進行系統健壯性的評估。Kappa系數(κ)是兩種或者兩種以上精度之間的一致情況的靜態測量方法,其計算公式如下:
κ=(Po-Pe)/(1-Pe)
(12)
式中:Po是總的一致可能性,Pe是估計的一致可能性。這樣計算就明顯比單純的統計準確率要健壯。對Kappa系數值的意義說明如下:Kappa計算得數是-1~1,但我們一般取Kappa在 0~1 之間的數值,并分成5個檔次來區別不同層級的一致性:0.0~0.20代表極低的一致性,0.21~0.40代表一般的一致性,0.41~0.60 代表中等的一致性,0.61~0.80代表高度的一致性,0.81~1代表幾乎完全的一致性。本文實驗分類結果的平均Kappa系數值是0.74。
在本次實驗中,實驗對數據特征值進行了標準化,得到300個樣本,17維度的特征向量作為分類器的輸入數據。進行交叉檢驗,數據集4/5為訓練樣本,1/5為測試樣本。表4詳細地給出了應用此分類器的結果及Kappa系數值的比較。分類準確率從80.11%到85.50%不等,平均的分類準確率是83.01%,實驗結果表明本文提出的分類器能達到比較理想的分類結果。表4中平均的Kappa系數值是0.74。最后得出平均的分類準確率為83.01%。實驗結果表明本文實驗提出的MSVM分類算法準確率是比較穩定的。

表4 MSVM的分類結果與Kappa系數
基于目前普遍存在的Android惡意軟件檢測問題,本文在以往分類方法的基礎上提出了采用多核模糊支持向量機算法對惡意軟件進行檢測分類,通過交叉驗證法進行實驗來評估檢測效果。實驗結果表明采用多核模糊支持向量機算法對惡意軟件進行分類的方法是可行的,且在分類準確度上優于一般支持向量機算法,能夠更好地對惡意軟件進行檢測分類。