博客 / 工程

与 WINGFUZZ 合作进行模糊测试 - 第 1 部分

author avatar
San Tran
2023 年 8 月 8 日 - 5 分钟阅读

2021 年,Alexander Kuzmenkov 分享了一些关于 ClickHouse 数据库模糊测试的工作,以及 ClickHouse 的核心工程团队和许多贡献者如何不断改进我们的测试覆盖率。正如 Alexander 所说,“测试是软件开发中的一个主要问题:永远都不够。”。

模糊测试一直是 ClickHouse 的重要组成部分。在 Alexander 发表博客文章的同一年,我们的创始人 Alexey 也在西伯利亚 C++ 用户组的会议上谈到了 ClickHouse 团队用于查找错误的各种模糊测试方法(视频 & 幻灯片)。演示文稿涵盖了从简单的模糊测试技术到使用 libfuzzer 和 AST Fuzzer 方法的更复杂技术等诸多主题。

除了上述工作,我们还积极与其他的安全团队、研究人员和合作伙伴合作,对 ClickHouse 数据库进行模糊测试。在这篇博文中,我们将讨论我们最近与 WINGFUZZ 团队的一次合作经验。通过这次合作以及该团队构建的创新模糊测试技术,我们得以发现 ClickHouse 中的几个新问题和有趣的边缘案例。

WINGFUZZ 技术内幕

为了理解这一切如何协同工作,让我们深入了解 WINGFUZZ 模糊测试引擎的内部原理,正如他们的团队所解释的那样。

WINGFUZZ 数据库模糊测试引擎可以帮助生成具有丰富类型的语义正确的 SQL 序列。它主要利用两种优化技术:基于元数据的无语法突变和基于类型亲和性的序列生成。

基本上,每个 DBMS 都有其自己独特的功能和 SQL 方言,包括 ClickHouse。WINGFUZZ 没有依赖语法,而是将数据库的状态总结为元数据图,这是一种轻量级数据结构,可以提高模糊测试中突变的正确性。

具体来说,它首先跟踪内置 SQL 测试用例中语句的元数据,并在执行这些语句时构造元数据图,以迭代地描述元数据和语句之间的依赖关系。基于元数据图,它通过随机重新排列现有语句来生成具有新序列的测试用例,并执行元数据引导的替换,以纠正重新排列后发生的语义错误。

有关无语法模糊测试的技术细节,请参见 “Griffin:无语法 DBMS 模糊测试”研究论文

为了探索更大的输入空间,WINGFUZZ 可以生成比其他模糊器更多类型的 SQL 序列。序列生成的关键思想是类型亲和性,它指示 SQL 类型对(例如,INSERT 和 SELECT)的有意义的出现。

在每次模糊测试迭代期间,WINGFUZZ 首先主动探索由面向序列的突变生成的 SQL 语句,并分析与覆盖率反馈的亲和性。面向序列的突变包括替换、插入和删除,如下所示。如果突变的种子覆盖了 DBMS 中的新代码区域,则将记录由类型更改引起的类型亲和性。

sequence-oriented mutations

接下来,当记录新的类型亲和性时,WINGFUZZ 逐步生成包含类型对的新 SQL 类型序列,并将它们实例化为实际的 SQL 测试用例。下图显示了 WINGFUZZ 如何找到有意义的 SQL 序列,该序列由 CREATE、INSERT、CREATE TRIGGER、INSERT 和 SELECT 组成。

WINGFUZZ finds a meaningful SQL sequence

有关面向序列的模糊测试的更多技术细节,请参见 “面向序列的 DBMS 模糊测试”研究论文

问题 & 修复

凭借我们广泛的 测试文件夹中现成的大量测试查询,WINGFUZZ 团队能够快速调整其独特的方法并开始对 ClickHouse 进行模糊测试。

虽然 WINGFUZZ 团队在过去几个月中报告了其他错误,但该团队最近进行了一些调整,并报告了另外 8 个独特的发现列表。我们的核心工程团队在这些问题作为 GitHub 问题(如下面的屏幕截图)出现后立即解决了这些问题。

wingfuzz-3

有趣的是,其中一些发现,例如 这个,仅在四个月前才引入。这表明,随着 ClickHouse 的开发速度,模糊测试在确保我们产品在向前发展和构建新功能时的稳定性和安全性方面起着至关重要的作用。

下一步是什么?

这篇博文的主要结论是改进每种数据库技术的模糊测试技术的重要性。模糊测试越多,覆盖率越高,效果越好。在 ClickHouse,我们认识到这一点,并在扩展我们的功能集时,不断将额外的模糊器集成到我们的日常开发过程中。这种积极主动的方法确保交付的每个 ClickHouse 版本都最大限度地关注安全性和可靠性。

与之前的模糊测试工作类似,我们的团队并没有止步于这些初步发现。通过与 WINGFUZZ 团队和 ClickHouse 工程团队的合作,我们的安全团队正在努力将 WINGFUZZ 模糊测试引擎集成到我们的日常测试中。这将在本系列博文的下一部分中介绍。

最后,我想分享我们的创始人 Alexey 对 WINGFUZZ 团队说的一句话。这句话是对所有模糊测试爱好者的公开挑战!

wingfuzz-4

分享这篇文章

订阅我们的新闻通讯

随时了解功能发布、产品路线图、支持和云产品信息!
正在加载表单...
关注我们
X imageSlack imageGitHub image
Telegram imageMeetup imageRss image
©2025ClickHouse, Inc. 总部位于加利福尼亚州湾区和荷兰阿姆斯特丹。