【问题标题】:Fuzz-testing XML-parser模糊测试 XML 解析器
【发布时间】:2011-05-31 13:02:06
【问题描述】:

我想对一个 XML 解析器进行模糊测试,并想知道是否有一些合适的模糊测试器。
不仅可以生成随机垃圾,而且可以利用现有的模式规范,如 XSD 或 DTD,这将是一件好事。

【问题讨论】:

  • 投票关闭为题外话:“要求我们推荐或查找书籍、工具、软件库、教程或其他非现场资源的问题对于 Stack Overflow 来说是题外话,因为它们倾向于吸引自以为是的答案和垃圾邮件。相反,请描述问题以及迄今为止为解决该问题所做的工作。”

标签: xml xsd fuzzing


【解决方案1】:

以下是我在几个月前的搜索中偶然发现的一些 XML 模糊器:

  • untidy。这似乎没有在积极开发中,最后一次更新是在 2007 年。(Sourceforge 上不再提供该项目,后代请参阅archive.org for partial contentpacketstorm 下载。它已添加到 Peach-1.0,但没有Peach-3.1 Community Edition 源中出现的时间更长)。
  • Fuzzware。似乎对基于 XSD 的模糊测试有很好的支持。
  • Peach。 Peach fuzzer 项目将帮助您生成有效的 XML 文件,但如果您想模糊解析器而不是使用解析器的应用程序,可能不会有太大帮助。这当然值得一试,但请注意,如果您不了解 XML 中的各种结构,创建数据模型可能是一个繁琐的过程。相关项目HotFuzz这里也值得一提。
  • JBroFuzz。这是相当积极的发展。我找不到任何描述它的 XML(和 SOAP)模糊测试功能的教程。它可以单独用作模糊测试库这一事实可能会对您有所帮助。
  • Codenomicon Defensics for XML。这是一个商业模糊器。 免责声明:我过去曾评估过 Defensics,发现它适用于各种目的。单独的 XML 解析器可以使用各种技术进行模糊测试 - 您可以将由模糊器生成的文件提供给它,或发出 HTTP 请求等。请记住,如果您需要对应用程序而不是解析器进行模糊测试,则必须使用不同的方法; Defensics 将帮助您在模糊输入中选择您想要的各种输入类别,以便您可以针对您的解析器或您的应用程序或两者兼而有之。

【讨论】:

    【解决方案2】:

    这可能是您认为的“垃圾生成器”,但无论如何我都会请您检查一下。

    来自Oulu University Secure Programming GroupRadamsa 是免费的通用模糊器。你可以很容易地对它进行模糊处理。给它一些示例文件,Radamsa 会为你生成模糊文件。

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

    代码可以从Google Code找到。

    【讨论】:

    • 不是真正的 XML 相关,但它看起来非常适合通用模糊测试。
    【解决方案3】:

    american fuzzy lop 在这里可能是一个不错的选择。它采用了一种遗传算法,该算法将学习如何在您的程序中引入新的代码路径,并提出最大化覆盖率的测试用例。

    【讨论】:

    • AFL 的变异策略非常适合二进制格式,但不适用于 XML。但是,您可以按照census-labs.com/media/choronzon-zeronights-2015.pdf 中的描述为 XML 编写自定义 mutator,并将其插入 libfuzzer、honggfuzz 或 Mozilla 的 AFL 分支,这些分支也支持自定义 mutator。
    • @Shnatsel 是否有任何关于 XML 的特定内容使 AFL 无法很好地使用它?甚至在引入语言标记功能之前,IIRC SQLite 就已经很好地与 AFL 进行了模糊测试。有了这个特性,对解析器进行模糊测试应该会更容易。
    • 这是一种冗长的文本格式,依赖于将大量非常特定的字节放在非常特定的位置(例如,一个完整的有效标签,甚至是一对匹配的开始和结束标签)。 AFL 的变异策略非常适合二进制数据,但不能很好地处理这种格式:像“翻转位”这样的东西没有多大作用,但在标签之间移动属性会发现新的状态。 Choronzon 已经通过实验证明了这一点。但是,如果您想使用 AFL 来模糊 XML,您可以编写自己的 XML 感知 mutator,就像在 Choronzon 中所做的那样。
    猜你喜欢
    • 2015-10-13
    • 1970-01-01
    • 1970-01-01
    • 2021-10-11
    • 1970-01-01
    • 1970-01-01
    • 2011-11-20
    • 2018-05-09
    • 1970-01-01
    相关资源
    最近更新 更多