论文阅读_Hawkeye: Towards a Desired Directed Grey-box Fuzzer

article/2025/10/12 1:19:07

作者: Hongxu Chen, Yinxing Xue, Yuekang Li, Bihuan Chen, Xiaofei Xie, Xiuheng Wu, Yang Liu
出处:CCS 2018

背景

  定向模糊测试就是引导模糊测试朝着目标代码块的方向探索,让已覆盖的代码块越来越接近目标代码块,最终测试目标代码块。那么已覆盖的路径和目标代码块之间的距离衡量是一个需要解决的关键问题。AFLGO通过控制流图、函数调用图来计算一个输入覆盖的路径上所有基本块距离目标基本块的平均距离,作为种子调度的依据。也就是说,为了衡量这样的距离,需要额外的静态分析,因为动态执行我们只能知道覆盖了哪里,并不知道和目标之间的距离。
  这个距离计算的静态分析需要具有以下性质:
1. 性能损耗要在一个可接受的范围。
2. 要能够提供必要的信息。
  定向模糊测试需要具有以下性质:
1. 给种子设置优先级,尽快地接近目标代码块。
2. 当种子覆盖程序的不同状态的时候要使用不同的变异策略。

Insight

  作者分析了定向模糊测试需要具有的四个性质。
  对于第一个性质作者只用静态分析计算邻接函数的距离,函数级别的距离和基本块级别的距离用来得到函数之间的亲和度。在fuzzing运行的时候计算基本块trace距离以及已覆盖函数和目标函数之间的相似性。
  对于第二个性质,基于CG和CFG分析函数的可达性、指针分析、间接调用等信息。
  对于第三个性质,利用上述的基本块trace以及函数亲和度等信息来指导种子调度。
  对于第四个性质,提出了一个适应性变异策略。

方法

在这里插入图片描述

  1. 静态分析:给定程序源代码和目标,利用静态分析推导出目标所在的基本块和函数,标记为目标基本块和目标函数。然后利用插桩技术把基本块距离信息插桩到目标程序中,然后输出。这里的基本块距离信息获取步骤如下:
    1. 构建CG和CFG。

    2. 基于CG经计算函数级别的距离,也就是计算邻接函数的距离。

      1. 给定一个callee C N C_N CN,caller可能会通过很多条路径都可以调用到它, Φ ( C N ) = ϕ ⋅ C N + 1 ϕ ⋅ C N \Phi(C_N)=\frac{\phi·C_N+1}{\phi·C_N} Φ(CN)=ϕCNϕCN+1,用于表示这种影响,通常 ϕ = 2 \phi =2 ϕ=2
      2. caller函数中包含callee的基本块的数量越多调用到callee的执行trace就越多,这个影响表示为 Ψ ( C B ) = ψ ⋅ C B + 1 ψ ⋅ C B \Psi(C_B)=\frac{\psi·C_B+1}{\psi·C_B} Ψ(CB)=ψCBψCB+1,通常 ψ = 2 \psi=2 ψ=2
      3. 给定caller f 1 f_1 f1,callee f 2 f_2 f2,它们之间的距离为 d f ′ ( f 1 , f 2 ) = Ψ ( f 1 , f 2 ) ⋅ Φ ( f 1 , f 2 ) d'_f(f_1,f_2)=\Psi(f_1,f_2) ·\Phi(f_1,f_2) df(f1,f2)=Ψ(f1,f2)Φ(f1,f2)
      4. 由于目标函数可能有多个,那么一个函数到所有目标函数的平均距离为:
        在这里插入图片描述
    3. 基于函数级别的距离计算基本块之间的距离,通过CG和CFG。对于每一个基本块计算它到达目标基本块的距离然后插桩。
      在这里插入图片描述

    4. 最后还会给每一个目标位置列出所有能够到达它的函数。

  2. 模糊测试:把插桩好的程序、上述收集的信息、目标位置、初始测试用例给fuzzing。fuzzing输出能够触发程序异常的输入。
    1. 能量调度:主要由两方面因素决定,基本块trace距离以及已覆盖函数相似度。

      1. 基本块trace距离计算为:对于种子s执行的trace上的所有基本块计算一个平均的基本块级别的距离。然后进行一个归一化。
        在这里插入图片描述
        在这里插入图片描述
      2. 已覆盖函数相似度(这里不用基本块级别是因为太重量级了),就是种子覆盖的函数里面有多少是能够到达目标位置的。
        在这里插入图片描述
    2. 种子调度,考虑到种子的多样性,他这里设置了一定的概率不会给选中的种子分配更多的能量。
      在这里插入图片描述

    3. 变异策略:选中一个种子后对于给定的能量对每种变异算子分配使用次数。他把变异分为了粗粒度和细粒度。它的策略就是当种子s能到达目标位置就提高细粒度的变异的占比。

    4. 种子优先级:提出了一个三级队列,就是根据种子的分数分到不同的级别,从最高级别开始选。覆盖新的分支、和目标种子相似度高、覆盖目标函数的种子优先级会更高。


