论文部分内容阅读
随着互联网的普及和Web开发技术的兴起与发展,Web应用程序已成为最重要的互联网应用之一,在各领域承载了举足轻重的作用。Web应用程序的安全问题得到了研究界及工业界的广泛关注。Web应用程序的安全漏洞是攻防双方最为重要的战场,如何有效识别Web应用程序中的安全漏洞,即漏洞检测,是Web安全领域的核心问题。根据是否运行被检测的程序,可将漏洞检测技术分为静态漏洞检测技术和动态漏洞检测技术。静态漏洞检测技术及动态漏洞检测技术均面临诸多挑战。静态漏洞检测技术通常误报率高,提高静态漏洞检测精确度的同时,保证方法的性能,是静态漏洞检测面临的关键挑战之一。静态漏洞检测通常运用程序分析技术,发现Web应用程序的安全问题。然而,由于Web应用程序所具有的特性,使得传统的程序分析技术无法直接被使用进行静态漏洞检测。基于模糊测试的动态漏洞检测技术具有误报率低的优势。但是,由于输入向量的随机性,模糊测试的代码覆盖率低,难以发现程序中深藏的漏洞。基于混合执行的测试输入生成方法能够提高模糊测试的代码覆盖率。然而,现代Web应用程序逻辑复杂、规模庞大,混合执行在遍历可达执行路径时,面临路径爆炸问题。本文围绕Web应用程序静态漏洞检测与动态漏洞检测面临的问题与挑战,结合Web应用程序的特性,重点研究了Web应用程序局部调用图生成、输入验证漏洞检测及混合执行中的路径搜索等关键技术。本文主要贡献如下:1.为支持静态漏洞检测中的过程间分析,针对全程序分析效率低和Web应用程序库代码缺失的问题,本文提出了一种Web应用程序局部调用图生成方法。该方法的分析对象为Web应用程序的应用部分代码、应用部分所引用的库部分代码中方法的签名、类的域和类层次结构。首先,使用混合堆模型对程序中的内存位置进行抽象,区分应用部分及库部分的抽象内存位置。然后,利用规则对与指针相关的应用部分和库部分交互行为进行建模,推断库部分代码的指针信息。最后,为库部分维护指针指向集合,利用该集合解析库回调边,并限制回流进入应用部分指针指向集合的抽象对象。实验结果表明,该方法的运行时间分别比werroes和Spark快4.9倍和13.7倍,同时能在一定程度上保证局部调用图的完整性和精确性。2.针对静态漏洞检测误报率高的问题,本文提出了一种基于静态信息流跟踪技术的输入验证漏洞检测方法。首先,集成指针分析,识别程序中堆内数据的依赖关系以及变量之间的别名关系。然后,通过过程内数据流分析计算程序中方法的数据依赖关系摘要,提高过程间分析的效率。最后,提出双向数据流分析技术来静态跟踪信息流,缩短污点数据传播路径长度。本文在开源静态代码分析工具FindBugs上实现该方法,并在基准程序SecuriBench上对该方法进行验证。实验结果表明,该方法在不明显降低静态漏洞检测方法性能的前提下,提高了输入验证漏洞的检测精确度。3.针对混合执行的路径爆炸问题,本文提出了一种混合执行中的路径搜索策略。该搜索策略对被测试程序各个分支的代码覆盖率进行实时估算,并选择覆盖率最低的分支继续探索执行。实验结果表明,该路径搜索策略能够有效缓解混合执行的路径爆炸问题,为提高基于模糊测试的动态漏洞检测技术的代码覆盖率提供支持。