基于机器学习算法的恶意代码检测_第1页
基于机器学习算法的恶意代码检测_第2页
基于机器学习算法的恶意代码检测_第3页
基于机器学习算法的恶意代码检测_第4页
基于机器学习算法的恶意代码检测_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于机器学习算法的恶意代码检测

机器学习算法检测恶意代码天津理工大学计算机机房总共750台电脑,由于某种原因,机房内的电脑突然出现卡顿,上网异常等奇怪现象,花费一番精力后,已经检查了250台计算机,发现有些系统已经感染了恶意代码,有些则是正常的。但是还有500台机子没有检查,于是王老师交代给小王一个任务,现在想要使用一种省时可行的方案来判断这500台计算机是否感染了恶意代码。情景假设恶意代码的分析方法恶意代码静态分析方法恶意代码基于代码特征的分析方法恶意代码常用于对执行程序类型的恶意代码进行分析c语言编写的程序中存在一条语句CreateMuetex(NULL,NULL,“MYTEST”);那么在生成的PE文件中会存在一个静态数据“MYTEST”,通过分析PE结构可以从静态数据节中提取静态数据。用C语言编写的恶意代码中使用下面的语句URLDownloadToFile(0,"/a.exe","c:\\a.exe",0,0)从网站下载可执行程序到C盘根目录,这个动作很有可能是进行恶意代码升级基于代码语义的分析方法恶意代码基于代码语义的分析过程,首先使用反汇编工具对恶意代码执行体进行反汇编,然后通过理解恶意代码的反汇编程序了解恶意代码的功能。从理论上讲通过这种方法可以得到恶意代码所有功能特征。但是,目前基于语义的恶意代码分析方法主要还是依靠人工来完成,人工分析的过程需要花费分析人员的大量时间,对分析人员本身的要求也很高。动态分析方法恶意代码外部观察法恶意代码恶意代码作为一段程序在运行过程中通常会对系统造成一定的影响,有些恶意代码为了保证自己的自启动功能和进程隐藏的功能,通常会修改系统注册表和系统文件,或者会修改系统配置。1、通过网络进行传播、繁殖和拒绝服务攻击等破坏活动2、通过网络进行诈骗等犯罪活动3、通过网络将搜集到的机密信息传递给恶意代码的控制者4、在本地开启一些端口、服务等后门等待恶意代码控制者对受害主机的控制访问跟踪调试法恶意代码在实际分析过程中,跟踪调试可以有两种方法。1.单步跟踪恶意代码执行过程,监视恶意代码的每一个执行步骤,在分析过程中也可以在适当的时候执行恶意代码的一个片断,这种分析方法可以全面监视恶意代码的执行过程,但是分析过程相当耗时。2.利用系统hook技术监视恶意代码执行过程中的系统调用和API使用状态来分析恶意代码的功能,这种方法经常用于恶意代码检测。恶意代码分析方法比较分析内容代码特征分析法代码语义分析法外部观察法跟踪调试法隐藏功能能能加密功能能能能触发功能能能自启动功能能能能自主攻击和繁殖功能能部分能破坏功能能部分能对分析人员的依赖程度低较高低高对分析环境的破坏否否大可控1、背景

机器学习是近20多年兴起的一门多领域交叉学科,涉及概率论、统计学、逼近、凸分析、算法复杂度理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。即从数据中自动分析获得规律,并利用规律对未知数据进行预测的算法。2、机器学习算法的定义:

机器学习是一种让计算机在没有事先明确地编程的情况下做出正确反应的科学。3、算法

机器学习的算法很多。让人们困惑的是,很多算法是一类算法,而有些算法又是从其他算法中延伸出来的。这里,我们从两个方面来给大家介绍:机器学习常见算法分类汇总

机器学习常见算法分类汇总学习方式监督学习无监督学习机器学习算法统计分类回归分析聚类关联规则机器学习算法的主要任务是分类和回归。分类主要应用于离散型数据,回归主要用于预测数值型连续的数据,例如拟合曲线等。

