随机化技术综述

2017-03-09 09:26何绍勇尚苗星蔄羽佳
网络安全技术与应用 2017年4期

◆何绍勇 李 伟 尚苗星 蔄羽佳

随机化技术综述

◆何绍勇 李 伟 尚苗星 蔄羽佳

随着计算机技术的飞速发展,系统安全问题日益严峻。随机化技术是应对安全威胁的一种主动防御手段,能够有效地保护系统和程序。随机化技术通过将系统或程序进行随机化转换,能够随机地增加系统异构特征,进而增加攻击的代价。本文根据随机化技术的实现原理,将目前主流的随机化技术进行分类,并对各类方法的思路和局限做出分析,最后总结随机化技术存在的问题,并对未来可能的发展方向给出思考。

信息系统安全;随机化技术

0 引言

由于计算机技术的不断发展以及互联网的广泛应用,计算机系统越来越复杂,面临的安全威胁层出不穷。恶意的攻击者能够利用系统的同构性,在本地搭建模拟环境探测目标对象可能存在的安全隐患,针对测试的结果在真实的目标环境中实施恶意的行为。

安全人员为了增强系统的安全性,提出了多种对抗恶意攻击的手段,可以分为主动和被动两种类型。目前大多数安全工具如杀毒软件等通常根据检测目标是否存在恶意特征来判断系统的安全性,需要安全人员根据上报与检测情况不断更新这些恶意特征,因此恶意特征的检测始终滞后于恶意行为。还有一种主动防御安全保护思路,即通过增强系统或程序自身的防御能力,主动防御恶意行为,并且对未知的安全威胁有潜在的防御能力。主动防御的方法重点在于增加系统的多样性,使得对外提供相同功能的系统具有不同的内部表现,导致攻击者无法模拟目标机器实际的系统环境,从而极大地增加了攻击者的时间和精力成本。此外,由于系统的多样性,在一台机器上攻击成功未必能够在另一目标上同样成功,因此能够有效地控制攻击所能影响的范围。

随机化技术[1,2]是一种增加系统多样性的主动防御方法。通过将目标进行随机化的等价转化,使系统的某些特征发生随机的改变,但是原有功能保持不变,从而增加系统的特征,增加攻击者分析与测试的难度,达到保护的效果。

根据随机化的对象不同,可以分为指令随机化、地址空间随机化、数据随机化、系统调用随机化[3-6]等。目前的随机化技术大多采用了其中一种或几种方式,在一个或多个转化阶段对系统进行随机化。下面介绍这几种随机化技术的原理与研究现状。

1 指令随机化

指令集随机化[7]技术通过将程序中的指令按照一定的随机规则随机地变换,外部的恶意代码解密后得到错误或无效的机器指令,无法按照变换后的指令集被机器识别,从而实现系统安全防御。该随机化方法主要针对代码注入类型的攻击,注入型攻击向系统或程序中注入外部的恶意代码,这些代码根据攻击目标的机器所使用的指令集编写。在未经保护的情况下,一旦控制流指向这些恶意代码,系统则将执行恶意行为。如果系统经过指令集随机化变换,攻击者无法获知该目标的指令集,注入的恶意代码无法按照该机器的指令集正确解码,从而无法执行恶意行为导致攻击失败。

文献[8]提出一种软件动态翻译技术对指令表示进行随机的加密变换。程序在轻量级虚拟机中执行,执行前将程序按照一定的大小分块加密,并为指令分配标签。加密的密钥在每次加载时随机生成并由虚拟机保管,被加密的程序无法访问该密钥。执行时,根据执行流程,虚拟机解密需要执行的下一条指令所在的加密块,保证程序正常执行。被解密的代码块暂时以缓存的方式保存,减少大量的重复解密工作,提高执行效率。如果发现指令的标签不匹配,可以判定其发生了指令注入。文献[9]提出了随机指令集仿真技术通过二进制翻译器实现指令集转化。程序加载时,使用随机的密钥对可执行代码进行加密,在执行时,通过二进制翻译器完成解密工作。注入的代码经过随机密钥解密后转化为不可预知的指令序列,无法执行原有的恶意行为。

