模糊测试Fuzzing基础知识学习笔记

news2024/11/23 4:00:26

概念

模糊测试(Fuzzing),是一种通过向目标系统提供非预期的输入并监视异常结果来发现软件漏洞的方法。在模糊测试中,用随机坏数据(也称做 fuzz)攻击一个程序,然后观察哪里遭到了破坏。

模糊测试(Fuzz Testing)是一种自动化的软件测试技术,最初是由威斯康辛大学的巴顿·米勒于1989年开发的,通常用于识别程序中的潜在漏洞。模糊测试的核心是自动或半自动的生成随机数据输入到应用程序中,同时监控程序的异常情况,如崩溃、代码断言失败,以此发现可能的程序错误,如内存泄漏。模糊化是指自动生成和执行测试,模糊测试中输入的随机数据被称为“Fuzz”,随机数据的类型包括:超长字符串;随机数如负数,浮点数,超大数、特殊字符如~!@#$%等包含特殊含义的字符,作为输入可能会引发报错;unicode编码,因为有些程序是不支持unicode的。模糊测试无法提供对于一个软件应用在安全威胁或漏洞方面的整体评估,在处理不会导致应用崩溃的安全威胁时效果较差,例如某些病毒、蠕虫、木马等,因此需要结合其它的安全测试手段来保障软件系统的安全。

Fuzz生成的随机输入大多数在语法上是不成立的,为了能让模糊测试有效的进行下去,需要增加获得有效输入的几率。一个好的模糊生成器产生的数据,不会偏离预期输入太远,但又是非预期的,会触发应用的异常行为。模糊测试用例生成算法主要有两种:
1)基于变异:根据已知数据样本,通过变异的方法生成新的测试用例;
2)基于生成:根据已知的协议或接口规范,建模并生成测试用例;

目前最常用的 Fuzzer 是由谷歌工程师迈克尔·扎里斯基(Michal Zalewski)开发的 American Fuzzy Lop(AFL)。AFL 是一款开源的模糊测试工具,在程序执行前对程序源码进行插桩(instrumentation),以便在程序执行过程中实时获取程序的执行情况。AFL 采用遗传算法对程序的输入进行变异能够在程序运行的时候注入自己的代码,然后自动产生测试用例进行模糊测试。代码覆盖率是模糊测试工具用来评估找到导致错误的代码路径的可能性的主要指标。在执行过程中,AFL 向被测程序中输入 input,然后获取程序的覆盖率,将覆盖率大的 input 保留下来进行变异,然后在下一轮测试中向被测程序中输出这些变异后的 input,一直到程序的覆盖率在较长的一段时间不能继续增大为止。

随着技术的演变,模糊测试从单纯的黑盒模糊测试,也衍生了灰盒、白盒模糊测试技术。目前AFL没有维护了,社区维护版叫AFL++。

常用工具

  • AFL
  • libfuzzer

Resource

  1. AFL
  2. 自己写一个小型的Fuzzer
  3. 北大 软件分析
  4. 南大 软件分析
  5. The Fuzzing Book 模糊测试入门
  6. Static Program Analysis
  7. libfuzzer-workshop

Reference

1.什么是模糊测试?
2.什么是模糊测试? (不是同一篇文章)
3.Fuzzing(模糊测试)技术,你真的了解吗?
4.CS研究生如何入门模糊测试方向?

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

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

相关文章

6.Mysql自连接

针对相同的表进行的连接被称为“自连接”(self join) 那么为什么要把相同的一张表连接起来呢?一开始还是挺难理解的。把它想象成连接两张不同的表,这样容易理解一些。事实上,自连接还是有很多用处的 1. 在同一张表内进…

模板初识与STL简介

初识模板 引言函数模板定义实例化隐式实例化显式实例化 类模板定义实例化 STL简介STL六大组件 总结 引言 模板是泛型编程的基础 在之前我们介绍过函数重载,可以定义许多函数名相同参数列表不同的重载函数,来实现不同类型的相似操作。调用重载函数时会根…

chatgpt赋能python:归一化在PyTorch中的运用

归一化在PyTorch中的运用 PyTorch是一种广泛使用的深度学习框架,它可以用于训练和预测各种类型的神经网络。在深度学习中,归一化是提高模型性能的一种常用技术。归一化是指将输入数据进行标准化或规范化处理,以确保数据的统一性和一致性。在…

golang硬核技术(二)go程序从启动到运行到底经历了啥

前言 go相对其他语言,对并发的支持更友好。这使得他的设计和其他程序迥然不同。让我们来看看它都是如何初始化程序的,从程序加载到运行到底经历的什么。 我们继续之前的版本1.18.4 汇编入口 首先我们编译一个hello world 程序。 package main impor…

python--连接oracle数据库

python--连接oracle数据库 前言一、安装cx_Oracle二、导入库三、数据库操作实例3.1 连接3.2数据库查询3.3数据库插入3.4 实例从某网站上面爬取彩票号码 四、异常4.1、运行时,出现连接数据库失败:DatabaseError:DPI-1047解决连接失败问题1、查看Oracle的版本号2、进入…

辅助驾驶功能开发-功能规范篇(21)-1-XP行泊一体方案功能规范

