XML解析器的模糊测试

8

我想对一个XML解析器进行模糊测试,想知道是否有一些合适的模糊测试工具。
最好不仅能生成随机的垃圾数据,还能利用现有的模式规范,如XSD或DTD。


关闭投票,因为不属于主题:“在 Stack Overflow 上,询问我们推荐或寻找书籍、工具、软件库、教程或其他外部资源的问题是不合适的,因为它们往往会吸引带有个人观点的答案和垃圾邮件。相反,请描述问题以及已经采取的解决方法。” - dzieciou
3个回答

7
以下是我几个月前在搜索时发现的一些XML模糊测试工具:
  • untidy。该项目似乎没有在积极开发,最后一次更新是在2007年。(该项目已不再在Sourceforge上提供,有关部分内容请参见archive.org,下载请参见packetstorm。它曾被添加到Peach-1.0中,但在Peach-3.1 Community Edition源代码中已经完全消失)。
  • Fuzzware。似乎对基于XSD的模糊测试有良好的支持。
  • Peach。Peach模糊测试工具将帮助您生成有效的XML文件,但如果您想模糊解析器而不是使用解析器的应用程序,则可能没有太大帮助。它值得一试,但请注意,如果您不了解XML中的各种结构,则创建数据模型可能是一个繁琐的过程。相关项目HotFuzz在这里也值得一提。
  • JBroFuzz。该项目正在积极开发中。我找不到任何描述其XML(和SOAP)模糊测试能力的教程。您可能会受益于它可以单独用作模糊测试库的事实。
  • Codenomicon Defensics for XML。这是一个商业模糊测试工具。免责声明:我曾经评估过Defensics,并发现它适用于各种目的。可以使用各种技术对XML解析器进行模糊测试-您可以将由模糊测试工具生成的文件或发出HTTP请求等。请记住,如果您需要模糊测试应用程序而不是解析器,则必须使用不同的方法; Defensics将帮助选择您想要的各种输入类别,以便您可以针对解析器、应用程序或两者进行定位。

3

这可能是你认为的“垃圾生成器”,但我还是要求你检查一下。

Radamsa 来自奥卢大学安全编程小组,是一个免费的通用模糊测试工具。你可以很容易地使用它进行模糊测试。给它一些示例文件,Radamsa就会为你生成模糊文件。

包含的不同模糊测试工具可以从简单的位翻转到复杂的结构学习和模糊测试。

代码可以在Google Code中找到。


并不是真正与XML相关,但它看起来非常适合于通用模糊测试。 - p4553d

1

American Fuzzy Lop 可能是一个不错的选择。它使用遗传算法来学习如何诱导程序中的新代码路径,并生成最大化覆盖率的测试用例。


AFL拥有适用于二进制格式的变异策略,但不适用于XML。然而,您可以按照https://census-labs.com/media/choronzon-zeronights-2015.pdf中所述编写自定义变异器,并将其插入到libfuzzer、honggfuzz或Mozilla的AFL分支中,这些分支也支持自定义变异器。 - Shnatsel
@Shnatsel,是否有任何关于 XML 的特殊情况导致 AFL 不能很好地与其配合使用?我记得 SQLite 在引入语言标记功能之前已经很好地进行了模糊测试。有了这个功能,模糊解析器应该更容易些。 - d33tah
这是一种冗长的文本格式,它依赖于将许多非常特定的字节放置在非常特定的位置上(例如,完整有效的标记,甚至是匹配的开放和关闭标记对)。AFL的变异策略非常适合二进制数据,但不太适合处理这种格式:像“翻转位”之类的东西并没有什么作用,但是在标记之间移动属性会发现新状态。Choronzon已经通过实验证明了这一点。但是,如果您想使用AFL来模糊XML,则可以编写自己的XML感知变异器,就像为Choronzon所做的那样。 - Shnatsel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接