模糊测试简介
发布日期:2021-05-14 08:36:43 浏览次数:15 分类:精选文章

本文共 1316 字,大约阅读时间需要 4 分钟。

模糊测试是一种通过向程序提供非预期的输入并监控输出中的异常来发现软件中的故障的方法。它在软件安全领域发挥着重要作用,能够帮助开发人员发现隐藏的问题。以下是关于模糊测试的详细内容。

基本原理

模糊测试通过向程序提供非预期的输入来测试其健壮性。测试器分为两大类:

  • 基于变异的模糊测试器:通过对已有的数据样本进行变异生成测试用例。
  • 基于生成的模糊测试器:通过对协议或文件格式建模生成输入。
  • 模糊测试流程

    模糊测试通常包含以下几个阶段:

  • 确定测试目标:明确程序的性质、功能、运行环境、语言,以及过去发现的漏洞等信息。
  • 确定输入向量:分析程序可能接收的文件数据、网络数据或环境变量等。
  • 生成模糊测试数据:设计测试数据生成算法,确保测试用例具有可重现性和可重用性。
  • 执行模糊测试:向目标程序发送大量测试数据,监控运行状态。
  • 监视异常:记录使程序产生异常的数据和相关信息。
  • 判定漏洞利用性:分析异常原因,评估漏洞是否可利用。
  • 基本要求

  • 可重现性:记录测试数据和程序状态,确保其他人能够复现结果。
  • 可重用性:通过模块化开发,避免为每个目标程序重新开发测试器。
  • 代码覆盖:确保测试器能覆盖目标程序的所有代码路径。
  • 异常监视:精准判定程序是否发生异常。
  • 存在的问题

  • 盲目性:测试用例路径重复,效率较低。
  • 冗余度大:随机策略生成的测试用例易重复。
  • 针对性不足:对关联字段关注不够,缺乏针对性。
  • 输入数据的关联分析

    应用程序通常对输入数据进行格式检查。通过分析数据对象的结构和依赖关系,构造符合格式要求的测试用例,提高测试成功率。关注以下字段:

    • 长度字段
    • 偏移字段
    • 可能引起逻辑变化的字段
    • 可变长度数据

    数据块关联模型通过将数据块作为基本元素,分析其关联性,生成畸形测试数据。数据块划分遵循以下原则:

  • 使数据块间关联性尽可能小。
  • 将具有意义的数据划分为同一数据块。
  • 将连续且固定不变的数据划分为同一数据块。
  • 数据块关联方式包括:

    • 内关联:同一数据对象内数据块间关联。
    • 外关联:多个数据对象间数据块关联。

    关联强度:

    • 强关联:关联数据块数量大于非关联数据块。
    • 弱关联:关联数据块数量小于非关联数据块。

    评价标准:

    • 有效数据对象效率:能被应用程序接受的数据对象个数与畸形数据对象个数比率。

    测试用例集的构建方法

    常见方法包括:

  • 随机方法:生成大量伪随机数据。
  • 强制性测试:持续打乱数据包各部分内容。
  • 预先生成测试用例:基于规约生成硬编码数据。
  • 遗传算法:优化测试用例生成。
  • 错误注入与模糊启发式:注入故障值测试。
    • 模糊启发式方法包括:整型值溢出、堆栈溢出、字段分隔符、格式化字符串、扩展字符处理、目录遍历、命令注入等。

    测试异常分析

    动态分析途径包括:

    • program正常输出
    • 静态代码插桩
    • 动态二进制插桩
    • 虚拟机测量
    • 调试接口或调试器

    模糊测试框架

    框架通常包含以下部分:

  • 模糊测试数据生成模块

    • 原始数据生成模块
    • 畸形数据生成模块
  • 动态调试模块:捕获异常信息。

  • 执行监控模块:决定何时终止程序。

  • 自动脚本模块:提供复杂监控功能。

  • 异常过滤模块:实时过滤异常结果。

  • 测试结果管理模块:保存异常信息,支持回归测试。

  • 参考资料

    由于篇幅限制,未列出具体参考资料。

    上一篇:信息论复习笔记
    下一篇:软件漏洞分析

    发表评论

    最新留言

    哈哈,博客排版真的漂亮呢~
    [***.90.31.176]2025年04月18日 01时05分57秒