在做恶意邮件附件检测系统时,被要求尝试在该系统内增加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.