基于深度学习的恶意样本检测技术研究文献综述
2020-04-14 17:30:24
随着信息化社会的发展,工业、国防、教育、金融等社会各行各业的信息越来越依赖于计算机和互联网,但是频繁发生的网络安全事件给人们敲响了警钟。计算机网络安全问题正成为人类信息化所面临的巨大挑战,关系到个人、企业和国家的利益。而网络安全问题的始作俑者主要是恶意程序。近年来,恶意程序的编码水平不断提高,在恶意程序灰色产业链带来的巨大利益驱使下,恶意程序正在朝着规模化发展,导致了恶意程序的爆炸式增长。这种情况下传统的恶意样本检测技术远不能达到需求。比如基于特征码的恶意程序分析技术,需要提取每一个恶意程序的特征码,而对于数以万计的恶意样本,提取特征码的工作量巨大,并且效率极低;另一方面,用户端需要定期升级最新的病毒库,恶意程序的爆炸式增长导致病毒库容量也需要大幅增大,这将导致资源的占用以及检测分析的速度。另外智能手机普及率急剧增加,移动支付也正在占领市场,导致智能手机平台的恶意程序也越来越活跃,在这些背景下,开发全新的恶意样本检测技术,以应对恶意程序前所未有的挑战迫在眉睫。
在恶意程序数量爆炸的背景下,选择机器学习算法成为趋势。机器学习算法更加高效,目前已经有不少采用机器学习算法对恶意样本行为进行检测的研究。Malheur由Konrad Rieck等人提出并给出了相应的开源实现,以样本中API出现的相对顺序作为特征向量,利用原型和聚类算法进行检测分析,该方法的缺点是特征向量过于稀疏,在高达几万维的特征向量中往往只有几十到几百维的特征值非零。Radu等人采用随机森林算法检测恶意动态行为,根据API调用信息提取了68维的特征向量,对四类恶意样本进行了分类。该研究没有考虑白样本,适合在对样本黑白分类后进行恶意类别细分。Ivan等人用KNN,朴素贝叶斯,SVM,J48,MLP这5种算法进行了比较分析,不过其用于实验的总样本数只有470个,其结果的可靠性不是很高。
上述研究方法都采用了传统机器学习算法,利用手工分析特征向量进行分类处理,其结果受特征向量选取的影响极大。在过去几年中,深度学习已成为大多数AI问题的首选技术,掩盖了经典的机器学习,其中的主要原因是深度学习已经在包括自然语言、视觉等在内的多领域中有优异的表现。深度学习的动机在于建立、模拟人脑进行分析学习的神经网络,通过模仿人脑的机制来解读数据,例如图像、声音和文本。实际上它是一种无监督学习,其概念源于人工神经网络的研究。本研究将采用CNN算法,CNN即卷积神经网络,1998年Yann LeCun设计了用于手写数字识别的卷积神经网络LeNet-5,后经Hinton及其学生Alex Krizhevskyx修改,于2012年获得了ImageNet竞赛冠军。之后CNN就得到了广泛应用,检测结果十分优异。借助CNN在自然语言处理方面的研究成果,进行恶意样本的动态行为检测,不需要人工提取特征向量,具体的特征是算法根据样本的动态行为信息自行学习。
基于深度学习的恶意样本检测技术可以利用恶意程序的特有行为特征来检测程序的恶意性,能够很好地检测未知恶意程序,这种恶意样本检测技术可以很好的适应目前恶意程序呈现的新特点,具有巨大的优越性和广阔的发展空间。
{title}2. 研究的基本内容与方案
{title}本设计的基本内容和目标包括以下三个方面:
1. 了解恶意样本检测的发展简史和研究现状,掌握数据挖掘的应用领域和适用范围,掌握机器学习、深度学习的基本概念和方法,并进行细致的总结和分析。
2. 深刻理解和掌握深度学习理论和技术、恶意样本检测的理论及其实现过程,主要研究内容包括:恶意样本特征提取的静态分析技术、动态分析技术,基于卷积神经网络的恶意样本检测技术。
3. 基于卷积神经网络算法,构建PC端恶意样本检测系统。主要功能:输入数据预处理,基于静态分析技术提取恶意样本特征,基于卷积神经网络检测恶意样本,实现对输入测试样本良性(恶性)的判定。主要性能:五折交叉验证平均准确率85%以上。给出系统的测试方案和实验结果分析。
目前针对恶意程序的特征数据提取可以分为两大类:静态检测和动态检测。静态检测静态检测是指并不实际运行样本,而是直接根据二进制样本或相应的反汇编代码进行分析,得到需要的动作指令,再提取统计相关数据,为检测系统提供特征集以及响应的数据来源。此类方法大多针对应用申请的权限、API调用、应用证书等提取特征集,但容易受到变形、加壳、隐藏等方式的干扰,不能做到完全覆盖,且细粒度低,容易导致漏报、错误。动态检测是指将样本在沙箱等环境中运行,根据样本对操作系统的资源调度情况进行分析,并根据规则对行为进行打分,根据分值高低来判定样本的恶意程度。
恶意样本的检测主要是对样本良性和恶意的检测,这是一个二分类问题,而在对恶意样本特性分类时,又用到了聚类算法,因此可能用到的算法包括:贝叶斯分类器、决策树、支持向量机、神经网络、k-近邻、k-均值、k-中心点等。通过综合使用其中的一种或者几种算法,来达到最优的效果,因此在实验测试过程中需要分别测试以上算法。