对 Detection of Malicious Code Variants Based on Deep Learning 的简单理解

2023-10-25 16:20

本文主要是介绍对 Detection of Malicious Code Variants Based on Deep Learning 的简单理解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章的核心技术主要包括三种:

1.把恶意代码转换成灰度化图像

2.利用卷积神经网络对图像进行识别和分类,能够自动提取恶意软件图像的特征.

3.使用蝙蝠算法来解决不同恶意软件家族之间的数据不平衡问题。

Index Terms—
Malware variants 恶意软件变体
grayscale image 灰度图像
deep learning 深度学习
convolution neural network 卷积神经网络
bat algorithm 蝙蝠算法

恶意检测(Malware detection)方法包括:

1.静态检测static analysis:通过分解恶意软件代码并分析其执行逻辑。

2.动态监测dynamic analysis:通过在安全的虚拟环境或沙箱 (专业的虚拟类软件) 中执行恶意代码来分析恶意代码的行为。
以上两种都是基于特征的检测方法(feature-based detection methods)。

使用数据挖掘 data mining methods 检测恶意代码,效率更高。
(数据挖掘(Data Mining)是通过分析每个数据,从大量数据中寻找其规律的技术)

Challenges:

1.根据恶意代码的特征来检测恶意代码的方法(静态检测,动态检测,或者更高效的机器学习检测)在检测恶意代码变元和未知恶意代码时效率变得很低。而将恶意软件可视化的方法可以处理代码混淆问题,但复杂的图像纹理特征提取需要很高的时间成本。此外,这些特征提取方法在大数据集情况下也显示出了较低的效率。
建立一个恶意软件检测的挑战就是去建立 一个能高效,自动的提取特征的模型 。
(The challenge for building malware detection models is to find a means for extracting features effectively and automatically.)

2.数据不平衡问题带来了另一个挑战。代码的变化在不同的代码族之间有很大的不同。
要建立一个通用的检测模型。
(The challenge is to build a universal detection model that can deal with the huge volume of variations, so that it can work well
across malware families)

Contribution:

  1. 介绍了一种把恶意软件二进制代码转换成一张图片的方法,从而将 恶意检测问题 转化成 图片分类 问题。
  2. 提出了一种用 卷积神经网络 检测恶意软件变体的新颖方法。
  3. 为了解决不同恶意软件家族之间的数据不平衡问题,设计了一种基于蝙蝠算法的有效的数据平衡方法。
  4. 大量的实验结果显示我们的方法在恶意软件检测方面是很高效的。

相关工作:

A :基于分析特征的恶性软件检测 Malware Detection Based on Feature Analysis:

静态检测Static analysis:分析恶性代码的方法。不过静态方法很容易被迷惑的技巧欺骗。为了解决这个问题,提出了一种利用 跟踪语义 来表征恶意软件行为的新型恶意软件检测算法。这种算法与迷惑的指令搏斗(eg:重新分配指令、插入垃圾代码和注册重新分配)。而该方法仅限于指令级的特征提取和分析。此外,模式匹配是复杂的。

跟踪语义:我的理解是标记每一步的迷惑指令。然后利用其标记而检测代码的恶意性。

动态检测Dynamic analysis:通过基于评估其行为监视分析其运行时APP的特征,例如访问私有数据和使用受限制的API呼叫。给定这些信息后,会建立起一个行为检测器。而这种方法也受限于仍然受到为产生 不可靠结果 而制定的各种对策 的挑战。此外,由于计算开销大,动态分析也很耗时,当暴露在一个大数据集中时会导致效率低下。

不可靠结果:我的理解是检测器将APP访问私有数据和使用受限制的API呼叫检测错误,而产生了错误的结果,从而建立了错误的参数。

B: 恶意代码可视化

Yoo等人利用 自组织地图 去可视化电脑病毒。
Trinius等人用 树状图 和 线程图 去检测恶意软件并对其进行分类。
Goodall等人将 不同恶意软件分析工具 的结果汇总到一个 视觉环境 中,增加了单个恶意软件工具检测覆盖率的脆弱性。
Nataraj等人提出了一种基于二元纹理分析的恶意软件检测可视化方法,首先他们将恶意软件可执行文件(malware executable file)转化为灰度图像,然后他们根据这些 图像的纹理特征 来识别恶意软件,并获得与动态检测相同的检测效果。
Hen等人将恶意软件二进制信息转换成彩色图像矩阵,并采用图像处理方法对恶意软件进行分类。

C:恶意软件检测图像处理技术

Nataraj等人用 GIST算法(搜索树算法) 去挖掘恶意软件图像的特征,但是这个算法要花费大量的时间。
Daniel等人提出了一种基于 剪切算法 和 遗传算法 的 图像融合算法。(拥有更高效的融合质量)

不过这两种方法都需要大量的时间消耗。
“”"
GIST算法(搜索树算法):就是一种通用索引机制,能有效支持数据类型和查询谓词的可扩展,在数据库中引入新的数据类型时能提供对新的数据类型索引的支持。(其实就是能够起到很好的搜索索引作用的算法)
剪切算法:一种能减少CPU和内存的使用量的算法。
遗传算法:一种解决最优化的一种搜索启发式算法。
“”"

D:基于深度学习的恶意软件检测方法

Yuan等人推出了一种在线恶意软件检测原型系统,他们的模型通过学习从静态分析和动态分析的安卓应用程序中提取的特征,获得了很高的准确性。
David等人提出了一种类似但更有说服力的方法,不需要恶意软件行为的类型,他们的模型基于深层信仰网络deep belief network (DBN),用于自动恶意软件签名生成和分类。

利用卷积神经网络检测恶意软件

1:将恶意代码转化为灰度化图像。