XPilot Safety 主动安全系统 一、前向碰撞预防(Forward Collision Prevention) - 产品定义 基于车辆前向视觉模块和前毫米波雷达的感知能力,对车辆前方扇形区域内的车辆和VRU(弱势道路使用者) 有可能与本车的运行路线发生碰撞,进行预警、碰撞伤害降低或碰撞避免的一系列…

QT 简易视频播放器版本1.1

设计Qt界面实现播放、暂停、停止、下一集、上一集、快进、后退、倍速播放、进度调节,音量调节、视频播放列表等功能 先上演示效果: ui界面设计 videoplayer.h #ifndef VIDEOPLAYER_H #define VIDEOPLAYER_H#pragma execution_character_set("utf-…

深入了解Promise机制并使用JS实现一个Promise(一)

前言 关于为什么会有Promise以及Promise的一些用法和基本机制可以参考之前的文章JS中的异步与Promise使用整体来说,Promise可以帮助我们很好的解决异步的问题,号称是异步的终极解决方案。在浏览器中Promise是使用C实现的,今天就使用js来实现…

JSP原理以及基本语法

1、JSP原理 什么是JSP? Java Server Pages:Java服务器页面,和Servlet一样是动态Web技术! 和HTML的区别? HTML是静态页面。在JSP页面中可以嵌入Java代码,为用户提供动态的数据。 JSP 和 Servlet 的关系…

枚举一个进程中的所有线程

在 Win32 开发中,如果需要获取程序运行过程中的一些较为底层的信息,你可能需要使用到 Tool Helper 库。但我愿意称之它为 Win32 中的 “害群之马”。何解? Tool Helper 库在 16 位 Windows 时代就已经存在了,这个库主要用来提供一…

今天给我的Ubuntu服务器挂在了一个4T的硬盘却只能识别到2T,原来是因为这!涨知识了

前言 今天买的4T机械硬盘到了,准备给我的服务器加装上,用来作为Nextcloud的存储硬盘。把硬盘安装好后就迫不及待的进行挂载,挂载的操作倒是挺顺利的,但是无论怎么操作Ubuntu系统识别到的大小居然都是2T,最后没办法&am…

chatgpt赋能python:开方在Python中的用法

开方在Python中的用法 开方是数学中常见的一种运算,用于求一个数的平方根。在Python中,开方运算可以通过使用math模块中的sqrt函数来实现。本文将介绍开方运算的概念、Python中的应用以及一些常见问题的解决方法。 开方的概念 开方是指,对…

chatgpt赋能python:在Python中运行程序的方法介绍

在Python中运行程序的方法介绍 Python是一种广泛使用的编程语言,也是人工智能和数据科学领域的首选。在这篇SEO文章中,我们将介绍Python中运行程序的几种方法。 1. 在Python环境中运行程序 Python环境是一个Python解释器及其标准库的集合。为了在Pyth…

Redis7【⑥ Redis复制(replica)】

Redis复制 Redis 复制(Replication)是 Redis 的一项核心功能,用于将一个 Redis 数据库的所有数据复制到另一个 Redis 实例上。Redis 复制可以提高系统的可用性、可靠性和扩展性,使得在发生故障时可以快速地恢复数据。 Redis 复制…

【TiDB v7.1.0】资源管控调研及评测

作者: angryart 原文来源: https://tidb.net/blog/ad24240a 多租户是什么 有语云,食在广州,玩在杭州,死在柳州,广东人除了天上飞的飞机不吃,地上走的坦克不吃,其它的什么都吃&am…

Mybatis面试题--MyBatis一级缓存,二级缓存

Mybatis的一级、二级缓存用过吗? 一级缓存: 基于 PerpetualCache 的 HashMap 本地缓存,其存储作用域为 Session,当Session进行flush或close之后,该Session中的所有Cache就将清空,默认打开一级缓存 二级缓存 是基于n…

Python将多维列表「拉伸」为一维列表的10种方式

来源:投稿 作者:Fairy 编辑:学姐 在Python编程中,列表是一种常用的数据类型。当我们遇到了一个嵌套列表,如果想将它扁平化为一维列表,就可以使用下面10种方法之一来实现这个需求。 1. 使用两层循环遍历 l…

【记录】实践场景

Apache Doris 在京东搜索实时 OLAP 探索与实践 https://doris.apache.org/zh-CN/blog/JD_OLAP/ 通过对比开源的几款实时OLAP引擎,我们发现doris和clickhouse能够满足我们的需求,但是clickhouse的并发度太低是个潜在的风险,而且clickhouse的数…

已将该虚拟机配置为使用 64 位客户机操作系统。但是,无法执行 64 位操作。

错误提示: 一般只有下面几种方法 百度经验解决方法 http://jingyan.baidu.com/article/90bc8fc859b481f653640cac.html http://jingyan.baidu.com/article/25648fc1bfd4a29190fd0067.html 2.第二种方法 检测问题所在: 下载LeoMoon CPU-V 检查一下CP…

小程序本地生活

2023年7月1号 感觉就是视频要快点看不完 不然哪天接口又失效了 Page({/*** 页面的初始数据*/data: {// 存放轮播图的数据swiperList:[],// 存放九宫格的数据gridList:[]},/*** 生命周期函数--监听页面加载*/onLoad(options) {this.getSwiperList()this.getGridList()},// 获…