,,,
(信息工程大学 国家数字交换系统工程技术研究中心,郑州 450001)
互联网上存在着大量网络资源,包括网页、文档和程序文件等,大量网络资源为攻击者提供了方便的攻击途径。攻击者通过在网络资源中嵌入攻击代码,可实现对用户的浏览器、阅读器以及操作系统攻击的恶意目的。已有的网络攻击防御技术大多基于先验知识的建模和模式匹配技术,将获取的网络资源与已有的攻击模式进行匹配计算以识别可能的攻击行为,利用识别的结果来过滤恶意资源,比如防火墙技术、入侵检测技术等。虽然基于先验知识的网络防御技术能够防御一些攻击,但随着网络攻击向高隐蔽性、高复杂度和高可利用性方向发展,尤其是APT技术的出现和0-Day漏洞利用技术的发展,网络攻击模式的提取和识别越来越困难,基于先验知识的网络防御技术显得力不从心。
软件错误隔离技术(Software-based Fault Isolation,SFI)[1]是一种利用软件手段限制不可信模块对软件造成危害的技术,其主要思想是隔离,即通过将不可信模块与软件系统隔离来保证软件的鲁棒性。为了应对APT攻击和0-Day漏洞利用,研究者将SFI的思想应用于网络防御研究中,构建隔离的环境用于解析和执行不可信网络资源,限制其可能的恶意行为,最终达到网络防御的目的。研究者将这种隔离的环境形象地称为“沙箱”(Sandbox)。
本文分别从访问控制机制和沙箱实现技术两个方面对沙箱技术研究进行综述。
访问控制(Application-oriented Access Control)[2]机制是沙箱技术的理论基础。访问控制的任务是在为用户提供对系统资源最大限度共享的基础上,对用户的访问权限进行管理,防止其对信息越权篡改和滥用[3]。它对经过身份鉴别认证的合法主体提供访问所需客体的权利,拒绝主体越权的客体访问请求,使系统有序地运行。面向应用的访问控制将应用程序作为标识主体,根据程序的功能需求和自身安全要求对程序设置访问控制规则。利用访问控制规则限制程序的资源访问能力,既满足了程序正常资源访问需求,又保证了系统的安全。
面向应用的访问控制研究的历史起源于Boebert W等的Type Enforcement(TE)系统[4],TE系统第一次将应用程序作为访问控制的主体,敏感数据作为客体,通过完整性级别来限制应用程序对敏感数据的访问。Wagner D等在研究浏览器插件时,也采用了面向应用的访问控制,并设计了原型系统Janus[5]。早期研究认为面向用户的访问控制与面向应用的访问控制是两个不同的领域,而Schreuders Z等在RBAC的基础上,设计了基于功能的访问控制模型(Functionality-Based Application Confinement,FBAC),将面向用户的访问控制研究成果应用到面向应用的访问控制研究中[6]。
沙箱采用的是面向应用的访问控制。本文根据采用的访问控制思路的不同,将沙箱研究分为基于虚拟化的沙箱和基于规则的沙箱。下面分别对两者相关研究进行分析。
基于虚拟化的沙箱(图1)为不可信资源构建封闭的运行环境,在保证不可信资源原有功能的同时提供安全防护。基于虚拟化的沙箱使用虚拟化技术为不可信资源提供运行环境,使不可信资源的解析执行不会对宿主造成影响。根据虚拟化层次的不同,本文将基于虚拟化的沙箱分为两类,即系统级别的沙箱和容器级别的沙箱。
图1 基于虚拟化的沙箱
硬件层虚拟化技术在硬件和目的操作环境之间增加操作层,即监控器层,由监控器层的程序实现对硬件的抽象操作和向上提供接口。使用该技术,可以在相同的硬件上模拟多个自包含操作环境。系统级别的沙箱采用该技术为不可信资源提供完整的操作环境。1973年,Madnick S等第一个将虚拟化技术应用到计算机安全领域,在操作系统和应用程序之间增加虚拟机监控器,并在虚拟机监控器中设计实现了限制应用程序对系统资源访问的策略[7]。Whitaker A等设计了一个轻量级的虚拟机调度和监控系统Denali,将多个具有相同系统资源访问需求的程序置于定制的虚拟机中,并为这些程序提供相同的资源。与其他系统级别虚拟机研究比较,Denali减少了需要虚拟化的资源的规模,提高了虚拟化的效率[8]。WindowBox是一个针对桌面应用程序设计的安全模型,将应用程序放置在不同安全设置的桌面内,实现对应用程序的限制[9]。Qubes[10]采用了与WindowBox相同的研究思路,构建在相同的硬件基础上,根据用户的应用需求为用户生成包含不同资源、不同设备的虚拟机——应用虚拟机(AppVM),两者的不同在于实现系统的区别,Qubes基于Xen,而WindowBox基于Windows操作系统。系统级别沙箱的研究还包括VMware[11]、VirtualBox[12]、Parallels[13]、Virtual Server[14]以及QEMU[15]等。
容器级别的沙箱与基于硬件层虚拟化的系统级别沙箱相比,采用了更为轻量级的虚拟化技术,在操作系统和应用程序之间增加虚拟化层,实现用户空间资源的虚拟化,但在资源使用效率和资源管理上占有较大的优势。主要的研究包括:Solaris Zones[16],Linux Containers[17],Linux Vserver[18],OpenVZ[19],FreeVPS[20],Virtuozzo Containers[21]和AIX Workload Partitions[22]等。
基于规则的沙箱(图2)使用访问控制规则限制程序的行为,主要由访问控制规则引擎、程序监控器等部分组成。程序监控器将监控到的行为经过转换提交给访问控制规则引擎,并由访问控制规则引擎根据访问控制规则来判断是否允许程序的系统资源使用请求。与基于虚拟化的沙箱不同,一方面,基于规则的沙箱不需要对系统资源进行复制,降低了冗余资源对系统性能的影响;另一方面,基于规则的沙箱方便了不同程序对资源的共享。Berman A等设计了第一个基于规则的沙箱系统TRON[23],将操作系统的资源划分到不同控制域,在控制域中使用唯一字串对每个资源进行标识和设置访问权限,用户使用命令将应用程序指定到控制域中,通过控制域中的访问控制规则实现对程序行为的限制。Cowan等设计的AppArmor[24]与TRON较为相似,用白名单定义沙箱内程序可访问的资源。
图2 基于规则的沙箱
程序行为监控是实现基于规则的沙箱的重要技术,沙箱监控程序行为可以识别潜在的恶意行为。大多数研究者采用监控系统调用的方式来对程序行为进行监控,根据监控到的系统调用顺序和访问资源的情况来识别潜在的恶意行为,相关的研究包括Janus、Systrace[25]和ETrace[26]等。
随着APT攻击威胁的增加,沙箱技术得到了快速发展。沙箱技术被广泛应用到浏览器(IE、Chrome、Firefox)、文档阅读器(Adobe Reader)等解析和处理网络资源的应用中。本节根据沙箱化对象的不同,对沙箱的实现技术进行综述。
沙箱技术起源于SFI技术,因此,二进制程序的沙箱也首先受到研究者的关注。SFI技术主要应用在RISC架构,而大多数用户使用的是CISC架构的计算机,CISC架构与RISC架构在指令结构、寄存器个数等方面存在较大差别。为了能够为CISC架构下程序提供沙箱环境,研究者做了大量研究。McCamant S等设计了PITTSFIELD系统[27],在该系统中,采用指令对齐和掩码技术来保证程序的数据访问和控制流转移在可控的范围内。Ford B等设计的Vx32[28-29]将沙箱技术进一步细分为数据沙箱和控制流沙箱,数据沙箱采用的是x86-32结构CPU的段匹配技术,在沙箱中程序数据访问时,进行段标识符匹配操作,保证数据安全;控制流沙箱采用的是动态翻译技术,即在指令执行前,用等价的安全指令序列替换不安全指令,同时,禁止不安全指令来实现控制流的沙箱化。为了保证用户的安全和网络程序的性能,2009年,Google公司推出了面向x86结构的二进制沙箱产品—Native Client(NaCl)[30]。NaCl是一个双层的沙箱,内层沙箱在指令层限制不可信程序的控制流,外层沙箱在系统调用层监视验证不可信程序的系统调用行为。NaCl通过定制的GCC编译器将内层沙箱的安全限制插入到汇编程序内,并在程序执行前验证,外层沙箱在程序运行过程中监控程序行为。在随后两年,Google公司又分别开发了针对x86-64、ARM结构的NaCl[31],并结合LLVM技术,设计实现了跨架构的PNaCl[32]。二进制程序沙箱研究还包括:Jana S等将操作系统的事务机制引入到沙箱研究,在不可信程序执行前设置系统的事务恢复点,在程序执行过程中监控程序行为,当发现恶意行为时,使用事务回滚技术,将系统状态恢复到未执行该程序的系统状态[33]。Zeng B等将静态分析和CFI引入到数据沙箱的研究中,在静态分析二进制程序时,利用指令重写等CFI技术对可能的数据污染指令进行重写,实现对内存数据的读写保护[34]。为了应对攻击者对CFI实现的“SpringBroad”地址的猜测攻击,Zhang C等将地址随机化技术应用到沙箱实现中,将需要计算获得的间接控制流转移地址随机存放在“SpringBroad”段中,实现控制流完整性[35]。
JavaScript是一种由NetScape的LiveScript发展而来的,基于对象和事件驱动并具有相对安全性的客户端脚本语言。由于JavaScript能够为网页提供动态功能,被广泛应用于网站。大多数网站上的JavaScript脚本是由第三方提供,安全性无法保证。因此,针对JavaScript脚本的沙箱也受到研究者的关注。Cao Y等借鉴虚拟机技术设计了Virtual Box[36],该系统的JavaScript引擎包括虚拟引擎和本地引擎两个引擎,可信的JavaScript脚本运行于本地引擎上,第三方JavaScript脚本运行在虚拟引擎上。虚拟引擎在对第三方JavaScript脚本解析时,根据沙箱策略对该脚本进行检查验证,实现对第三方不可信JavaScript脚本的隔离。与Virtual Box不同,JSand[37]是一个由网站开发者提供安全策略的JavaScript沙箱,网站开发者在引入第三方脚本时,根据功能和安全的需要,对第三方脚本设置安全策略,而JSand则以插件形式运行在用户的浏览器中,当用户访问该网站时,JSand根据开发者设定的沙箱策略限制第三方脚本的运行。
浏览器插件为用户提供扩展和个性化的浏览器。大多数浏览器插件与浏览器运行在相同的进程中,具有与浏览器相同的访问权限,而浏览器插件大多由第三方开发者开发,安全性无法保证,一旦浏览器插件受到攻击,会对系统造成与浏览器被攻击相同的危害。因此,浏览器插件沙箱也成为研究的重点。Liu L等设计了sePlugin沙箱[38],通过对插件的浏览器内部对象访问行为和对系统资源调用行为的监控来获取插件可能的行为,根据沙箱策略限制插件行为。Dhawan M等从信息流层面对插件行为进行了建模,对内存中的JavaScript对象是否包含敏感数据进行标识,并通过在脚本执行中监控这些内存对象的信息传播和处理过程来识别可能的危险行为,包括信息泄露、信息破坏等等,并设计了原型系统Sabre。
程序行为监控是沙箱实现需要解决的一个重要问题,大多数研究都采用系统调用监控的方法来实现对程序行为的监控,仅仅从监控到的系统调用信息中获得的程序行为信息很难完全推理得到恶意程序的真正目的,尤其是面对高隐蔽的APT攻击。研究多维度的程序行为监控技术,从不同维度的程序执行信息中获得程序可能的行为,是提高沙箱防御APT攻击的一个重要途径。
访问控制是沙箱的基础,沙箱由多种访问控制机制组合实现。如果访问控制机制本身存在矛盾或错误,会造成沙箱逃逸的严重后果。如何保证多种访问控制机制的安全性,也是沙箱研究的一个重要方向。
沙箱技术是保证网络安全的一项重要技术,受到学术界和产业界的重视。本文从访问控制和实现技术两个方面对已有的沙箱研究进行了综述,并对沙箱技术的研究方向进行了展望,为沙箱的继续研究提供了参考。
参考文献:
[1] Wahbe R, Lucco S, Anderson, et al.Efficient Software-based Fault Isolation[C]//Proceedings of ACM SOSP, New York, 1993: 203-216.
[2] Abadi M, Budiu M, Erlingsson U.Control-flow Integrity[C]//Proceedings of the 12th ACM Conference on Computer and Communications Security, New York, 2005: 340-353.
[3] 洪帆.访问控制概论[M].武汉: 华中科技大学出版社, 2010: 13-14.
[4] Boebert W, Kain R.A Practical Alternative to Hierarchical Integrity Policies[C]//Proceedings of the 8th National Computer Security Conference, Gaithersbury, MD, 1985.
[5] Wagner D.Janus: An Approach for Confinement of Untrusted Applications[D].California: Department of Electrical Engineering and Computer Sciences, University of California, 1999.
[6] Schreuders Z, Christian Payne.Functionality-based Application Confinement-parameterised Hierarchical Application Restrictions [EB/OL].[2014-04-16].http://z.cliffe.schreuders.org/publications/SECRYPT08%20FBAC%20Paper.pdf.
[7] Madnick S, Donovan J.Application and Analysis of the Virtual Machine Approach to Information System Security and Isolation[C]//Proceedings of the Workshop on Virtual Computer Systems, Cambridge Mass, 1973: 210-224.
[8] Whitaker A, Shaw M, Gribble S.Denali: Lightweight Virtual Machines for Distributed and Networked Applications[R].Washington: University of Washington, 2002.
[9] Balfanz D, Simon D.Windowbox: A simple Security Model for the Connected desktop[C]//Proceedings of the 4th USENIX Windows Systems Symposium, Washington,
2000: 37-48.
[10] Rutkowska J, Wojtczuk R.Qubes OS Architecture[R].Warsaw: Invisible Things Lab, 2010.
[11] Sugerman J, Venkitachalam G, Beng-Hong Lim.Virtualizing I/O Devices on VMware Workstation’s Hosted Virtual Machine Monitor[C]//Proceedings of USENIX Annual Technical Conference, Boston, Massachusetts, USA,2001: 1-14.
[12] Watson J.Virtualbox: Bits and Bytes Masquerading as Machines[EB/OL].[2014-04-16].http://www.linuxjournal.com/article/9941.
[13] Parallels Inc.Virtual PC Virtual Machine and Multiple Operating System Solutions by Parallels[EB/OL].[2014-04-16].http://www.parallels.com/.
[14] Microsoft.Microsoft Virtual Server 2005 R2 [EB/OL].[2014-04-16].http://www.microsoft.com/windowserversystem/virtualserver/.
[15] Bellard F.QEMU, A Fast and Portable Dynamic Translator[C]//USENIX Annual Technical Conference, Anaheim CA, 2005: 41-46.
[16] Price D, Tucker A.Solaris Zones: Operating System Support for Consolidating Commercial Workloads[EB/OL].[2014-04-16].http://www.cs.toronto.edu/~demke/2227S.14/Papers/zones_lisa.pdf.
[17] LXC.Lxc Linux Containers[EB/OL].[2014-04-16].https://linuxcontainers.org/.
[18] Des Ligneris B.Virtualization of Linux Based Computers: the Linux-VServer Project[C]//Proceedings of High Performance Computing Systems and Applications, Berlin, 2005: 340-346.
[19] Parallels Inc.OpenVZ Server Virtualization Open Source Project[EB/OL].[2014-04-16].http://openvz.org/Main_Page.
[20] Positive Software Corporation.Free Virtual Private Server Solution [EB/OL].[2014-04-16].http://www.gate.com/virtual-servers/.
[21] Parallels Inc.Virtuozzo Containers [EB/OL].[2014-04-16].http://www.parallels.com/au/products/pvc46/.
[22] Coelho P, Hazuka M, Petru J, et al.Introduction to Workload Partition Management in IBM AIX Version 6.1 [R].Armonk NY: IBM International Technical Support Organization, 2007.
[23] Berman A, Bourassa V, Selberg E.TRON: Process-Specific File Protection for the UNIX Operating System[C]//Proceedings of USENIX Winter, Manhatten, USA, 1995: 165-175.
[24] Canonical.AppArmor: Linux Application Security Framework [EB/OL].[2014-04-16].https://launchpad.net/apparmor, Accessed 2013.
[25] Provos N.Systrace-interactive Policy Generation for System Calls [EB/OL].[2014-04-16].http://www.citi.umich.edu/u/provos/papers/systrace.pdf.
[26] Jain K, Sekar R.User-Level Infrastructure for System Call Interposition: A Platform for Intrusion Detection and Confinement [EB/OL].[2014-04-16].http://seclab.cs.sunysb.edu/seclab/pubs/ndss00.pdf.
[27] McCamant S, Morrisett G.Evaluating SFI for A CISC Architecture[C]//Proceedings of 15th USENIX Security Symposium, Vancouver, Canada, 2006: 209-224.
[28] Ford B.VXA: A Virtual Architecture for Durable Compressed Archives[EB/OL].[2014-04-16].http://pdos.csail.mit.edu/papers/vxa:fast05/.
[29] Ford B, Cox R.Vx32: Lightweight User-level Sandboxing on the x86[C]//Proceedings of USENIX Annual Technical Conference, 2008: 293-306.
[30] Yee B, Sehr D, Dardyk G, et al.Native Client: A Sandbox for Portable, Untrusted x86 Native Code[C]//Proceedings of Security and Privacy, Brisbane, Australia, 2009: 79-93.
[31] Sehr D, Muth R, Biffle C, et al.Adapting Software Fault Isolation to Contemporary CPU Architectures[C]//Proceedings of USENIX Security Symposium, Washington, 2010: 1-12.
[32] Ansel J, Marchenko P.Language-Independent Sandboxing of Just-In-Time Compilation and Self-Modifying Code[J].ACM SIGPLAN Notices, 2011, 46(6): 355-366.
[33] Jana S, Porter D, Shmatikov V.TxBox: Building Secure, Efficient Sandboxes with System Transactions[C]//Proceedings of Security and Privacy,Melbourne, Australia, 2011: 329-344.
[34] Zeng B, Tan G, Morrisett G.Combining Control-Flow Integrity and Static Analysis for Efficient and Validated Data Sandboxing[C]//the 18th ACM Conference on Computer and Communications Security, Chicage, 2011.
[35] Zhang C, Wei T, Chen Z F, et al.Practical Control Flow Integrity & Randomization for Binary Executables [EB/OL].[2014-04-16].http://www.cs.berkeley.edu/~dawnsong/papers/Oakland2013-CCFIR-CR.pdf, Accessed 2013.
[36] Cao Y, Li Z, Rastogi V.Virtual Browser: A Virtualized Browser to Sandbox Third-Party JavaScripts with Enhanced Security[C]//the 7th ACM Symposium on Information, Computer and Communications Security,Seoul, Korea, 2012.
[37] Agten P, Van Acker.JSand: Complete Client-side Sandboxing of Third-party JavaScript without Browser Modifications[C]//the 28th Annual Computer Security Applications Conference, Orlando, FL, 2012.
[38] Liu L, Zhang X, Yan G, et al.sePlugin: Towards Transparently Secure Plugins in Your Internet Explorers[C]//the 8th International Conference on Applied Cryptography and Network Security, Beijing, 2010.