2:设计用于检测灰度图像的卷积神经网络。
(过程如下图)

将代码灰度化图像
一个恶意软件二进制位字符串可以被分解成许多长度为8位的子字符串,每个子字符串可以看做是一个像素,然后根据特定给的固定的宽度(图像的高度由文件的大小决定),恶意代码就可以转化成一幅灰度图片。
(以下根据经验观察,为不同大小的文件提供一些推荐的图像宽度)
在这里插入图片描述

不同的恶意软件族的灰度图像也是不同的,而相同族的恶意软件灰度图像是差不多的。
(据此引发用卷积神经网络检测恶意软件的想法)
在这里插入图片描述

基于CNN的恶意软件图像分类
把图像看作是网络的输入。与传统的识别算法相比,该方法不受复杂特征提取和数据重构的限制。
在这里插入图片描述
第一次提取前者的有用信息后,增强其信号并减少其噪声,后者就可以减少数据的处理量,同时保留有用的信息。然后,有几个完全连接的层将一个二维特征转换为一个符合分类器标准的一维特征。最后,分类器对恶意软件图像进行识别和排序。根据自己的特点分成不同的类。
恶意软件图像数据平衡
提出了一种基于智能优化算法(即基于BAT算法的动态重采样)的数据均衡方法,解决了不同恶意软件家庭值之间的数据不平衡问题。

1.图像数据增强技术
在这里插入图片描述
适当的数据增强方法可以有效地避免过拟合问题。使用原始图像数据的转换(改变图像像素的位置并确保特征保持不变) 生成新数据。如旋转/反射,翻转,缩放,缩小,比例,对比度,噪声和颜色转换都是图像的增强手法。然而,一些图像通过不适当的过渡(即过度轮换)丢失一些不信息。左下角看到的图像缺乏Swizzor.gen!E家族的纹理特征(底部是黑点)。

2.基于BAT算法的数据均衡

在这里插入图片描述

(以上数据不均衡的问题,会导致分类器的分类性能出现很大的偏差,而为此问题提出了用蝙蝠算法(BAT算法)解决数据不均衡问题。)
(蝙蝠算法:该算法是一种基于迭代的优化技术,初始化为一组随机解,然后 通过迭代搜寻最优解,且在最优解周围通过随机飞行产生局部新解,加强了局部搜索。)
针对权重组合问题,提出了一种基于BAT算法的动态重采样方法。一些研究者将BAT算法应我们用它对多个恶意软件家族的抽样权值进行修正。在模型训练过程中,为了适当地平衡样本,根据每个时期的权重对每一个类别进行重放。训练模型的精度是一个目标函数。优化的目的是在精度达到设定阈值时,找到蝙蝠的最优位置。

OK,以上。

这篇关于对 Detection of Malicious Code Variants Based on Deep Learning 的简单理解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/283755

相关文章

深入理解Mysql OnlineDDL的算法

《深入理解MysqlOnlineDDL的算法》本文主要介绍了讲解MysqlOnlineDDL的算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小... 目录一、Online DDL 是什么?二、Online DDL 的三种主要算法2.1COPY(复制法)

Python实现简单封装网络请求的示例详解

《Python实现简单封装网络请求的示例详解》这篇文章主要为大家详细介绍了Python实现简单封装网络请求的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录安装依赖核心功能说明1. 类与方法概览2.NetHelper类初始化参数3.ApiResponse类属性与方法使用实

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

解决Nginx启动报错Job for nginx.service failed because the control process exited with error code问题

《解决Nginx启动报错Jobfornginx.servicefailedbecausethecontrolprocessexitedwitherrorcode问题》Nginx启... 目录一、报错如下二、解决原因三、解决方式总结一、报错如下Job for nginx.service failed bec

python连接sqlite3简单用法完整例子

《python连接sqlite3简单用法完整例子》SQLite3是一个内置的Python模块,可以通过Python的标准库轻松地使用,无需进行额外安装和配置,:本文主要介绍python连接sqli... 目录1. 连接到数据库2. 创建游标对象3. 创建表4. 插入数据5. 查询数据6. 更新数据7. 删除

Jenkins的安装与简单配置过程

《Jenkins的安装与简单配置过程》本文简述Jenkins在CentOS7.3上安装流程,包括Java环境配置、RPM包安装、修改JENKINS_HOME路径及权限、启动服务、插件安装与系统管理设置... 目录www.chinasem.cnJenkins安装访问并配置JenkinsJenkins配置邮件通知

深入理解go中interface机制

《深入理解go中interface机制》本文主要介绍了深入理解go中interface机制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前言interface使用类型判断总结前言go的interface是一组method的集合,不

Python yield与yield from的简单使用方式

《Pythonyield与yieldfrom的简单使用方式》生成器通过yield定义,可在处理I/O时暂停执行并返回部分结果,待其他任务完成后继续,yieldfrom用于将一个生成器的值传递给另一... 目录python yield与yield from的使用代码结构总结Python yield与yield

Java Spring的依赖注入理解及@Autowired用法示例详解

《JavaSpring的依赖注入理解及@Autowired用法示例详解》文章介绍了Spring依赖注入(DI)的概念、三种实现方式(构造器、Setter、字段注入),区分了@Autowired(注入... 目录一、什么是依赖注入(DI)?1. 定义2. 举个例子二、依赖注入的几种方式1. 构造器注入(Con

Java中使用 @Builder 注解的简单示例

《Java中使用@Builder注解的简单示例》@Builder简化构建但存在复杂性,需配合其他注解,导致可变性、抽象类型处理难题,链式编程非最佳实践,适合长期对象,避免与@Data混用,改用@G... 目录一、案例二、不足之处大多数同学使用 @Builder 无非就是为了链式编程,然而 @Builder