基于虚拟及重定向技术的沙箱系统.docx
《基于虚拟及重定向技术的沙箱系统.docx》由会员分享,可在线阅读,更多相关《基于虚拟及重定向技术的沙箱系统.docx(49页珍藏版)》请在冰豆网上搜索。
![基于虚拟及重定向技术的沙箱系统.docx](https://file1.bdocx.com/fileroot1/2023-2/2/94b4860e-fc2d-4546-afa1-741fb8e55c05/94b4860e-fc2d-4546-afa1-741fb8e55c051.gif)
基于虚拟及重定向技术的沙箱系统
硕士学位论文
基于虚拟及重定向技术的沙箱系统
SANDBOX SYSTEM BASED ON VIRTUALIZATION
AND REDIRECTION
郑少宁
哈尔滨工业大学
2011年12月
国内图书分类号:
TP309.5 学校代码:
10213
国际图书分类号:
621.3 密级:
公开
工学硕士学位论文
基于虚拟及重定向技术的沙箱系统
硕士研究生 :
郑少宁
导 师 :
丁宇新副教授
申请学位 :
工学硕士
学科 :
计算机科学与技术
所在单位 :
深圳研究生院
答辩日期 :
2011年12月
授予学位单位 :
哈尔滨工业大学
摘 要
随着互联网技术的发展,恶意软件的传播越来越广泛,使得系统安全受到威胁,其中有很大一部分原因是因为越来越多的程序变为不可靠的可疑程序。
这些程序没有通过安全验证。
当前常用的防御技术包括防火墙技术、入侵检测技术等都不足以防范和应对这些安全方面的隐患。
本文采用的沙箱技术使用了一种比较特殊的安全防范策略:
系统不限制应用程序的运行权限,而是对一些重要数据进行保护,在这些数据被保护的模式下运行应用程序。
除此之外,对保护的数据进行读写的操作会被重定位到特定文件中,从而阻止可疑应用程序对系统的破坏。
沙箱(Sandbox)技术是一种安全保护机制,它是对程序实施限制隔离的机制,它的策略是通过限制规则集判断进程的权限,以此来决定该进程某个操作是否被允许执行。
沙箱可以用于测试不可靠的应用程序,为了避免不可靠程序的破坏行为,沙箱技术通过为不可靠应用进程提供相应的虚拟资源来实现程序的执行,并且使这些资源与真实数据分离,这样操作就会作用在这些资源上面,从而实现程序的隔离。
之前沙箱的实现,需要用到恶意软件的恶意行为特征码,这样需要定期的归纳恶意软件的恶意行为特征。
因为只有新的特征出现后,即破坏了系统后才会形成新的特征,这样就可能造成严重后果,除此之外,就是需要权限规则,同样也需要完备的权限规则才能保护系统。
本文实现的沙箱系统把重点转移到数据上面,将数据放进沙箱中进行保护,它的基本原理是通过数据文件虚拟映射化和操作重定向,把恶意程序的操作重定向到其虚拟文件中,这样就把恶意软件的操作限制在虚拟文件中,因此可以保护真实的文件。
同时在本课题中采用了存储虚拟技术,提高了存储利用率,并且在实现过程中不需要通过定时更新和归纳限制规则集以及恶意特征码的方法来保护系统资源,而是通过虚拟和重定向技术来保护资源。
再者从应用程序和操作系统来的角度来看,沙箱环境就是真实的环境,因此可以很好的避免那些具有侦测虚拟环境的恶意程序。
关键词:
沙箱;数据重定向;安全;虚拟技术;透明性
目录
摘 要3
第1章 绪 论7
1.1课题来源7
1.2本课题的研究目的及意义7
1.3沙箱技术国内外研究现状8
1.4本文研究内容12
1.5本文组织结构13
第2章 沙箱实现技术与相关知识14
2.1沙箱环境实现关键技术14
2.1.1限制系统调用技术14
2.1.2干预系统调用技术17
2.2沙箱的分类19
2.2.1按照位置分类19
2.2.2规则集复杂度分类20
2.3沙箱的用途21
2.3.1保护系统21
2.3.2 监测分析23
2.3.3本系统特点25
2.4本章小结26
第3章 沙箱系统设计关键技术28
3.1 系统实现基本原理28
3.2虚拟化设计技术29
3.3沙箱重定向技术34
3.4 Windows框架结构35
3.4.1输入输出(I/O)请求包(IRP)36
3.4.2 分层驱动概念38
3.5本章小结39
第4章 系统的设计与实现40
4.1系统设计流程图40
4.2虚拟映射模块41
4.2.1创建虚拟文件42
4.2.2获取DBR信息43
4.3重定向模块46
4.4 IRP处理模块49
4.4.1写操作 IRP处理51
4.4.2读操作 IRP处理53
4.4.3其他IRP请求处理53
4.5实验结果55
4.5.1 恶意代码测试结果55
4.5.2读取数据实验结果60
4.5.3写入数据实验结果63
4.5.4 存储与效率实验结果65
4.6本章小结66
第1章 绪 论
1.1课题来源
本课题来自于实验室的项目,用于保护文件系统中重要数据的完整性以及可用性。
1.2本课题的研究目的及意义
恶意软件、恶意代码可能是计算机安全领域的最大威胁,根据McAfee2010年第三季度的最新报告:
(1)平均每月有6,000,00新的计算机被僵尸网络所感染
(2)平均每天有60,000新的恶意软件出现。
(3)Google搜索中有60%的热点搜索词汇在其返回结果的前100项条录中链接到恶意站点。
据微软公司安全报告显示,“随着社交网站的发展,从2009年以来,以此为攻击目标的网络钓鱼(fishing)急剧增加,其次钓鱼破坏者所攻击的范围也有所扩展,各个门户网站、大型的游戏网站等成了主要的攻击目标”。
此外,用户的主机感染上恶意软件的另一个原因是用户自身的缘故,随着互联网的普及与信息化的发展,越来越多的计算机连接到内部网络或者互联网 上,这一方面使得通讯更方便,另一方面也为恶意软件提供了条件,使得黑客、木马、病毒等恶意工具愈演愈烈。
例如发送一些含有病毒且有吸引人标题的邮件,当用户不小心点击了它们,可能会在用户的主机上安装上一些恶意软件,并把此邮件发送给用户的联系人。
另外,一些部门的计算机中存储和处理的是有关国家安全的政治、经济、军事、国防的信息,因此成为敌对势力、不法分子的攻击目标。
恶意软件主动或被动的破坏行为令人防不胜防,这些问题已引起了人们的迫切关注。
Cyveillance在2010年的一项研究中表明:
对于这些安全问题,传统的防火墙、反病毒软件、IPS等防御手段已是无法胜任的了。
在这些问题当中,文件系统的破坏与文件数据的丢失给人们造成了很大危害,尤其在这些单位,计算机存储和处理的是有关国家安全的政治、经济、军事、国防的部门,一旦文件被破坏或修改,将会产生非常严重的后果。
为了克服传统方法的缺陷,我们需要一些新的防御手段,基于虚拟映射技术和重定向技术的沙箱是保护系统资源不被破坏的一种新兴的防御手段,它可以很好的解决上述问题,在对用户透明的情况下实现对文件数据的保护,因此从以上几点上来看本课题的研究还是很有意义的。
1.3沙箱技术国内外研究现状
沙箱的概念第一次是被Wahbe.et al提出来的,目的是保护系统数据不受破坏,保证数据的可用性与完整性。
沙箱技术其实是一种隔离机制,它可以制造一种可执行环境,让应用程序在此环境中执行,在运行的过程中它可以限制应用程序的访问权限,从而在一定程度上保护系统资源。
文献中阐述了沙箱的主要用途和作用,目前沙箱技术主要是采用规则集来限制系统调用的沙箱技术。
还有使用干预技术干预系统调用的沙箱技术。
限制技术:
限制技术的研究工作重点在于保护系统中数据的机密安全性(confidentiality),文章作者Lampson,在Lampson关于这方面的研究工作之后又出现了一系列限制技术的相关研究工作。
限制系统调用技术发展到现在,大多是用于保护系统资源的可用性(availability)以及资源的完整性(integrity)。
本文所实现的系统也用来保护文件系统的完整性,在恶意程序或其他因素使得操作系统中文件数据改变后,本系统能够通过一定的技术手段恢复到原来的状态,以保护数据的完整。
Acharya and M. Raje等人通过将应用程序按照功能分类,对已知特定类型的应用程序,根据程序功能的运行特点以及完成此功能所需资源,为该类型制定不同的限制运行约束规则,并且以此规则来设计与实现不同的沙箱系统,当程序运行时,根据功能的不同来加载具有专门针对性的沙箱环境以此保护操作系统资源与安全。
常用的限制机制方法有以下几种:
第一种方法是从沙箱系统的使用灵活性来考虑,这种方法设计目的是通过系统能够对任何恶意的软件程序都有很好的限制作用,但是这往往要求用户(或管理员)来指定这些运行程序的访问控制信息,如果对于一些运行环境较为固定且简单的小程序,这种方法可以很好的实现程序限制的功能保护系统。
但是,当运行环境可以被动态改变,并且程序的功能比较复杂的话,这种方式设计的沙箱系统就失去了它的保护作用。
第二种方法是沙箱系统使用有限状态机描述和归纳出程序的行为特性,对于功能相同的进程它们的访问操作是类似的,不同的类型访问序列会有所不同,通过这些可以很好的实现恶意行为特征的描述,但这对沙箱的开发者有一定的要求,他需要对恶意软件功能程序有的体会,考虑到程序的复杂性和目前数亿计的程序数量,很难开发一个较通用的系统。
第三种方法是从程序的供应者考虑,按这些把程序分成不同的种类,一般根据开发者、开发公司、以及来源网站等依据把他们归纳为一类,然后参考类别的ACLs(访问控制表)来达到限制程序的目的。
但是按这种方法,不同功能的应用程序也有可能被归纳到同一类,参考相同的ACLs,从而会造成错误的沙箱设计规则。
由于在程序执行过程中,单一权限设计往往不能够很好的控制程序的权限,Tomohiro Shioya,Yoshihiro Oyama在文章提出了将程序运行整个过程划分为几个不同的运行上下文,把程序所具有的访问权限分为两个或多个时期,在每个时期程序的运行权限各不相同,这样可以动态的运用权限规则,更好地保护系统资源。
干预技术:
干预系统调用技术是指通过干涉系统的调用,改变系统调用的默认行为,修改系统调用执行路径,然后经过分析处理,以此来决定系统调用的具体执行操作。
Jones在中研究了如何具体地将干预系统调用技术应用在Mach内核中,并且通过将此技术作为一个扩展工具,使得它可以扩展用户功能。
从他的研究中,我们得到如下结论:
假如操作系统允许用户按自己的需求对系统调用的接口实施特定的干预,就可以扩展出很多新的应用功能。
但是,由于Mach系统并不能够防止原有不可靠程序对外包函数中插入代码的影响,因此无法对其进行安全性机制处理。
现在大部分系统采用限制技术来实现沙箱系统,在这种系统的主要原则是:
为用户的访问操作给予最小的访问权限,以此来限制程序的运行,使其不能对敏感数据造成破坏。
但是现在大部分的沙箱系统不能够提供完善的限制规则,使得沙箱系统不能够很好的保护系统的安全。
还有就是以上限制策略的规则集,一旦生成并付诸实践后,系统将根据这些规则判断运行程序的权限,当允许权限被授予给某一操作后,操作往往是作用在了真实数据上,这样如果权限授给了一个恶意的操作,那么操作很有可能就会对系统造成破坏。
再者,限制技术是根据沙箱的规则集来实现的,如果沙箱的规则集未能及时更新,那么规则集可能就不能够很好的限制程序系统调用执行。
本文通过干预用户发出的系统调用来改变原有系统调用接口的默认行为。
通过这样的改变,可以修改系统调用的执行路径以及实现自己需要的具体功能,这样该调用就不再遵守系统的默认执行规则及功能,可以按自己的意愿决定系统调用的具体执行操作以及所需要的功能,在本系统中采用了虚拟映射技术,把文件操作重定向到某一特殊文件中,实现隔离机制。
1.4本文研究内容
本文主要的研究内容是通过虚拟重定向技术构建一个用于保护系统文件完整性与稳定性的沙箱系统,在文中介绍了虚拟及重定向技术在沙箱中的应用以及实现。
本文研究内容如下:
(1)在研究内容中将会重点研究过滤驱动以及过滤设备,过滤驱动和过滤设备是本课题系统实现的基础条件,设备驱动采用分层的结构,它采用栈结构,栈的每一部分就是该分层结构对应的设备对象,每一个设备对象都会有唯一的驱动程序来处理发给它的IRP请求,并且设备对象是通过挂载构成栈结构,在本课题将会在磁盘卷设备上实现一个上层的过滤驱动和过滤设备以截取IRP请求,再按照自己的意愿完成此请求。
(2)存储虚拟技术,在存储虚拟技术研究中将会根据具体需求实现文件磁盘化,以此来实现对系统和程序的统一视图,把对文件数据的存储操作作用到虚拟的磁盘数据上面。
采用的存储虚拟技术位于文件系统与磁盘的中间层次,形成一个与磁盘相对应的特殊文件,可以像磁盘一样对其操作,所生成的虚拟数据文件中留有很多空余空间,这些空间并不占用真正的磁盘块,只是用来与原数据文件的产生映射关系。
只有当有真正的数据插入到虚拟文件中时,操作系统才会给虚拟文件分配磁盘块,这样做有助于提高存储资源的利用率。
本文实现的沙箱系统,采用关键数据保护政策,当恶意软件对关键数据进行修改时,通过本文沙箱系统将这些修改操作重定向到虚拟文件处,以此达到保护文件的目的。
(3)由于本课题同样使用了重定向技术,在本文中将会重点介绍一下如何将操作重定向到虚拟文件中以完成限制程序和局限操作到虚拟文件的目的。
使用重定向技术来实现系统文件的安全,这样就可以使用相关的技术手段把对文件的不可靠操作重定向到系统的某一特殊文件内,因为所有对系统的不可靠操作作用到了特殊文件内,对原文件不会造成破坏,即相当于限制了程序的操作,以此可以保护文件数据的安全。
本课题采用重定向的技术,在必要时将操作重定向到虚拟文件中,以限制这些操作对真实文件的作用,从而保护沙箱内的关键数据。
以上就是本课题的研究内容。
1.5本文组织结构
本文的组织结构是按如下结构安排的。
第一章绪论,主要内容---简述了本课题来源,研究目的和意义,以及当前阶段国内外研究现状。
最后介绍本文的组织结构和研究内容。
第二章介绍当前建立沙箱环境的具体实现方法以及关键技术,分析了设计沙箱时所用的关键技术以及沙箱的用途和作用。
第三章介绍了本文沙箱系统所用的关键技术,其中重点介绍了虚拟化原理以及重定向技术,并分析了目前技术的优劣。
最后介绍了实现本课题沙箱系统所用到的一些关键数据结构和相关概念。
第四章详细介绍了系统的具体实现,给出了具体流程图和各个功能模块的实现细节,以及系统最后的运行实验结果及评测。
第2章 沙箱实现技术与相关知识
沙箱(Sandbox)技术是一种对程序的限制运行机制,其目的是通过沙箱对程序的限制以达到保护相关资源的目的。
由于可以通过沙箱技术来执行未经测试的或不可靠的程序,一些研究人员提出了一些限制访问控制策略当应用程序在沙箱内执行时,就能够分析程序保护系统可以在很大程度上防止恶意软件对系统的破坏,因此对沙箱技术的研究很有意义。
2.1沙箱环境实现关键技术
目前沙箱环境的实现主要依赖于两项技术:
(1)限制系统调用技术。
(2)干预系统调用技术,下面详细介绍一下这两项技术。
2.1.1限制系统调用技术
限制技术的提出者的研究工作重点在于保护系统中数据的机密安全性(confidentiality),文章作者Lampson,在他这方面的研究工作之后又出现了一系列限制技术的相关研究工作。
限制系统调用技术发展到现在,大多是用于保护系统资源的可用性(availability)以及资源的完整性(integrity)。
本文所实现的系统也用来保护文件系统的完整性,在恶意程序对系统,或其他因素使得系统中文件数据改变时能够通过此系统恢复到原来的状态,以保护数据的完整。
限制系统调用技术是通过限制规则对一些系统调用所进行的操作进行阻止。
在采用策略限制技术的沙箱环境中,当应用程序运行时,在沙箱内运行的线程有严格的运行权限,他可以阻止恶意软件的非法访问,当应用程序超出所允许的权限时,沙箱就阻止进程的运行,通常这样可以有效的保护自己的主机资源,但是很遗憾这种方法不能提供足够准确的安全限制机制,由于需要考虑到系统的便利性和系统的灵活性,它们很多的实现往往是使用单一的权限限制机制(YES/NO),比如单单从系统的便利性来说,我们所期待的系统是不希望由用户的参与,即不需要用户的任何输入操作,这样就能很好的解决系统的便利性。
但是这样就使得任意程序对所有资源都有访问权限,所谓的保护机制也就没有意义了,也就是所谓的YES机制。
当从系统的灵活性来说的话,希望系统能够对任意程序都有防御作用,一个极端的方法是限制程序,使程序只能访问极少的资源。
也就是所谓的NO机制。
理想情况下是希望沙箱系统能够限制程序只访问他所需要完成功能所必需的资源,这样根据当发现访问非法时就可以限制它的系统访问,进而保护系统资源。
一些研究人员提出了一些限制访问控制策略,目前系统通常通过三种方法为沙箱系统创建这些限制机制。
(1)第一种方法是从系统的灵活性来考虑,这种方法希望系统能够对任何程序都有很好的限制作用,它通常要求用户(或管理员)来指定程序的访问控制信息,如果对于一些运行环境较为固定且简单小程序,这种方法可以很好的实现程序限制的功能。
但是,当运行环境可以动态改变且含有大量的功能特性的程序时,这种方法就不能很好的凑效。
(2)第二种方法是通过有限状态机来描述程序的行为特性,因为对于一些访问操作来说,不同的访问序列会产生不同的功能和对系统不同的影响。
但是这要求开发者对程序有一个深入的了解,考虑到程序的复杂性和目前数亿计的程序数量,很难开发一个较通用的系统。
(3)第三种方法是从程序的供应者考虑,一般根据开发者、开发公司、以及来源网站等依据把他们归纳为一类,然后参考类别的ACLs(访问控制表)来达到限制程序的目的。
但是按这种方法,有可能不同功能的应用程序可能被分到同一类参考相同的ACL,从而不能很好的限制程序。
ShioyaT,Oyama Y在文章中提出了多策略方案,它在一定程度上解决了单一所造成的问题,他通过将进城执行时划分为几个不同的运行上下文,在不同的上下文中运行不同的操作限制策略,这样也从更微观的视角来限制应用程序的行为,这种方法可以更好地控制程序的运行,但是实现起来代价很大,对特定程序需要特定的处理。
而且这种方法还存在一个特点,就是策略的指定,策略只有熟识相关知识的才能较准确把握。
如果考策略指定不当的话,它授予程序可以改变其访问的权限,这样这条策略就失效了。
以上限制策略的生成规则,一旦生成并付诸实践后,系统将根据这些规则判断运行程序的权限,一旦这样的权限被授予给某一操作后,操作往往是作用在了真实数据上,这样如果权限授给了一个恶意的操作,那么操作很有可能就会对系统造成破坏。
为了防止这样的不足,本系统的实现采用虚拟重定向技术,避免这一情况的发生。
2.1.2干预系统调用技术
干预系统调用技术是指通过干预系统的调用,使得系统调用的默认行为发生改变,通过这样的改变,可以修改系统调用的执行路径,因此该调用就不再遵守系统的默认执行规则,这样就能按自己的意愿决定系统调用的具体执行操作以及路径。
干预系统调用在实现过程中一般采用替代的方法:
即将系统默认的系统调用替换掉,在这里采用一些外包函数(wrapper)把接口函数替换掉。
然后通过在外包函数中加入对这些系统调用进行截取以及检测等功能。
最后通过测试结果来判定此调用是否执行系统默认的执行路径。
外包函数(wrapper)如图2-1所示:
图2-1外包函数
目前有许多的安全系统采用了干预系统调用的安全机制。
例如,在SLIC系统中,它使用此干预系统调用技术,并且将它用作一种扩展操作系统的手段。
作为一种扩展操作系统的手段使得用户可以按自己的意愿选择一些特定的操作系统接口,接着可以通过编译一些特定的代码,并且将其安装到系统内核中,通过此种方法就可以实现用户所选择接口的扩展。
使用这种方法SLIC在不同种类的应用程序上分别进行了相关的实验,例如Apache等。
采用干预技术对系统的安全实时保护的策略中,大都是以文章为基础。
在论文中,该文作者提出了采用动态加载内核模块的方式,以此来截取用户发出的系统调用请求,进而对这些调用接口进行干预以达到保护目的。
在文章中,作者为了减小干预技术对操作系统所产生的代价,提出与定义了一种被称为外包的定义语言,以此定义语言为开发依据的开发者可以实现与平台无关的规则,并且这些规则都可以是较高层次的。
在文章中,作者通过加载内核模块,实现了一个具有入侵检测功能的系统。
本文通过干预用户发出的系统调用来改变原有系统调用接口的默认行为,通过这样的改变,可以修改系统调用的执行路径以及所要实现的具体功能,这样该调用就不再遵守系统的默认执行规则及功能,可以按自己的意愿决定系统调用的具体执行操作以及所需要的功能。
2.2沙箱的分类
2.2.1按照位置分类
根据沙箱系统的具体实现位置,能够把沙箱系统分为四大类:
(1)虚拟机(Virtual Machine)
运行应用程序时,不在真实的机器上面运行,而是将它局限在某些虚拟机(Virtual Machine)内,如采用VMware(VMWare ACE)、Virtual Box和Virtual PC等软件将特定操作系统虚拟化,形成一个新的计算机环境,这样应用程序所有的操作限制在虚拟机内,而对数据的改变对真实系统来说没有影响。
(2)内核级(Kernel)
这种类型的沙箱系统需要有系统内核的支持。
此类沙箱可以通过修改一些函数,如chroot()函数,可以改变操作系统访问控制。
并且可以通过使用setrlimit以及getrlimit函数来限制应用程序,以此限制程序对资源的恶意篡改访问等。
(3)应用级(Application)
通过这种级别的沙箱可以监控应用程序发出的系统调用请求,从而检测其行为特征,它们通常在内核态与用户态之间充当防火墙的角色。
(4)语言级(Language)
典型的就是JAVA的沙箱系统模型,用JAVA编写的比特代码就是运行在相应的沙箱内的。
本课题所实现的沙箱系统位于内核层,通过干预系统调用的默认行为,来达到是数据免受破坏,保护数据完整性目的。
2.2.2规则集复杂度分类
从影响沙箱系统实现的规则集来分类的话,可以根据规则集的复杂程度,把当前的沙箱系统分为三类:
(1)限制型
限制型沙箱系统,这种类别的沙箱系统规则比较简单,一般是只规定哪些系统调用拥有权限可以访问资源,哪些系统调用没有权限不可以访问相应资源。
并且对于运行在此类沙箱系统上的所有不可信应用程序,都采用同样的规则集。
JAVA的沙箱模型就是很典型的该类型的沙箱系统。
由于这种类型的沙箱系统规则集是唯一的,所以经常把这些固化,因而使得规则难以增加以及修改,不过在这种沙箱表现出的性能还是很突出的。
(2)单规则型
单规则型沙箱系统能够简单的修改其规则集。
它的每条规则可能包含多个特征码值,并且可以被增添以及修改,这种类型的沙箱经常使用专家系统规则集。
由加州大学伯克利Berkeley分校设计研发的Janus系统以及InterSectAlliance公司研发的Snare系统都是是单规则型沙箱系统的代表。
(3)复杂规则型
复杂规则型沙箱系统中通常包含比较复杂的限制策略规则集,一般是通过两条或多条规则来表示一个操作事件,因此就需要此类型的沙箱系统具有记录系统操作状态的功能。
同时由于规则的复杂度,就需要一个高性能的检测引擎,由此使得专门针对该类型沙箱系统的拒绝服务事件的不会发生。
本文所实现系统属于的第一种类型,通过对特定文件系统内数据以及系统调用的限制与干预实现保护数据完整性目的。
2.3沙箱的用途
2.3.1保护系统
当系统需要运行未知程序,为了保护系统资源完整不受未知程序的破坏,可以采用沙箱技术来执行这些未知程序,由于沙箱用到了一些干涉技术或者是限制技术,如果程序运行时出现了非法访问行为,沙箱系统可以阻止这些访问,进而保证系统资源的安全,这样就可以使得系统不受破坏。
存在一部分应用程序,在它们的实