论文阅读-Directed Greybox Fuzzing 定向灰盒模糊(2017)

摘要:

本文介绍了一种新的Directed Greybox Fuzzing (DGF)方法,可以有效地指导模糊测试,以便更快地到达目标程序位置。作者开发了一种基于模拟退火的能量调度算法,逐渐为更接近目标位置的种子分配更多能量,同时减少远离目标位置的种子的能量。实验表明,DGF比有向符号执行的白盒模糊测试无向灰盒模糊测试都更有效。作者还展示了DGF在补丁测试和崩溃重现方面的应用,并讨论了将AFLGo集成到Google的持续模糊测试平台OSS-Fuzz中的可能性。

注:什么叫退火算法?

模拟退火算法是一种全局优化算法,它通过引入一个温度参数,在搜索过程中可以接受一定概率的劣解,从而避免陷入局部最优解。在每一次迭代中,算法会随机选择一个邻域解,并计算其能量值。如果邻域解的能量值比当前解的能量值更优,则直接接受邻域解。如果邻域解的能量值比当前解的能量值更劣,则以一定概率接受邻域解,这个概率与当前温度和能量差有关。随着迭代次数的增加,温度逐渐降低,接受劣解的概率也逐渐降低,最终算法会收敛到全局最优解或近似最优解。

1 INTRODUCTION  

什么是灰盒模糊测试?

灰盒模糊测试(GF)被认为是漏洞检测领域的最先进技术。使用轻量级仪器确定输入所执行的路径的唯一标识符,生成新的输入并添加到fuzzer的队列中。新的输入是通过改变提供的种子输入来生成的,并且如果它们执行新的且有趣的路径,则将其添加到模糊器的队列中。

定向灰盒模糊器的motivation:

然而,现有的灰盒模糊器无法有效地进行定向。定向模糊器是安全研究人员的重要工具。与无向模糊器不同,有向模糊器将大部分时间预算用于到达特定目标位置,而不会浪费资源来强调不相关的程序组件。定向模糊器的典型应用可能包括:

  • patch testing:(补丁测试)通过设置更改的语句作为目标,可以使用定向模糊测试来检查更改是否引入了漏洞。
  • crash reproduction:定向模糊测试可以用于快速复现现场崩溃,通过设置堆栈跟踪中的方法调用作为目标。
  • static analysis report verification:静态分析报告验证可以通过设置静态分析工具报告的潜在危险语句作为目标来生成测试输入。
  • information flow detection:信息流检测可以通过设置敏感源和敏感接收器作为目标来生成执行,以暴露数据泄漏漏洞。

白盒定向模糊的介绍:

大多数现有的定向模糊测试工具(基于符号执行技术的白盒测试),使用程序分析和约束求解来生成不同程序路径的输入。符号执行的效果较好,但效率较低,因为它需要进行重量级的程序分析和约束求解。

相比之下,灰盒模糊测试工具可以执行更多的输入,因此有机会开发(轻量级和定向)的灰盒模糊测试工具。

定向灰盒测试的概念:Directed Greybox Fuzzing (DGF)

专注于达到程序中给定的目标位置。DGF将可达性问题视为优化问题,并使用一种特定的元启发式方法来最小化生成种子与目标之间的距离。为了计算种子距离,我们首先计算并测量每个基本块到目标的距离。种子距离是跨过程的,我们的新方法只需要对调用图进行一次分析,对每个过程内的控制流图进行一次分析。在运行时,模糊器将每个执行的基本块的距离值聚合起来,计算种子距离的平均值。DGF使用的元启发式方法是模拟退火,并作为功率调度实现。功率调度控制所有种子的能量,种子的能量指定了模糊种子的模糊时间。与所有灰盒模糊技术一样,通过将分析移到编译时,我们最小化了运行时的开销。DGF将目标位置的可达性视为优化问题,而现有的有向(白盒)模糊方法将可达性视为迭代约束满足问题。

AFLGO的提出:

​​​​​​​定向灰盒模糊在有效性(即DGF暴露更多漏洞)和效率(即DGF在同一时间内达到更多目标)方面优于定向符号执行。然而,两种技术的集成比单独使用一种技术的性能更好。我们在流行且非常成功的灰盒模糊器AFL中实现了DGF[43],并将我们的定向灰盒模糊器称为AFLGo。AFLGo是一个有用的补丁测试工具,可以有效地暴露最近引入的漏洞和以前报告的漏洞的不完整修复。

contribution

