在做惡意郵件附件檢測系統時,被要求嘗試在該系統內增加apk的檢測。要求使用靜態分析手段且對檢測速度有較高的要求。
選擇權限特徵是因爲速度很快且相對簡單,只需要解包apk然後編碼二進制化的AndroidManifest文件,根據permission標籤讀取其需要的權限即可。
在調研過程中收集到了權限相關的數據集,而在具體的實現方法上並無太大區別,只是在需要作爲特徵的權限數量上有所區別。
本文無創新點,只是在復現別人的操作,進行了一定程度的對比。
準備知識
以下內容來自官方文檔
應用必須在清單文件的<uses-permission>
標籤中寫入所需要的權限。
如以下代碼完成對發送短信SEND_SMS
權限的聲明
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.snazzyapp">
<uses-permission android:name="android.permission.SEND_SMS"/>
<application ...>
...
</application>
</manifest>
權限與應用的具體功能直接掛鉤,如圖。
以下非官方文檔
惡意軟件通過具體的api調用實現其惡意操作,而每個權限能夠對應多個api操作,因此通過對權限的檢測能夠在一定程度上表示應用的具體操作。
權限特徵容易獲取,這是該特徵得到關注的另一個原因。
文獻[1]是靜態檢測集大成者,基本參考了apk中的所有特徵,其採用“我全都要“的基本思想,將所有權限作爲特徵進行訓練。
自安卓系統問世以來就有研究人員研究了權限特徵的可行性,至2018年仍有僅研究權限特徵的高水平論文[2]。
考慮過多的權限特徵一方面不一定會使檢測效果更好,另一方面還有可能使檢測的效率下降,因此現在基於權限的研究大多是在精簡特徵的個數。
我的工作
那麼到底考慮多少權限能夠獲得比較好的檢測結果呢。
博主將不同數量的權限作爲特徵進行訓練,對比其在現在的、較新的惡意應用中的表現。
採用的權限數量分別爲88、34、22。
88爲綜合手上兩個較大數據集,取得交集。
22爲論文[2]中選取的權限。
34爲谷歌官方選取的26個危險權限與22個權限取並集,僅26個權限的組合曾做過測試,但由於效果原因與22權限取並集。
問:爲什麼不測試drebin那樣的全部權限?
答:1.權限數量過多,除了drebin本身的數據集,沒有其他數據集採用這麼多權限。2.該方法很經典, 大概在別的地方有足夠的資料。
算法採用效果最好的隨機森林,參數按準確率優先進行了調整。
對457個較新的惡意應用檢測結果:
對惡意樣本的檢出率爲:
權限個數 | 檢出率 |
---|---|
88 | 32.2% |
34 | 24.7% |
22 | 73.1% |
注意22權限對照組將該457個應用劃入了訓練集,因而纔有了較明顯的提升。
對1648個較新的良性應用檢測結果:
對於良性樣本的檢出率:
權限個數 | 檢出率 |
---|---|
88 | 94.2% |
34 | 99.3% |
22 | 96.3% |
相關代碼和數據集
細節部分如權限提取,csv處理等就不細說,在代碼裏了。
https://github.com/cckenny/AMDwithPermission-ML
惡意樣本的訓練集大概數千,良性樣本數十萬,只包含權限部分。
數據集來源多樣,主要包括kaggle比賽樣本,北京某211學校網站的樣本和drebin樣本等,已上傳至github。
結論
文獻[2]的方法能夠在減少權限數量的情況下達到較高的檢測率(不然發不了論文…)。
可以看到僅基於權限的方法誤報率是很低的,當然在一定程度上可以對參數進行調整,降低漏報則會提升誤報,反之同理。
速度上的提升到沒那麼明顯,因爲無論88權限還是22權限主要都是解壓比較耗時間,差不多都是1-2秒一個(CPU:E3-1231 硬盤:機械7200轉)。
需要注意的是,論文一般採用的訓練集和測試集爲較老的、經典的程序集,對現存的惡意應用檢出率較低。
補充說明
博主半年前完成的該部分復現,如今整理工作時拿出來分享,故存在截圖和對照組缺失的問題。
測試惡意程序的時間較短故能夠截一些圖,訓練部分的圖就算了吧,有些慢,不重跑了。
有興趣的童鞋歡迎到github下載運行代碼,如果能幫到您,請留一個star,謝謝。
主要參考文獻
- Arp, Daniel, et al. “DREBIN: Effective and Explainable Detection of Android Malware in Your Pocket.” NDSS. 2014.
- J. Li, L. Sun, Q. Yan, Z. Li, W. Srisa-an and H. Ye, “Significant Permission Identification for Machine-Learning-Based Android Malware Detection,” in IEEE Transactions on Industrial Informatics, vol. 14, no. 7, pp. 3216-3225, July 2018.