Advertisement

A Hierarchical Convolutional Neural Network for Malware Classification论文理解

阅读量:

摘要

将可执行文件视为字节序列或者汇编语言指令没有考虑程序的结构层次(空间关联性),因为函数调用会跳到指令中不同的位置,那么如果按照二进制文件处理,指令的执行仍然是不连续的,也就是说,并不是按照二进制文件流顺序进行的。那么提出一个HCNN网络,有两个层次的卷积块应用在助记符水平和功能水平,使我们能够从这两个层次提取n-gram样特征时,构建恶意软件表示。

说明

我们的主要贡献是一个新的神经架构,称为层次卷积网络,旨在捕捉有关恶意软件结构在记忆水平和功能水平的见解。考虑到可移植可执行文件(PE)具有层次结构,即计算机程序由函数组成,函数由指令组成,我们引入了一种层次网络结构,通过首先构建它们的函数表示来构造程序表示,然后通过提取和组合助记符级特征和函数级表示来构建后续表示,从而保留可执行文件的层次信息。

基于工作

n-grams方法,步骤:首先,提取n-gram。其次,对特征进行约简,只选择特征的一个子集。第三,提出了一种基于缩减特征子集的样本分类算法(比如熵分析)。
深度学习方法:灰度图等。

具体实现

第III-A节介绍了Microsoft恶意软件分类挑战基准[3]。第III-B节描述了如何将恶意软件分类视为文档分类任务。最后,第III-C节介绍了一个分层卷积网络,用于将恶意软件分类为系列

A数据集:

kaggle数据集:
包含10868个用于训练的恶意样本和10873个,代表9个恶意软件家族的恶意软件测试样本。是使用IDA反汇编工具生成的源代码。

B文本:

预处理:提取汇编语言指令,可以将恶意软件分类问题建模为一个文本分类任务。最简单的表示法是只保留指令的助记符。也就是说,在遇到add esp 10h指令时,我们只需提取add助记符。

n-gram:一个给定指令序列中n个助记符的连续序列。有必要进行特征选择和约简,以减小由数百万个元素组成的长n-gram特征向量的大小。

使用卷积神经网络来学习,检测类似n-gram的模式:不需要在训练期间穷尽地枚举大量n-gram,因为CNN能够通过各种卷积层学习n-gram样的签名。不需要手工设计特征,因为特征也是通过卷积层学习的。因此,它不需要一个由特征提取、特征选择/约简和分类组成的管道。但是这种方法没有考虑到结构层次(见摘要)。

序列:每个序列包含描述特定函数或过程的助记符。例如,图2中的汇编语言代码将被分解为两个助记符序列,如下所示
在这里插入图片描述
Function A (from 004010B1 to 004010E0): [mov ,mov, mov, push, mov, push, push, push, push, call, add, mov, pop, retn]
• Function B (from 004010E1 to 004010F2): [xor, retn]

C:卷积网络

分层卷积网络的总体结构如图3所示:
在这里插入图片描述
符号。数据集由一对成对的xi,yi组成,其中xi是一个可执行文件,yi表示它所属的家庭,其中xi∈Z^N×M×I ,N是函数的个数,M是助记符的个数,I是词汇量。词汇表由在训练集中至少出现过三次的所有记忆词组成。每个助记符都与1到I范围内的一个数字相关联。例如,
在这里插入图片描述
是程序i中第j个函数的第l个助记符的一个热向量。每个助记符都表示为一个热向量,它是大小为I的零向量,在助记符的整数映射(我猜是上面每个助记符数字)对应的位置有一个“1”。执行少于三次的剩余助记符将替换为UNK标记。此外,引用函数的每个助记符序列被填充为相同的长度。空函数也被填充。在我们所有的实验中,N和M分别设置为20000和50。在每个函数的助记符数大于M的情况下,序列被分成大小为M的子序列。

嵌入层。热向量是高维稀疏向量。嵌入层将热向量转换成大小为K的低维向量表示。因此,嵌入层的输出将是大小为N的三维数组 N ×M ×K,其中N是每个程序的函数数,M是每个函数的助记符数,K是嵌入大小。每个助记符将表示为K个元素的权重分布。(嵌入空间可以编码关于可比较操作或类似意义的语义信息。这是通过将这些助记符投影到嵌入空间中的附近点来实现的。)

记忆水平特征提取。这个卷积块接收 N × M × K 程序表示作为输入。它由多个不同尺寸的过滤器组成,1×F×K、 其中F∈ {1, 2, 3, 5, 7}. 也就是说,过滤器可以检测到的助记符子序列的大小从1到最多7个助记符。请注意,三维卷积分别应用于每个函数。然后,应用最大池(maxpool)来保持每个函数中每个特征映射的最强激活。这是通过对大小为1的过滤器应用池运算符来实现的1×M ×1结果,输出是大小为N的二维向量N × L, 其中L等于过滤器的数量。此外,样本中最强的激活被提取并收集在大小为L的向量中以供以后使用,以下称为G。

功能级特征提取。此块将N作为输入N × L上一块输出的数组。类似地,它使用大小为1的过滤器对输入执行卷积1×L, 2×L 和 3×L,从一个,两个或三个函数中提取特征。然后执行全局最大池和全局平均池来生成程序的特征向量表示。两个池操作都应用大小为N的过滤器 N × 1这将生成大小为Q的两个向量,其中Q等于滤波器1 × L, 2 × L and 3 × L数目之和、 它们被连接成一个单独的特征向量,以下称为V,大小为2*Q。

完全连接层。特征向量V通过一个由128个神经元组成的完全连接的层,这些神经元将高级输入特征非线性地组合成一个简化的特征向量。h(V)=σ(W1V+b1)。

特征连接。然后,将h(V)的结果与在助记符级别G上提取的全局n-gram样特征连接起来。J=h(V)⊕ G。⊕ 是向量的串联,G是包含记忆水平上全局1-gram、2-gram、3-gram、5-gram和7-gram最强激活的向量。

完全连接层。该层以J为输入向量,非线性地将特征组合成低维特征向量P,其中P=h(J)=σ(W2J+b2)。

恶意软件分类。
在这里插入图片描述
其中probs是大小为C的向量(C=| families |),Wc和bc是层的权重和偏差,s是softmax函数。softmax层的目的是输出可执行文件属于一个或另一个类型的概率。所有层采用的激活函数都是ELU。此外,根据Xavier[19]初始化权重。最后,在训练过程中,完全连接层和卷积层的神经元失活概率分别为0.5和0.1。

全部评论 (0)

还没有任何评论哟~