你了解模糊测试(fuzz testing)吗?

2023-11-16

模糊测试(fuzz testing)是一类安全性测试的方法。说起安全性测试,大部分人头脑中浮现出的可能是一个标准的“黑客”场景:某个不修边幅、脸色苍白的年轻人,坐在黑暗的房间中,正在熟练地使用各种工具尝试进入某个系统。这种由安全人员“模拟黑客进入系统”的测试方法的确是安全性测试中的一种有效测试手段,名叫“渗透测试”。渗透测试方法完全依靠测试执行者的能力,能力强的“白客”能够发现有价值的安全性漏洞,而不具备很强的攻击能力的测试者就无法有效发现系统中的安全性漏洞。必须承认,渗透测试是一种有效的安全性测试手段,当然,前提是你要能够找到足够好的测试执行者。
  渗透测试是一种有效的测试方法,但由于它对执行者的能力要求太高,因此很难被大规模应用。站在测试的角度,我们是否能够用“自动化测试”这个强有力的武器帮助降低安全性测试的门槛呢?一个容易想到的“录制/回放”方法是:将渗透测试的执行者们的操作录制下来,形成脚本,期望这些脚本可以在不加修改或是稍加修改时应用在对其他应用的安全性测试中。但由于渗透测试的过程并不具有可重复的特点(测试执行主要依赖执行者的经验,类似调试),这种想法在真实的安全性测试环境下完全不可行。完全自动化的工具通常只能发现那些可被用标准化方式发现的特定安全漏洞(如简单的SQL注入漏洞)。
  模糊测试是一种介于完全的手工渗透测试与完全的自动化测试之间的安全性测试类型。它充分利用了机器的能力:随机生成和发送数据;同时,也尝试将安全专家在安全性方面的经验引入进来。从执行过程来说,模糊测试的执行过程非常简单:
  测试工具通过随机或是半随机的方式生成大量数据;
  测试工具将生成的数据发送给被测试的系统(输入);
  测试工具检测被测系统的状态(如是否能够响应,响应是否正确等);
  根据被测系统的状态判断是否存在潜在的安全漏洞。
  显然,模糊测试的整个执行过程是依靠工具进行的自动化测试。但是,看起来它完全是一个类似MonkeyTest工具的随机数据生成器嘛,这怎么能和安全专家的经验结合起来呢?别着急,我们用一个例子来演示一下。
  为了简单起见,假定我们要测试的应用是一个C/S应用的服务端程序。这个程序运行在Unix平台上,名字叫做TgServer。我们唯一知道的信息就是客户端和TgServer之间使用基于TCP/IP的自定义协议进行通讯。这种情况下,我们该如何尝试找到应用系统中可能的漏洞?
方法1:
  如果我们手头上有TgServer的源代码,通过代码审查显然可以找到可能的漏洞。就算没有源代码,通过逆向工程方式,用代码审查的方式也可以达到找到漏洞的目的。当然,这必然要求审查者具有足够好的技能,而且,被测应用规模越大,需要付出的成本也就越高。
  方法2:
  尝试抓取到客户端和服务器之间的通信数据,根据这些数据分析出客户端与服务器之间的通信协议,然后根据协议的定义,自行编造数据发起攻击,尝试找到可能的漏洞。
  方法2在成本上比方法1要低,而且由于方法2关注的是协议层面的攻击,效率会更高。但是,稍微想一下,方法2还是存在一些问题:
  完整的协议分析难度很大;
  人工编造数据的成本很高;
  在方法2的基础上,我们尝试引入模糊测试的概念,由于机器生成和发送数据的能力足够强,因此我们完全可以把生成数据的任务交给机器去完成。当然,协议的分析主要还是依赖人工来进行,模糊测试领域内有一些自动化的协议分析手段(《模糊测试》一书中有专门的章节描述),但从效率和效果上来说,在面对复杂协议的时候,人工分析的方式更为有效。
  假如根据抓取到的数据包,我们发现被测应用使用的协议如下(|仅表示字段间的分割,不是实际的数据内容):
  |00 01| GET | 11 | user:dennis
  2字节的包头(00 01)
  10字节定长的命令(GET)
  一个1字节的数据,表示命令参数的长度
  不定长的命令参数
  根据这些信息,使用模糊测试方法,我们就可以借助通用的模糊测试工具(如Spike),用模板方式将协议描述出来,并让模糊测试工具自动填充可变字段的内容,生成大量的测试用例并发送给TgServer。同时,通过模糊测试工具提供的功能监视TgServer,一旦TgServer出现可被识别的问题(如性能下降,不再响应,或是返回异常数据等),我们就可以停止模糊测试,并通过日志找到导致问题的请求,进而确认问题。
  简单的说,模糊测试尝试降低安全性测试的门槛,通过半随机方式的数据发送来找出被测系统的漏洞。显然,测试这对被测应用越了解,模糊测试的生成就能越准确。但与渗透测试或是代码审查相比,模糊测试显然更加易于进行。而且,通过自动化工具,模糊测试可以把安全方面的经验积累到工具中,为组织持续的安全性测试提供帮助。
  这是本系列的第一篇,后续还将写两篇来介绍不同类型应用的模糊测试,以及常用的模糊测试工具。
  《模糊测试——强制发掘安全漏洞的利器》这本书全面覆盖了模糊测试这一技术。
