当前位置:文档之家› 基于机器学习算法的恶意代码检测

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


机器学习算法
监督学习
统计 分类 回归 分析
无监督学习
聚类 关联 规则
机器学习常见算法分类汇总 LOGO
决策树
朴素贝叶斯
逻辑回归
KNN
监督学习算法
机器学习常见算法分类汇总 LOGO
SVM
神经网络
随机森林
监督学习算法
机器学习常见算法分类汇总 LOGO
AdaBoost
遗传算法
算法优化
机器学习常见算法分类汇总 LOGO
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盘根目录,这个动作很有可能是进行恶 意代码升级
机器学习常见算法分类汇总
1、背景
LOGO
机器学习是近20多年兴起的一门多领域交叉学科,涉及概率论、统计学、逼 近、凸分析、算法复杂度理论等多门学科。机器学习理论主要是设计和分析 一些让计算机可以自动“学习”的算法。即从数据中自动分析获得规律,并 利用规律对未知数据进行预测的算法。
2、机器学习算法的定义:
实现方法 LOGO
(1)定义和训练一个算法: a) 计算一直感染恶意软件系统的处理器和内存的平均使用情况。 b 计算已知正常的系统的处理器和内存平均使用情况。 (2)使用处理器和内存使用情况来预测未知系统是否感染恶意软件: a)如果处理器和内存使用情况更接近感染主机的平均情况,将 该系统标记为已感染。 b)如果处理器和内存使用情况更接近正常主机的平均使用情况, 将该系统标记为正常。
注意:归一化化定义:归一化化就是要把你需要处理的数据经过处理后 (通过某种算法)限制在你需要的一定范围内。首先归一化是为了后面数 据处理的方便,其次是保正程序运行时收敛加快。线性函数转换: y=(xMinValue)/(MaxValue-MinValue)
实现方法 LOGO
实现方法 LOGO
第二步,对数据进行预测。从需要检测的数据中,选取其中的 “proc”和“mem”值,然后计算这些值与刚才在算法训练过 程中得到的均值距离有多远。在这里,我们采用了几何中的勾 股定理:a² +b² =c² ,公式中a和吧是三角的两条边,c是斜边。 此处,a是训练和你测试得到的两个proc值的差,b是训练和测 试得到的mem值的差。得到这两个距离后,仅作比较即可。
机器学习检测恶意代码基本框架 LOGO
主要分为以下五个步骤: 第一步:特征提取,可分为两类:1、静态特征,如字节序列,PE字符 串序列等;2、动态特征,如API系统调用序列、文件与进程操作等。 第二步:特征处理,便于后续学习。方法主要两类:1、不进行任何处理, 直接选择提取的特征信息;2、利用N-gram滑动窗口,提取特征序列。 第三步:特征降维,如信息增益、Relife、Fisher、SHI等。 第四步:分类学习,对降维处理后的数据集利用不同学习算法,如决策 树、支持向量机、贝叶斯估计等,进行学习,利用学习的分类器对测试 集进行测试。 第五步:对测试集进行分析与评估。
基于机器学习算法的恶意代码检测
机器学习算法检测恶意代码 LOGO 情景假设
天津理工大学计算机机房总共750台电脑,由于某种原因,机房内 的电脑突然出现卡顿,上网异常等奇怪现象,花费一番精力后, 已经检查了250台计算机,发现有些系统已经感染了恶意代码,有 些则是正常的。但是还有500台机子没有检查,于是王老师交代给 小王一个任务,现在想要使用一种省时可行的方案来判断这500台 计算机是否感染了恶意代码。
关于恶意代码检测的想法 LOGO
根据恶意代码API调用序列特征生成动作曲线,多个动作曲线重合概率 较多的点筛选出,这些点称为可以动作点,将可疑动作点拟合为可疑动 作曲线,根据可疑动作曲线的重合率判断恶意代码,利用贝叶斯算法测 试。 1.典型恶意代码API调用序列
2.可疑动作曲线的优点在于相比于典型恶意代码API,减少API序列的随 机性,进而减少漏判误判。
机器学习是一种让计算机在没有事先明确地编程的情况下做出正确反应的科 学。
3、算法
机器学习的算法很多。让人们困惑的是,很多算法是一类算法,而有些算法 又是从其他算法中延伸出来的。这里,我们从两个方面来给大家介绍:
学习方式
机器学习常见算法分类汇总 LOGO
机器学习算法的主要任务是分类和回归。分类主要应用于离散型数 据,回归主要用于预测数值型连续的数据,例如拟合曲线等。 使用机器学习算法首先考虑目的,如果想要预测目标变量,则可以 选择监督学习算法,否则可以选择无监督学习算法。其次考虑数据问 题,主要了解特征值是离散还是连续,是否存在缺失及异常。一般来 说发现好算法的关键是反复试错的迭代过程。——《机器学习实战》
关于恶意代码检测的想法 LOGO
Polymorphic(多态化)模糊流程
关于恶意代码检测的想法 LOGO
提取恶意代码动态行为特征分析检测基本架 构如左图所示。 第一步:搭建运行恶意代码的虚拟环境,便 于加壳等一些处理过的恶意代码分析。 第二步:虚拟环境中执行恶意代码,并提取 恶意代码动态行为语义特征。本课题选取恶 意代码执行期间调用的API序列作为语义特征。 第三步:使用提取的语义特征进行模型建立, 即组织语义信息建立语义模型。本课题对运 行API调用序列加工,抽象为代表语义特征的 动作曲线。 第四步:建立模型库,采用朴素贝叶斯进行 检测。 注释:后期会考虑贝叶斯计算使用 MapReduce进行并行计算优化,提升计 算效率。
机器学习算法检测恶意代码 LOGO
机器算法恶检测意代码的思路: cpu、内存使用情况检 测恶意代码
尝试编写一串指令来了解正常主机处理器和内存使用情 况,然后同被感染主机上的处理器和内存使用情况进行 比较。一旦发现这两组数据集中有一些不同的信息,就 可以向计算机发送指令将这些信息应用到收集到从未知 /未分类的系统收集的数据上。这样,让计算机来判断 系统是否感染上恶意代码。
恶意代码
恶意代码的分析方法
静态分析方法
• 是在不运行恶意代码的情况下,利用分析工 具对恶意代码的静态特征和功能模块进行分 析的方法
动态分析方法
• 是通过监视恶意代码运行过程从而了解恶意 代码功能。
恶意代码
静态分析方法
1、基于代码特征的分析方法
• 分析过程中,不考虑恶意代码的指令意义,而 是分析指令的统计特性、代码的结构特性等。
实现方法 LOGO
将记录的所有系统的内存和处理器的使用情况保存在一个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) ## proc mem ## 1.152025 1.201779 print(nrm) ## proc mem ## -0.8701412 -0.9386983 从注释中输出的均值容易发现,感染和未感染恶意代码的均值间 差异较大,所以这个方法可以较好的实现算法。
恶意代码分析方法比较
分析内容 隐藏功能 加密功能 触发功能 自启动功能 自主攻击和繁 殖功能 破坏功能 对分析人员的 依赖程度 对分析环境的 破坏 低 否 能 代码特征分 析法 代码语义分 析法 能 能 能 能 能 能 较高 否 能 部分 部分 低 大 外部观察法
LOGO
跟踪调试法 能 能 能 能 能 能 高 可控
1、通过网络进行传播、繁殖和拒绝服务攻击等破坏活动 2、通过网络进行诈骗等犯罪活动 3、通过网络将搜集到的机密信息传递给恶意代码的控制 者 4、在本地开启一些端口、服务等后门等待恶意代码控制 者对受害主机的控制访问
恶意代码
跟踪调试法
在实际分析过程中,跟踪调试可以有两种方法。
1.单步跟踪恶意代码执行过程,监视恶意代码的每一个 执行步骤,在分析过程中也可以在适当的时候执行恶意 代码的一个片断,这种分析方法可以全面监视恶意代码 的执行过程,但是分析过程相当耗时。 2.利用系统hook技术监视恶意代码执行过程中的系统调 用和API使用状态来分析恶意代码的功能,这种方法经 常用于恶意代码检测。
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)
相关主题