(计算机应用技术专业论文)基于solaris虚拟文件系统加密组件的研究.pdf_第1页
(计算机应用技术专业论文)基于solaris虚拟文件系统加密组件的研究.pdf_第2页
(计算机应用技术专业论文)基于solaris虚拟文件系统加密组件的研究.pdf_第3页
(计算机应用技术专业论文)基于solaris虚拟文件系统加密组件的研究.pdf_第4页
(计算机应用技术专业论文)基于solaris虚拟文件系统加密组件的研究.pdf_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要 摘要 论文主要研究了在s o l a r i s 操作系统下如何从虚拟文件系统层入手,完成 一套基于该层的加密组件。本文构建了一个堆栈化虚拟文件系统模型,这个模 型的核心主要包括系统调用时v 节点堆栈和v 节点方法集的实现。首先利用系 统调用重定向技术完成v 节点堆栈,然后在堆栈上层的v 节点操作函数中注入 加密解密功能,当i o 请求发生时,系统调用堆栈上层v 节点操作函数,自动 完成加密和解密。该模型的核心部分辅以外围的监视路径过滤机制,使该组件 只处理用户关心的敏感数据,从而降低了加密解密算法对系统的性能造成的冲 击。 论文主要进行的工作有两个方面: 1 、在对s o l a r i s 虚拟文件系统的架构和实现作了深入地研究的基础上,从“系 统”的层面上提出文件加密解密方案的模型。使得加密解密的操作与系统融为 一体,不需要用户的手动干预,便能透明地根据用户身份完成加密解密。 2 、进一步分析了影响系统效率的各个方面,把过滤机制和加密解密模块分别 放在操作系统的系统调用层和v 节点层,把不必要的时问开销降至最低,从而 减少了该模型对操作系统性能上的冲击。 关键词:虚拟文件系统;v 节点;文件加密;系统调用重定向 a b s t r a c t a b s t r a c t o nt h eb a s eo fa n a l y z i n gh o wt h ev i r t u a lf i l es y s t e mw o r k so nt h es o l a r i so s , t h ep a p e rr e s e a r c h e dh o wt od e v e l o pe n c r y p t i o nc o m p o n e n tb a s e do nt h ev f s i nt h i s t h e s i s ,w ec o n s t r u c tam o d e lo fh e a p e dv i r t u a lf i l es y s t e m t h ek e r n e lo ft h i sm o d e l m a i n l yi n c l u d e sh e a p i n gv - n o d eo ns y s t e mc a l l sa n di m p l e m e n t so ft h ev n o d e s m e t h o ds e t f i r s t l y , h e a p st h ev - n o d eb yt h em e a n so fr e d i r e c t i o no fs y s t e mc a l l s ; s e c o n d l y , i n j e c t st h ee n c r y p t i o ni n t ot h eu p p e rv - n o d e sm e t h o d s w h e ni or e q u e s t o c c u r s ,t h es y s t e mc a l l st h eu p p e rv n o d e sm e t h o d sa n dt h ee n c r y p t i o nw o r k s a u t o m a t i c a l l y t h eu t i l i t i e so ft h em o d e lw h i c hi n c l u d ep a t hm o n i t o r i n gm e c h a n i s m w i l lw o r kw i t ht h ek e m e l i t nf i l t e rt h eu n i n t e r e s t e d d a t aa n dd e c r e a s et h e p e r f o r m a n c ei m p a c tt ot h eo s t h ec o n t r i b u f i o no ft h i st h e s i sa sf o l l o w s : 1 o nt h eb a s eo fr e s e a r c h i n gt h ef r a m e w o r ka n di m p l e m e n to fv f s ,t h et h e s i s r a i s e sf i l ee n c r y p t i o no nt h ev f sl a y e r i ti sb e a e rt h a nt h es o l u t i o n so nu t i l i t yl a y e r b e c a u s ei ti n c o r p o r a t e sw i t ht h eo sa n dw i l lw o r ks e a m l e s s l yw i t h o u tu s e si n t e r v e n e 2 a n a l y s e sa s p e c t so ft h em o d e la n dp l a c e st h ep a t hf i l t e r i n gm e c h a n i s ma n d e n c r y p t i o nm o d u l ei n t ot h es y s t e mc a l ll a y e ra n dt h ev - n o d el a y e r d e c r e a s e st h e n e e d l e s ss p e n d i n go ft i m eo nu n i n t e r e s t e dd a t aa n dd e c r e a s e st h ep e r f o r m a n c ei m p a c t t ot h eo s i nt h ef i n a l i t y , t h ep r o b l e m sr e q u i r i n gf u r t h e rs t u d i e sa r ed i s c u s s e d k e yw o r d s :v i r t u a lf i l es y s t e m ;v - n o d e ;f i l ee n c r y p t i o n ;s y s t e mc a l lr e d i r e c t i o n u 学位论文版权使用授权书 本人完全了解北京机械工业学院关于收集、保存、使用学位论文 的规定,同意如下各项内容:按照学校要求提交学位论文的e n 昂i j 本和 电子版本;学校有权保存学位论文的印刷本和电子版,并采用影印、 缩印、扫描、数字化或其它手段保存论文;学校有权提供目录检索以 及提供本学位论文全文或者部分的阅览服务;学校有权按有关规定向 国家有关部门或者机构送交论文的复印件和电子版;在不以赢利为目 的的前提下,学校可以适当复制论文的部分或全部内容用于学术活 动。 学位论文作者签名:杏疋 铷口8 年f 月 厂日 经指导教师同意,本学位论文属于保密,在年解密后适用 本授权书。 指导教师签名:学位论文作者签名:专足 年月 日和。留年1 月y 日 硕士学位论文原创性声明 本人郑重声明:所呈交的学位论文,是本人在导师指导下,进行 研究工作所取得的成果。除文中已经注明引用的内容外,本学位论文 的研究成果不包含任何他人创作的、已公开发表或者没有公开发表的 作品的内容。对本论文所涉及的研究工作做出贡献的其他个人和集 体,均已在文中以明确方式标明。本学位论文原创性声明的法律责任 由本人承担。 签名:极 为。g 年f 月l 厂e t 第1 章引言 第1 章引言 1 1 课题研究的目的与意义 随着计算机互联的实现及相关技术的发展,资源共享成为了可能,这大大 方便了人们的工作和生活。同时如何保障系统的安全,便成为一个紧迫的问题 摆在人们的面前。然而很多年来人们并没有认识到这个问题的严重性,直到 i n t e r n e t 发展后,随着多米尼克等众多黑客的出现,计算机系统的安全性才逐 渐引起人们的关注。 上个世纪7 0 年代,加密算法得到了蓬勃发展,并且非常迅速地应用到了计 算机的各个领域。但是随着计算机效率的不断提升,数据加密成为了人们同常 工作中一项非常频繁且不容忽视的工作。人们希望通过使用一种尽可能简便的 方法保护自己的机密数据,但又不愿因此而付出太多的额外工作;他们希望自 己的安全系统能够覆盖到被所有应用程序访问到的所有文件,而不是为每一个 应用程序指定针对性的安全措施,因为这是一项非常烦琐的工作。因此,应用 级的加密软件越来越不能满足当前的需求,研究数据加密技术和操作系统中的 文件系统的整合显得非常必要且具有很高的应用价值。 s o l a r i s 是s u nm i c r o s y s t e m s 公司研发的计算机操作系统,它是u n i x 操作 系统的衍生版本之一,由于曾经是商用u n i x ,其稳定性在各u n i x 版本中算 是佼佼者,不少企业使用它作为内部的文件服务器供多用户访问。2 0 0 0 5 年6 月1 4 日,s u nm i c r o s y s t e m s 公司开放了s o l a r i s 操作系统软件的源代码,这一 举措使得程序员可以更方便地开发基于系统内核的可加载模块。因此本课题选 择s o l a r i s 作为研究的系统平台,由于u n i x 各版本之间具有共性,所以研究的 成果可以很方便地移植到u n i x 的其它版本。 1 2 国内外研究现状 密码学技术的进步为防止文件被非法访问提供了强有力的支持。只要能恰 当实现并合理应用,现代密码学算法几乎不可能被没有密钥的一方所攻破。然 而这似乎并不是现实,主要原因是目前还没有一种通用的方式来应用这些算法。 尽管加密工具在一定程度上比较有效,但由于在使用上没有定式,经常存在使 第l 章引言 用不方便,不能与应用程序很好的整合等问题。目前数据加密的应用大致分两 种形式:用户级别的数据加密和系统级别的数据加密。 1 2 1 用户级别的数据加密 给文件加密最简单的方式就是通过一个类似u n i x 中c r y p t 程序那样的工 具,给定一个密钥,这类工具把一个文件或者数据流翻译成密文。加密和解密 都需要用户的直接控制,翻译完成后还必须手动地删除原有的明文文件。 另外一种方法就是把加密组件整合到应用程序中,在需要的时候,由应用 程序调用加密组件,完成加密。比如,文本编辑器e d i t o r 就可以完成自动的加 密解密,当需要保存一个文件的时候,会让用户创建一个密码,用于加密文件, 当打开一个加密文件时,再向用户询问密码,用于解密该文件,微软的o f f i c e 办公软件也具有类似的功能。但是应用这种方式的加密要求操作相同数据的应 用程序必须使用相同的加密组件。 显然,这两种方案都不能很好的满足用户需求。前者的问题在于,当需要 对大量的文件做加密时,用户很容易遗忘某个文件,或者忘了在加密以后删除 明文,手动操作具有与生俱来的弱点。而且如果一个文件被频繁的使用,用户 就不得不重复的输入密钥,这也是很烦琐的事情。更有甚者,即使用户操作保 证完全j 下确,由于明文有存在的时机,黑客软件可以趁文件尚未被用户加密的 时候获得明文,这样就轻而易举地绕过了加密工具。对于第二种方式,即整合 加密组件的应用程序,尽管应用程序将自动地完成加密,但仍需要用户给每一 个程序提供密钥,频繁的用户交互还是不可避免。而且如果应用程序本身不支 持加密组件的整合,就将无法操作安全数据,也无法完成加密。更为严重的是 加密组件不是以一个独立的程序存在,而是被整合在多个应用程序当中,保证 它与其他应用程序的兼容性会是一个大问题,比如e d i t o r 创建的加密文件不可 能采用o f f i c e 来解密并打开。 1 2 2 系统级别的数据加密 为了避免用户级别的加密方式带来的各种弊端,有人提出系统级别的数据 加密。即把加密服务做成一套底层系统。在设计该系统的时候,就要区分开: 操作系统的哪些部分可以信赖,可以采用明文;哪些部分必须要采取密文保护。 2 第1 章引言 也就是说必须认清操作系统的哪些部分比较薄弱且容易受到攻击,从而采取保 护措施。 对于文件而言,主要应当考虑保护用于存储文件的物理介质。在分布式系 统中,还要考虑保护客户端和服务器端的连接,因为这很有可能被窃听。 物理介质可以通过专用的硬件来保护,例如,可以给磁盘控制器配备嵌入 式加密硬件来完成对整个磁盘或者单独的文件块的加密。只要用户向磁盘控制 器提供了密钥,解密将可以透明地进行。然而这种方法也有缺陷。首先,加密 的粒度必须与硬件相兼容,通常需要将整个磁盘作为一个整体进行加密,然而 如果希望给几个不能相互信任的用户提供各自的密钥,且在他们之间提供部分 的资源共享,则几乎是做不到的。 对于客户端与服务器端的网络连接,则主要应采取端对端的数据加密以及 身份认证【i 】【2 l 【3 】【4 1 。根据所使用的网络类型,可以采用专门的硬件来完成,也可 以通过软件来实现。可是并非所有的网络都支持加密,退一步来讲即使网络都 支持加密,也并非所有的加密产品都能相互兼容。即使这些问题都可以忽略, 上述的两个方案与网络上运行的分布式系统是否兼容也是个问题。为了达到安 全的目的,有太多不确定的因素要考虑,只要有一个环节出现问题,就会全盘 皆输。 此外,从文件系统层来考虑解决解密问题是另一个趋势,这以m a t tb l a z e 提出的c f s ( c r y p t o g r a p h i cf i l es y s t e m ) 【5 】 6 1 【7 1 【8 1 【9 1 为代表,他把加密解密代 码h o o k 到n f s 内部,这样做的好处在于它对内核的改动非常有限,因此副作 用比较小,相对于其他的内核级的解决方案来说,该方案更加轻便与系统的兼 容性也更强,由于c f s 是运行在n f s 之上的,可以保证数据在网络介质上传 输的时候是以密文形式传输的,因此安全性更强。在此基础上t c f s ( t r a n s p a r e n t c r y p t o g r a p h i cf i l es y s t e m ) i o 】【l l 】【1 2 】【1 3 】作了进一步改进,使得同一组里的用户可 以共享数据。但是由于他们都是基于n f s 文件系统的,因此在文件系统之间不 具备可扩展性,如果希望在其他类型的文件系统下使用,则必须作相应的移植。 1 2 3 加密算法概况 数据加密就是按照确定的密码算法将敏感的明文数据变换成难以识别的密 文数据,通过使用不同的密钥,可用同一加密算法将同一明文加密成不同的密 第l 章引言 文【l 引 1 s l 。当需要时,可使用密钥将密文数据还原成明文数据,称为解密。这样 就可以实现数据的保密性。数据加密被公认为是保护数据传输安全惟一实用的 方法和保护存储数据安全的有效方法,它是数据保护在技术上最重要的防线。 数据加密技术是最基本的安全技术,被誉为信息安全的核心,最初主要用 于保证数据在存储和传输过程中的保密性。它通过变换和置换等各种方法将被 保护信息置换成密文,然后再进行信息的存储或传输,即使加密信息在存储或 者传输过程为非授权人员所获得,也可以保证这些信息不为其认知,从而达到 保护信息的目的。该方法的保密性直接取决于所采用的密码算法和密钥长度。 根据密钥类型不同可以将现代密码技术分为三类:对称加密算法( 私钥密 码体系) 、非对称加密算法( 公钥密码体系) 和不可逆加密算、法【1 6 】【1 7 】【18 1 。它们 分别应用于数据加密、身份认证和数据安全传输。 ( 1 ) 对称加密算法是应用较早的加密算法,技术成熟。在对称加密算、法【1 9 】 【2 0 】【2 1 】【2 2 1 中,数据发信方将明文( 原始数据) 和加密密钥一起经过特殊加密算法 处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原 文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使 其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发收信双方都 使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。 对称加密算法的特点是算法公开、计算量小、加密速度快、加密效率高。不足 之处是,交易双方都使用同样钥匙,安全性得不到保证。此外,每对用户每次 使用对称加密算法时,都需要使用其他人不知道的惟一钥匙,这会使得发收信 双方所拥有的钥匙数量成几何级数增长,密钥管理成为用户的负担。对称加密 算法在分布式网络系统上使用较为困难,主要是因为密钥管理困难,使用成本 较高。在计算机专网系统中广泛使用的对称加密算法有d e s 、i d e a 和a e s 。 传统的d e s 由于只有5 6 位的密钥,因此已经不适应当今分布式开放网络 对数据加密安全性的要求。1 9 9 7 年r s a 数据安全公司发起了一项“d e s 挑战 赛”的活动,志愿者四次分别用四个月、4 1 天、5 6 个小时和2 2 个小时破解了 其用5 6 位密钥d e s 算法加密的密文。即d e s 加密算法在计算机速度提升后的 今天被认为是不安全的。 a e s 是美国联邦政府采用的商业及政府数据加密标准,预计将在未来几十 年里代替d e s 在各个领域中得到广泛应用。a e s 提供1 2 8 位密钥,因此,1 2 8 位a e s 的加密强度是5 6 位d e s 加密强度的1 0 2 1 倍还多。假设可以制造一部 4 第l 章引言 可以在1 秒内破解d e s 密码的机器,那么使用这台机器破解一个1 2 8 位a e s 密码需要大约1 4 9 亿万年的时间。因此可以预计,美国国家标准局倡导的a e s 即将作为新标准取代d e s 。 ( 2 ) 不对称加密算法使用两把完全不同但又是完全匹配的一对钥匙公 钥和私钥。在使用不对称加密算法加密文件时,只有使用匹配的一对公钥和私 钥,才能完成对明文的加密和解密过程。加密明文时采用公钥加密,解密密文 时使用私钥才能完成,而且发信方( 加密者) 知道收信方的公钥,只有收信方 ( 解密者) 才是唯一知道自己私钥的人。不对称加密算法的基本原理是,如果 发信方想发送只有收信方才能解读的加密信息,发信方必须首先知道收信方的 公钥,然后利用收信方的公钥来加密原文;收信方收到加密密文后,使用自己 的私钥才能解密密文。显然,采用不对称加密算法,收发信双方在通信之前, 收信方必须将自己早已随机生成的公钥送给发信方,而自己保留私钥。由于不 对称算法拥有两个密钥,因而特别适用于分布式系统中的数据加密。广泛应用 的不对称加密算法有r s a 算法和美国国家标准局提出的d s a 。 ( 3 ) 不可逆加密算法的特征是加密过程中不需要使用密钥,输入明文后由 系统直接经过加密算法处理成密文,这种加密后的数据是无法被解密的,只有 重新输入明文,并再次经过同样不可逆的加密算法处理,得到相同的加密密文 并被系统重新识别后,才能真正解密。显然,在这类加密过程中,加密是自己, 解密还得是自己,而所谓解密,实际上就是重新加一次密,所应用的“密码” 也就是输入的明文。不可逆加密算法不存在密钥保管和分发问题,非常适合在 分布式网络系统上使用,但因加密计算复杂,工作量相当繁重,通常只在数据 量有限的情形下使用,如广泛应用在计算机系统中的口令加密,利用的就是不 可逆加密算法。近年来,随着计算机系统性能的不断提高,不可逆加密的应用 领域正在逐渐增大。在计算机网络中应用较多不可逆加密算法的有r s a 公司发 明的m d 5 算法和由美国国家标准局建议的不可逆加密标准s h s ( s e c u r eh a s h s t a n d a r d :安全杂乱信息标准) 等。 1 2 4s o i a l i s 文件系统发展历程 s u n o s2 0 2 _ 前的文件系统是基于u f s ( u n i xf il es y s t e m ) 2 3 1 的,这个文件 系统起源于伯克利的快速文件系统( f a s tf i l es y s t e m ,f f s ) ,最初被应用在b s d 第l 章引言 u n i x 上,是k i r km c k u s i c k 和b i l lj o y 在上世纪8 0 年代末设计出来的。f f s 在u n i x 历史上是第二个比较著名的的文件系统版本,它相对于最初基于s y m t e mv 的文 件系统是一次飞跃。s y m t e mv 的文件系统设计虽然比较轻便简洁,却存在着非 常显著的缺陷性能不佳,可靠性差,功能较弱。 s u n 公司在s u n o s2 0 中引入了虚拟文件系统( v f s ) ,该系统是为了使s u n 的 分布式文件系统( n f s ) 与u f s 无缝工作而开发的,从s u n o s 4 o 以后,v f s 成为了行 业标准,被所有的u n i x 版本所支持。此后s o l a r i s 文件系统结构的修改通常只是 底层的扩展性变化;而接口层,o o v f s ,一直是比较稳定的。 v f s 是一个异构文件系统之上的软件粘合层,有时也把v f s 称为可堆叠的文 件系统( s t a c k a b l ef i l e s y s t e m ) ,因为v f s 可以无缝地使用多个不同类型的文件系 统,就像把多个文件系统堆叠在一起一样,故而得名。通过v f s ,可以为访问文 件系统的系统调用提供一个统一的抽象接口。 目前,s o l a r i s 文件系统在实现层上可以分为以下几类: ( 1 ) 基于存储的文件系统一用于持久的存储和数据管理的普通文件系 统。如,u f s 和p c d o s 文件系统。 ( 2 ) 基于网络的文件系统一该系统可以像访问本地文件一样地访问远程 服务器的数据。比如,n f s 。 ( 3 ) 伪文件系统一该系统把各类的数据抽象成类似文件的文件系统,使 得访问该类数据就像访问文件那样。例如,p r o c 伪文件系纠2 4 】【2 5 】以文件的 形式来表示进程的地址空间。 v f s 架构的引入,为文件系统提供了一套定义良好且独立于具体文件系统 的接口,每种具体的文件系统的实现被隐藏在该接口层的下面。其中由两个关 键的数据结构来完成该层接口的封装:虚拟文件,或者称为v n o d e ;和虚拟文 件系统,或者称为v f s 。v n o d e 实现了与文件相关的操作,而v f s 实现了与文件 系统管理相关的操作。v n o d e 和v f s 所在的接口层将跟据当前被操作的文件系 统的类型把来自应用层的请求定向到指定的文件系统实现模块。从系统调用或 者其他的内核子系统引发的与文件相关的函数调用将被v n o d e v f s 抽象层定向 到对应具体文件系统的功能模块中,而不同的文件系统暴露给上层的接口都是 统一的。 6 第l 章引言 1 。2 5 加密算法与v f s 文件系统的结合构想 根据前面四节的叙述可知,在现有的s o l a r i s 版本下,所有的文件系统都运 行在虚拟文件系统层之下,也就是说虚拟文件系统层是所有的i o 数据流的必 经之路,如果把一个成熟的加密算法内嵌到虚拟文件系统层,那么该算法将有 能力覆盖到系统的所有数据,又由于它是运行在内核,因此只要系统初始化的 时候完成了用户身份认证,以后就可以无需频繁的用户交互来确认身份。这将 可以避免用户级别的数据加密工具的缺点;由于它是运行在虚拟文件系统层上 的,因此不依赖于具体的文件系统实现,与c f s 或t c f s 相比,将具备更好的 可扩展性。 1 3 论文各部分的主要内容 第一章指出了课题研究的目的和意义,综述了国内外有关数据加密在用户 级别和系统级别的实现和并对各种技术和方法进行了分析和比较,指出了它们 存在的一些不足之处。此外还介绍了加密算法发展概况和s o l a r i s 文件系统发展 历程,阐述了虚拟文件系统层完成加密解密的优势和可能性。 第二章通过对系统调用重定向技术的分析和研究,构建一个文件加密系统 的简单模型,分析该模型的不足,为进一步的解决问题奠定基础。 第三章在对虚拟文件系统的深入研究的基础上,提出v n o d e 堆栈的设计思想 以及通过v n o d e 堆栈实现各种文件i o 重定向的实现方法。 第四章进一步完善堆栈化虚拟文件系统,通过对几种常用加密算法的分析 选取适合本课题的算法,引入监视路径机制以减少对系统性能的冲击,并对组 件的性能做一个整体的评估和分析。 第五章主要对加密组件模型做一个整体的分析。 第六章总结了论文的主要工作和贡献,指出了目前工作中存在的问题,同 时展望了未来数据加密技术的研究发展。 7 第2 章基于系统调用重定向技术实现的简单加密组件 第2 章基于系统调用重定向技术实现的简单加密组件 2 1 系统调用重定向技术的实现原理 系统调用幢7 1 是操作系统为用户程序提供的可调用接口,通过该接口,用户 程序可以执行操作系统提供的特定功能。s o l a r i s 下所有的系统调用都保存在 s y s e n t 数组中,这个数组的每一项都指向一个结构,如图2 1 所示: s y s e n t 】 图2 1 内核系统调用入口表 在该结构体中,s y n a r g 表示系统调用接收的参数个数;s y f l a g s 是一个标 志位,记录该系统调用与实现相关的标志;s y l o c k 是一把读写锁;函数指针 s y c a l l 或者s y c a l l c 指向具体的系统调用执行模块。这里之所以有两个系统 调用入口是为了保持向上的兼容,在s o l a r i s 2 4 之前的版本,系统调用传参规 范是遵循传统的u n i x 方式( u a p 方式:u s e ra r g u m e n tp o i n t e r ) :用一个结构 体把参数包装起来,这样只需把该结构体的指针传入系统调用,所有系统调用 的传参格式都是一致的;在后来的版本中,大部分系统调用都被重写,新版的 系统调用都改为按照c 语言函数调用传参习惯来实现的,因为这种参数传递方 式可以利用s p a r e 处理器的特性提高系统调用的整体性能。s y c a l l 是u a p 方式 的系统调用入口,s y c a l l c 则是新版的c 风格的系统调用入口。 数组s y s e n t 定义在s r c u t s c o m m o n o s s y s e n t c 中,该数组的下标就是 系统调用号,系统会根据该调用号找到某个系统调用。图2 2 展现了系统调用 发生的全过程:当系统调用被执行的时候,首先将触发一条陷入指令,系统进 入该陷入指令对应的h a n d l e r ,此时处理机由用户态进入核心态。该h a n d l e r 首 第2 章基于系统调用革定向技术实现的简单加密组件 先完成必要的准备工作,包括保存c p u 上下文和返回地址,把系统调用计数器 增一等等;然后根据传给核心的系统调用号为索引在s y s e n t 中找到相应的处 理函数的入口地址,执行系统调用;最后在返回前恢复上下文环境。由于该陷 入指令是依赖于操作系统实现平台的,例如在x 8 6 中,这条指令是i n to x 8 0 , 这显然不是用户在编程时应该使用的语句,因为这将使用户程序难于移植。所 以在操作系统的上层都会实现一个系统调用库,每个系统调用在该库中包含一 个入口点,这就是我们通常所使用的o p e n ,r e a d ,w r i t e 等等。 图2 2 系统调用的执行过程 需要注意的是在s o l a r i s 下,一些文件操作相关的函数并不使用o p e n ( ) ,c r e a t ( ) 这样的系统调用,而是使用o p e n 6 4 0 ,c r e a t 6 4 0 等系统调用。因此在试图重定向一 个系统调用之前,应该先用u s r b i n t m s s 工具来跟踪一下程序,看看它到底使用了 9 第2 章基于系统调用重定向技术实现的简单加密组件 哪些系统调用。例如,p s 使用o p e n ( ) 调用来检查p r o c 树中的文件,而c a t 则使用 o p e n 6 4 0 来从文件系统中打开一个文件,即使这个文件也在p r o c 树中。 系统调用重定向【2 8 】就是在一个主机的操作系统上,对某个或某类应用程序 的特定或者全部系统调用进行捕获,重新定向到另外一个监控程序或者插入到 内核的某一段代码中,由这个监控程序或者插入内核的代码替代主机操作系统 内核,实现这个系统调用的功能,进而可以根据需要定制特殊的系统调用功能。 具体的来讲,可以在s y s e n t 数组中,把被重定向的系统调用的入口函数指针替 换掉,指向一个新的函数入口,在此新函数中完成额外功能,就可以实现系统 调用的重定向了。当然,通过普通的用户进程是无法做到这一点的,因为普通 的用户进程是运行在用户地址空间的,而s y s e n t 是内核数据,存在于内核地址 空间,两个地址空间相互隔离,因此要完成重定向系统调用,必须以可加载内 核模块【2 9 】【3 0 】【3 1 1 的形式,把模块载入系统内核。事实上s o l a r i s 的很多系统调用都 是通过可加载内核模块来实现的,这些模块可以动态的载入操作系统而无需重 新编译内核代码。 2 2 基于系统调用重定向技术的简单加密组件 2 2 1 主要思想 要实现对用户透明的文件加密解密工作,必须在文件读写的前后自动启动 该功能:数据写回到存储设备之前,先将数据加密,这样在存储设备上数据是 以密文形式存在;从存储设备读取到的数据在返回给用户之前,如果用户身份 合法,则将数据解密,这样合法用户得到的就是明文,而非法用户只能取得密 文。通过重定向与文件读写相关的系统调用可以实现该功能【3 2 1 ,以系统调用r e a d ( ) 和w r i t e ( ) 为例,下面给出重定向以后的新的系统调用实现逻辑。 新的r e a d ( ) 系统调用: l 、调用原先的系统调用r e a d ( ) ,得到密文数据; 2 1 、判断用户身份,如果不合法,则返回; 2 2 、如果合法,则申请一段内存作为缓存,把密文拷贝到该缓存; 3 、在缓存上执行解密算法,把明文数据拷到用户传入的地址空间,返回。 新的w r i t e ( ) 系统调用: 1 、申请一段内存作为缓存,把传入的明文数据拷入该缓存: 1 0 第2 章基于系统调用重定向技术实现的简单加密组件 2 、在缓存上执行加密算法,把密文数据传给原先的系统调用w r i t e ( ) ,返回。 2 2 2 设计与实现 s o l a r i s 下通常的可加载内核模块要实现三类函数接口【3 3 】: l 、可加载模块配置接口,该类接口用于完成模块的初始化和销毁工作。 2 、自动配置接口,当模块加载或卸载时,系统调用这类接口用于创建或释 放设备节点。 3 、用户上下文接口,该类接口用于访问模块所代表的设备。 这三类接口在层次上是自上而下的关系,前者通过某个字段指针指向后者。 由于我们要实现的模块并不提供模块设备的访问功能,因此第3 类接口可以不 用实现。主要的工作是在第一类接口中的i n i t o 和t i n i o 中完成,共分两步: 首先,在i n i t ( ) i 函数中替换系统调用函数指针,需要注意的是原先的系统调 用函数入口地址必须先保存起来,否则,当模块卸载以后就无法恢复这些系统 调用了。涉及到的系统调用主要有r e a d ,r e a d 6 4 ,w r i t e 和w r i t e 6 4 。下面是该部 分的代码片段: 保存原来的系统调用的地址 o l d r e a d2 ( v o i d 宰) s y s e n t s y s r e a d s y _ c a l l c ; 宰将新的系统调用的地址填到s y s e n t 数组的相应位置 s y s e n t s y s r e a d s y _ c a l l c = ( v o i d 半) n e w r e a d ; 同理,模块卸载的时候会调用f i n i o 函数,在该函数中应当把i 1 1 i t ( ) 中替换 的系统调用恢复。否则,当模块卸载后,新的系统调用函数地址就不存在了, 而s y s e n t 的函数指针还在指向这些地址,这会给系统带来灾难性后果。 第二步是实现这些新的系统调用。下面以n e w r e a d o 为例说明在实现新的系 统调用时需要注意的事项。 j f i 1 i n tn e w r e a d ( i n tt i l d e s v o i d 木b u r , s i z e _ tn b y t e ) 2s s i z e tr e t ; j f j 3 得到正常r e a d ( ) 调用的返回值 料 r e f = o l d r e a d ( t i l d e s b u r , n b y t e ) ; j f i 5 i f ( r e t o ) 撑6 分配一个新的缓冲区 第2 章基于系统调用重定向技术实现的简单加密组件 c h a r 木n e w b u f f = ( c h a r + ) k m e m _ a l l o c ( r e t ,k m _ s l e e p ) ; 将b u f 中的内容拷贝到新缓冲区中 e o p y i n ( b u f , ( v o i d 宰) n e w b u f f , r e t ) ; 完成解密 把新缓冲区中的内容拷回b u f c o p y o u t ( n e w b u f f , b u r , r e t ) ; 释放内存 k m e m _ f r e e ( n e w b u f f , r e t ) ; ) r e t u r nr e t ; 撑1 8 ) 实现这些系统调用时主要应注意内核地址空间和用户地址空间的差别。模 块是运行在内核地址空间的,而参数中传入的地址则是一个用户地址空问的地 址,在核心是不能直接访问它的,因此在9 行先通过c o p y i n ( ) 函数把用户地址空 间的数据拷进内核地址空间,然后再在内核地址空间中完成解密。在j f j 6 7 行申请 内核地址空间的内存的时候也不能使用l i b c 中m a l l o c ,而要使用k m e ma l l o e , 它用于分配内核地址空间的内存。如果第二个参数是k ms l e e p ,该函数将在 申请不到内存的时候休眠,保证返回的时候总能申请到内存;如果传入 k mn o s l e e p ,该函数将立刻返回,但是有可能申请失败。s o l a r i s 还提供了另 一个用于内核内存分配的函数d d iu m e ma l l o c o ,该函数与k m e m 的区别alloc0 在于前者用于分配大块的内存时效率更高,而后者更适合于分配小块内存。解 密完成后,在# 1 3 行把内核地址中的数据拷贝到参数b u f 指向的用户地址空间的 虚拟地址中,然后通过函数k m e mf r e e 释放内核地址空间的内存。 其它几个系统调用的实现与n e w r e a d o 相似,不再一一赘述。为了屏蔽技术 细节,在本章和第三章的研究过程中可以暂不考虑加密算法,采用简单的取反 运算。在第四章再对加密算法做详细讨论。在调试阶段,可以在新的系统调用 代码中加入过滤判断,使之仅对指定文件生效,例如在上面的代码中,应该在 j f j 4 行的后面,判断当前文件是否是要调试的文件,如果是则执行下面的操作, 否则直接返回。这样做可以减少该模块对系统正常运行的影响,便于调试。 2 3 实验结果分析 验证组件是否正常工作需要分四步完成: l 、通过命令a d dd r v 载入该模块。 1 2 7 8 9 m n 他b h b m 样#斧拌撑拌#拌群撑# 第2 章基于系统调用重定向技术实现的简单加密组件 2 、在模块生效的路径上创建文件,并向该文件写入数据。 3 、关闭文件,再打开,检验文件中的内容是否与第2 步写入致。 4 、通过命令r e md r y 卸载模块,再次打开文件,检验数据是否为密文。 第一步完成后需要通过m o d i n f o 命令,确认模块是否被成功加载。在第三步 打开文件后,得到的数据应该与第二步中写入的数据完全一致,在第四步卸载 模块后再打开文件,由于磁盘上保存的是密文数据,且没有经过加密模块的解 密处理,因此取得的数据应该是密文。 作者使用g e d i t ,e m a e s 和v i 等文本编辑器以及采用编程方式对该加密组件 做了上述实验,实验结果表明:有的情况下,该模块可以正确完成加密和解密 操作,如通过编程方式完成文件的读写以及通过v i 操作文件;但在某些情况下, 实验的前三步都是正常的,第四步卸载模块后,再次打开文件得到的依然是“明 文”数据。这说明磁盘上的数据没有被加密过,也就是说该组件没有工作,g e d i t 就是这种情况。通过使用t r u s s 3 4 1 工具跟踪g e d i t 执行过的系统调用,作者发现 g e d i t 对文件使用过m m a p 系统调用。该函数用于创建内存映射文件,把文件映 射到进程的地址空间,映射创建完成以后,程序对这段映射内存的操作将直接 反映到文件上。由于这是t r u s s 结果中g e d i t 与v i 或e m a c s 对文件操作的最大区 别,因此我猜想对内存映射文件的访问可能是绕过了系统调用r e a d ( ) 和w r i t e ( ) , 而采用了其他机制。前面提到的采用编程方式所做的实验是通过系统调用r e a d ( ) 和w r i t e ( ) 读写文件,因此作者又做了另一个实验,通过m m a p ( ) 仓 l 建内存映射文 件,并对映射内存作读写操作。实验的现象与g e d i t 的结果完全一样,这证明了 前面的假设。 是不是可以利用类似的方式重定向系统调用m m a p ,解决这个问题昵? 通过 研究s o l a r i s l o 内核代码,我发现m m a p 函数中并没有执行实际的i 0 ,而只是把 进程的虚拟地址空间的某段地址与文件的v 节点关联起来【3 5 】【3 6 】,如果这段内存 始终没有被访问过,那么将不会有i 0 发生在文件上;当内存首次被访问时,系 统的内存管理模块会调用v 节点的相关操作,把v 节点的数据读进内存页,这 些操作都是在系统调用层之下发生的,很显然,用户程序中访问一段内存并不 需要什么系统调用,因此无法通过重定向系统调用的方式来改变它的行为。 关于v 节点,可以理解为操作系统内核中用于表示文件的数据结构,具体 细节在下一章中论述。经过分析内核源码,我还发现尽管m m a p o 方式的文件访 问涉及到了内存管理子系统,但实际发生数据i 0 的部分仍然是通过文件系统来 第2 章基于系统调用重定向技术实现的简单加密组件 实现的。在v 节点的数据结构中,不仅记录了文件的相关数据,也保存了用于 操作文件的函数指针,这一点与系统调用非常相似。无论是m m a p o 方式引发的 文件访问还是r e a d o w r i t e o 方式引发的文件访问,最终都是通过调用v 节点的操 作函数来完成实际的i o 。那么利用与系统调用重定向类似的方式来替换v 节点 的相关函数就应该可以拦截到两种方式引发的文件访问,再把加密解密的代码 插入到读写的前后,就可以实现完整的自动加密解密了,这就是本课题的思想 起源。要完成这些工作,仅研究系统调用层是不够的,还需要对虚拟文件系统 和内存管理子系统的部分内容作更深入的研究。论文的第三章将延续这个思路, 逐步深化,最终提出堆栈化虚拟文件的解决方案。 1 4 第3 章堆栈化虚拟文件内核思想与实现 第3 章堆栈化虚拟文件内核思想与实现 3 1s oia t - is 下的文件i 0 3 1 1 虚拟文件系统架构分析 虚拟文件系统( v f s ) 是s o l a r i s 文件系统的主要构架,所有具体的文件系统 都是在该构架下实现的。在u n i x 早期版本中,操作系统对所有挂载的文件系统 采用一种实现类型【3 7 1 ,比较典型的是b s du n i x 的u f s 文件系统。最初的v f s 3 8 】 项目是为了让s u n 的分布式计算文件系统( n f s ) 与u f s 共存而开发的,目前v f s 已成为了s y s t e mv 、s v r 4 和s o l a r i s 标准的一部分。 v f s 架构提供了统一的文件系统操作接口层,它定义了一套不依赖于具体 文件系统的访问接口,各种文件系统的实现细节被隐藏在这套接口层之下。该 接口层包含了两个关键对象:虚拟文件或者称为v n o d e 和虚拟文件系统或者称 图3 1s o l a r i s 文件系统架构 1 5 第3 章堆栈化虚拟文件内核思想与实现 为v f s 对象。v n o d e 接口实现了与文件相关的操作,v f s 接口实现了与管理文件 系统相关的操作。v n o d e 和v f s 根据当前操作的不同类型的文件系统,把访问流 直接导向该文件系统的实现模块。图3 1 展现了文件系统的各个层次。 从图上可以看出,o d e v f s 层位于文件系统模块的顶端,而底端则是基于 磁盘的、网络的和伪文件系统的内核模块的接口。来自系统调用或者其他内核 子系统的文件访问控制流经过v n o d e v f s 层后,被分流到具体的文件系统模块。 一个v n o d e 对象代表了s o l a r i s 内核的一个文件。之所以称v n o d e 为对象是 因为它封装了文件的各种属性数据和操作方法,它隐藏了与具体文件系统相关 的细节,只暴露不依赖于具体文件系统的数据和方法。v n o d e 对象的数据可以 分成三类: l 、具体文件系统无关数据:比如v n o d e 的类型( 用于表示文

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论