最新内容请见作者的GitHub页:http://qaseven.github.io/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

你了解模糊测试(fuzz testing)吗? 的相关文章

  • .NET C#基础(5):结构体 - 高性能代码的基石

    0 文章目的 本文面向有一定 NET C 基础知识的学习者 介绍C 中结构体定义 使用以及特点 1 阅读基础 了解C 基本语法 了解 NET中的栈与托管堆 2 值类型 2 1 NET的两大类型 在 NET中 所有类型都是object类型的子
  • Excel行高、列宽怎么调整?

    在日常工作中 经常会需要用到Excel表格 如果打开的Excel表格行高列宽不是我们想要的 要怎么调节到合适的大小呢 方法一 打开Excel表格 按 Ctrl A 快捷键 选中全部表格 或者点击表格左上角 行号和列标交汇处的灰色小三角 也可
  • CEPH PG incomplete状态修复

    某运营商的Kubernetes项目物理机停机维护 重启后Kubernetes部分pod无法挂载PVC 请求超时 该Kubernetes集群的后端存储使用ceph rbd块存储 检查ceph集群状态异常 root ceph node01 ce
  • Nacos

    一 Nacos Spring Cloud Alibaba https spring io projects spring cloud alibaba Nacos 官网 https nacos io zh cn docs what is na
  • openGL library下载地址

    GLUT下载页面 http www opengl org resources libraries glut glut downloads php GLUT for Win32下载页面 http www xmission com nate g

