根据安卓应用特点,我们可以风险分析分为静态与动态两种。分析的过程不执行应用的方法称之为静态分析。比如说,静态分析中的权限分析可以通过AndroidManifest.xml文件获取,api调用等可以通过逆向dex工作逻辑获得。而动态分析主要是分析应用运行之后的逻辑。包括网络流量抓包分析、动态调试dex、甚至恶意程序运行时的电池使用。除了这两种方式还存在一种混合分析的方式,通常是利用机器算法、数学建模的方式识别恶意应用的方案。
静态分析
静态分析指的是从应用程序文件中提取特征,而不执行应用程序。这种方法可以节约时间并得到对恶意应用的大体分析结果。但是,这种方法无法有效的分析带有代码混淆的恶意软件。而且对于热加载的程序也是无能为力。APP热加载:一个正常的应用程序被安装在移动设备上,当有需要的时候,黑客会下发恶意内容到用户手机上。静态分析技术之所以不能检测到这一点,当然是无法掌握将来更新的内容。
最常用的静态分析是权限和API调用收集分析。由于这些都是从AndroidManifest.xml中提取出来的,并且可以有效的提高恶意软件的检测率.我们对这些特性进行了广泛的研究,并结合谷歌PlayStore、小米商店、华为商店等渠道中可用的因子中提取的其他特性,如版本名、版本号、作者姓名、最后更新时间等做更多的事情。
国际上的常见恶意APP静态分析方案
研究人员使用了上千个恶意应用(样本)和上千个正常应用(样本)。提取了应用足够多的信息作为基本因子。
1、使用权限和控制流图(CFG)作为特征,使用单类支持向量机(SVM)。训练数据使用正规应用,只有当研究样本与正常样本有足够的区别度时,分类器才会将样本归类为恶意样本。
2、提取应用程序中的字符串、权限、用户评分、评分次数、应用程序大小,并使用了贝叶斯网络、J48决策树和随机森林、支持向量机和SMO内核。通过上千个样本测试,可达到一个非常高的识别准确率。
3、利用多层前馈网络从权限中检测应用程序的类别。前馈神经网络由两层组成,每层包含10个神经元。隐含层包含s形传递函数(sigmoid),输出线性传递函数。
4、从AndroidManifest.xml中提取特征,如xml元素的数量、应用程序特定信息,如名称、类别、描述、评级、包信息、描述、评级值、评级计数和价格。利用网络爬虫,提取了android应用程序中若干个业务类别和大量工具的信息。使用K-Means聚类进行聚类。
5、从class.dex文件中提取smali(opcode)并选择其中的核心功能转译成操作码序列,即k-gram的二进制序列。使用Gnome项目数据集训练他们的模型。
6、将应用程序的意图与权限结合起来作为开发模型的特征。首先提取请求的权限(permission),并为该任务功能类别构造直方图。统一得到I型PMF(基于概率的矩阵分解)。此图形用于比较和检测未知应用程序,并根据其任务意图将其识别为良性或恶意应用程序。阶段工作如下:
第一阶段
训练和使用机器学习算法来发现样本应用的任务意图。
第二阶段
利用第一阶段的知识发现未知应用的任务意图,并将其分为良性或恶性。通过使用机器学习算法生成的匹配比率,将I类图形与请求的权限进行比较。如果比率在阈值内,则应用程序可能是安全的。
7、收集普通应用的API调用和来自恶意应用的API调用。未知的API调用根据其在正常应用中出现的次数和在恶意应用程序中出现的次数的差异进行排序。该混合方法结合了两个单独训练的SVM模型。然后将这些结果进行比较,以预测未知样本是否具有恶意行为。
表1:常用的恶意应用静态检测因子
编号 | 因子 |
---|---|
1 | 权限(Permission) |
2 | API调用 |
3 | 字符串 |
4 | 原生函数调用(Native function) |
5 | XML信息 |
6 | Meta-data |
7 | dex指令(opcode) |
8 | task Intents组件 |
表2:静态恶意软件检测的因子常用组合
因子1 | 因子2 |
---|---|
权限 | 广播 标签Uses-feature API调用 标签meta-data dex指令(opcode) |
程序行为特征 | API调用 |
动态分析
动态分析在执行的过程中,可以做到与CPU指令处理同步化。大体可以解释为,应用在执行的过程中采用同步释放指令代码的方法而在本地DEX中采用加密保护的方式。这样动态调试就可以一览无余的查看到核心的代码逻辑。所以动态分析所获取到因素或许更加的真实可靠,时效性是最好的。下面我来列举以下我接触到的常用的动态分析恶意软件的方法。
国际上的常见恶意APP动态分析方案
同样的研究人员使用了上千个恶意应用(样本)和上千个正常应用(样本)。提取了应用足够多的信息作为基本因子。当然是动态分析的状态。
1、利用抓包工具FIDDLE获取目标IP访问地址。提取这些IP地址并使用外部服务查找并确定主机的地理分布均匀性,因为受感染的设备将分布在全世界。提取特征后,构造一个APPGEO(M×N)矩阵,其中M表示ANDROID应用(行),N表示网络特征。利用独立分量分析(ICA)从垃圾信息数据中提取潜在概念或稀疏概念。它们的实验准确率可以达到93%左右。
2、监控应用程序启动时分配的资源并提取其行为。这些资源数据存储在设备中,并被转换成特征向量。每个特征被细分为7个类别:网络、短信、CPU、功耗、进程(ID、名称、父进程名)、NATIVE、DALVIK虚拟机特征码。使用朴素贝叶斯算法,逻辑回归模型,支持向量机与10倍交叉验证。
朴素贝叶斯/LRs混淆矩阵具有不规则的分布特征。支持向量机几乎100%正确地检测了正规应用的数据,但是对于恶意软件存在误报。
3、应用程序运行时,存在许多基于网络的行为。我们设计一个网络监测应用,对所有应用的网络行为进行收集和分析。在固定的时间间隔内执行特征监测,然后根据这些检测结果进行聚合计算。使用交叉特征分析来弄清特征之间的相关性。学习异常活动与正常活动之间的偏差。在算法学习过程中,通过得到偏差阈值,可以成功地检测出被重新打包的恶意应用程序。
4、监控恶意应用程序在真实的设备上运行,并由“STRACE”监控生成的系统调用。“STRACE”是一个用于记录ANDROID系统中各种系统活动的应用程序。大体思路是利用信息增益和卡方检验选择特征,设计特征集。
例:使用“STRACE“监视应用程序60秒。使用的特性包括”STRACE“记录的PID、系统调用、返回值和连续系统调用之间的时间。计算每个函数被调用的次数。使用PCA(主成分分析)选择重要特征,然后根据输入得到的异常分数对应用样本进行恶意或正常分类。将其与朴素贝叶斯、J48决策树和支持向量机等分类器进行性能比较。
5、从Android操作系统中提取基于Linux的特性,并将其用作检测恶意应用的特性。
6、使用Android内置的默认应用程序Logger来提取每分钟的互联网流量、电池使用量和电池温度。将这些因子输入到weka中,weka是一个用于测试和训练的开放源码学习库,使用朴素贝叶斯、J48决策树和随机森林算法。得到高识别率。
总结
本文总结了近年来利用机器学习算法检测android恶意应用的研究进展。在评估各种方法时,作者发现android恶意软件数据库的无法共享是一个大问题。只有通过研究人员之间共享适当的数据,开发出一种统一评测系统,就可以更充分的学习一种新的恶意应用,并将这些信息及时分享给所有的移动应用渠道、厂商,它们就可以保护自己免受未来的黑客攻击。(完)
*本文作者:李泉@战争贩子,转载请注明来自FreeBuf.COM
来源:freebuf.com 2020-06-04 09:30:21 by: 战争贩子
请登录后发表评论
注册