http://chatgpt.dhexx.cn/article/1wYHhFAu.shtml

相关文章

新产品发布 | HawkEye作业票管理系统

作业票是电力、石化、工程现场等行业的重要管理制度之一,但是长期以来一直是手工、纸质的方式申请和签发。这种方式耗时,出错率高,数据记录和统计不完整,是一种效率很低的管理方法。 2021年,国家应急管理部办公厅印发…

HawkEye产品深受市场认可,与多家行业龙头企业达成合作,共同开拓行业市场

2023年6月,日立(中国)有限公司与璞华大数据正式签订合作协议,双方将在产品和技术领域进行深度合作,共同开拓国内智能制造市场。 这是继方正国际、浪潮等行业龙头企业之后,又一家选择与璞华大数据HawkEye产…

HawkEye-20G:20 Gbps Arria-10 FPGA加速卡

HawkEye-20G:20 Gbps Arria-10 FPGA加速卡 HawkEye是基于Intel Arria 10 FPGA的薄型PCIe加速卡。该平台拥有高达18 GB的DDR4板载内存,2条SFP +链接,最高速度为28 Gb / s,以及一个PCIe x8 Gen 3主机接口。 Arria 10 FPGA可提供多达480K LE和IEEE浮点功能。 HawkEye的内存方…

基于PyTorch、易上手,细粒度图像识别深度学习工具库Hawkeye开源

转载自丨机器之心 鉴于当前领域内尚缺乏该方面的深度学习开源工具库,南京理工大学魏秀参教授团队用时近一年时间,开发、打磨、完成了 Hawkeye——细粒度图像识别深度学习开源工具库,供相关领域研究人员和工程师参考使用。本文是对 Hawkeye 的…

高德地图marker自定义图标只显示一半

直接从高德那里搬过来代码,这里的偏移量是因为偏移量有问题,所以出现了图片只显示一半的情况。 加上imageOffset即可解决

原 matplotlib散点scatter学习2,参数测试(marker1)

