论文部分内容阅读
随着互联网的不断发展,云计算、大数据、移动支付等技术正在以颠覆性的方式改变着人们的工作和生活。互联网给人们带来便捷的同时,全球范围内大规模网络攻击,信息泄露等问题层出不穷。网络安全信息安全问题已经上升到国家安全层面,逐渐成为一个潜在的巨大问题。造成网络安全隐患的原因有多种,其中软件自身代码的错误和设计缺陷是造成软件源代码安全问题的主要原因。随着技术的发展、需求的增加,程序源代码结构愈发错综复杂,编程人员在开发过程中很难避免编码缺陷的存在。为了提升软件代码安全,软件开发过程中的源代码安全分析、静态分析就显得十分必要。然而商业化静态分析软件通用性较强在针对企业特有的代码时并不能准确的检测出问题,经常会产生误报和漏报。因此针对不同的源代码建立特有的静态分析模型进行代码检测有重要的研究意义。本论文以Java程序静态分析中漏洞检测技术为主题,对以Java语言为代表的Struts2框架当中频发的OGNL远程命令执行漏洞为例,从漏洞特点中总结源代码中的危险函数,在污点分析原理的基础上,对源代码的静态分析模型的建立进行了详细的研究,主要研究工作如下:(1)在源码层面,分析了 S2-045、S2-046这两个漏洞产生的原理。发现这两个漏洞的触发点相同,都是因为文件上传操作。S2-045漏洞是因为程序没有对文件上传操作进行正确的验证导致可以通过修改HTTP请求头中的Content-Type值然后作为OGNL表达式被解析执行;S2-046漏洞与S2-045利用方式不同,是通过在Content-Disposition的值中添加恶意的代码导致远程命令执行。(2)对漏洞产生的原理进行分析之后,总结了 Struts2框架中易引发OGNL表达式远程注入命令的缺陷函数的特征,并且根据这些特征提取了源码中的危险函数。危险函数主要特征有两点:1是代码中涉及到对外部传进来的数据进行处理的函数,2是Struts2框架中会把参数当中OGNL表达式解析的函数。(3)在污点分析的理论基础上,利用coverity静态分析软件及其原语建立了针对Struts2源码中OGNL远程命令执行漏洞的静态分析模型,并进行静态扫描分析验证了模型的正确性。对Struts2框架中OGNL表达式注入问题进行了分析总结,为以后这方面问题的排查与测试提供参考与借鉴。