指令集随机化技术虽然能够有效阻止代码注入型攻击,但是存在一定的问题。例如,对于外部注入的指令能够有效防御,但是对如 return-to-lib类型的攻击没有效果。此外,指令集的随机化与恢复需要系统的支持,程序的运行需要借助动态的二进制翻译环境或者虚拟机,执行性能受到较大影响。

2 系统调用随机化

指令集随机化技术通过对程序的指令进行随机化转化,外部注入的恶意代码经过解密转化为未知的错误指令会导致攻击失败。然而如果攻击者的跳转目标并非外部注入的代码,而是系统自带的库函数,该方法无法产生防御效果。系统调用随机化[10,11]则是将随机化的变化范围扩展至系统调用相关的库函数,对系统调用接口、库函数入口地址进行随机化,增加系统自身的异构性,从而增加了攻击的难度。

系统调用随机化能够防御跳转至库函数或系统调用的代码的攻击,也存在一些不足。对系统调用进行随机化需要系统的支持,实现较为复杂;且随机化的范围有限,容易通过暴力猜测得到真正的地址。

3 数据随机化

数据随机化[12-14]技术对数据对象随机化,通过对程序中的数据对象进行随机加密,运行时对这些数据解密,达到保护的效果。数据随机化主要针对那些利用函数指针或者返回地址的攻击。当程序使用到注入的数据时,使用密钥对数据进行解密。由于注入的数据没有经过随机化加密,解密得到非预期的值,导致攻击失效。

目前的数据随机化工作主要有文献[12-14]。PointGuard[12]是数据随机化技术的初步实现,首先识别程序中的指针对象,使用随机密钥将这些指针对象保护起来。当使用指针变量时,再进行解密。如果该指针是由外部注入的,解密后得到的并不是攻击者预期的地址,从而不会按照攻击者的意图执行。文献[13,14]对PointGuard技术进一步扩展,随机化的对象不仅仅局限于指针,程序中所有的数据都可以进行随机化,增加了保护的范围。文献[13]实现的是源--源的随机化工具。利用异或操作将程序中的数据随机化,生成经过随机化转化的源码。而文献[14]则是在编译的中间阶段完成加密解密指令的插桩,生成经过随机化保护的可执行程序。并对库函数与系统调用进行了随机化封装。

但是数据随机化技术也存在问题。随机化过程需要程序源码,没有源码则无法实现数据随机化的转化。

4 地址随机化

地址随机化[15]通过随机改变内存中代码、堆栈、系统函数等位置的布局,对抗借助控制流跳转劫持控制流的攻击方式,攻击者无法定位实际的内存地址,跳转至未知区域,导致攻击失败。该技术目前已经在主流的操作系统如Windows、Linux、Mac OS X、Android等实现。

Linux Pax项目团队于2001年发布的系统率先实现了地址空间随机化技术,通过在程序运行过程中动态地将部分偏移地址随机化,攻击者难以定位函数、堆栈以及内核空间的相关地址,具有较好的保护效果。

Kil等人提出地址空间布局仿真[16]。在用户层对二进制文件进行处理,将代码段和数据段的基址随机化,并更细致地将代码段和数据段内部的函数和变量的地址进行随机化。在内核层将堆、栈的起始位置随机化,并随机分配堆内的独立页面。

地址随机化技术也存在一定的局限性。由于系统的内存布局本身的限制,以代码块、堆、栈等结构为基本随机化单元,可选的随机化空间范围有限,随机的粒度较大。攻击者通过增加猜测的范围能够得到真正的地址,容易通过暴力破解。此外,地址随机化技术未对所有的段随机化,能够利用未随机的段地址计算出目标段的地址从而绕过该保护机制。

5 总结与展望

