小组研究成果被ACM会议SOSP 2025接收


清华大学软件系统安全保障小组研究成果 “Fawkes: Finding Data Durability Bugs in DBMSs via Recovered Data State Verification” 近日成功被系统领域顶级会议 ACM SOSP 2025 录用。该工作面向数据库管理系统(DBMS)的数据持久性缺陷(Data Durability Bugs,DDBs),提出了一套自动化检测框架 Fawkes,在MySQL等8个主流数据库中挖掘出 48 个未知缺陷,具有广泛的工程应用前景和实践价值。本工作由博士生吴志镛、符景洲等人参与完成,北航梁杰副教授清华大学姜宇副教授等人共同指导。

研究成果概要:

数据持久性是数据库系统的基本要求,它能确保已提交的数据在发生意外故障(如断电)时保持完好无损。为此,数据库系统通常实现先进的持久化与恢复机制,包括预写日志(Write-Ahead Logging,WAL)、检查点(Checkpoints)以及Redo/Undo 日志等,以确保故障后能够顺利恢复到一致状态。然而,即便拥有这些成熟机制,数据库系统在实际运行中仍可能因实现复杂度过高而出现隐藏缺陷,导致数据不一致、数据丢失,甚至系统宕机。作者将此类严重破坏数据持久性的实现错误称为“数据持久性缺陷”(DDBs),它们会显著削弱数据库的可靠性。

尽管数据持久性缺陷对数据库系统的危害极大,作者发现目前学术界与工业界对其成因与特征的系统性认识仍相对有限,更缺乏行之有效的自动化检测方法。此外,现有的测试方法(如,Mallory)在检测数据库的持久性缺陷时存在局限性,特别是无法检测那些在数据库系统故障后导致数据丢失或数据不一致的问题。

为深入理解数据持久性缺陷,作者收集并分析了 PostgreSQL MySQL、IoTDB 与 TDengine 中的43个相关真实缺陷,逐一研读漏洞报告、开发者讨论与补丁,归纳其表现形式、根本原因及触发条件。并根据缺陷的根本原因和触发条件,设计了面向数据库系统的数据持久性缺陷自动检测框架-Fawkes. Fawkes以「语境感知故障注入 + 功能引导触发 + 基于检查点的数据图验证」为核心, 整体流程包括三大组件:

(1) 上下文敏感的故障注入:该方法会在编译期静态分析调用图,自动标注所有触达文件系统或内核 API 的代码片段为“故障注入点”,运行时按需劫持 open/read/write/fsync 等底层调用并注入 7 类真实故障(断电、磁盘 I/O 错误、内存耗尽等)

(2) SQL功能导向的故障触发:该方法会结合注入点覆盖率与 SQL 语义,动态调整工作负载,优先探索低覆盖、易遗漏的持久化关键路径,显著提升深层缺陷触发概率

(3) 基于检查点分析的数据图验证:该方法以元数据图抽象记录“故障前应持久化的数据快照”,分析数据库恢复日志并回溯到最新检查点后再前滚,自动推导“理论恢复状态”并与实际对比,支持检测数据缺失、数据不一致、日志损坏及系统不可用等四类数据持久性缺陷。

作者将 Fawkes 在8个被广泛使用的数据库系统(MySQL等)上进行了评估。Fawkes 共检测出 48 个此前未知的数据库持久性缺陷(DDBs),其中 16 个已被官方修复,8 个因严重性被分配了 CVE 编号。同时作者还将Fawkes 与Jepsen 、CrashFuzz 、Mallory  和 CrashTuner 等与当前最先进的故障注入方法进行对比,在 72 小时测试实验中Fawkes多发现了 27、25、23 和 28 个缺陷,代码分支覆盖率分别 提升 84%、48%、47% 和 70%。