Fuzz测试 - 基础

(20210215 - 这篇文章是很久之前记录在简书的草稿箱中的,这次翻出来,就迁移过来)

2020/07/10 -

0. 引言

本文主要是阅读了文章[1]的简单总结,简单记录一下知识点,后续会安排更多的文章来具体描述。

1. Fuzz测试

在我之前的理解中,Fuzz测试就是通过构造不规则的输入,从而触发程序的某种bug;虽然也知道几款工具,但是只是停留在了解阶段。传统的漏洞挖掘包括三种方法:白盒代码审计,灰盒逆向工程,黑盒测试,Fuzz测试属于其中的黑盒测试。现在有了人工智能及深度学习的帮助,能够借助更多的方法来进行分析。不过,这种方法虽然看到过很多论文,但是效果有待考证。Fuzz测试也叫做模糊测试,通过输入非法字段,并观察软件是否异常来实现。一方面可以通过向软件输入非法字段,另一方面也可以通过向网络服务发送异常报文。

1.1 Fuzz实践遇到的问题

文章测试的对象是一个FTP服务器,也就是要利用网络报文来进行测试;文中提到,在实践过程中,主要遇到了一下的几个问题,这也是我一开始比较疑惑的。

  • 网络协议是有状态的,需要持续跟进网络协议的状态,分别对每个阶段进行测试,所以需要一些特有的程序来实现复杂的逻辑。
  • 如何构造异常,这个问题算是比较基础的
  • 如何发现被测设备是异常的呢?

思考:

  • 有状态的程序进行测试,对应第一个问题,这种方式从这个问题上来看好像很简单。但是对于一个可执行程序来说,如何进行测试呢?前面的问题本质上是因为你知道ftp协议每个阶段都是要干什么,但是给你一个另外的程序,你能知道他的逻辑吗?即使知道逻辑,但是你能知道怎么样让他走这个逻辑吗?
  • 第三个问题也比较关键,是不是只要保温发送过去,然后没有回复报错就是异常呢?还是怎么样?文章提到了利用内存泄露的方法来查看,但是这种方式是不是就界定了这种东西就必须是本地执行的呢?

实例

文章[1]中的实例是对一个FTP服务机型测试,通过在不同阶段构造不同的输入来测试,他的异常异常报文比较简单,就是一个长字符串;他检测异常的方式比较简单,在发送了异常的报文之后,如果没有收到回复,那就推断这个服务可能存在bug。


上面一部分文字是很久之前写的了,后来又简单接触了fuzzing部分的内容;通过仔细阅读之后,这方面的内容还是比较多的。
从整体来说,如果是要入手的话,我觉得两个问题比较重要:

  • 如何对构造输入
  • 如何监控程序

如果能够解决监控程序的问题,而且粒度越细越好,那么关键问题就是构造输入。
这是从宏观的角度,如果粒度细一点,例如到达要检测的程序这个粒度,可能根据这个程序是否存在源码,或者是否可以监控等等,又可以划分很多类别。

不管怎么样,都涉及到一个关键问题,那就是可能存在的状态空间爆炸;但是实际上,如何缓解状态空间爆炸,就需要利用先验知识,或者程序的反馈(监控信息)来实现。


20210223 -

相关文章记录

Fuzzing技术总结(Brief Surveys on Fuzz Testing) - 知乎

参考文章

[1]攻防:黑客技术与Fuzz测试

你可能感兴趣的:(安全研究,-,材料阅读,python,人工智能,模糊测试,漏洞挖掘)