软件随机化技术可以对内存破坏、注入攻击等具有一定的防御效果,但是也无法保证绝对的安全性。目前的随机化技术都存在一定的局限,整体来看,随机化粒度不足,容易通过一些暴力手段绕过保护。而且各种方法的实现都较为复杂,大多需要详细分析程序源码或者二进制程序。此外,为了保证随机化后的正确性,需要保守地进行变换,随机化的实际效果不能达到设计者的理论预期。较为可行的保护方式是将多种随机化方法与其他保护手段有效地结合起来,综合地增强系统防御力。恶意攻击者与安全人员持续对抗,此消彼长,软件保护工作仍需要我们进一步研究与探索。

[1]Okhravi H, Rabe M A, Mayberry T J, et al. Survey of Cyber Moving Targets[J]. Massachusetts Inst of Technology Lexington Lincoln Lab, No. MIT/LL-TR-1166, 2013.

[2]Jajodia S, Ghosh A K, Swarup V, et al. Moving target defense: creating asymmetric uncertainty for cyber threats [M]. Springer Science & Business Media, 2011.

[3]Davi, Lucas, et al. Isomeron: Code Randomization Resilient to (Just-In-Time) Return-Oriented Programming. NDSS,2015.

[4]Zhang, Chao, et al. Practical control flow integrity and randomization for binary executables. Security and Privacy (SP), 2013 IEEE Symposium on. IEEE, 2013.

[5]Crane, Stephen, et al. Readactor: Practical code randomization resilient to memory disclosure. Security and Privacy (SP), 2015 IEEE Symposium on. IEEE, 2015.

[6]Backes, Michael, and Stefan Nürnberger. Oxymoron: Making Fine-Grained Memory Randomization Practical by Allowing Code Sharing. USENIX Security. Vol. 14. 2014.

[7]Portokalidis G, Keromytis A D. Fast and practical instruction-set randomization for commodity systems[C]//Proceedings of the 26th Annual Computer Security Applications Conference. ACM,2010.

[8]Hu W, Hiser J, Williams D, et al. Secure and Practical Defense Against Code-Injection Attacks Using Software Dynamic Translation[C]//Proceedings of the 2nd International Conference on Virtual Execution Environments. ACM, 2006. [9]Barrantes E G, Ackley D H, Forrest S, et al. Randomized Instruction Set Emulation[J]. ACM Transactions on Information and System Security (TISSEC), 2005.

[10]Liang, Zhaohui, Bin Liang, and Lupin Li. A system call randomization based method for countering code -injection attacks.International Journal of Information Technology and Computer Science (IJITCS) 1.1,2009.

[11]Jiang X, Wang H J, Xu D, et al. Randsys: Thwarting Code Injection Attacks With System Service Interface Randomization[C]//Reliable Distributed Systems, 2007. SRDS 2007. 26th IEEE International Symposium on. IEEE, 2007.

[12]Bhatkar S, Sekar R. Data space randomization[M]//Detection of Intrusions and Malware, and Vulnerability Assessment. Berlin: Springer, 2008.

[13]Cadar C, Akritidis P, Costa M, et al. Data Randomization[R].Technical Report TR-2008-120, Microsoft Research, 2008. Cited on, 2008.

[14]Cowan, Crispin, et al. "Pointguard TM: protecting pointers from buffer overflow vulnerabilities." Proceedings of the 12th conference on USENIX Security Symposium. Vol. 12,2003.

[15]Snow, Kevin Z., et al. Just-in-time code reuse: On the effectiveness of fine-grained address space layout randomization. Security and Privacy (SP), 2013 IEEE Symposium on. IEEE, 2013.

[16]Kil, C., Jun, J., Bookholt, C., Xu, J., Ning, P, 2006. Address Space Layout Permutation (aslp): Towards Fine-Grained Randomization of Commodity Software,in:Computer Security Applications Conference, 2006. ACSAC'06. 22nd Annual, IEEE. pp. 339-348.