对 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

相关文章

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

redis群集简单部署过程

《redis群集简单部署过程》文章介绍了Redis,一个高性能的键值存储系统,其支持多种数据结构和命令,它还讨论了Redis的服务器端架构、数据存储和获取、协议和命令、高可用性方案、缓存机制以及监控和... 目录Redis介绍1. 基本概念2. 服务器端3. 存储和获取数据4. 协议和命令5. 高可用性6.

JAVA调用Deepseek的api完成基本对话简单代码示例

《JAVA调用Deepseek的api完成基本对话简单代码示例》:本文主要介绍JAVA调用Deepseek的api完成基本对话的相关资料,文中详细讲解了如何获取DeepSeekAPI密钥、添加H... 获取API密钥首先,从DeepSeek平台获取API密钥,用于身份验证。添加HTTP客户端依赖使用Jav

深入理解Apache Airflow 调度器(最新推荐)

《深入理解ApacheAirflow调度器(最新推荐)》ApacheAirflow调度器是数据管道管理系统的关键组件,负责编排dag中任务的执行,通过理解调度器的角色和工作方式,正确配置调度器,并... 目录什么是Airflow 调度器?Airflow 调度器工作机制配置Airflow调度器调优及优化建议最

利用Python编写一个简单的聊天机器人

《利用Python编写一个简单的聊天机器人》这篇文章主要为大家详细介绍了如何利用Python编写一个简单的聊天机器人,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 使用 python 编写一个简单的聊天机器人可以从最基础的逻辑开始,然后逐步加入更复杂的功能。这里我们将先实现一个简单的

一文带你理解Python中import机制与importlib的妙用

《一文带你理解Python中import机制与importlib的妙用》在Python编程的世界里,import语句是开发者最常用的工具之一,它就像一把钥匙,打开了通往各种功能和库的大门,下面就跟随小... 目录一、python import机制概述1.1 import语句的基本用法1.2 模块缓存机制1.

深入理解C语言的void*

《深入理解C语言的void*》本文主要介绍了C语言的void*,包括它的任意性、编译器对void*的类型检查以及需要显式类型转换的规则,具有一定的参考价值,感兴趣的可以了解一下... 目录一、void* 的类型任意性二、编译器对 void* 的类型检查三、需要显式类型转换占用的字节四、总结一、void* 的

深入理解Redis大key的危害及解决方案

《深入理解Redis大key的危害及解决方案》本文主要介绍了深入理解Redis大key的危害及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一、背景二、什么是大key三、大key评价标准四、大key 产生的原因与场景五、大key影响与危

vue解决子组件样式覆盖问题scoped deep

《vue解决子组件样式覆盖问题scopeddeep》文章主要介绍了在Vue项目中处理全局样式和局部样式的方法,包括使用scoped属性和深度选择器(/deep/)来覆盖子组件的样式,作者建议所有组件... 目录前言scoped分析deep分析使用总结所有组件必须加scoped父组件覆盖子组件使用deep前言

使用IntelliJ IDEA创建简单的Java Web项目完整步骤

《使用IntelliJIDEA创建简单的JavaWeb项目完整步骤》:本文主要介绍如何使用IntelliJIDEA创建一个简单的JavaWeb项目,实现登录、注册和查看用户列表功能,使用Se... 目录前置准备项目功能实现步骤1. 创建项目2. 配置 Tomcat3. 项目文件结构4. 创建数据库和表5.