•灰盒模糊与模拟退火的融合(使灰盒定向);

•程序间距离的正式度量,一次考虑多个目标,可以在仪器时有效地预先计算,并在运行时有效地推导;

•定向灰盒模糊测试作为AFLGo的实施,该AFLGo可在https://github.com/aflgo/aflgo公开获取;

•将AFLGo作为补丁测试工具集成到OSS-Fuzz的全自动工具链中,该工具链可在https://github.com/aflgo/oss-fuzz上公开获取

•对定向灰盒模糊测试作为补丁测试和崩溃再现工具的有效性和效用进行大规模评估。

2 使用心脏出血作为示例案例研究来解释定向灰盒模糊的相关特征

3 讨论距离的形式化度量以及灰盒模糊与模拟退火的集成

4 介绍了实现以及实验设计

5 将AFLGo应用于补丁测试,并将其与最新技术进行比较(Katch[21])

6 讨论将AFLGo集成到OSS-Fuzz中

7 将AFLGo应用于崩溃再现,并将其与基线无向灰盒模糊器(AFL)和最先进的(BugRedux[18])进行比较

8 引出了对有效性的威胁
9 对相关工作的调查

10 conclusion

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/794431.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

k8s CNI Calico 网络模式总结

目录 calico架构图 IPIP模式下的架构图 calico 核心组件 Overlay 网络模式: Pod IP对外暴露 不对外暴露: 实现对外暴露的方法: overlay模式下的网络MTU Iptables & ipvs overlay的主要缺点: Full-mesh Unoverla…

Python使用executemany实现数据批量插入

