论文部分内容阅读
大量案例显示,软件安全所面临的威胁来源不仅仅包括不可信的第三方实体,更包括那些怀有恶意的用户终端。针对软件知识产权的侵权行为,通常正是始于攻击者通过正当途径对目标软件的获取;进而,攻击者将获得对受害软件的完全控制,并可对其实施深入的非授权逆向工程,最终达到代码剽窃、恶意篡改/破解乃至软件盗版等恶意目的。随着符号执行、污点分析等新方法对软件逆向工程技术的不断强化,源自恶意终端环境的软件知识产权的侵权行为已经成为软件产业不得不考虑的一大关键性威胁。 本文针对逆向工程在以软件知识产权侵权为目的的恶意攻击中的应用和发展,从程序控制流混淆、动态软件水印和动态软件指纹等方面入手,以神经网络、返回导向编程和分形变换等技术和方法为基础,提供了一系列行之有效的软件保护技术,为应对日渐强大的恶意逆向工程行为所带来的持续威胁提供了新的思路。相关研究结果如下: 1.基于神经网络的控制流混淆方法。人工神经网络不仅能够以数据分类的形式模拟条件分支行为,其内部逻辑还具有很强的不可知性。因此,可以以该计算模型为基础设计一种程序控制流混淆方法,藉由神经网络的计算结果模拟程序条件判断逻辑的执行行为,并轻易地使相应分支结构被混淆后的逆向复杂度远远超过诸如约束求解工具等程序分析技术的运算能力,由此使受到保护的条件逻辑无法通过逆向工程工具予以求解。此外,该方法的实现可以完全由常用的简单指令完成,故在静态特征方面同样难以辨识,而运行性能也令人满意。 2.基于返回导向编程的动态水印技术。返回导向编程是一种以恶意入侵为初衷的非正常编码方法,具有出人意料的执行行为隐藏性能,可以有效地避开大多数代码分析方法的检测和识别。因此,通过将软件水印的执行行为构造为返回导向编程的载荷数据,可实现在程序的动态数据空间中等价地构造出“并不存在”的水印代码;而除非载有水印的返回导向执行行为被触发,其相关载荷在程序正常运行时与其他数据对象并无区别。受益于水印载荷的特殊结构,基于返回导向编程的动态水印较之现有的动态水印方法更为隐蔽。利用特殊的构造机制,该方法还获得了令人满意的强健性,因此在整体安全强度方面较之已有方法更胜一筹。 3.基于神经网络混淆的“整合式”软件指纹。针对现有动态水印/指纹方法依赖于相对独立的专用载荷代码这一关键性缺陷,提出了一种被称为“整合式”指纹的全新动态指纹设计理念,其主要目标在于将动态指纹的嵌入过程设计为对载体程序的语义保留变换,而非额外增加指纹专属的执行功能。在此基础上,本文通过将指纹信息嵌入用于控制流混淆的神经网络输出结构,构造了首个“整合式”动态指纹设计。新型动态指纹方法不仅能够有效地阻止试图伪造、清除或破坏指纹组件的攻击,更能够使软件指纹模型所面对的最主要威胁——串谋攻击也失去其在应用于过往方法时对指纹组件的定位能力。 4.基于分形的高压缩率水印编码方法。为了进一步提高动态水印方法的编码效率,本文利用分形和抽象解释理论,提出了首个动态化的抽象水印编码方法。与现有方法相比,该设计利用特定分形变换能够在有限空间内无限迭代且保持精细结构的特点,构造出一种定义在该分形积空间上的抽象解释模型,进而形成一种具有高压缩率、高隐蔽性的水印编码。受益于分形变换的非线性动力特性以及强大的编码能力,该方法具有以往动态软件水印设计所不具备的优秀数据嵌入率,同时还具备很强的隐蔽性。