续上篇 绘制散点图的函数,x,y分别对应点的x轴坐标和y轴坐标 plt.scatter(x,y) matplotlib.pyplot.scatter(x, y, sNone, cNone, markerNone, cmapNone, normNone, vminNone, vmaxNone, alphaNone, linewidthsNone, vertsNone, edgecolorsNone, , dataNon…

python画图(标记、marker、设置标记大小、marker符号大全)

初衷 本人由于平常写论文需要输出一些结果图,但是苦于在网上搜python画图时,详细的教程非常多,但是就是找不到能马上解决自己问题那一行代码,所以打算写一些适合需求简单的朋友应急用的教程,应急就必须方便搜索&#x…

matplotlib画布中属性设置常用函数及其说明

绘图时设置坐标轴属性 data np.arange(0,1,0.01) plt.title(my lines example) plt.xlabel(x) plt.ylabel(y) plt.xlim(0,1) plt.ylim(0,1) plt.xticks([0,0.2,0.4,0.6,0.8,1]) plt.yticks([0,0.2,0.4,0.6,0.8,1]) plt.tick_params(labelsize 12) plt.plot(data,data**2) pl…

MATLAB里面size什么意思,matlab中的makersize是什么意思

MATLAB中的绘图语言 plot(j,len1-i,ro,MarkerS...参数那么多,有点晕啊,每个参数代表什么意思啊??? 前面的j和len1-i...plot(...,PropertyName,PropertyValue,...) plot(j,len1-i,ro,MarkerSize,10,LineWidth,2); 其中j…

matplotlib画图自定义marker

文章目录 matplotlib画图自定义markermarker的特点通过插入图片实现自定义marker通过Path实现自定义marker matplotlib画图自定义marker 在matplotlib工具箱中可以画marker的高级作图函数一共有两个,分别为plot和scatter,可以画出多种marker。但如果需要…

plot函数的应用

这一部分是关于plot函数的简单应用,下面附有一段代码示例,详情请见代码及其注释。 import matplotlib as mlp from PIL import Image from pylab import * import os image_path "D:/warehouse/image_list" # 储存照片的路径 os.chdir(imag…

pyplot散点图标记大小

本文翻译自:pyplot scatter plot marker size In the pyplot document for scatter plot: 在散点图的pyplot文档中: matplotlib.pyplot.scatter(x, y, s20, cb, markero, cmapNone, normNone,vminNone, vmaxNone, alphaNone, linewidthsNone,facetedTr…

matplotlib:marker类型/size/空心

marker类型 plt.plot(RSEP_data, colorcolor[1], labelRSEP, linestyle--, markerv, markerfacecolornone, markersize10)

python pyplot 宽高等比_如何使pyplot分散中的markersize不依赖于图形的比例?

我在做一个模拟,我想用pyplot来显示。在模拟中,有一些圆在移动,当它们重叠时会发生一些事情。当我尝试用pyplot显示这个时,标记的大小不正确。在 我试过改变标记的大小,但没有解决问题。经过一些测试,我意识…

详解Axes()中的markersize

在Matplotlib中,Axes对象的markersize参数是指绘制图形中marker(如散点图中的点)大小的参数。这个参数指定marker的直径的长度,单位为像素或点(pt)。具体来说,它控制marker在x轴和y轴方向上的大…

Matlab scatter/plot绘制图时,单点的'MarkerSize'与空间位置的关系

scatter scatter(axes, x, y, sz, ‘Marker’, ‘o’); scatter()函数中参数sz决定’Marker’(即’o’)的标记面积(大小),默认单位是平方磅(points),o’在坐标轴中的宽度…

markersize

为什么80%的码农都做不了架构师?>>> plot([1,2,3,4],[2,5,6,9],c-pentagram,markersize,35) %pentagram:是五角星,c代表颜色亮蓝;-代表线性实线,markersize(即五角星的大小)为35 下面是画图的颜色和线型,matlab 中画图的颜色 字母 颜色…

plot中的 markersize

‘markersize’ plot([0,1,2,3,4],[0,2,5,6,9],‘c-pentagram’,‘markersize’,15) 画图的命令是: marker是图上画上点的地方表上符号,不如点,方框,圆框,十字,星号,等等 后面的size就是其大小…

matlab2015的marker,matlab中markersize什么意思

matlab中如何调整plot多变量绘图中的markersize MATLAB中的绘图语言 plot(j,len1-i,ro,MarkerS...参数那么多,有点晕啊,每个参数代表什么意思啊??? 前面的j和len1-iplot(...,PropertyName,PropertyValue,...) plot(j,l…

matlab中marker太密,markersize_想问下MATLAB里 ‘Markersize’ 设置的值是‘Marker_

广告位API接口通信错误,查看德得广告获取帮助 想问下MATLAB里 ‘Markersize’ 设置的值是‘Marker_size’是什么意思 就是标准尺寸。 ‘markersize’plot([0,1,2,3,4],[0,2,5,6,9],c-pentagram,markersize,15) 画图的命令是:marker是图上画上点的地方表上符号,不如点,方框,…