Python的pymysql中提供有cursor.execute()实现数据的逐行插入,但是当数据量较大时,这种插入方法十分耗时。这时我们可以使用cursor.executemany()函数来实现数据的批量插入。 executemany()用法 在数据库连接后,使用cursor.excutemany(sql,…

【Linux】基础IO—1

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 文章目录 前言 先来段代码回顾C文件接口 "w"写文件 "a"追加文件 "r"读文件 输出信息到显示器,你有哪些方法 stdin & std…

Git入门实战教程之创建版本库

一、Git简介 Git是一个分布式版本控制系,分层结构如下: Git分为四层: 1、工作目录 当前正在工作的项目的实际文件目录,我们执行命令git init时所在的地方,也就是我们执行一切文件操作的地方。 2、暂存区 暂存区是…

Docker Compose从入门到熟悉

一、DockerCompose是什么? Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。使用前面介绍的Dockerfile我们很容易定义一个单独的应用容器。然而在日常开发工作中,经常会碰到需要多个容器相互配合来完成某项任务…

栈的应用——用栈实现算数混合运算表达式的计算

1、单目运算符双目运算符 算数运算符分为单目运算符和双目运算符等 单目运算符只需要一个操作数,双目运算符需要两个操作数 双目运算符最常见:常见的算术运算符:*/,比较运算符:<>=等等以下是一些单目运算符:正号 (+): 用于表示正数或给数值一个正号。例如:+5 仍然…

基于卷积神经网络的土豆疾病识别系统(pytorch框架)【python源码+UI界面+前端界面+功能源码详解】

功能演示&#xff1a; 土豆疾病识别系统&#xff0c;基于vgg16&#xff0c;resnet50卷积神经网络&#xff08;pytorch框架&#xff09;_哔哩哔哩_bilibili &#xff08;一&#xff09;简介 基于卷积神经网络的土豆疾病识别系统是在pytorch框架下实现的&#xff0c;系统中有两…

Linux | MySQL基础

MySQL MySQL是关系型数据库&#xff08;RDBMS&#xff09;&#xff0c;采用表格结构存储数据 同类型的还有Oracle、SQL Server 主要特点 适用于中小规模、关系型数据库系统(RDBMS) 支持Linux、Unix、Windows等多种操作系统 支持Python、Java、Perl、PHP等编程语言 典型应…

计组第三版书例题

基础知识过一下 存储器与CPU的连接主要通过数据总线、地址总线和控制总线实现。CPU首先向存储器发送地址信号&#xff0c;然后发出读写控制信号&#xff0c;最后在数据总线上进行数据的读写操作 。这种连接方式确保了CPU能够正确地访问和控制存储器中的数据。 https://blog.cs…

关于k8s集群中连接数不够,内存溢出的20道高级面试题

1. 描述Kubernetes集群中连接数不够的情况&#xff0c;以及可能导致的后果。 在Kubernetes集群中&#xff0c;连接数不够通常指的是网络连接的限制&#xff0c;这可能是由于以下几个原因造成的&#xff1a; 负载过高&#xff1a;当服务或应用承受的请求量超过其能够处理的范围…

树的基本概念与二叉树

文章目录 树的基本概念与二叉树一、树的概念和结构1. 树的概念2. 树的相关概念 二、树的存储1. 左孩子右兄弟表示法2. 双亲表示法 三、二叉树1. 特殊的二叉树1.1 满二叉树1.2 完全二叉树 树的基本概念与二叉树 一、树的概念和结构 1. 树的概念 树是一种非线性的数据结构,它是…

11 - Debian如何限制sudo权限

作者&#xff1a;网络傅老师 特别提示&#xff1a;未经作者允许&#xff0c;不得转载任何内容。违者必究&#xff01; Debian如何限制sudo权限 《傅老师Debian小知识库系列之11》——原创 上一篇介绍了特定用户使用su命令切换root。但是权限太大&#xff0c;而且root密码有泄…

MBTI测试背后的心理学原理:为什么它能揭示你的职业性格?

MBTI简介 迈尔斯-布里格斯类型指标&#xff08;Myers–Briggs Type Indicator&#xff0c;MBTI&#xff09;是由美国作家伊莎贝尔布里格斯迈尔斯和她的母亲凯瑟琳库克布里格斯共同制定的一种人格类型理论模型。 该指标以瑞士心理学家卡尔荣格划分的8种心理类型为基础&#xff…

节点与其祖先之间的最大差值(DFS,Java)

题目描述&#xff1a; 给定二叉树的根节点 root&#xff0c;找出存在于 不同 节点 A 和 B 之间的最大值 V&#xff0c;其中 V |A.val - B.val|&#xff0c;且 A 是 B 的祖先。 &#xff08;如果 A 的任何子节点之一为 B&#xff0c;或者 A 的任何子节点是 B 的祖先&#xff…

【数据结构】--- 探索栈和队列的奥秘

关注小庄 顿顿解馋૮(˶ᵔ ᵕ ᵔ˶)ა &#x1f4a1;个人主页&#xff1a;9ilk &#x1f4a1;专栏&#xff1a;数据结构之旅 上回我们学习了顺序表和链表&#xff0c;今天博主来讲解两个新的数据结构 — 栈和队列 &#xff0c; 请放心食用 文章目录 &#x1f3e0; 栈&#x1…

三足鼎立 PTA(25分)

目录 题目 输入格式&#xff1a; 输出格式&#xff1a; 输入样例&#xff1a; 输出样例&#xff1a; 样例解释&#xff1a; 题解 C code Java code 题目 当三个国家中的任何两国实力之和都大于第三国的时候&#xff0c;这三个国家互相结盟就呈“三足鼎立”之势&#…

【C++】二叉搜索数

目录 一、二叉搜索树的概念 二、二叉搜索树的模拟实现 1、定义节点 2、构造二叉树 3、析构二叉树 ​4、拷贝二叉树 5、二叉树赋值 6、插入节点 &#x1f31f;【非递归方式】 &#x1f31f;【递归方式】 7、打印节点 8、搜索节点 &#x1f31f;【非递归方式】 &…

我的需求分析方法论

或网上看了无数博客文章、技术视频&#xff0c;或购买金装版本技术书籍&#xff0c;看过无数原理原则、各种各样经典方法论&#xff0c;真正在实际开发工作中&#xff0c;本能去遵守和执行的又留下多少呢。 启动一个新系统时&#xff0c;我们可能还会去花些时间遵循这些原理原则…

中文大模型隐私保护哪家强?InternLM 与 Baichuan2 胜出!

引言&#xff1a;中文大模型隐私保护能力探索 本文研究了大语言模型&#xff08;LLMs&#xff09;对隐私和安全的影响&#xff0c;采用了三层渐进框架对语言系统的隐私进行评估。主要目标是全面评估LLMs对私人信息的敏感性&#xff0c;并检查其在识别、管理和保护敏感数据方面…

每日面经分享(Git经典题目,Git入门)

1. GitHub是什么 a. Git是一个分布式版本控制系统&#xff0c;作用是跟踪、管理和协调软件开发项目中的代码更改。 b. 提供了一种有效的方式来管理代码的版本历史&#xff0c;以及多人协作开发的能力。 2. Git的作用有哪些 a. 版本控制&#xff1a;Git可以记录每次代码更改的…