使用机器学习算法首先考虑目的,如果想要预测目标变量,则可以选择监督学习算法,否则可以选择无监督学习算法。其次考虑数据问题,主要了解特征值是离散还是连续,是否存在缺失及异常。一般来说发现好算法的关键是反复试错的迭代过程。——《机器学习实战》决策树KNN逻辑回归朴素贝叶斯监督学习算法

机器学习常见算法分类汇总神经网络随机森林SVM监督学习算法

机器学习常见算法分类汇总AdaBoost遗传算法算法优化

机器学习常见算法分类汇总K-meansBIRCHApriori无监督学习算法

机器学习常见算法分类汇总恶意代码检测的发展及现状恶意代码检测的几个思路:1、行为特征

攻击树,行为:API调用,威胁指数stv(Parent)=∑sty(Child)*weight2、归一化

恶意代码归一化,再进行特征码匹配,针对恶意代码变形3、纹理指纹

恶意代码映射为无压缩灰阶图片,结合图像分析技术分析代码变种4、有效窗口和朴素贝叶斯有效窗口降低恶意代码噪音,朴素贝叶斯进行分类注释:前三种思想主要利用了恶意代码的特征,第四种方法核心思想认为对恶意代码的分类,因此采用了朴素贝叶斯,这也是近年来较为流行的方法5、机器学习算法:基本思想就是,利用数据挖掘可以从已存在的大量数据中挖掘出有意义的模式,利用机器学习可以帮助归纳出已知恶意代码的识别知识,以此来进行相似性搜索,帮助发现未知恶意代码。实现基于数据挖掘和机器学习的恶意代码检测系统,有两个关键:选择于分类相关的特征;选择最有效的分类器。恶意代码有多种特征,可以通过API(AIplicationProgramInterface)函数调用序列、指令序列、PE文件头、机器码字节序列、字符串等特征来实现恶意代码检测。机器学习检测恶意代码基本框架

主要分为以下五个步骤:第一步:特征提取,可分为两类:1、静态特征,如字节序列,PE字符串序列等;2、动态特征,如API系统调用序列、文件与进程操作等。第二步:特征处理,便于后续学习。方法主要两类:1、不进行任何处理,直接选择提取的特征信息;2、利用N-gram滑动窗口,提取特征序列。第三步:特征降维,如信息增益、Relife、Fisher、SHI等。第四步:分类学习,对降维处理后的数据集利用不同学习算法,如决策树、支持向量机、贝叶斯估计等,进行学习,利用学习的分类器对测试集进行测试。第五步:对测试集进行分析与评估。关于恶意代码检测的想法

根据恶意代码API调用序列特征生成动作曲线,多个动作曲线重合概率较多的点筛选出,这些点称为可以动作点,将可疑动作点拟合为可疑动作曲线,根据可疑动作曲线的重合率判断恶意代码,利用贝叶斯算法测试。1.典型恶意代码API调用序列2.可疑动作曲线的优点在于相比于典型恶意代码API,减少API序列的随机性,进而减少漏判误判。关于恶意代码检测的想法Polymorphic(多态化)模糊流程关于恶意代码检测的想法

提取恶意代码动态行为特征分析检测基本架构如左图所示。

第一步:搭建运行恶意代码的虚拟环境,便于加壳等一些处理过的恶意代码分析。

第二步:虚拟环境中执行恶意代码,并提取恶意代码动态行为语义特征。本课题选取恶意代码执行期间调用的API序列作为语义特征。

第三步:使用提取的语义特征进行模型建立,即组织语义信息建立语义模型。本课题对运行API调用序列加工,抽象为代表语义特征的动作曲线。

第四步:建立模型库,采用朴素贝叶斯进行检测。

注释:后期会考虑贝叶斯计算使用MapReduce进行并行计算优化,提升计算效率。机器学习算法检测恶意代码尝试编写一串指令来了解正常主机处理器和内存使用情况,然后同被感染主机上的处理器和内存使用情况进行比较。一旦发现这两组数据集中有一些不同的信息,就可以向计算机发送指令将这些信息应用到收集到从未知/未分类的系统收集的数据上。这样,让计算机来判断系统是否感染上恶意代码。机器算法恶检测意代码的思路:

