社区应用 最新帖子 精华区 社区服务 会员列表 统计排行
  • 563阅读
  • 2回复

[分享]Malware Classification with Deep Convolutional Neural Networks

楼层直达
z3960 
级别: 茶馆馆主
发帖
770867
飞翔币
207694
威望
215657
飞扬币
2511641
信誉值
8

一. 前言深度学习作为近年来的一个热点话题,广泛应用与各个领域。在恶意代码识别领域也有不少学者进行相关的研究。论坛中好像还没有相关的讨论,也不知道大家是否有兴趣。这边选取一篇2018年发表的论文来简单描述一下深度学习在Windows平台上面恶意代码识别的应用,看看各位安全人士的反应,如果有兴趣,之后在继续讨论其他论文。对于CV和NLP方向的大佬也可以了解一下,转换思路,也不至于在那两个方向上面一直卷。。关于深度学习的入门的话。这边就推荐李航的统计学习,西瓜书和花书。视频推荐吴恩达和李宏毅两位老师的视频,在小破站上面都可以观看,这篇文章就不详细说明模型了,那样篇幅太长。论文原文链接是:https://ieeexplore.ieee.org/document/8328749(Malware Classification with Deep Convolutional Neural Networks)二.数据集数据集对于结果的影响可以说是举足轻重,在现有技术基础上数据集的好坏甚至比你算法的好坏都重要的多(就挺尴尬的←_←)。而数据集无非就是对一组可以表述相关问题的特征罢了那么在恶意代码识别方面,我们最后落地的项目真正要分析的其实就是一个二进制PE文件。那么有哪些可以作为数据集输入呢?大致可以分为这四种:1.硬编码。每个程序生成的二进制文件的硬编码都是独一无二的。2.汇编助记符。既然硬编码都不一样,那么生成的助记符自然也是独一无二的。3.API。每个程序要完成不一样的功能自然要调用相关的不同的API,我们也可以根据他调用的API来进行分类。(当然这个方法比较容易被干掉。。)4.PE。每个程序的PE文件保存了程序的相关信息。我们可以根据PE文件的内容作为输入。本文选取的是硬编码作为数据的输入。这边参考一篇2011年的论文,来看看如何处理硬编码来作为模型的输入。论文原文链接:https://dl.acm.org/doi/10.1145/2016904.2016908Malware Images: Visualization and Automatic  Classification)作者处理完以后的数据集称为Maling数据集,在该领域也得到的广泛的应用和认可。该数据集是对25个家族的恶意程序进行分类,类别如下图。数据集中一共有9458条数据,其中的百分之90(8000多张)用来做训练,百分之10(900多张)用来做测试(公众号有人提出疑问,更改一下)。[font=-apple-system, BlinkMacSystemFont, &quot]                                                                                                                                                                                    [font=-apple-system, BlinkMacSystemFont, &quot]我们知道一字节等于8比特。用十进制表示范围的话那就是0-255。既然如此我们就可以把一个二进制文件的每一个字节都当作一个像素点来生成图片,然后在使用CV方向提出的模型来解决。转换过程就如下图所示。[font=-apple-system, BlinkMacSystemFont, &quot]                                                                                                                                                                                  [font=-apple-system, BlinkMacSystemFont, &quot]这里有一个问题就是,每一个二进制文件所包含的字节数是不同的,那我们怎么选择宽与高呢。作者在他的论文中给出了转换的大小对于的原则如下图。[font=-apple-system, BlinkMacSystemFont, &quot]                                                                                                                                                                                     [font=-apple-system, BlinkMacSystemFont, &quot]这里还需要说明的是在生成的过程中,我们把PE的头部信息等都去掉了,只保留了各个节的内容,这也合理。因为头部信息主要是描述程序的信息,并无具体行为。可以看到不同的节生成的图像差别还是挺大的。[font=-apple-system, BlinkMacSystemFont, &quot]                                                                                                                                                                                  [font=-apple-system, BlinkMacSystemFont, &quot]根据上面所说的方法我们生成的不同家族的二进制文件的图像如下,我们可以看到不同的家族生成的图像纹理存在比较大的差别,这就给我们的分类带来了便捷。[font=-apple-system, BlinkMacSystemFont, &quot]                                                                                                                                                                                    [font=-apple-system, BlinkMacSystemFont, &quot]三.模型作者的模型如下图,该模型是对VGG16的简单更改,删除了其中的Dropout层。作为一个多分类问题,自然而然选择的损失函数就是cross_entropy,优化器选择的是SGD。[font=-apple-system, BlinkMacSystemFont, &quot]                                                                                                                                                                                  [font=-apple-system, BlinkMacSystemFont, &quot]本人对作者的论文内容进行了复现。选择的是Pytorch框架来进行复现。其中,Python版本为3.6.13,Pytorch版本为1.8.1。相关参数根据要求在Configure.py保存着。大家只需要更改base_path即可进行运行。由于代码中已经给出了必要的注释这里就不贴出代码,大家可以自行下载参考。在我的机器上最后训练出的模型在测试集跑出的精度为97.96。[font=-apple-system, BlinkMacSystemFont, &quot]
我不喜欢说话却每天说最多的话,我不喜欢笑却总笑个不停,身边的每个人都说我的生活好快乐,于是我也就认为自己真的快乐。可是为什么我会在一大群朋友中突然地就沉默,为什么在人群中看到个相似的背影就难过,看见秋天树木疯狂地掉叶子我就忘记了说话,看见天色渐晚路上暖黄色的灯火就忘记了自己原来的方向。
级别: 超级版主
发帖
834654
飞翔币
226682
威望
224648
飞扬币
2447891
信誉值
0

只看该作者 1 发表于: 2021-08-31
来看一下
级别: 超级版主
发帖
834654
飞翔币
226682
威望
224648
飞扬币
2447891
信誉值
0

只看该作者 2 发表于: 2021-08-31
不错,了解了