软件动态防御技术研究综述

2017-09-30 23:55田楠蒲江
网络空间安全 2017年9期
关键词:技术原理

田楠++蒲江

摘 要:软件动态防御技术是指通过动态更改软件自身及其执行环境,改变软件同质化现象,减少攻击者利用软件漏洞造成大规模攻击的一种技术手段。论文综述了目前常见的软件动态防御技术,包括地址空间随机化技术、指令集随机化技术和多变体执行技术等,介绍了各技术手段的研究现状和技术原理,分析了针对各类攻击的效能和存在的不足,最后对各种技术手段进行总结,并对软件动态防御技术的发展提出展望。

关键词:软件漏洞;软件动态防御;技术原理

中图分类号:TP311.5 文献标识码:A

1 引言

在信息安全攻防对抗中,软件始终处于重要位置。由于软件漏洞不可避免,导致软件防御相对于攻击存在严重的不对等性,而软件的同质化现象更加剧了这一不利局面。现有的主流防护技术仍以静态的、被动的防护为主,难以应对日新月异、快速变化的攻击技术。

软件动态防御作为一种新兴的安全理念,其主要思想是以密码技术、编译技术、动态运行时技术等为基础,对程序代码在控制结构、代码布局、执行时内存布局以及执行文件的组织结构等多层面进行随机性、多样性和动态性的处理,增加攻击者发现漏洞、利用漏洞的成本,有效抵御针对代码缺陷的外部代码攻击。

软件动态防御技术可以应用于软件生命周期的各个阶段。在编译与链接阶段,主要通过修改编译器实现动态化,通过添加、变换和去除现有指令,产生具有相同運行效果的程序变体。在载入阶段,可以通过动态加载机制实现软件动态化,目前主要有地址空间随机化、指令集随机化等技术。在运行阶段,主要通过构建二进制动态执行环境实现软件动态化。本文将分别对地址空间随机化技术,指令集随机化技术和多变体执行技术进行介绍,最后做了总结和展望。

2 地址空间随机化技术

2.1 基本原理

地址空间随机化技术是为了解决缓冲区溢出攻击而提出的,也是目前最成功且使用最广泛的软件动态化技术[1,2]。缓冲区溢出攻击时,攻击者需获知进程的地址空间,然后通过计算,利用溢出操作将程序的执行流程跳转到攻击代码处[3,4]。地址空间随机化技术的基本思想是对进程组件和对象的内存地址空间分布进行随机化,使进程空间不可预测,导致攻击者无法计算出准确的跳转位置,从而阻断攻击。

如图1所示是地址空间随机化技术的示意(以栈溢出攻击为例),若缓冲区地址固定,攻击者可以预先得出攻击代码的地址,将其覆盖到某函数返回地址的位置,使函数返回时跳转到攻击代码的位置执行,采用地址空间随机化技术,使攻击代码的地址偏移随机长度,攻击者无法准确跳转到攻击代码的位置发起攻击。

2.2 技术手段

栈、堆、字符串等空间常作为缓冲区溢出攻击的对象,对这些缓冲区进行随机化,发展出多种地址空间随机化技术。

栈空间随机化主要是随机改变程序中每个函数栈帧的大小和位置。改变栈帧的大小是通过在编译时定位出函数,并在函数头部增加一段随机填充栈帧的代码实现。改变变量位置则是通过在编译或加载时随机调整函数中变量的顺序,使变量地址随机改变。栈空间随机化效果如图2所示。

2.3 研究现状

2000年,地址空间随机化率先在Linux内核PaX补丁中得到成功应用[5],通过为Linux内核打补丁,实现了对栈基地址、主程序基地址以及共享库加载地址随机化。此后,在大部分主要操作系统中都有所使用,包括Windows(2007年首先使用于Windows Vista,后来用于Windows Server 2008和Windows 7)、Linux(2005年以后在Linux内核中包含了一部分,在后来的Linux加强版中有更完整的实现)及MacOS(OSX 10.5之后版本)。

2.4 效能与不足

地址空间随机化技术可以有效增加缓冲区溢出攻击的难度,是阻止内存攻击一种实用、有效的防御技术,但其自身仍存在一些局限。

地址猜测。随机化的范围受CPU数据总线宽度、对象组件特点等因素制约,一些组件的位置变化有限,随机化范围不大,攻击者可以采用暴力猜测的方法猜测跳转地址。

随机化粒度。随机化的粒度应该尽可能细,以抵御基于相对地址的攻击。仅随机化进程各模块加载的基地址远远不够,还需对各个模块内部元素间的间隔进行进一步随机化。

3 指令集随机化技术

3.1 基本原理

指令集随机化技术主要应用于防御代码注入攻击[6]。指令集随机化的思想最早由Thimbleby于1991年提出[7];哥伦比亚大学的Stephen等人对Bochs模拟器进行了修改[8],构建了指令集随机化验证系统,并证明了指令集随机化对Perl、SQL等解释性语言的可行性;David H.Ackley等人基于开源的二进制翻译工具Valgrind开发了随机指令集模拟器[9];Wei Hu、Jason Hiser等人基于Strata虚拟机开发了能够实用的指令集随机化原型系统[10];哥伦比亚大学的Georgios等人基于二进制插装工具PIN[11]为运行于Linux上的x86软件实现了指令随机化运行环境

3.2 编译型语言随机化

