基于机器学习算法的恶意代码检测
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
恶意代码
1、外部观察法
源自文库
动态分析方法
• 是利用系统监视工具观察恶意代码运行过程 时系统环境的变化,通过分析这些变化判断 恶意代码的功能。
2、跟踪调试法
• 是通过跟踪恶意代码执行过程使用的系统函 数和指令特征分析恶意代码功能的技术。
恶意代码
外部观察法
恶意代码作为一段程序在运行过程中通常会对系 统造成一定的影响,有些恶意代码为了保证自己 的自启动功能和进程隐藏的功能,通常会修改系 统注册表和系统文件,或者会修改系统配置。
机器学习算法检测恶意代码 LOGO
机器算法恶检测意代码的思路: cpu、内存使用情况检 测恶意代码
尝试编写一串指令来了解正常主机处理器和内存使用情 况,然后同被感染主机上的处理器和内存使用情况进行 比较。一旦发现这两组数据集中有一些不同的信息,就 可以向计算机发送指令将这些信息应用到收集到从未知 /未分类的系统收集的数据上。这样,让计算机来判断 系统是否感染上恶意代码。
机器学习算法
监督学习
统计 分类 回归 分析
无监督学习
聚类 关联 规则
机器学习常见算法分类汇总 LOGO
决策树
朴素贝叶斯
逻辑回归
KNN
监督学习算法
机器学习常见算法分类汇总 LOGO
SVM
神经网络
随机森林
监督学习算法
机器学习常见算法分类汇总 LOGO
AdaBoost
遗传算法
算法优化
机器学习常见算法分类汇总 LOGO
K-means
BIRCH
Apriori
无监督学习算法
恶意代码检测的发展及现状 LOGO
恶意代码有多种特征,可以通过API(AIplication Program Interface)函数调用序列、 指令序列、PE文件头、机器码字节序列、字符串等特征来实现恶意代码检测。 恶意代码检测的几个思路: 1、行为特征 攻击树,行为:API调用,威胁指数stv(Parent)=∑sty(Child)*weight 2、归一化 恶意代码归一化,再进行特征码匹配,针对恶意代码变形 3、纹理指纹 恶意代码映射为无压缩灰阶图片,结合图像分析技术分析代码变种 4、有效窗口和朴素贝叶斯 有效窗口降低恶意代码噪音,朴素贝叶斯进行分类 注释:前三种思想主要利用了恶意代码的特征,第四种方法核心思想认为对恶意代码的 分类,因此采用了朴素贝叶斯,这也是近年来较为流行的方法 5、机器学习算法:基本思想就是,利用数据挖掘可以从已存在的大量数据中挖掘出有 意义的模式,利用机器学习可以帮助归纳出已知恶意代码的识别知识,以此来进行相似 性搜索,帮助发现未知恶意代码。实现基于数据挖掘和机器学习的恶意代码检测系统, 有两个关键:选择于分类相关的特征;选择最有效的分类器。
机器学习是一种让计算机在没有事先明确地编程的情况下做出正确反应的科 学。
3、算法
机器学习的算法很多。让人们困惑的是,很多算法是一类算法,而有些算法 又是从其他算法中延伸出来的。这里,我们从两个方面来给大家介绍:
学习方式
机器学习常见算法分类汇总 LOGO
机器学习算法的主要任务是分类和回归。分类主要应用于离散型数 据,回归主要用于预测数值型连续的数据,例如拟合曲线等。 使用机器学习算法首先考虑目的,如果想要预测目标变量,则可以 选择监督学习算法,否则可以选择无监督学习算法。其次考虑数据问 题,主要了解特征值是离散还是连续,是否存在缺失及异常。一般来 说发现好算法的关键是反复试错的迭代过程。——《机器学习实战》
恶意代码分析方法比较
分析内容 隐藏功能 加密功能 触发功能 自启动功能 自主攻击和繁 殖功能 破坏功能 对分析人员的 依赖程度 对分析环境的 破坏 低 否 能 代码特征分 析法 代码语义分 析法 能 能 能 能 能 能 较高 否 能 部分 部分 低 大 外部观察法
LOGO
跟踪调试法 能 能 能 能 能 能 高 可控
实现方法 LOGO
将记录的所有系统的内存和处理器的使用情况保存在一个execel文件中, host记录了主机名,proc和mem分别记录了cpu和内存的使用情况,而 state记录了是否感染恶意代码,部分数据如图所示。
实现方法 LOGO
按照上述算法的第一步,即分别计算被感染和正常系统中处理器 和内存的平均使用情况。 R代码: inf <- colMeans(train[train$state=="Infected", c("proc", "mem")]) nrm <- colMeans(train[train$state=="Normal", c("proc", "mem")]) print(inf) ## proc mem ## 1.152025 1.201779 print(nrm) ## proc mem ## -0.8701412 -0.9386983 从注释中输出的均值容易发现,感染和未感染恶意代码的均值间 差异较大,所以这个方法可以较好的实现算法。
实现方法 LOGO
(1)定义和训练一个算法: a) 计算一直感染恶意软件系统的处理器和内存的平均使用情况。 b 计算已知正常的系统的处理器和内存平均使用情况。 (2)使用处理器和内存使用情况来预测未知系统是否感染恶意软件: a)如果处理器和内存使用情况更接近感染主机的平均情况,将 该系统标记为已感染。 b)如果处理器和内存使用情况更接近正常主机的平均使用情况, 将该系统标记为正常。
1、通过网络进行传播、繁殖和拒绝服务攻击等破坏活动 2、通过网络进行诈骗等犯罪活动 3、通过网络将搜集到的机密信息传递给恶意代码的控制 者 4、在本地开启一些端口、服务等后门等待恶意代码控制 者对受害主机的控制访问
恶意代码
跟踪调试法
在实际分析过程中,跟踪调试可以有两种方法。
1.单步跟踪恶意代码执行过程,监视恶意代码的每一个 执行步骤,在分析过程中也可以在适当的时候执行恶意 代码的一个片断,这种分析方法可以全面监视恶意代码 的执行过程,但是分析过程相当耗时。 2.利用系统hook技术监视恶意代码执行过程中的系统调 用和API使用状态来分析恶意代码的功能,这种方法经 常用于恶意代码检测。
关于恶意代码检测的想法 LOGO
Polymorphic(多态化)模糊流程
关于恶意代码检测的想法 LOGO
提取恶意代码动态行为特征分析检测基本架 构如左图所示。 第一步:搭建运行恶意代码的虚拟环境,便 于加壳等一些处理过的恶意代码分析。 第二步:虚拟环境中执行恶意代码,并提取 恶意代码动态行为语义特征。本课题选取恶 意代码执行期间调用的API序列作为语义特征。 第三步:使用提取的语义特征进行模型建立, 即组织语义信息建立语义模型。本课题对运 行API调用序列加工,抽象为代表语义特征的 动作曲线。 第四步:建立模型库,采用朴素贝叶斯进行 检测。 注释:后期会考虑贝叶斯计算使用 MapReduce进行并行计算优化,提升计 算效率。
注意:归一化化定义:归一化化就是要把你需要处理的数据经过处理后 (通过某种算法)限制在你需要的一定范围内。首先归一化是为了后面数 据处理的方便,其次是保正程序运行时收敛加快。线性函数转换: y=(xMinValue)/(MaxValue-MinValue)
实现方法 LOGO
实现方法 LOGO
第二步,对数据进行预测。从需要检测的数据中,选取其中的 “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'] - proc inf.b <- inf['mem'] – mem inf.dist <- sqrt(inf.a^2 + inf.b^2) nrm.a <- nrm['proc'] - proc nrm.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)
注释:一个分类器就是一组规则,或一个决策模型,它们是通过对一 组训练数据进行学习而产生的。
实现方法 LOGO
首先,加载数据并进行检查。将数据进行归一化处理后,这些数 字保持在同一尺度内。为了进一步探索这些数据,可将这些数据 描绘出来。给基于染而已代码的状态可以比较并区分处理器和内 存数据,如图所示。 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)
机器学习检测恶意代码基本框架 LOGO
主要分为以下五个步骤: 第一步:特征提取,可分为两类:1、静态特征,如字节序列,PE字符 串序列等;2、动态特征,如API系统调用序列、文件与进程操作等。 第二步:特征处理,便于后续学习。方法主要两类:1、不进行任何处理, 直接选择提取的特征信息;2、利用N-gram滑动窗口,提取特征序列。 第三步:特征降维,如信息增益、Relife、Fisher、SHI等。 第四步:分类学习,对降维处理后的数据集利用不同学习算法,如决策 树、支持向量机、贝叶斯估计等,进行学习,利用学习的分类器对测试 集进行测试。 第五步:对测试集进行分析与评估。
恶意代码
基于代码语义的分析方法
基于代码语义的分析过程,首先使用反汇编工具 对恶意代码执行体进行反汇编,然后通过理解恶 意代码的反汇编程序了解恶意代码的功能。从理 论上讲通过这种方法可以得到恶意代码所有功能 特征。 但是,目前基于语义的恶意代码分析方法主要还 是依靠人工来完成,人工分析的过程需要花费分 析人员的大量时间,对分析人员本身的要求也很 高。
机器学习常见算法分类汇总
1、背景
LOGO
机器学习是近20多年兴起的一门多领域交叉学科,涉及概率论、统计学、逼 近、凸分析、算法复杂度理论等多门学科。机器学习理论主要是设计和分析 一些让计算机可以自动“学习”的算法。即从数据中自动分析获得规律,并 利用规律对未知数据进行预测的算法。
2、机器学习算法的定义:
2、基于代码语义的分析方法
• 要求考虑构成恶意代码的指令的含义,通过理 解指令语义建立恶意代码的流程图和功能框图, 进一步分析恶意代码的功能结构。
恶意代码
基于代码特征的分析方法
常用于对执行程序类型的恶意代码进行分析 c语言编写的程序中存在一条语句 CreateMuetex(NULL,NULL,“MYTEST”);那 么在生成的PE文件中会存在一个静态数据 “MYTEST”,通过分析PE结构可以从静态数 据节中提取静态数据。 用C语言编写的恶意代码中使用下面的语句 URLDownloadToFile(0,"http://www.microsoft.c om/a.exe","c:\\a.exe",0,0)从网站下载可执行程 序到C盘根目录,这个动作很有可能是进行恶 意代码升级
基于机器学习算法的恶意代码检测
机器学习算法检测恶意代码 LOGO 情景假设
天津理工大学计算机机房总共750台电脑,由于某种原因,机房内 的电脑突然出现卡顿,上网异常等奇怪现象,花费一番精力后, 已经检查了250台计算机,发现有些系统已经感染了恶意代码,有 些则是正常的。但是还有500台机子没有检查,于是王老师交代给 小王一个任务,现在想要使用一种省时可行的方案来判断这500台 计算机是否感染了恶意代码。
关于恶意代码检测的想法 LOGO
根据恶意代码API调用序列特征生成动作曲线,多个动作曲线重合概率 较多的点筛选出,这些点称为可以动作点,将可疑动作点拟合为可疑动 作曲线,根据可疑动作曲线的重合率判断恶意代码,利用贝叶斯算法测 试。 1.典型恶意代码API调用序列
2.可疑动作曲线的优点在于相比于典型恶意代码API,减少API序列的随 机性,进而减少漏判误判。
恶意代码
恶意代码的分析方法
静态分析方法
• 是在不运行恶意代码的情况下,利用分析工 具对恶意代码的静态特征和功能模块进行分 析的方法
动态分析方法
• 是通过监视恶意代码运行过程从而了解恶意 代码功能。
恶意代码
静态分析方法
1、基于代码特征的分析方法
• 分析过程中,不考虑恶意代码的指令意义,而 是分析指令的统计特性、代码的结构特性等。