TCP协议栈是现代网络通信的基础组件,因此它的可靠性和安全性尤为重要。然而在实际中,测试TCP协议栈是非常困难的。首先,TCP协议栈的输入是具有依赖关系的数据包和系统调用,因此生成有效的测试用例是比较有挑战性的;其次,TCP协议栈在运行过程中具有很多状态迁移的情况,而现有的测试方法目标在于覆盖更多的状态而非状态迁移;最后,在TCP协议栈中,语义缺陷的比例远大于内存缺陷,而现有的检查器只能检测内存缺陷,无法检测语义缺陷。本次报告将介绍一种面向TCP协议栈的模糊测试框架TCP-Fuzz,用来有效检测TCP协议栈中的内存缺陷和语义缺陷。TCP-Fuzz包含了三个关键技术:(1) 一种基于依赖的策略,能够有效生成具有依赖关系的数据包和系统调用,作为TCP协议栈的测试用例;(2) 一种迁移指导的模糊测试方法,利用代码分支的变化来描述TCP协议栈的状态迁移过程,来提升状态迁移的覆盖度;(3) 一种差分检查器,通过比较多个TCP协议栈在相同输入下的输出情况,来有效检测语义缺陷。TCP-Fuzz对常见的5个内核态和用户态TCP协议栈进行了实际测试,发现了56个真实缺陷(包括8个内存缺陷和48个语义缺陷),其中40个缺陷已经被开发者确认和修复。相关工作已发表于CCF A类会议USENIX ATC 2021。
TCP协议栈
白家驹