Effective fuzzing of programs that process structured binary inputs, such as multimedia files, is a challenging task, since those programs expect a very specific input format. Existing fuzzers, however, are mostly format-agnostic, which makes them versatile, but also ineffective when a specific format is required. We present FormatFuzzer, a generator for format-specific fuzzers. FormatFuzzer takes as input a binary template (a format specification used by the 010 Editor) and compiles it into C++ code that acts as parser, mutator, and highly efficient generator of inputs conforming to the rules of the language. The resulting format-specific fuzzer can be used as a standalone producer or mutator in black-box settings, where no guidance from the program is available. In addition, by providing mutable decision seeds, it can be easily integrated with arbitrary format-agnostic fuzzers such as AFL to make them format-aware. In our evaluation on complex formats such as MP4 or ZIP, FormatFuzzer showed to be a highly effective producer of valid inputs that also detected previously unknown memory errors in ffmpeg and timidity.
翻译:处理多媒体文件等结构化二进制输入的程序的有效模糊化是一项艰巨的任务,因为这些程序期望一种非常具体的输入格式。 但是,现有的引信大多是格式- 不可知性, 使得它们具有多功能性, 但当需要特定格式时也无效。 我们为格式化的模糊器提供格式Fuzzer, 格式化Fuzzer 为格式化的二进制模板( 由 010 编辑使用的格式规格), 并将其编成 C++ 代码, 作为解析器、 变异器和高效的输入生成器, 符合语言规则。 由此产生的格式化引信可以在黑盒环境中作为独立制成器或变异器使用, 因为黑盒环境中没有程序的指导。 此外, 通过提供变形决定种子, 格式Fuzzer 也可以很容易与任意格式- 敏感的模糊器( 如 AFLLL) 整合成格式- 。 在我们对复杂的格式( 如 MP4 或 ZIP ) 的评估中, 格式Fuzzzer 显示它是一个非常有效的有效输入器, 也可以在黑盒中探测到先前未知的内存误 。