当前位置: 首页 > news >正文

工具学习_模糊测试

定义:模糊测试(fuzz testing, fuzzing)是一种软件测试技术。其核心思想是将自动或半自动生成的随机数据输入到一个程序中,并监视程序异常,如崩溃、断言失败,以发现可能的程序错误,比如内存泄漏。模糊测试常常用于检测软件或计算机系统的安全漏洞。

历史:1988年,威斯康星大学的Barton Miller教授率先在他的课程实验中提出了模拟测试。实验内容是开发一个基本的命令行模拟器来测试Unix程序。这个模拟器可以用随机数据来“毁坏”这些测试程序直到其崩溃。该类实验于1995年被重新复兴,并且包括了图形界面程序(例如X Window System)、网络协议和系统API库。一些后续工作可以测试Mac和Windows系统上的命令行程序与图形界面程序。关于模拟测试更早的想法可以追溯到1983年。Steve Capps当时开发了一个叫做The Monkey的Macintosh程序以测试Mac程序,并曾被用于发现MacPaint的程序错误。另一个早期的模拟测试工具是crashme,于1991年发布。其主要功能是让Unix以及Unix系统去执行随机关联指令以测试这些系统的健壮性。

测试流程:模糊测试通过向系统输入随机或异常数据来发现潜在问题。流程包括:在测试前搭建测试环境并配置测试工具;在测试中生成并执行模糊测试用例,监控系统状态,检查崩溃或异常;在测试后生成报告,列出发现的问题并提供修复建议。


案例分析:当数据长度超过100时,目标程序会发生缓冲区溢出,可能导致程序崩溃或其他未预期的行为。

#include <stdio.h>
#include <string.h>void vulnerable_function(char *input) {char buffer[100];strcpy(buffer, input);printf("Received: %s\n", buffer);
}int main() {char input[200];printf("Enter data: ");gets(input);vulnerable_function(input);return 0;
}

测试脚本:该脚本的目的是通过随机生成不同长度的字符串并不断发送到易受攻击的目标程序,测试程序如何响应这些异常数据。这种方法可以帮助发现潜在的内存溢出、缓冲区溢出等漏洞,或者其他没有预期的行为。

import subprocess
import random
import stringdef random_string(length):return "".join(random.choice(string.ascii_letters) for i in range(length))# Fuzzing loop
for _ in range(1000):data = random_string(random.randint(1, 200))process = subprocess.Popen(['./vulnerable_program'], stdin=subprocess.PIPE)process.communicate(data.encode())

定向模糊测试(Directed Fuzz Testing):是一种更加精确的模糊测试方法,它通过特定的输入策略和目标导向来提高测试效率,旨在发现特定类型的漏洞,如缓冲区溢出、内存泄漏等。

与传统的模糊测试相比,定向模糊测试并不完全依赖于随机生成数据,而是基于某些程序特性或漏洞模式的知识来生成更具针对性的输入数据。这种方法通过向程序输入特定类型的数据(例如,有意造成溢出的数据),来测试程序在特定情况下的行为。

http://www.xdnf.cn/news/441379.html

相关文章:

  • 中天互联在数据采集方面有哪些优势?
  • 初探 Skynet:轻量级分布式游戏服务器框架实战
  • 二叉树——层序遍历
  • MCU程序加密保护(二)ID 验证法 加密与解密
  • SCDN如何有效防护网站免受CC攻击?——安全加速网络的实战解析
  • 深度强化学习 | 图文详细推导软性演员-评论家SAC算法原理
  • FPGA: Xilinx Kintex 7实现PCIe接口
  • 数据库基础复习笔记
  • 量子计算实用化突破:从云端平台到国际竞合,开启算力革命新纪元
  • 40:相机与镜头选型
  • 虚幻引擎5-Unreal Engine笔记之Qt与UE中的Meta和Property
  • 云图库和黑马点评的项目学习经验
  • [原创](现代Delphi 12指南):[macOS 64bit App开发]: 获取macOS App的Bundle路径信息.
  • list 容器常见用法及实现
  • 基于运动补偿的前景检测算法
  • loss = -F.log_softmax(logits[:, -1, :], dim=1)[0, irrational_id]
  • 【C/C++】自定义类型:结构体
  • Seata源码—2.seata-samples项目介绍
  • 酒店行业冰与火:一边流拍,一边扩张
  • 大模型高效微调技术:从原理到实战应用
  • 深入理解Java适配器模式:从接口兼容到设计哲学
  • Python调用SQLite及pandas相关API详解
  • 解密企业级大模型智能体Agentic AI 关键技术:MCP、A2A、Reasoning LLMs-强化学习算法
  • 机器学习第十一讲:标准化 → 把厘米和公斤单位统一成标准值
  • 对抗系统熵增:从被动救火到主动防御的稳定性实战
  • R利用spaa包计算植物/微生物的生态位宽度和重叠指数
  • 序列化和反序列化hadoop实现
  • Math工具类全面指南
  • OpenCV CUDA 模块中用于在 GPU 上计算矩阵中每个元素的绝对值或复数的模函数abs()
  • 量子算法:开启计算新时代的技术密码