随机推荐

  • linux系统虚拟机安装centos7

    一 安装 第一步 下载安装VMware Fusion Mac版本下载后双击安装 这里不做过程记录 第二步 下载CentOS 7安装包 CentOS 7 x86 64 DVD 1810 iso 本文不提供下载地址 第三步 在VMware Fu
  • Vue中使用render 封装el-table解决多级表头自定义模板

    vue中多数情况下使用template封装组件逻辑清晰结构简单 但是在某些情况下 比如非常简单的组件 vue render简单解析或者template无法解决某些场景下 使用完全javascirpt能力就显得尤为重要 文章目录 使用rend
  • VB.Net常用的正则表达式(实例)

    d 非负整数 正整数 0 0 9 1 9 0 9 正整数 d 0 非正整数 负整数 0 0 9 1 9 0 9 负整数 d 整数 d d 非负浮点数 正浮点数 0 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1
  • 给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数---百度笔试题

    题目 给定一个存放整数的数组 重新排列数组使得数组左边为奇数 右边为偶数 要求 空间复杂度O 1 时间复杂度为O n 我自己写了一下 之前写的那个不对 现在重写了 时间复杂度达到O n void swap int a int i int j
  • python数据可视化-折线图

    可通过ab173 com查看json数据 导入json import json 处理数据 美国为例 f us open D 桌面 折线图数据 美国 txt r encoding UTF 8 us data f us read 美国的全部内容
  • VMware17虚拟机安装及Linux系统搭建(详细版)

    作者简介 大家好 我是小杨 个人主页 小杨 的csdn博客 希望大家多多支持 一起进步呀 前言 VMware是一个虚拟PC的软件 可以在现有的操作系统上虚拟出一个新的硬件环境 相当于模拟出一台新的PC 进行计算机的管理 软件安装 文件的使用
  • 这十个步骤让你的 App 避规ios 4.3被拒问题

    4 3 垃圾应用 请不要为同一个 App 创建多个套装 ID 如果您的 App 针对特定位置 运动队 大学等存在不同版本 请考虑提交单个 App 并提供 App 内购买以提供差异功能 同时 请避免继续在已有大量类似 App 的类别下进行开发
  • kubectl应用

    文章目录 kubectl用法概述 kubectl输出格式 kubectl操作示例 kubectl用法概述 kubectl命令语法 kubectl command TYPE NAME flags 其中 command TYPE NAME fl
  • 如何计算内存大小

    对电子产品 存储介质厂家来说 是按进率1000来计量的 即1000B 1KB 1000KB 1MB 1000MB 1GB 也就是为什么硬盘分区后 会造成缩水 比如80G硬盘实际等于76G 的原因 因为系统是按1024进率来进行分区的 注 我
  • 多文件编程

    文章目录 什么是多文件编程 lt gt 与 多文件编程方法 变量重复定义与头文件重复包含 变量重复定义 头文件重复包含 为什么要避免重复包含 如何解决 1 ifndef 2 pragma once 小总结 什么是多文件编程 多文件编程 指的
  • vite postcss

    PostCSS PostCSS是一款使用JavaScript插件对CSS实现转换的工具 PostCSS拥有非常强大的插件 典型的比如autoprefixer cssnext css modules等 PostCSS插件的处理方式类似CSS预
  • CSS:基本选择器中的ID选择器和class选择器的区别

    ID选择器 通过标签的id名称来选择标签 id 类选择器 class选择器 选择一个类别 className 区别 1 ID 选择器的是以井号 开头来定义的 类 选择器是以点 来定义的 2 ID 选择器在 HTML 中是可以通过 id 属性
  • 2_Nginx 语法

    文章目录 一些说明 配置静态资源服务器 常用指令 一些说明 指令 指令块 指令以分号结尾 一条指令可以有一个或多个参数 参数之间以空格分隔 例如 server name 指令块可以有名字或者没有名字 include 允许组合多个配置文件 以
  • 面经(一)广州保伦电子有限公司校招宣讲面经

    前言 本章主要讲述我曾参加广州保伦有限公司的学校宣讲并笔试的经历 一 经历概述 宣讲前 在得知该公司会来我们学校进行宣讲时 我看到有招聘Java开发职位 就马上决定参加该公司的宣讲 因为我们学校是最后一次宣讲的地方 自己心里也知道人肯定是招
  • Design Compiler (七)——环境、设计规则和面积约束

    本文如果有错 欢迎留言更正 此外 转载请标明出处 http www cnblogs com IClearner 作者 IC learner 本文的主要内容是讲解 约束针对的是逻辑综合下的约束 而实战部分则是在DC的拓扑模式下进行 环境属性的
  • image not loaded  try to open it externally to fix format problem

    image not loaded try to open it externally to fix format problem 图片没有加载 请从外部打开图片以解决格式问题 由于项目是直接复制过来的 图片从外部打开显示为空 直接全部替换重
  • 编码规范(三)----静态分析工具PMD

    一 简介 1 1 什么是静态代码分析 静态代码分析是指无需运行被测代码 仅通过分析或检查源程序的语法 结构 过程 接口等来检查程序的正确性 找出代码隐藏的错误和缺陷 如参数不匹配 有歧义的嵌套语句 错误的递归 非法计算 可能出现的空指针引用
  • 形象的理解TCP协议为什么要“三次握手”

    我们先来看看专业的解读是怎么简单描述 三次握手 的 以下图片来自百度百科 如果你看完一脸懵圈 不妨想想三次握手的目的 那就是确保客户端和服务器能够正常通讯 当然 本文只是从非专业的角度解释为何TCP建立连接的三次握手就能保证正常通讯 为何不
  • Java创建对象数组出现空指针报错

    public static void main String args teacher d new teacher 2 System out println d 0 其中创建的数组d的内存状态为空 输出数组d其中一个元素是null 即使随便
  • 你了解模糊测试(fuzz testing)吗?

    模糊测试 fuzz testing 是一类安全性测试的方法 说起安全性测试 大部分人头脑中浮现出的可能是一个标准的 黑客 场景 某个不修边幅 脸色苍白的年轻人 坐在黑暗的房间中 正在熟练地使用各种工具尝试进入某个系统 这种由安全人员 模拟黑