移动终端侧的恶意软件检测(下)
摘 要
下篇主要介绍了Android恶意软件检测方法按照算法类型的分类,Android恶意软件检测对抗攻击,以及目前Android恶意软件检测存在的问题,并对未来发展方向进行了展望。
一、Android恶意软件检测方法
按照检测算法的类型,可以将Android恶意软件检测方法分为传统方法和基于人工智能算法的方法:
1. 传统的Android恶意软件检测方法
传统的Android恶意软件检测通常基于模式匹配或指纹匹配的方法,需要采集恶意应用并抽取相关特征,构建恶意应用特征库,然后将待测应用与特征库进行匹配,完成正常/异常应用的二分类。其关键点在于如何选择特征,并基于目标特征进行相似度计算。
Yajin等人[1]提出基于权限的行为足迹和启发式过滤,检测恶意软件及恶意软件家族;Peng等人[2]基于一些粗粒度的特征,如AndroidManifest.xml中申请的权限信息,引入风险评分和风险排名的概念,采用多种概率生成模型完成恶意软件检测;Chen等人[3] 提出了Pegasus模型,结合权限、API的上下文和顺序,以及应用程序和Android系统之间的交互信息,建立权限事件图,自动检测已知的恶意行为。这些方法都没有关注Android恶意软件的内部程序逻辑。因此,Aafer等人[4]提出DroidAPIMiner模型,采用静态分析的方法,基于字节码内的API级别信息,从恶意软件库中自动挖掘恶意软件程序内在的逻辑信息,并将其抽象为恶意模式,最终采用模式匹配的方法识别恶意软件。Grace等人[5]提出RiskRanker模型, 将潜在风险分为三级——高风险、中风险和低风险,高风险应用利用Android平台漏洞,采用指纹识别的方法进行标识;中风险应用不利用系统漏洞,但会造成用户财务损失或敏感信息泄露,采用控制流图识别应用程序未提醒的敏感操作,进行标识;低风险应用与中风险相似,但收集的信息通常是设备特定或通用、一般可用的个人信息。该模型更加细粒度地识别了恶意软件,同时在发现0-day恶意软件方面有一定的效果。
传统检测方法广泛应用于Android恶意软件爆发初期,但存在一定的局限性:需要构建并维护恶意应用特征库,随着新的恶意应用的出现而不断更新,最终特征库的数据也会逐渐庞大;由于规则和模式库通常由专家人工选择制定,特征较为浅层,无法有效应对0-day恶意软件,甚至无法抵抗代码等对抗攻击方法。
2. 基于人工智能算法的恶意软件检测方法
随着人工智能技术的快速发展,深度学习算法广泛应用于各个领域并有着出色的表现,越来越多的研究者开始探索基于人工智能算法的恶意软件检测方法。相较于传统算法,人工智能方法通常可以自动获取复杂度更高的特征,更好地表征恶意软件,从而实现更好地检测效果。同时,通过人工智能算法可以挖掘更加深层次的隐含特征,更好地获得恶意软件家族的共有特征,从而在0-day恶意软件检测方面具有更好的性能表现。根据选择的特征类型,又可以将其划分为{0, 1}型特征、序列型特征和端到端模式[6]。
(1){0, 1}型特征
每一个特征使用一个标志位表示,非1即0, 1表示该特征存在,0表示不存在。特征的获取主要通过Android应用程序的配置文件AndroidManifest.xml和可执行文件classes.dex,可以从xml文件中提取应用申请的权限信息、硬件信息等,从反编译的dex文件中获取API特征、URL等。但{0, 1}型特征方法具有一定的局限性:一方面由于特征种类数量通常较多,因此{0,1}表示的样本矩阵存在稀疏问题;另一方面,这种特征表示方法忽略了不同特征之间存在的相关性,影响最终模型的检测性能。
(2)序列型特征
序列型特征关注应用程序中的API序列或字节码序列信息,从反编译的dex文件中获取API调用序列,构建控制流图;或是直接提取字节码序列,将其映射为特征向量作为神经网络模型的输入。对于序列型特征,可以采用自然语言处理领域的思想,从中获取语义信息。比如Xu等人[7]提出DeepRefiner模型,在第二轮处理时先对字节码序列进行简化,然后基于Word2Vec的思想进行Skip-gram建模,将简化后的字节码转换成向量表示,得到向量表示的序列,对应于带有语义信息的特征向量,最终采用LSTM模型完成训练和分类。Mariconti等人[8]则是基于API调用序列提出MaMaDroid模型,将API调用序列转化概率作为特征,构造马尔科夫链,训练机器学习模型完成检测。API调用序列特征对于0-day软件的检测起着重要的作用。因为在恶意软件家族中,即使代码实现有所差异,但其内在的行为逻辑是相同的,API调用序列可以表达这种共有的重要行为特征,因此在检测变种恶意软件方面具有较好的性能。
(3)端到端模式
端到端模式不需要复杂的特征预处理,直接使用原始apk二进制码,或是简单截取/映射后的字节码。在端到端模式中,通常可以采用CNN等图像处理领域的经典算法完成恶意软件检测。文献 [9][10]分别利用CNN模型提取局部区域内的字节码间特征和二进制码间特征,最终都取得了不错的检测准确率。
二、Android恶意软件检测对抗攻击
1. “道高一尺,魔高一丈”,随着恶意软件检测技术的快速发展,攻击者们开始研究如何绕过检测模型,根据所采用的攻击技术类型,可以分为混淆操作、梯度下降、基于生成对抗网络训练和抗逆向技术等。
2. 混淆操作
通过在恶意软件中添加许多良性软件多存在的特征信息,或是与良性软件特征相似度较高的特征,从而欺骗检测模型。Chen等人[11]指出了一系列投毒操作,如AndroidManifest.xml文件中添加许多与软件运行过程无关但多在良性软件中出现的权限信息,或是在代码中嵌入一些良性代码段等,但随着人工智能算法的应用,这种简单混淆操作逐渐难以绕过复杂模型的检测。
Yang等人[12]提出特征模糊攻击和进化攻击方法,其中特征模糊攻击就是将恶意软件中的一些特征转化为良性软件与恶意软件共有的模糊特征,从而绕过检测模型。文章选择了四种重要类型特征(资源、触发时间、触发位置、依赖)和上下文特征,从中找出良性软件与恶意软件的共有部分,然后根据良性软件的技术来计算不同特征的权重,在生成对抗样本时,根据输入软件每个特征找到模糊特征集中最接近的模糊特征,将此特征修改为对应模糊特征或修改其对应的上下文特征, 从而达到混淆检测模型的目的[6]。
3. 梯度下降
在对抗攻击领域,基于梯度修改恶意软件特征生成对抗样本是常用的思想,主要针对白盒攻击方法。Grosse等人[13]参考图像领域基于雅各比显著性图的攻击方法,计算雅各比矩阵,根据检测模型对样本的梯度获得最佳扰动方向,从而添加对检测结果显著性最高的特征,迭代至欺骗模型。该方法主要针对{0,1}型特征,为避免修改或删除特征后对软件的正常运行造成影响,因此仅向恶意应用软件中添加特征。Chen等人[14]对该方法进行了改进,提出AndroidHIV模型。该模型除了关注{0,1}特征外,还关注了API调用等序列型特征。
4. 基于生成对抗网络训练
基于GAN模型的对抗攻击方法在各领域都有广泛的应用,且有着不错的性能表现。Hu等人[15]提出MalGAN模型,其结构框架图如图所示,使用一个替代鉴别器来对应原来的黑盒检测模型,通过最小化损失函数尽可能接近原黑盒检测模型;使用一个生成器生成恶意软件样本,降低模型检测出恶意软件的概率。通过该模型生成的对抗样本都具有很好的表现,甚至可以使有些检测模型的检出率达到0%。
图1
5. 抗逆向技术
由于多数恶意软件检测技术都需要对dex可执行文件进行反编译,然后从中获取特征信息,因此一些Android恶意软件可以采用抗逆向技术如代码加壳等,逃避恶意软件检测模型。
三、问题与展望
1. Android恶意软件检测存在的问题
(1)特征选择
无论是传统的恶意软件检测方法,还是基于人工智能算法的恶意软件检测方法,都需要关注如何选择特征已经选择何种特征可以达到较好的检测效果。对于传统方法来说,其关键就在于特征选择,是选择静态特征、动态特征、还是结合二者,如何平衡特征计算复杂度与检测准确率,如何有效应对代码混淆、无用代码注入等攻击技术,都值得我们进行思考。而对于人工智能算法来说,虽然神经网络或机器学习方法可以自动获取复杂度较高的深层特征,但仍需要选择合适的特征抽取对象,比如是选择API调用序列还是字节码序列,最终都将对模型检测结果造成影响。
(2)0-day恶意软件检测
对于0-day恶意软件的检测,是目前Android恶意软件检测领域的主要问题之一。传统算法基于恶意应用特征库,进行模式匹配或指纹匹配的方法,显然无法有效应对0-day恶意软件。通常需要借助人工智能算法,获取更深层的复杂特征,比如从API调用序列中获取的语义信息等,深入理解恶意软件家族的内在逻辑,对0-day恶意软件的检测发挥着重要的作用。
(3)对抗攻击
对抗攻击对恶意软件检测模型造成了巨大的威胁,直接影响了模型的可用性。因此目前的Android恶意软件检测必须考虑如何防御对抗攻击,在模型设计时就应当提高模型的鲁棒性,根据用户对模型的访问场景(不限次数访问和有限次数访问)进行针对性防御。
2. Android恶意软件检测的发展趋势
(1)动态特征与静态特征相结合
单一静态特征与动态特征都存在一定的局限性,静态特征没有办法获取软件在运行过程中的行为信息,而动态特征则无法全面覆盖完整程序代码,将动态特征与静态特征相结合,才能同时获取更加全面、完整的特征信息,使Android恶意软件检测更加高效和准确。
(2)模型堆叠
单个恶意软件检测模型可能在某个方面有所欠缺,那就再堆叠一个在该方面表现良好的模型。堆叠模型集成了多种分类器,这些分类器并行计算获得各自预测的概率,将这些概率作为特征输入,通过堆叠分类器将每个模型的结果进行融合,可以有效提高检测模型的准确率和鲁棒性。
图2
(3)针对不同应用场景的恶意软件检测
Android恶意软件检测模型在实际应用中,需要针对不同应用场景设计不同量级的检测方案。比如对于智能设备而言,由于其资源算力有限,普通的高开销、高计算方法并不适用,需要设计轻量级的Android恶意软件检测方案;但对于安全厂商而言,系统安全性和检测准确率是更值得关注的指标,因此通常采用多层检测方案,用复杂的特征和模型获得更好的检测性能。
参考文献
中国保密协会
科学技术分会
长按扫码关注我们
作者:李嬿婌 信息工程研究所
责编:眼界
2021年精彩文章TOP5回顾
美国对华科技竞争政策性建议汇总
6G之卫星通信
浅谈计算机键盘电磁泄漏防护
近期精彩文章回顾