论文部分内容阅读
Android系统的广泛性和开放性使它面临着各种各样的攻击。Android平台中的软件容易遭受逆向分析、动态调试和修改运行时数据等恶意攻击。为增强Android软件的安全性,先后出现了动态加载、内存加载、指令抽取和指令虚拟化等安全加固技术。前三种技术不仅增强了 Android系统中的DEX文件在安装和加载的安全性,同时保证其在文件系统和内存中难以被获取,但难以保护DEX文件的函数执行过程安全。尽管指令虚拟化技术既可以利用自定义指令隐藏DEX文件中函数的实现逻辑,又可以利用自定义虚拟机隐藏指令的执行过程,但现有的指令虚拟化加固方案中存在一定的安全缺陷:指令映射简单、缺少对自定义虚拟机和Android系统的保护。为解决上述指令虚拟化加固方案中存在的问题,本文提出了一种基于TEE的Android软件安全加固方案,实现从内核层、应用层、指令层等不同层面对应用进行全面安全加固。首先,该方案利用TEE系统增强内核页表、代码段的数据安全,保证内核安全机制正常运行,避免恶意调试自定义虚拟机;然后,提出了基于虚拟机的随机内存、模拟堆栈和延迟异常等方法,保证函数执行、调用和异常处理的安全;最后,提出了随机指令的映射、编码和跳转等方法,分别保证指令解码、执行和跳转的安全。具体地,本文的主要贡献总结如下:1)提出了基于TEE的页表内存保护方法和周期性安全检查方法,保证了应用软件的内核层安全。页表内存保护利用TEE安全硬件增强了内核页表的读写权限控制,在不信任内核的前提下提高了页表数据的安全性。周期性安全检查通过在TEE中周期性检查内核和自定义虚拟机的运行状态和代码完整性,确保内核层和应用层的安全功能正常运行。2)提出了基于虚拟机的函数安全运行方法,保证了应用软件的应用层安全。函数安全运行方法分别从函数执行、调用、异常处理三个角度对函数提供安全保护:随机内存技术,实现函数堆栈数据在虚拟地址空间中随机分布,减少程序空间局部性的影响;模拟堆栈技术,在自定义虚拟机中实现函数调用和堆栈维护,减少JNI接口和Android虚拟机的数据泄漏;延迟异常技术,隐藏了自定义虚拟机中函数的异常处理过程,在退出自定义虚拟机时,才将捕获的异常抛给Android虚拟机,减少Java异常的数据泄漏。3)提出了基于指令虚拟化的随机指令技术,保证了应用软件的指令层安全。随机指令技术分别从指令操作码、指令操作数、指令跳转三个角度对指令提供了安全保护:随机指令映射技术,基于指令频率实现了一对多的指令操作码随机映射,提高了指令映射的随机性,消除了指令序列中的指令频率特征;随机指令编码技术,重新定义指令的编码格式,改变指令长度,隐藏指令序列中的操作码和操作数;随机指令跳转技术,实现自定义虚拟机随机取指方式,避免指令顺序执行,增强自定义指令序列的安全性。4)实现了一套完整的软件加固系统,加强了软件抵御自动化攻击以及人力攻击的能力。加固后,软件能够防御绝大多数重打包攻击、反编译攻击、动态调试攻击、指令还原攻击和系统堆栈攻击,系统内核增强抵御恶意修改页表攻击的能力,整体运行性能降低30%左右。