《模糊测试--强制发掘安全漏洞的利器》之前六章读书笔记
2021-01-20 20:01:12 Author: xz.aliyun.com(查看原文) 阅读量:205 收藏

前言

看完本书学到很多东西,记此笔记和大家分享;考虑到本书内容庞杂,可以大致分为三部分:前六章是基础,之后的是具体平台fuzz的具体实现方式和注意事项,第三部分归类为其他。本次笔记谈的是前六章。

第一章 安全漏洞发现方法学

三种发现漏洞的方式

白盒测试、黑盒测试和灰盒测试是发现安全漏洞的三个主要方法。白盒要求测试者有被测系统的所有资源,黑盒则走向另一个极端,大部分情况属于“盲测”,灰盒在本书中讨论的方法是有编译后的二进制文件和部分基础文档。具体阐述如下:

白盒测试

  • 进行代码评审(人工审计或上自动化);
  • 优点:高覆盖(从理论上来说能发现一切漏洞);
  • 缺点:太复杂也不太现实

黑盒测试

  • 手工测试或fuzz(引出fuzz,简单地说是把程序非预期的数据都输入给被测应用,监视返回的结果);
  • 优点:高可用(基本总是可用)、高可重现性(例如完成对某种服务器黑盒测试可以用相同原理用到类似的服务器上)、简单(无需了解细节,但是想发现有趣的问题也要深入学习);
  • 缺点:黑盒测试不知何时停止、不知测试的效果、不聪明比较笨

灰盒测试

  • 黑盒测试+逆向工程获得系统内部知识,通过反汇编器反编译器、调试器对应用进行深入剖析;
  • 优点:能拿到二进制版本的被测软件后灰盒测试就能派上用场、覆盖率较黑盒有所增加;
  • 缺点:复杂性,没有二进制成员参与逆向分析就寸步难行了

请记住三者没有优劣之分。

第二章 什么是模糊测试

模糊测试概念

学界最与之相近的术语是边界值分析,它是一种黑盒测试方法,其根据应用的合法和非法输入区间,选落在区间边界附近的值做输入。模糊测试已经和这个概念很相像,但区别是模糊测试并非仅关注边界值,还会关心任何能触发未定义或不安全行为的输入。

本书中模糊测试定义为:通过向应用提供非预期输入并监控输出的一场来发现软件异常的方法。其利用自动化或半自动化重复向应用提供输入。在此给出两类用于模糊测试的模糊测试器:

  • 基于变异的模糊测试器(通过对已有的数据样本进行变异来创建测试用例);
  • 基于生成的模糊测试器(为被测系统用的协议或是文件格式建模,基于模型生成输入并创建测试用例)

作者在这用了个形象的例子,例如我们的目的是破门进入一间房子,白盒测试就是我得到了房子任何信息,甚至知道卧室锁子的结构,但我只能看,不知道我真正要破门后发生什么;采用黑盒就能在夜晚悄悄在外部测试门和窗,向房子内窥找到最好突破口;选择模糊测试的话就只需选一个武器并使破门进房间成为自动化即可。

模糊测试历史

  • 1989年,Miller教授用了一种原始模糊测试器测试UNIX的鲁棒性,思路是向应用中发送随机生成的字符串和字符;
  • 1999年,Oulu大学创建PROTOS测试套件:通过分析协议规范来生成畸形的数据包;
  • 2002年,微软向PROTOS提供资金支持,以继续发展(如实现了图形用户界面);

文章来源: http://xz.aliyun.com/t/9022
如有侵权请联系:admin#unsafe.sh