关键词:
漏洞挖掘
数据库管理系统
模糊测试技术
摘要:
数据库管理系统(Database Management System,DBMS)是现代软件系统的数据基础设施,为现代软件系统提供数据持久化服务,其安全性至关重要。近年来,DBMS的可靠性和安全性受到工业界和学术界越来越多的关注,研究人员广泛使用模糊测试技术验证DBMS的功能和挖掘漏洞,取得了有效的进展,证明了模糊测试技术在DBMS漏洞挖掘方面是一种行之有效的技术方案。但是传统的模糊测试技术在应用于DBMS漏洞挖掘方面存在一些问题:(1)当前手工编写初始种子的方式无法为DBMS模糊器提供足够全面的语法元素,生成的测试用例对DBMS的功能覆盖不够全面,导致代码覆盖率低;(2)测试用例生成过程对语法无感知,生成的测试用例难以通过DBMS的语法检查,导致测试用例过早地被DBMS拒绝执行;(3)测试用例生成过程对语义无感知,生成的测试用例难以通过DBMS的语义检查,导致对DBMS的深层代码测试不足;(4)以代码覆盖率为导向的灰盒模糊测试技术严重依赖源代码插桩,不适用于无源码场景。本文基于当前DBMS模糊测试技术的进展,进行以下研究:第一,针对有源码的灰盒场景,研究语法语义感知的灰盒DBMS模糊测试技术,主要包括种子挖掘技术、双重变异技术和语义修复技术。种子挖掘技术从目标DBMS的官方测试套件中挖掘初始种子供后续变异使用,以充分覆盖目标DBMS的功能模块;双重变异技术使用语句序列变异和抽象语法树变异充分变异测试用例,并保证生成的测试用例的语法正确性;语义修复技术修复生成的测试用例中存在的语义错误,以确保生成的测试用例的语义正确性。第二,针对无源码的黑盒场景,研究基于神经网络语言模型(Neural Network Language Model,NNLM)的黑盒 DBSM 模糊测试技术,该技术无需进行源代码插桩,适用于无法获取目标测试程序源代码的场景。技术要点包括构造训练集、训练模型和生成测试用例。本研究首先对语料库进行相应的预处理,构造出训练集;然后利用神经网络语言模型充分学习目标SQL语言的语法结构和语义信息,训练出语言模型;最后设计多种生成策略,利用训练好的语言模型生成语法结构正确的测试用例,并利用语义修复技术修复生成的测试用例中存在的语义错误,从而生成语法语义正确的测试用例。第三,基于灰盒场景和黑盒场景下的DBMS模糊测试技术的研究内容,研究适用于灰盒和黑盒场景的DBMS模糊测试框架,并分别实现了对应的原型系统。最后,本文对原型系统的有效性进行了评估,实验结果表明,在实验对象SQLite 3.38.0和PostgreSQL REL143上,相比于基准对象Squirrel,本文的原型系统在代码覆盖率方面分别有26%和12%的提升。另外,文本的原型系统发现了两个未被发现过的DBMS漏洞,现已申请到CNVD漏洞编号。