IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 2021-7 论文阅读 [FuzzGuard: Filtering out Unreachable Inputs in Directed Grey-box Fuzzing through DL ] -> 正文阅读

[人工智能]2021-7 论文阅读 [FuzzGuard: Filtering out Unreachable Inputs in Directed Grey-box Fuzzing through DL ]

0.前言

对于DGF(directed grey-box fuzzing)来说,使用者总是希望产生的输入能够运行到buggy code,以此来减少程序无效运行时间,然而,在实际场景中这并不容易。在这篇论文中,作者提出用Deep Learning的方法来对产生的输入进行分类,来判断这是否是一个reachable input。

1.简介

再往下将之前,我们先来了解一下两种常见的fuzzing形式:

coverage-based fuzzing:希望产生的输入能够实现高代码覆盖率,以此来发现更多的程序BUG
directed fuzzing:着重于某一部分的代码,探寻这部分代码是否存在BUG

那么啥又叫做灰盒呢,就是指在fuzzing过程中利用程序运行信息来生成reachable input。

作者说,之前这方面的结果都不是很理想,比如说AFLGo,其产生的input超过91.7%无法到达buggy code。还有传统的程序分析方法比如符号执行(symbolic execution),其面临的问题就是执行时间长,效率低。基于模式识别(比如猫狗分类),作者诞生了一个新的想法,能否透过输入数据的特征值来判断他是否是reachable的呢?

答案是可以的,但是其依然有很多挑战存在其中:

数据不平衡:对于一般的模式识别问题,要求不同Label的数据数目大致一致,但是对于这个问题而言,在随机出来的数据集中,reachable的数据通常明显较少。

同类数据差异大:对于不同的两组可达数据,其差异或许非常大,因为可以是走不同路径到达buggy code的

时间限制严格:你判断可达不可达是要有一个时间限制的,要知道,这个思想提出来的目的就是减少程序执行的时间。

模型不产生数据,模型只是数据的过滤器=.=作者是如何建立这个模型的呢,欲知后事如何,且听下节分解。

2.模型

下节来了。。。话说看这个写的我好累,明天就开始了我还打算再看一篇别的,也不知道时间上够不够。

闲话少叙,我们先来看一下整体的模型,其结构如图所示,可分为模型初始化,模型预测,模型更新三部分。

1.模型初始化(Model Initialization)

为啥要把英文写上呢,因为我并不确定我翻译的确不确切,在我看来,这部分一共干了两件事:构造标签数据集,训练模型。

首先我们先来说下数据集,说到数据集,就需要面对上文提到过的unblanced的问题,那么作者是如何解决这个问题的呢,我先来举个例子,着代码!

if(a%2){
    if(b==1){
        //buggy code
    }else{
        //code
    }
}else{
    //code
}

如果要想让程序执行到buggy code,那么必须b为1,a为奇数,这两个条件会使得难度较大,但是我们注意到,要想执行buggy code,首先必须要a%2成立,而很明显,代码有更大的概率到达第一个if语句块,所以,我们可以先筛选能到达第一个语句块的input,这样采集的数据就能更快的达到平衡,在达到平衡后,再向后进行进一步筛选。

作者给出了pre-dominating nodes的定义,即到达buggy code所必须经过的代码区域,我们可以先针对能否到达该node对模型进行初步训练。用一种最麻烦的方法,你可以想象是为每一个pre-dominating node进行一个模型训练,判断是否可以流向下一个model,流出最后一个model的可行数据即我们要寻找的输入。

当然,这样也过于麻烦了,因此作者的方法是为所有的node(包括buggy code)统一训练一个模型,若要如此实现,就需要对数据的标签进行一定的改进,这部分有兴趣的可以去看论文,由于我基础较浅,就不在此班门弄斧了。此外呢,对于输入的数据,作者也将其以字节为单位,使得该模型可以接收一个统一的数据输入。

深度学习模型作者选用的是3层的卷积神经网络,将均值平方差(MSE)作为损失函数,原因是其不会造成对于某一分类有着特别大误差的情况存在。

鉴于我贫瘠的深度学习知识以及想要更好的展现这篇论文的心情,我将在下面翻译出作者对于这个卷积神经网络的具体描述:
该卷积神经网络由3个一维卷积层组成,其一维卷积层将行序列(row sequence)作为输入,每个行由1024个字节组成。每个卷积层后都有一池化层和ReLU激活函数。还设置了Dropout layers以避免过拟合,最后通过一个全连接层判断输入对于每个节点的可达性。

2.模型预测

再进行了模型初始化之后,就可以根据模型对输入数据的可到达性做一个预测了,对于预测认为可以到达的数据,对其进行执行并将执行结果加入到数据集中。

与此同时,我们也迎来了第二个问题,即该模型与传统的模式识别是不一样的,可能有不同的执行路径到达buggy code,对于不同seed所产生的输入,其准确性可能不够。作者是这么干的,她采用了representative data selection的方法,即对于每一个seed,选取其部分mutant进行训练,以达到对于路径的覆盖(但是对于seed涉及不到的数据其还是没有办法处理,且你什么时候认为所有的seed都已经被完全找到了呢?我对于这个问题挺想不明白的,但是就我目前看到的而言作者并没说)。尽管对于每个seed选取了部分数据,其数据集依然过于庞大,训练时间较长,因此,作者提出了一个概念叫做SSD(seed similarity degree),对于那些seed相似度较高的input,其可以进一步减少采样量。

?3.模型更新

模型更新采用增量学习的方式,比较重要的是模型更新的时机,通常会在以下两种情况下进行更新:

当模型过时时,即其false positive到达某个阈值时对模型进行更新

当下一个node数据达到平衡时

4.总结

上张图自行体会即可

算了还是照着图讲一遍:首先先将输入以字节为单位转化成一组数值串,以得到统一化的程序输入,同时,根据程序代码构建dominator tree,并根据node个数来决定标签维数,y<0,0,1,0>代表程序有四个node,该标签所指输入可以到达第三个node但无法到达最后的node。第三步是设置mid-target,即先让model判断输入能否到达mid-target,以期达到更快的数据平衡,第四步是根据seed生成输入数据,其中包含了代表性数据挑选方法,第五步是模型预测,然后对于认为是reachable的数据,进行执行以扩充数据集,对于unreachable的数据,存放在PUI中以备以后验证。等到数据积累到一定程度,比如下一个node数据趋于平衡,那么就对模型进行更新(增量学习方法)。

3.评估

一般我是不写这部分的,为啥要写呢,因为组会要讲啊555

首先,总体上讲,有这个和没有这个使AFLGo的速度差距为17倍

测试的程序包括各种输入文件的10中常用程序。作者采用AFLGo产生测试数据,为保证两组实验的测试数据一致,测试者首先利用AFLGo生成一组数据并记录,然后进行测试。此外,作者还测试了在有时间限制的情况下程序的准确性,也取得了较好的效果。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-07-29 11:38:10  更:2021-07-29 11:41:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/22 10:25:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码