论文部分内容阅读
当今软件系统不断增加的规模和复杂度导致了越来越多的安全漏洞的出现。其中最为著名的有缓冲区溢出漏洞、格式化字符串漏洞、SQL注入漏洞和跨站脚本漏洞等。攻击者可以利用这些漏洞改变程序原来的执行流程,执行攻击者自己编写的恶意代码,破坏用户程序或者偷取用户敏感信息。鉴于漏洞攻击所造成的强大破坏力以及对信息安全的威胁,国内外在漏洞攻击检测方面已有了一些较深入的研究。然而目前这些技术存在诸多不足,基于编译时期动态跟踪污点信息的检测技术,不能检测针对用非类型安全语言编写的应用程序。基于源代码分析的检测技术,不能检测针对第三方库的漏洞攻击,并且缺少运行时信息的支持,有较高的误报漏报率。本文在对漏洞攻击原理的深入分析以及对国内外相关研究技术的大量调研基础上提出了一种新型的漏洞攻击检测技术—基于动态污点分析的漏洞攻击检测技术。该方法动态的跟踪程序运行时对数据的处理,并记录处理过程中数据的传播,找出目的数据结果与源数据之间的依赖关系,从而达到检测漏洞攻击的目的。本文的主要贡献如下:(1)实现了基于控制流的污点信息传播方法。本文不仅实现了基于数据流的污点传播过程,同时也考虑到了信息流的控制依赖关系。提出了启发式的CFG动态构建,通过指令映射、基本块组合和postdominate树构造,建立起信息流之间的控制依赖关系,并且通过控制流分析算法实现了基于控制流的污点传播过程。(2)实现了更为严谨的安全检测策略。本文通过对目前主流漏洞攻击原理的深入分析,提出使用MBSL语言结合正则表达式更为严谨的定义了安全检测策略,解决了宽松的安全检测策略所带来的漏报问题,能够检测出更多种类的漏洞攻击。(3)实现了基于动态污点分析的漏洞攻击检测原型系统。该系统通过动态跟踪二进制目标程序运行时的信息流传播,检测并阻止外部不可信数据用于非安全的数据操作,从而扼制了攻击的源头。该系统不需要对目标程序源代码进行分析,能够适用于商业软件,并且在漏洞攻击检测上有着较低的漏报和误报率。本文最后的系统测试从功能和性能两个方面证明了原型系统的可行性和有效性。