cpu、内存使用情况检测恶意代码实现方法

将记录的所有系统的内存和处理器的使用情况保存在一个execel文件中,host记录了主机名,proc和mem分别记录了cpu和内存的使用情况,而state记录了是否感染恶意代码,部分数据如图所示。实现方法按照上述算法的第一步,即分别计算被感染和正常系统中处理器和内存的平均使用情况。R代码:inf<-colMeans(train[train$state=="Infected",c("proc","mem")])nrm<-colMeans(train[train$state=="Normal",c("proc","mem")])print(inf)##procmem##1.1520251.201779print(nrm)##procmem##-0.8701412-0.9386983从注释中输出的均值容易发现,感染和未感染恶意代码的均值间差异较大,所以这个方法可以较好的实现算法。实现方法(1)定义和训练一个算法: a)计算一直感染恶意软件系统的处理器和内存的平均使用情况。 b计算已知正常的系统的处理器和内存平均使用情况。(2)使用处理器和内存使用情况来预测未知系统是否感染恶意软件: a)如果处理器和内存使用情况更接近感染主机的平均情况,将该系统标记为已感染。 b)如果处理器和内存使用情况更接近正常主机的平均使用情况,将该系统标记为正常。注释:一个分类器就是一组规则,或一个决策模型,它们是通过对一组训练数据进行学习而产生的。实现方法首先,加载数据并进行检查。将数据进行归一化处理后,这些数字保持在同一尺度内。为了进一步探索这些数据,可将这些数据描绘出来。给基于染而已代码的状态可以比较并区分处理器和内存数据,如图所示。R代码:library(ggplot2)gg<-ggplot(memproc,aes(proc,mem,color=state))gg<-gg+scale_color_brewer(palette="Set2")gg<-gg+geom_point(size=3)+theme_bw()print(gg)注意:归一化化定义:归一化化就是要把你需要处理的数据经过处理后(通过某种算法)限制在你需要的一定范围内。首先归一化是为了后面数据处理的方便,其次是保正程序运行时收敛加快。线性函数转换:

y=(x-MinValue)/(MaxValue-MinValue)实现方法实现方法第二步,对数据进行预测。从需要检测的数据中,选取其中的“proc”和“mem”值,然后计算这些值与刚才在算法训练过程中得到的均值距离有多远。在这里,我们采用了几何中的勾股定理:a²+b²=c²,公式中a和吧是三角的两条边,c是斜边。此处,a是训练和你测试得到的两个proc值的差,b是训练和测试得到的mem值的差。得到这两个距离后,仅作比较即可。R代码:

predict.malware<-function(data){proc<-as.numeric(data[['proc']])mem<-as.numeric(data[['mem']])inf.a<-inf['proc']-procinf.b<-inf['mem']–mem

inf.dist<-sqrt(inf.a^2+inf.b^2)nrm.a<-nrm['proc']-procnrm.b<-nrm['mem']-mem

nrm.dist<-sqrt(nrm.a^2+nrm.b^2)ifelse(inf.dist<nrm.dist,"Infected","Normal")sum(test$state==prediction)/nrow(test)实现方法算出距离后,可以得到预测值的集合,并将这些预测值和真实值进行比较。输出图像,如图所示。实现方法为了判断方法的好坏,需要看看在测试数据上预测准确率有多少。使用计算预测准确的数量除以预测的总数量。R代码:sum(test$state==prediction)/nrow(test)##[1]0.8780488根据输出的结果可知,本算法的准确率约为88%,基本满足了要求。这个结果也可以从上图定量的观察出来。这个分类器在两个均值之间构建了一条直线,并垂直于相交线,处于直线上面部分的数据被预测为感染恶意代码系统,而下面部分的数据被预测为未感染,分类错误的个体在图中进行了

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论