总结:二进制安全阅读论文总结

2020/06/09 -

引言

关于本部分二进制安全相关的东西,一开始我没有准备看论文,主要是想找一些相关的工具来实现自己的目的。起初,我是希望寻找一个工具能够对比二进制文件的相似度,通过搜索之后,定位到了ssdeep这个工具,对这个工具进行了实践,能够得到一些相应的结果。但在这个过程中发现了一个博客复现了大致是17/18年左右一篇顶会(代码相似度)的论文(后面具体介绍),在阅读了这篇论文之后,萌生了阅读二进制相关论文的想法。通过deepai.org上进行关键词搜索,加上从其他论文中发现的论文,算是大致阅读了10+论文。

来简单说一下,我发现的他们所研究的二进制领域。

  1. 代码相似度比较(跨平台,或者不跨平台;这个相似度是怎么定义的呢?就比如说,我这里想到的一个问题,代码指令后面是内存地址,那么每个程序可能都不一样,这种可能会导致某个恶意软件的哈希整体就变了,这种肯定只能从指令级别来进行了)
  2. 二进制漏洞发现(这个应该就是我看到的那篇澳大利亚的论文的主题,这个本质上应该也是代码相似度比较吧,而且我举得,发现未知漏洞的可能性比较低,而且这种好像还不能使用异常检测的方法)
  3. 恶意软件检测(并定位问题所在)

但是还发现了一些相关的东西,比如说函数定位这个东西。

其实说实话哈,我就是在思考,这种利用这种方式能够发现未知的漏洞吗?
这个问题好像我之前也提到过,就是程序必须找到了那种最基础的特征才行,这个特征就是类似原子操作一样的东西,他是一个基础。

论文主题思想简单总结

  • 恶意软件检测 - 图像方式(类似之前看过的流量分类)
    最开始的时候,看了两篇使用图像方式进行恶意软件检测的论文,其中一篇是intel发表的论文,另一篇据说是最早使用图像方式来进行检测的论文。intel发表的论文是在看了微软的技术博客[1]后知道,这篇论文强调的是,利用迁移学习的方式来完成任务。就是利用一些成形的视觉任务的网络结构来完成。

  • 基于图嵌入方式的二进制代码相似度比较
    本篇论文是从系列博客[2]中看到,论文主题是实现跨平台的相似度比较,在将二进制程序的汇编语言构造为CFG表现形式,然后使用图嵌入的方式实现相似度比较,为了比较相似度,采用了孪生网络的形式(这一点可以思考思考,为什么要使用孪生网络,单纯的使用表征学习之后,进行相似度的比较为什么不行,这个是关键。)对于图嵌入的方式,采用了发表的论文structure2vec方式。
    说实话,自己孤陋寡闻,在看到这篇论文之前我甚至都不知道这种解决方案,看完之后感觉很惊艳。因为今年的时候我关注过一些计算机视觉的东西,所以第一眼知道孪生网络的时候并不是非常陌生。但是整体方案看下来之后,就觉得这种组合的方式非常有意思,同时得益于作者循循善诱的文字描写形式,所以整体流程走下来觉得非常过瘾。(个人认为,这篇论文的语言有些地方欠妥,相对于一些其他的高水平论文有些差,不过用来描述整个实验流程还有关键技术没有影响。因为当时还看了另外一篇论文,那篇论文的语言真的是干净利落,言简意赅。当然,还有一些其他的说法,就是其实他的这种方法在自然语言处理中并不少见,可能都是这么弄得。)

  • 大规模的二进制代码相似度比较算法
    这篇论文是卡内基梅隆大学发表的论文,时间比较早了,好像是11年左右,主要是叙述了进行大规模恶意软件的相似度比较,这个也是我之前关注过的,就是数据量大了之后,这种应该使用什么样的算法来实现。
    这篇论文的理论部分也详细阐述了自己实验过程的原理,不过,我没有具体读完。后续可以跟进。

  • 基于attention机制的代码语义解析
    关于这篇论文存在着两篇论文(通过bing搜索malware site:deepai.org),而且都是针对安卓平台的恶意软件。他们所强调的问题就是,现有的方法,或者是是用机器学习或者是使用是深度学习,都没有考虑到分类器的可解释性,也就是语义信息。(其实这一块我也比较疑惑,但是我总感觉我仿佛明白,又仿佛不明白,就是有曾窗户纸。而且,我感觉两篇论文所关注的重点好像还不太一样)还有一篇也是发表在定会的论文,也是使用了attention机制。使用这个主要是想提取出对分类效果贡献度比较大的序列或者是特征。

  • 技术的综合
    我还发现了一篇澳大利亚发表的类似研究规划的文章,从多个角度阐述了使用深度学习进行漏洞发现的研究(对,我就是搜索的漏洞发现这个关键词)。这篇论文算是从把之前的一些技术都进行了总结,虽然有些地方有些模糊,不清楚,但整体上能够看清楚脉络。这篇论文,我看了两边,因为通过之前的已经对这部分内容有所了解,所以看起来比较流畅。他的核心就是,通过表征学习将二进制文件(多种功能形式:直接的二进制、汇编、反编译的源码,或转化或不转化这些内容),然后利用分类器实现分类。

  • 利用GAN来生成对抗样本
    这个部分,没有看太多的论文,只是简单看了一两篇,而且看的过程中,我还一直被这个生成的样本可行性所困扰。

