我正在阅读有关模糊测试的内容。我有一些关于模糊测试的基本问题。我搜索但找不到任何好的解释。
- 为什么图像文件在模糊测试中很流行和常见?使用图像文件有什么好处?
- 为什么 png 文件在模糊测试中很流行和常见?
- 为什么 Libpng 在 fuzzing 中很流行并且很常见?
- 初学者最好用 libpng 模糊 png 图像吗?为什么?
如果有人可以回答,那将对我很有帮助。先感谢您。
我正在阅读有关模糊测试的内容。我有一些关于模糊测试的基本问题。我搜索但找不到任何好的解释。
如果有人可以回答,那将对我很有帮助。先感谢您。
你模糊的不是图像文件,而是解析这些文件的软件。通常,开发人员不会编写代码来解析图像,而是使用第三方库,如 libpng。作为开发人员,您不需要对第三方库进行模糊测试,只需对项目的代码进行模糊测试。作为安全工程师,您可以对其进行模糊测试。
设置这样一个开源库的模糊测试很容易——你可以静态地构建它,创建一个调用它的小应用程序,并使用易于设置的模糊器(如 afl)对其进行模糊测试。这一点以及此类库被广泛使用的事实,因此这些库中的错误会对许多应用程序产生重大影响,使它们成为模糊测试的良好目标。
但是图像文件并不是唯一被广泛使用并且有流行的库来处理它们的文件。大多数模糊器不知道测试二进制文件的输入结构。他们主要在位/字节级别使用输入突变技术——改变输入的某些位/字节的值,将其提供给测试的应用程序并观察它的行为。当输入高度结构化时,模糊器无法深入测试代码。例如,要测试向其提供 html 文件的浏览器,需要一个模糊器来创建具有正确词法和句法结构的输入。通常,用于词法/语法处理的代码是根据语言语法自动生成的。通过更改 html 中的位/字节,您很可能会得到错误的关键字,这些关键字将被此类自动生成的代码拒绝,因此主要测试此代码而不是更深入。
对一个小的输入进行模糊测试也比对一个较大的输入进行模糊测试更快——需要更改的位数更少。只需将小图像作为种子,就可以轻松创建小图像文件,而不是例如 html 文件。
我不知道 png 文件是否比其他二进制媒体文件更适合进行模糊测试,但它们的结构可以包含多个不同类型的标头/块,这会导致代码中出现更多不同的处理路径,从而更容易出错.
正如我所说,它是开源的、广泛使用的、易于设置并且可以快速进行模糊测试——运行小型应用程序比浏览器快得多。
我不确定是否有“最佳”标准,但它很容易,因此对初学者有好处。