论文部分内容阅读
随着计算机与互联网技术的深入发展,信息安全问题日益复杂化。应用程序规模迅速扩大,程序漏洞数量随之增加,针对程序漏洞的利用攻击威胁居高不下,现有漏洞防范手段在复杂多变的威胁下显得尤为不足。近年来,新安全机制在操作系统中广泛实施,有效缓解了传统的漏洞利用攻击。然而,漏洞攻击手段正在不断更新换代,对漏洞目标的攻击愈加巧妙和精准,攻击实施过程日益复杂,攻击所带来的后果愈发严重,这些变化为信息安全带来了严重的挑战。 针对上述问题与挑战,本文围绕软件漏洞安全问题展开研究,从软件漏洞利用自动化生成、软件漏洞利用攻击自动化检测以及面向漏洞利用的程序安全加固方法三方面进行深入分析并提出解决方案,取得了如下研究成果: 1)提出了一种软件漏洞多样性利用代码自动化生成方法。本方法仅依靠漏洞二进制程序和使其触发崩溃的异常输入,利用动态污点分析方法跟踪程序执行流程。在发现程序控制流转移发生异常时,在污点内存区域中部署攻击代码和所需的跳转链,构造攻击路径,使程序执行流能够通过跳转链成功转移至攻击代码。我们构造程序执行至控制流劫持点所需满足的路径约束条件,同时将内存和程序输入之间数据依赖关系转换为约束表达式,最终利用求解器自动化地求解出利用样本。本文提出了部署攻击代码和构造多样性跳转链的方法,能够构造出多种攻击路径,从而最终构造出多样性的利用样本。所生成的多样性、高质量的样本,有助于分析人员系统地评估漏洞危害,提出有效的防御方案。 2)提出了一种基于异常控制流识别的软件漏洞利用攻击自动检测方法。本方法通过对目标程序的静态分析和动态执行监测,构建完整的安全执行轮廓,限定控制流转移的合法目标,在函数调用、函数返回和间接跳转等控制流转移时,检查目标地址的合法性,将异常控制流转移判定为漏洞攻击,捕获完整的攻击步骤。我们实现了原型系统,并对多个实际漏洞攻击样本进行实验评估。实验结果表明,该方法能够准确检测到漏洞利用攻击,并具备良好的运行效率。 3)提出了一种细粒度的基于控制流完整性校验的软件安全加固方法。本方法提出了“二进制代码岛”的概念,将二进制程序划分为若干个代码岛,实现细粒度的控制流转移约束。本方法通过复制部分程序代码和静态分析,将二进制程序划分为多个互斥的代码岛,将二进制程序中所有的控制流指令归类为“代码岛内转移”指令和“代码岛间”的转移指令,并为这两种类型的控制流指令分别实施不同的转移约束条件。与已有方法相比,本方法更为严格地限定了间接控制流转移的合法目标,显著提高控制流转移的防护效果。 4)提出了两个量化评估指标,用于评估基于控制流完整性对二进制程序进行安全加固的效果。基于控制流完整性对二进制程序加固,能够有效地防范控制流劫持利用攻击。本文提出两个量化评估指标,从对控制流转移的约束粒度和构造控制流劫持利用难度等不同方面,对二进制程序中控制流转移的安全加固效果进行评估。这些评估指标对软件漏洞防御和安全分析具有重要的指导作用。