关键技术总结

通过阅读上面所说的技术综合论文,基本上完整了解了这个研究领域的整体思路,这里我先简单说明一下流程。

  • 准备数据集(一般研究过程都需要标记的数据集)
  • 设计数据处理方式,根据自己是要通过什么形式(二进制数据级别,汇编级别,反编译代码级别)转化为能够代表整个函数或者整个二进制文件的数据结构,一般例如,执行路径(这个从那篇综合论文中得知,但是我不知道他是什么意思)、CFG、AST。或者是说直接使用二进制数据输入到模型中,一般就是使用CNN的方法。
  • 设计表征学习方法(2vec),前面那种图形结构,或者树形结构的数据,甚至于直接解析出来的汇编代码,并不能输入到分类器中。就需要一系列的2vec方式将其转化。不管是直接转化自然语言处理的信息,还是说转化图形结构的数据,都是要得到向量数据。
  • 分类器,我个人认为,后面的分类器其实就无所谓了,当然为了能够配合深度学习工作,可能也会使用神经网络的形式吧,不过我觉得是可以采用其他的形式的。

我个人认为,上述步骤中,比较重要的几个步骤就是中间两个,

  1. 数据处理方式需要了解这种方式(比如AST、CFG)这种形式都是什么含义,可以通过哪些工具实现,或者说直接使用汇编级别的代码。
  2. 第二个是我不了解的,虽然我知道word2vec的基本形式,但是我不了解其他的内容。对于图嵌入,当时也看了一些相关的文章,也是能够了解都是什么意思。但都没有具体编码实现过。

相关的思考

正如前面所说,我虽然能明白你在实现原理上的大致思路,就是要干这件事,就是要转化成向量,就是要实现最后的分类。单纯的从数据上来,这一步一步都是起承转合的。但是,对于我来说,就是没有找到具体实现的这个目标和采用深度学习的桥梁。可能最让我疑惑的,就是利用自然语言处理方式直接处理汇编代码级别的方法。下面来简单思考一下。

  1. word2vec(skip-gram)的具体原理,就是指利用单词可以通过上下文进行标识自己。说的简单点,在训练过程中,就是利用自己这个单词来预测其他的单词。这也是在其他的2vec方式中借鉴的思考。比如图节点的嵌入,就是来预测其他的边。或者说路径,来预测其他的路径。 这个原理说来简单,你在自然语言中,就是为了表达语义问题,将相同语义的数据转化到嵌入空间,语义(由上下文来觉得)相同的,会聚集在同一片区域。那么既然这样,如果是通过通过这种方式来预测汇编代码的话,能体现出来什么?
    我仔细思考了一下,我好像忽略了一个问题,现在都是使用word2vec,我还从来没有考虑过,如果是一个句子,我应该怎么来比对这个相似度。是不是在理解了这个过程之后,就能了解这个了呢?

  2. 具体的关键语义部分
    前面提到了他们使用attention来实现语义什么的,虽然感觉我好像理解了他们具体目标,但是感觉上,好型不是那么回事。甚至于,他们有的论文是讨论这个机器学习的可解释性(这个可解释性有一部分是指提取出重要特征,我感觉我前面所提到的语义信息跟这个还不一样)这里其实是一个矛盾的地方。

  3. 特征部分
    可能如果是使用图嵌入这种方式的东西

后续的研究计划

因为本身我并不是专门研究这个东西的,只是觉得这个东西很有意思,而且能够把帮助我吧一些深度学习的东西给加深印象。后续的话,要学习的东西,也基本上是围绕深度学习来开展。

  1. 学习2vec的原理,并实现编码
  2. 学习attention机制,看看能不能应用
  3. 应用这种东西,尝试自己来进行二进制相似度比较

参考文献

[1]microsoft-researchers-work-with-intel-labs-to-explore-new-deep-learning-approaches-for-malware-classification/
[2]application-of-ai-to-cybersecurity-part-3


2020/06/26 -
https://medium.com/@massarelli/safe-self-attentive-function-embedding-d80abbfea794

这个是我之前看到的一篇论文,他这是把自己的论文凝缩到了这个地方。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值