编译型语言指令集随机化的对象是二进制可执行文件。如图3所示,描述了编译型语言程序指令集随机化的基本流程。编译型语言指令随机化一般是通过引入加密、解密机制,对二进制代码指令进行加密操作,生成随机化指令集,在指令执行前进行译码操作。指令集随机化系统一般包括两个部分:一是对应用二进制文件进行加密操作,生成随机化指令集;二是构建执行环境,一般是在系统取指令后,执行前利用密钥对随机化指令进行译码,然后由处理器执行。

3.3 解释型语言随机化

解释型语言随机化的对象可以是脚本中的关键字、操作数、功能调用等。如图3所示,描述的是SQL指令随机化系统。SQL指令在数据库中间件被随机化处理,由数据库服务器中代理对收到的经随机化处理的SQL语句进行译码,然后把它送给数据库,从而阻止非法表达式的攻击。endprint

3.4 效能与不足

理论上,指令集代码随机化能够防范各种代码注入攻击,但其自身也存在缺陷。

为了实现指令集随机化,需要构建基于硬件或者软件的随机指令执行环境。对于硬件环境需要修改处理器,对于软件的环境则对性能影响较大;

指令集随机化重点防范代码注入攻击,但如果攻击者能够访问本地磁盘,得到二进制文件和对应的随机化文件,指令集随机化系统很容易被破解。

4 多變体执行技术

4.1 基本原理

多变体执行技术是一种能够在运行时防止恶意代码执行的技术[12],其原理是通过同时运行多个语义上等价的变体,并在同步点比较其行为,在同样输入的前提下一旦发现有不一样的行为,则可以通过监控程序来判断是否存在攻击行为。

4.2 多变体执行环境

多变体执行分为变体生成和监控执行两个部分。变体生成基于编译器实现,在源代码中为需要重点保护的程序核心算法或关键控制过程添加多变体生成编译指令,编译生成多样化代码的变体;多变体执行环境运行多个变体,在系统调用上同步并监控各个变体行为,通过比较行为的一致性,发现潜在的恶意代码攻击。

多变体执行环境由动态运行支撑环境和多变体监视器组成,其架构如图5所示。

多变体监视器用于控制变体的执行状态,同时验证它们是否符合预先定义的规则。在用户启动程序时,执行环境运行程序的多个变体,只要变体不访问其进程空间之外的数据或者资源,监视器就不会中断变体的执行;当变体请求系统调用时,监视器会拦截请求并暂停变体执行,尝试同步其它变体的系统调用,所有变体需要在短时间内执行功能相同且参数等价的系统调用;当某个变体因攻击导致执行结果不同或执行超时,监视器根据所配置的策略采取相应动作,默认将终止并重启所有变体,也可以根据多数原则剔除不一致变体。

4.3 效能与不足

多变体执行中,同一程序必须同时执行多个变体,监控程序要实时监控每个变体的运行结果,对系统性能要求较高,特别是对于细粒度的监控,性能影响更大。

5 结束语

本文总结了目前主流的软件动态防御技术。目前,软件动态防御技术针对特定攻击都有很好的防御效果,如何将各项技术进行有机整合,建立完整的软件动态防御系统是下一步的研究方向。

参考文献

[1] SHACHAM H, PAGE M, PFAFF B. On the effectiveness of address space randomization [A]. ACM Conference on Computer and Communications Security (CCS), Washington D.C.[C].2004.298-307.

[2] BHATKAR S, SEKAR R, DUVAMEY D C. Efficient techniques for eomprehensive protection from memory error exploits [A].Proceedings of the 14th USENIX Security Symposium, Baltimore, MD[C].2005.

[3] 王清.0day 安全:软件漏洞分析技术(第二版)[M].北京:电子工业出版社,2013.

[4] MARCO-GISBERT H, RIPOLL I. On the effectiveness of NX, SSP, Renew SSP and ALSR against stack buffer overflows [A]. Proceedings of the 13th International Symposium on Network Computing and Applications[C].2014.

[5] PaXTeam.PaX[EB/OL].http://pax.gmecurity.net, 2001.

[6] RAY D, LIGATTI J. Defining code-injection attacks [C]. ACM SIGPLAN Notices. ACM, 2012,47(1):179-190.

[7] THIMBLEBY H. Can viruses ever be useful. [J].Computer Security,1991,10(2):111-114.

[8] KC G S, KEROMYTIS A D, PREVELAKIS V. Countering code-injection attacks with instruction-set-randomization [A].ACM Computer & Communications Security onference[C].2003.272-280.

[9] BARRANTES E G, ACKLEY D H, FORREST S. Randomized instruction set emulation[J]. ACM Transactions on Information System Security,2005,8:3-40.

[10] HU W, HISER J, WILLIAMS D. Secure and practical defense against code injection attacks using software dynamic translation [A]. Proceedings of the 2nd International Conference on Virtual Execution Environment (VEE)[C]. 2006. 2-12.

[11] LUK C K, COHN R, MUTH R. Building customized program analysis tools with dynamic instrumentation [A]. Proceedings of Programming Language Design and Implementation (PLDI)[C]. 2005:190-200.

[12] BARRANTES E G, ACKLEY D H, FORREST S. Randomized instruction set emulation to disrupt binary code injection attacks [A]. Conference on Computer and Communications Security [C].2003.281-289.endprint

猜你喜欢
技术原理
中波广播发射天线的原理及维护技术探讨
市级人工影响天气地面业务流程研究
刍议广播发射天线技术及应用
无人驾驶汽车未来展望
新能源汽车技术的技术原理和优缺点探究
浅谈智能化除草机器人技术发展现状及趋势展望
COFDM在现代数字广播DRM中的应用
基于VPN的计算机虚拟网络技术及应用
电气自动化测量设备的技术原理与应用