关键词:
Java Web
模糊测试
解析树
代码覆盖
漏洞挖掘
摘要:
随着Java Web在各种大型系统中的广泛运用,其安全问题也日益突出,各种安全漏洞层出不穷。然而,由于Java Web应用业务的复杂性和庞大的代码规模,导致现有的测试方法和工具存在漏洞检测率低和性能较差的缺陷,因此难以有效检测实际的Java Web应用系统。针对上述问题,本文设计和实现了基于解析树的Java Web应用并行灰盒模糊测试系统。具体来说,本文的主要贡献如下:
(1)针对现有测试方法准确率较低,难以深入测试复杂Java Web应用业务逻辑的问题,本文提出了一种基于解析树的灰盒模糊测试方法。该方案首先会为Java Web应用程序的输入数据包进行语法建模,并根据用户提供的测试用例创建解析树,接着为每一个数据块都挂接一个种子池,在测试期间,依据测试程序的执行反馈信息,为种子赋予权值。后续创建数据包的时候,会在相应种子池中按照各自的权重进行种子调度,拼接成符合格式规定的输入,从而提高测试的准确率。此外,本文还提出了一种基于条件概率来指导模糊测试的轻量级方案。当模糊测试工具测试一段时间就不再产生新的执行路径,或者触发新的异常时,系统通过收集之前的测试用例,学习其中的概率分布,提升系统在之后的测试中发现新的路径和异常的几率。
(2)传统的模糊测试工具在对使用了线程池技术的Java Web应用进行测试的时候,难以将业务线程与对应处理的输入数据进行准确区分,导致性能较低。本文针对该问题,设计了一种使用影子线程来区分输入与业务线程的并行方案。通过为每一个运行的线程分配一个影子线程,由影子线程来处理代码覆盖率信息,减轻插桩代码负担,提升了系统的测试效率。
(3)本文设计并实现了基于解析树的Java Web应用并行灰盒模糊测试系统,并对该系统的功能完整性和性能开销进行了测试。测试结果表明,在对Java Web应用进行检测的时候,该系统与现有工具相比,取得了更好的测试效果,并且性能消耗较低。