论文部分内容阅读
软件在执行过程中会泄露大量的路径信息。最近几年,随着符号执行、动态污点分析和定理证明等技术在软件逆向工程领域的广泛应用,攻击者可以从软件二进制代码的执行轨迹中,收集到大量的含有软件语义的路径信息,然后,通过对这些路径信息的分析和推理,实现对软件内部逻辑关系的精确逆向工程,给软件知识产权保护带来了新的严重威胁。本文针对软件二进制代码在执行过程中的路径信息泄漏问题,提出了二进制代码路径混淆技术,将未解数学猜想、CPU指令副作用和保留前缀加密算法应用到软件的路径信息保护中,在不改变软件功能的基础上,使逆向工程的复杂度等价到难解数学问题上,实现对软件知识产权的有效保护,相关研究结果如下:1.基于未解数学猜想的路径混淆策略。著名的克拉兹猜想(collatzconjecture)也被称为3x+1问题,虽然还无法被形式化证明,但是在已检测过的整数范围内都是成立的,该范围远远大于软件二进制代码中常用的整数范围。因此,克拉兹猜想以及类似的未解数学猜想可以在不改变软件功能的基础上,对软件的路径信息进行混淆,使攻击者对软件内部逻辑关系逆向推理的难度等价到证明未解数学猜想的难度,实现高强度软件路径信息保护。而且,基于未解数学猜想的路径混淆是一种线性混淆,对软件的体积和性能影响很小,具有很强的隐蔽性。2.基于CPU指令副作用的路径混淆策略。软件执行轨迹中的条件跳转指令泄露了软件的内部逻辑关系,通过条件异常代码可以替换这些条件跳转指令,使软件的路径信息隐藏于CPU指令的隐式副作用中,然后利用操作系统的异常处理机制实现软件的控制流转移。在x86的复杂指令集中,大部分指令都具有隐式副作用,而且产生副作用的上下文执行环境多种多样,使攻击者从软件二进制代码执行轨迹中收集路径信息的难度等同于推理全部CPU指令在各种执行环境下所有可能副作用的难度,其逆向工程的效率近似于随机猜测。试验表明,该路径混淆策略可以有效隐藏软件的路径信息,具有很高的混淆强度和弹性。3.基于单向保留前缀加密算法的路径混淆策略。哈希函数具有很好的单向性,攻击者利用哈希值难以精确地逆向计算出哈希函数的输入值,但是哈希函数不具有保序性,因此,只能用于保护等于关系的路径分支条件。单向保留前缀加密算法结合了保留前缀算法和单向哈希函数的优点,首先,将大于或小于等不等关系的路径分支条件所对应的数据区间转换成一个前缀集合,该前缀集合的生成过程引入了单向哈希函数,然后,将基于数据区间边界值的路径判断过程变成前缀匹配过程,从而扩展了单向哈希函数在软件保护中的应用范围。路径混淆后,攻击者逆向推理软件内部逻辑关系的难度将等同于根据哈希值逆向求解哈希函数输入值的难度。4.软件路径混淆系统的设计与实现。各种路径混淆策略的应用范围、强度、弹性、开销和隐蔽性各不相同,在对比和分析的基础上,并结合软件二进制代码中路径分支的重要程度、结构特征和执行频率等信息,提出了路径混淆优化算法,并实现了软件路径混淆系统。软件路径混淆系统是在开源的LLVM编译优化架构上设计和开发的,混淆对象是介于高级语言代码与机器代码之间的中间语言代码,该系统使软件在编译过程中自动实现路径混淆。试验结果表明路径混淆系统能有效隐藏和保护软件的路径信息,而且混淆后,软件增加的时间开销和空间开销有限,具有很强的实用性。