(计算机应用技术专业论文)linux下几种内核级rootkits技术研究.pdf_第1页
(计算机应用技术专业论文)linux下几种内核级rootkits技术研究.pdf_第2页
(计算机应用技术专业论文)linux下几种内核级rootkits技术研究.pdf_第3页
(计算机应用技术专业论文)linux下几种内核级rootkits技术研究.pdf_第4页
(计算机应用技术专业论文)linux下几种内核级rootkits技术研究.pdf_第5页
已阅读5页,还剩91页未读 继续免费阅读

(计算机应用技术专业论文)linux下几种内核级rootkits技术研究.pdf.pdf 免费下载

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

文档简介

摘要 随着互联网行业和嵌入式行业的迅猛发展,l i n u x 的安全问题也显得日益重要。 l i n u x 系统上的r o o t k i t s 技术的研究也显得日趋紧迫,因为它比用户级r o o t k i t s 杀伤力更强,隐蔽性更高,技术难度也更大。 本论文介绍了r o o t k i t s 的基本概念、目标及发展,同时介绍了r o o t k i t s 设计 技术所涉及到的l i n u x 内核机制的原理,数据结构,和实现方式。这些内核机制 包括:l k m ,e l f 文件格式,中断处理和e x t 2 3 文件系统。 本文详细讨论了r o o t k i t s 所使用的各项技术的原理及实现细节。文中介绍了 最经典的l k m 劫持系统调用技术,分析其缺陷,并根据此缺陷提出了内核运行时 补丁方式。内核模块作为r o o t k i t s 的重要依赖,模块的隐藏非常重要,文中详细 分析了几种模块隐藏技术,并提出在2 6 版内核下的改进方法。物理感染是 r o o t k i t s 常用的方法,本文也详细分析了l i ( m 注射技术及其实现,以及在内核版 本变更为2 6 后的改进办法。在内核l k m 被禁止的情况下,r o o t k i t s 技术受到严 峻的挑战,因此本文讨论了禁用l k m 后的攻击技术,即对k m e m 虚拟文件的充分利 用。文中还分析了更为底层的i d t 劫持技术的特点和实现,以及当内核版本变为 2 6 后,中断指令改变的情况下,i d t 劫持技术的应变办法。为完善r o o t k i t s 的 隐蔽性,本文还分析了e x t 2 3 文件系统中文件的物理隐藏和实现。最后本文简略 讨论了针对文中的攻击方式的检测及防御办法。 关键词:l i n u x ,内核,r o o t l d t s ,隐藏,l k a m ,模块注射,劫持 a b s t r a c t a b s t r a c t w i t hd r a m a t i cd e v e l o p m e n to fi n t e m e ta n de m b e di n d u s t r y , s e c u r i t yo fl i n e xi s r e q u i r e dm o r ea n dm o r e k e r n e ls e c u r i t yo fl i n u xi sa l s om o r ei m p o r t a n t t h e r e f o r e , k e m e lm o d er o o t k i t si nl i a n xn e e dm o r ef o c u so fr e s e a r c h e r s ,f o rt h e i rs t r o n g e rd a m a g e , h i g h e ri n v i s i b i l i t y , a n dh a r d e rt e c h n o l o g yr e q u i r e m e n tt h a nu s e rm o d er o o t k i t s t h ed i s s e r t a t i o n sc o n t e n t st r yt op r o v i d eag e n e r a lo v e r v i e wo fr o o t k i t s ,i t sm a i n g o a l sa n de v o l u t i o n f o re a s i e ru n d e r s t a n dt or o o t k i t st e c h n i c a ld e t a i l s ,s o m el i n u x k e r n e lm e c h a n i c sa n di t sd a t as t r u c t u r e s ,d e s i g np r i n c i p l e sa n di m p l e m e n t sa r ed i s c u s s e d , w h i c hi n c l u d e :l k m ( l o a d a b l ek e r n e lm o d u l e ) ,e l f ( e x e c u t a b l ea n dl i n k a b l ef i l e ) f i l e f o r m a t ,i n t e r r u p ti m p l e m e n t sa n de x t 2 3f i l es y s t e m r o o t k i t s p r i n c i p l e s , t e c h n i c a l d e t a i l sa n di m p l e m e n t sa r ef o c u s e db yt h i s d i s s e r t a t i o n c l a s s i cm e a n w h i l es i m p l el k m 蛔c c t i o ni si n t r o d u c e di nt h i sd i s s e r t a t i o n ; t h i st e c h n o l o g y sd e f e c ti sd i s c u s s e d ,t o o f r o mt h a t ,p a c kt om o n i n gk e r n e lw a yi s i n t r o d u c e d ,a n a l y z e da n di m p l e m e n t e d h i g hr e l i a b i l i t y o nl k mm a k e sm o d u l e s i n v i s i b i l i t yt ok e m e lv e r yi m p o r t a n t s 0s e v e r a lw a y so fm o d u l eh i d ea r ed i s c u s s e d i m p r o v e m e n tw a yi nk e m e lv e r s i o n2 6i sp r o v i d e d m o d u l ei n j e c t i o ni sd i s u s e di n t h i sd i s s e r t a t i o n , w h i c hh a v es o m e t h i n gt od ow i t hm o d u l ed i s kf i l e t h a t so n eo fm o s t r o o t k i s t s p r o p e r t i e s o fc o l l r s e , a p p l i c a b l ew a yi nk e r n e lv e r s i o n2 6i sp r o v i d e d ,t o o o n eo fm o s te f f e c t i v ew a y so fd e f e n s er o o t k i t si sd i s a b l eu k mi nk e r n e lc o m p i l i n g p r o c e s s w a yo fd e a l i n gw i t hn o n e - l k mi sa n a l y z e ds p e c i a l l y ,f u l l yu t i l i t yo fv i r t u a l f i l ek m e m i d ti n j e c f i o na n di t se v o l u t i o ni nk e r n e lv e r s i o n2 6a r ep r o v i d e di nt h i s d i s s e r t a t i o na se n h a n c e m e n to fl k mi n j e c t i o ni nl a y e r f o rs a k eo fi n t e g r i t y ,w a y so f f i l eh i d i n ga n dr e c o v e r i n gi ne x t 2 3a r er e f e r r e d ,t o o b e s i d e s t h i sd i s s e r t a t i o nt r i e st op r o p o s es e v e r a ld e f e n s i v em e t h o d sa s s o c i a t e dw i t l i t h e s et h r e a t sa r ec o v e r e di nd e t a i l p r o v i d et h ei n f o r m a t i o nr e q u i r e dt od e t e c tt h e ma n d p r o t e c tt h el i n u xk e r n e l k e y w o r d s :l i n u x ,k e r n e l ,r o o t ,h i d e , 删,m o d u l ei n j e c t i o n ,i n j e c t i o n 独创性声明 本人声明所呈交的学位论文是本人在导师指导下进行的研究工 作及取得的研究成果。据我所知,除了文中特,l l l j n 以标注和致谢的地 方外,论文中不包含其他人已经发表或撰写过的研究成果,也不包含 为获得电子科技大学或其它教育机构的学位或证书而使用过的材料。 与我一同工作的同志对本研究所做的任何贡献均已在论文中作了明 确的说明并表示谢意。 繇当讳 日期:神年争月汹归 i 关于论文使用授权的说明 本学位论文作者完全了解电子科技大学有关保留、使用学位论文 的规定,有权保留并向国家有关部门或机构送交论文的复印件和磁 盘,允许论文被查阅和借阅。本人授权电子科技大学可以将学位论文 的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或 扫描等复制手段保存、汇编学位论文。 ( 保密的学位论文在解密后应遵守此规定) 签名:导师签名:墨拙! 日期:汐唧年砰月坤日 第一章绪论 1 1 r o o t k i t s 简介 第一章绪论 r o o t k i t s 是如今网络安全词汇中最让入迷惑的一个术语,虽然从名字上看, r o o t k i t s 好像是获取计算机系统管理员权限的一系列工具,但其实它的目的是帮 助已取得系统权限的入侵者保持r o o t 用户权限,保护胜利果实。 计算机安全研究组织s a n s 定义术语r o o t k i t 为: r o o t l o t :ac o l l e c t i o no ft o o l s ( p r o g r a m s ) t h a tah a c k e ru s e st om a s ki n t r u s i o na n d o b t a i na d m i n i s t r a t o r - l e v e la c c e s st oa c o m p u t e ro tc o m p u t e rn e t w o r k ” n s a 安全和入侵检测术语字典( n s ag l o s s a r yo ft e r m su s e di ns e c u d t ya n d i n t r u s i o nd e t e c t i o n ) 对r o o t k i t 的定义如下: ah a c k e rs e c u r i t yt o o l t h a tc a p t u r e sp a s s w o r d sa n dm e s s a g e 舰伍ct oa n df r o ma c o m p u t e r a c o l l e c t i o n o f t o o l s t h a ta l l o w sa h a c k e r t o p r o v i d e a b a c k d o o r i n t oas y s t e r n , c o l l e c ti n f o r m a t i o n0 1 1o t h e rs y s t e m s0 1 1t h en e t w o r k ,m a s kt h ef a c tt h a tt h es y s t e mi s c o m p r o m i s e d ,a n dm u c hm o r e r o o t l d ti sac l a s s i ce x a m p l eo ft r o j a nh o r s es o f t w a r e r o o t k i ti sa v a i l a b l ef o ra 、析d er a n g eo f o p e r a t i n gs y s t e m s ” 因此,我们可以将r o o t k i t 总结为一个或者多个工具的集合,用来使入侵者隐 藏自己已经成功入侵的事实,同时保持或者再次取得系统的管理员权限。通常, 攻击者通过远程攻击获得r o o t 访问权限,或者首先密码猜测或者密码强制破译的 方式获得系统的访问权限。进入系统后,如果他还没有获得r o o t 权限,再通过某 些安全漏洞获得系统的r o o t 权限。接着,攻击者会在侵入的主机中安装r o o t k i t s , 然后他将经常通过r o o t k i t s 的后门检查系统是否有其他的用户登录,如果只有自 己,攻击者就开始着手清理日志中的有关信息。通过r o o t k i t s 的嗅探器获得其它系 统的用户和密码之后,攻击者就会利用这些信息侵入其它的系统。一般r o o t k i t s 都会有一些常见的功能: 隐藏攻击者的恶意行为、文件、进程和网络连接( 特洛伊程序) 提供未授权的高级权限( 后门) 电子科技大学硕士学位论文 偷听工具( 网络嗅探器或者键盘记录器) 系统日志清除( 清除攻击日志和消灭证据) 攻击工具( 从被攻陷的机器通过隐蔽的通道跟其他系统通信或者发起攻 击) 系统检测欺骗( 仅内核模式,主要用来欺骗一些入侵检测工具) r o o t k i t 一般分两种,用户模式r o o t k i t 和内核模式r o o t k i t 。用户模式r o o t k i t 一般是一些特洛伊程序,预先打包在一些软件包中,可以很容易快速地安装,允 许用脚本来控制它们。但是,这种r o o t k i t 启动的任务容易被察觉也很容易出错。 内核模式r o o t k i t 更高级一点,也更有目标性,更容易安装,而且功能也要强 大的多,但是对内核版本的依赖性也很强。在这篇文章中,主要分析内核级 r o o t k i t 。r o o t k i t s 是如今系统安全最主要的挑战者,因为它们使用频繁,也经常 应用于高水平的入侵行为中。然而,对r o o t k i t s 所有相关方面的详细介绍的文档 资料还很缺乏,特别是针对内核级的r o o t k i t s ,当然除了那些操作说明。网上有 一些关于这方面( 内核r o o t k i t s ) 的资料: c c k e r n e lr o o t l d t s ,【s 1 “l m u x k e r n e l r o o t l d t s ”( r a i n e r w i c h m a n n 2 0 0 2 ) : h t t p :l a - s a m h n a d e l i b r a r y r o o t k i t s i n d e x h t m l r o o t l d t :a t t a c k e ru n d e r c o v e r t o o l s ”( s a l i m a nm a r t a p a l s o c o v e r s u s e r - m o d e r o o t k i t s ) :h t t p :w w w n i s e r o r g m y r e s o u r c e s r o o t k i t n f “a r e v i e w o f l k m s ( a n d r e w i l j o n e s l : h t t p :w w w g i a c o r g p r a c t i c a l g s e e a n d r e w _ j o n e s _ g s e c n c “s l e e p i n g w i t ht h e e n e m y t h ep h i l o s o p h yo ft h e r o o t k i t si no p e n s y s t e m s f a m f e r r e i r ad a f o n s e c a ) : h t t p :w w w o s s c c n e e d m i r r o r d w w w h o n e y p o t t o m b r f i l e s r o o t e n g p d f ( p o r t u g u e s e ) 1 1 l eh a c k e r s c h o i c e ( t h c ) ”: h t t p :w w w t h c o r g r o o t d o c s l o a d a b l e , k e r n e l _ m o d u l e s “b l a c k b o x ”:h t t p :e v a f i t v u t b r c z x h y s e k 0 2 2 第一章绪论 1 2r o o t k i t s 历史 第一个r o o t k i t 程序专注于隐藏攻击者的身份,出现于1 9 8 9 年,是最原始的 用户模式r o o t k i t ,那时候第一个日志编辑工具出现了【2 0 】。透过操纵系统日志 ( u t m p ,w t m p 和l a s t l o g ) 攻击者可以防止被一些象w h o ,w 或者l a s t 的命令识 别。这类工具在1 9 9 3 年的时候也特别流行【2 1 】。 还有一些资料【3 8 】认为r o o t k i t s 最先出现于1 9 9 4 年,开始是专注于u n i x 系统 特别是s u n o s4 x 系统,而其主要目的是入侵系统以嗅探系统的网络通信信息。 那时候还没有今天流行的s s h 协议,而且人们经常犯些低级错误,诸如使用相同 管理员密码访问多台由同一个管理员管理的机器。那个时代最常用的r o o t k i t 是 一个含有木马的l o g i n 程序作为后门盗取密码。需要特别指出的是,最老的l i n u x r o o t k i t 发现于1 9 9 4 年l o 月1 1 日 3 s 】,它只包含p s ,n e t s t a t 和l o g i n 命令。 随着时代的发展,r o o t k i t s 也逐渐提高,开始替换u n i x 系统的帮助管理员检 测嗅探器的一些组件,如p s ,i f c o n f i g 和n e t s t a t 。另外,它们还开始发展为隐 藏的特洛伊系统程序,通过设置为与源文件相同的时间,大小,校验和,访问权 限和拥有者来实现。 第一个致力于颠覆内核的r o o t k i t 出现于1 9 9 7 年,从那时起,最常使用的方 式就是靠基于l k m ( l o a d a b l ek e r n e lm o d u l e s :可动态装载模块) 的方式替换系统 调用【2 2 】【2 5 】,这两篇论文就是驱使l k m 技术迅速发展至今的源动力。 现在这些工具已经辐射到了各种不同的u n i x 系列系统上( l i n u x ,h p - u x ,b s d , s o l a r i s ,a i x ,i r i x ) 和w i n d o w s 。然后这类攻击的最主要的目标操作系统还 是l i n u x ,原因是l i n u x 的标准系统组件是开源的,这样使得用户模式的r o o t k i t s 开发起来也很便利,同样由于内核也是开源的,所以这也方便了内核r o o t k i t s 的 发展。近来内核r o o t k i t s 已受到了很多黑客团体的特别关注,变成了一个非常活 跃的研究领域,涌现出非常多的新技术,r o o t k i t s 发展也得到极大的提高。 1 3 国内外发展现状及研究意义 如今由于我国电子信息行业的迅速发展,嵌入式等领域对这些l i n u x 类的操作 系统内核研究也越来越多,但是安全性方面的研究还比较落后。虽然互联网行业 发展非常迅猛,但是网络安全隐患也无时不刻地提醒我们一定要深入内核,研究 电子科技大学硕士学位论文 系统的安全性。系统的安全性很多时候都依赖于内核的安全性,因此这方面的研 究又显得尤其重要。 国外在这方面已经走在前头,从国际顶尖黑客杂志p h r a c k l l 9 】上发表的关于这方 面的内容来看,没有一个是国内投稿的。在对内核的研究上,国内已经有很多从 事相关工作的人员,但是单纯从安全的角度来看,现在大部分的研究还停留在学 习阶段,大多数文章和应用都仅仅是对国外一些已经过时的技术进行学习和应用 而已。因此,紧迫的形势需要我们更多的安全研究人员投入到这个领域里来。从 最近一年来看,这方面的技术似乎出现了一定的停顿,没有多少新的技术或领域 出现。原因是多方面的,随着内核版本的变化,l i n u x 系统内核中做了很多针对 r o o t l d t s 技术的改动;但是仍然有很多可以探讨的地方,除此,还有很多企业还在 使用2 4 版的内核。因此,现在正是国内研究者迎头赶上的好时机。本文旨在为 l i n u x 内核r o o t l d t s 技术的研究做一个较为初步的介绍和在一些技术点上做一些改 进。 1 4 本论文所做的主要工作 本文从内核攻击与防御的两个角度分析了l i n u x 内核r o o t k i t s 中一些主流的 技术特点及其应用,为后来的研究者提供一个关于l i n u x 内核r o o t k i t s 技术粗略 的框架,方便其明确研究方向,找到感兴趣的分支,进行更深层次的研究。 本论文的主要工作为: 1 】介绍并分析经典的l k m 拦截系统调用技术,以及实现方法; 【2 】分析运行时补丁劫持系统调用技术及实现,提出针对它的检测办法和改进 ,办法; 3 】分析模块隐藏技术,并提出和实现在2 6 版内核下的改进办法,还实现了 隐藏模块检测技术; 4 】分析l k m 注射技术及其实现要点,并讨论和实现其在2 6 版内核下的变 通办法: 5 】:分析了在禁用l k m 后的系统调用劫持办法,讨论其实现要点,指出其防 御办法及存在的缺陷; 4 第一章绪论 6 】分析了i d t 劫持技术,讨论其实现要点,提出其在2 6 版内核上的变通方 式及验证该办法的可行性; 【7 】分析和实现了e x t 2 3 文件系统上文件的隐藏及恢复方法,并提出针对该隐 藏技术的检测方法。 1 5 本文结构介绍 首先是绪论,介绍本文要研究的内容的历史和现状以及本文所要做的工作:然 后第二章介绍与将要讨论的r o o t k i t s 相关的l i n u x 内核机制的原理和数据结构等基 础知识;第三章开始介绍r o o t k i t s 的各种技术及其实现,主要以该技术的提出、 该技术的实现原理、该技术存在的缺点与改进办法和在2 6 版内核下使该技术仍然 可行的办法为线索来行文;第四章介绍针对这些r o o t k i t s 所采用的技术能采取的 一些防御和检测办法;第五章是总结;最后是感谢致词。 电子科技大学硕士学位论文 2 1l k m 介绍 第二章基础知识 为了理解l k mr o o t k i t s ,了解这种技术有多强大,必须知道l i ( m 的一些特性 和编写基础,也需要了解内部实现的一些相关机制。有了它,系统管理员可以检 查r o o t k i t s 的源代码,从而了解它是如何影响系统行为的。 从安全的角度看,由于那些r o o t k i t s 的威胁正逐步提高的事实,清楚地理解 和手动测试系统是非常必要的,而不是闭着眼睛相信那些现成的自动检测工具。 关于l k m 编程详细细节的参考书是【3 6 1 ,这里只是粗略地介绍和讨论一下。关于l k m 更多的信息也可以参考【1 3 】【6 】。 动态可加载模块最有意思的特性莫过于它们使得微内核更富有弹性而不会损 害系统的性能。另外,它们减少了相关新项目的开发时间;每次引入一个新的改 变都可以立即测试而不需要重启系统。从内核2 4 版开始,模块也有了调试功能。 l i n u x 内核支持基于功能的不同的子系统类型【1 3 】,这些通常都是由模块实现 的,拥有进程管理,存储管理,设备管理,文件系统和网络通信等功能;甚至可 以实现新的可执行文件格式。一般说来,有三个不同的模块类型,字符,块和网 络。l k m 设备驱动可能是l i n u x 核心中最重要的一个部分了,因为它提供对系统硬 件功能的支持,没有它们,就不能叫功能健全的系统。驱动程序可以内嵌在单态 内核中,或者作为一个l k m 来实现。另外,l i n u x 模块中最复杂的部分就是实现特 殊的文件系统。 每个l 酬都是一个l i n u xe l f 目标文件,可以动态地链接进运行着的内核中。 这种目标文件不能被链接迸一个完全可执行文件中,因为它们必须具备一个特点, 那就是可重新加载。由于它们可以在任何时候被安装,而且系统内核和内存状态 是未知的,因此模块应该准备好安装在系统内存的任何地方( 详细的分析等到分 析i n s m o d 命令时进行 。分析模块的时候,必须考虑到它们就是内核的一部分, 因此它们和内核本身一样强大。 6 第二章基础知识 2 2 创建基本的l i n u x 模块 l i n u x 模块可以提供很多东西,比如函数,变量,头文件和宏,它们在内核模 块开发中可以用来访问一些需要的内核函数。这些东西也可以叫做符号。下面就 是一个简单的模块: # d e f m em o d u l e _ f f i n c l u d e h a ti n i tm o d u l e ( v o i d ) ( p r i n t k ( ” h ig c u xr e a d e r ! ! n ”) ; f e t l l l l lo ; ) v o i dc l e a n u p _ m o d u l e ( v o i d ) p r i n t l ( ( ” b y eg c u xr e a d e r ! ! ”) ; ) p r i n t k ( ) 函数是内核中对应于用户模式中c 语言库函数中的p r i n t f ( ) 的标准 输出函数。这个函数也是这个例子模块中使用到的唯一的内核符号。在通过i n s m o d 命令将模块载入内核后,这个函数就可以被访问。同样的道理,模块也可以使用 k m a l l o c ( ) 和k f r e e ( ) 访问和销毁内存,而不是用户模式的m a l l o c ( ) 和f r e e ( ) 函数。字符串“ ”表示消息的优先级,这里表示最高。 模块必须包含两个函数:模块开始函数,i n i t _ m o d u l e ( ) ,当模块被创建的时 候被调用,加载进入内存,注册进系统;模块结束函数,c l e a n u p _ m o d u l e ( ) ,当 模块从系统中移除,从内存中注销的时候调用。 一个内核模块不是一个可以独立执行的文件,而是需要在运行时刻连接入内核 的目标文件。所以,它们需要用一c 选项进行编译。而且,所有的内核模块都必须 包含特定的标志: _ _ k e p d 、j e i 这个标志告诉头文件此代码将在内核模块中运行,而不是 作为用户进程。 m o d u i 卜这个标志告诉头文件要给出适当的内核模块的定义。 l i n u ) 卜从技术上讲,这个标志不是必要的。但是,如果要写一个比较 正规的内核模块,在多个操作系统上编译,这个标志将会使之感到方便。 7 电子科技大学硕士学位论文 它可以允许在独立于操作系统的部分进行常规的编译。还有其它的一些可 被选择包含标志,取决于编译模块时的选项。如果不能明确内核怎样被编 译,可以在u s r i n c l u d e l i n u x c o n f i g h 中查到。 一s m p 对称多线程。在内核被编译成支持对称多线程( 尽管在一台 处理机上运行) 是必须定义。如果是这样,还需要做一些别的事情。 c o n f i g - m o d v e r s i o n s 如果c o n f i g _ _ m o d v e r s i o n s 被激活,需要在编译 时定义它并且包含文件u s r i n c l u d e l i n u x m o d v e r s i o n s h 。这可以由代 码自动完成。 同用户模式程序可以使用自己没有编写过但存在于函数库中的函数一样,模块 也可以使用内核的一些函数。要这样做,用户模式必须通过连接器“l d ”同函数 库链接,这样对外部函数或变量的引用才能被解析;同样,模块只有链接到内核, 它所调用的符号( 函数或变量等) 才能被解析( 内核模式可没有函数库) 。详细内 容请看1 3 9 1 。 2 2 1 模块加载 当i n s o m d 命令执行时,它将模块中所有的未解析的符号链接到运行中的内核 符号表,因此在模块镜像的内存中,所有的指针都被替换成绝对内存地址。i n s m o d 命令其实就相当于内核模式的l d 命令,不同的是,1 d 命令修改了磁盘上的程序拷 贝。模块模型依赖于内核版本,很多信息都可以从 “u s r s r c 1 i n u x k e r n e l m o d u l e c ”中得到。 首先,模块e l f 目标文件被定位( 默认的地方是“l i b m o d u l e s ”) 然后被装 载入用户内存。然后,系统调用s y s c r e a t e _ m o d u l e 为模块分配内存( 使用 v m a l l o c ) ;s y s _ q u e r y _ m o d u l e 返回内核符号表,以解析模块中未解析的引用,同 时s y s i n i tm o d u l e 将可装载目标代码( 模块代码) 载入内核空间,然后调用模 块初始化函数。 一旦模块被加载成功,系统就将模块的函数注册到内核中,因此其他组件可以 利用它们。模块一般会注册一个指针,这个指针指向一个定义了新功能和它们的 名字的数据结构,这个数据结构包含了指向模块的函数的指针,实现了的新功能 ( 后面介绍) 。 i n s m o d 命令默认情况下将所有非静态符号输出,除非模块中有特定指令表示 第二章基础知识 不这样做。当i n s m o d 函数执行的时候,它去特定目录“l i b m o d u l e s ”用名字查 找模块。当要加载的模块地址不是默认地址的时候,要使用绝对地址,如果在当 前目录下,就需要加相对地址“”。 自从内核版本2 3 1 3 开始,模块初始化和卸载函数可以有与以前不同的名字, 这种新办法的目的是为了调试方便。见下例: # d e f i n em o d u l e # i n c l u d e # q m c l u d e i n ti n i t i a l i z a t i o n _ f u n c t i o n ( v o i d ) ) v o i dr e m o v a l _ f u n c t i o n ( v o i d ) ) m o d u l ei n i t ( i n i t i a l i z a t i o n _ f u n c t i o n ) ; m o d u l e _ e x i t ( r e m o v a l _ f i m c t i o n ) ; 关于模块的更多的信息可以在它们被加载的时候得到,比如模块被重新加载的内 存布局和它的符号地址: 撑i n s m o do mt e s t :o s e c t i o n s : t h i s t e x t r o d a t 乱s t r l 1 k s t r t a b j ( s y m t a b a r c h d a t a k a l l s y m s d a t a b s s s y m b o l s : 0 0 0 0 0 0 0 0a d 0 8 饪0 0 0d d 0 8 f 0 0d d 0 8 f 内6 0t s i z e 0 0 0 0 0 0 6 0 o o o 0 0 0 2 9 0 0 0 0 0 0 2 d 0 0 0 0 0 0 5 0 0 0 0 0 0 0 1 0 o o o 0 0 0 0 0 0 0 0 0 0 1 a 8 0 0 0 0 0 0 0 0 o 0 0 0 0 0 0 0 a d d r e s s a l i g n d 0 8 册o o2 + 2 d 0 8 f m 6 02 + 2 d 0 8 f ! f 0 8 9 2 + 0 d 0 8 删b 62 + o d 0 8 f n 0 8 2 + 幸2 d 0 8 f f l 2 02 + 4 d 0 8 m 2 02 + 2 d 0 8 f 记c 82 + 2 d 0 8 f 1 2 c 82 + + 2 t e s t c t h i sm o d u l e i n s m o dt e s to r o o t f i k m ,i e s t om 4 0 8 e 6 a 1 5v 1 3 2 1 1 6 i n s m o dt e s ts t e x tl 4 1 9 电子科技大学硕士学位论文 d 0 8 f r 0 6 0tt e x t d 0 8 i f 0 6 0ti n i tm o d u l e d 0 8 f f 0 7 7t c l e a n u pm o d u l e d 0 8 f 内8 9rr o d a m s t r l 1 d 0 8 忽c 8db s s d 0 8 f t 2 e 8dd a t a m o d u l et e s tl o a d e d 诵mw a r n i n g s 2 2 2 模块列表 内核中所有运行的模块都放在一个m o d u l e 对象链表中,链表的头由内核变量 m o d u l e _ l i s t 指向( 见“u s r s r c 1 i n u x 一2 4 k e r n e l m o d u le c ”) 。每个模块都 由一个包含模块名字的唯一字符串代表,链表中第一个模块叫“k e r n e l _ m o d u l e ” 表示静态链接内核( 模块号为1 ) 。模块类型s t r u c tm o d u l e 定义在 “u s r s r c 1 i n u x 一2 4 i n c l u d e l i n u x m o d u l e h ”中,n e x t 域表示指向下一个模 块对象的指针,s i z e 域表示所有为该模块分配的内存,包括模块代码( 由 e xt a b l e s t a r t 和e x _ t a b l e _ e n d 引用) ,模块对象和字符串名字。 图2 - 1 模块链表示意图 l o 第二章基础知识 从用户空间看,这个链表位于“p r o c m o d u l e s ”中,用户空间程序l s m o d 可以提 供关于这些加载模块的相同内核信息,l s m o d 使用s y s _ q u e r y _ m o d u l e ( ) 函数和 系统调用q mn m d u l e s0 ( 见“u s r s r c l i n u x - 2 4 k e r n e l m o d u l e c ”) 2 2 3 模块移除 内核要负责追踪所有的模块,还有考虑它们之间的关系。要移除一个模块,这 个模块肯定不能在使用状态,内核为了管理模块的状态,用另一个叫使用计数的 域来表示模块正被多少个其他模块使用。内核会自动维护这个数,可以通过l s m o d 命令查看“u s e d ”栏来看这个数,这个信息在“p r o c m o d u l e s ”的第三个域中也 能得到。 图2 - 2 模块刁惹图 那些计数值为0 标示字符串为“u n u s e d ”的模块表示它们可以从系统资源中自由 地移除。当移除命令执行时,q u e r y _ m o d u l e 系统调用被调用,来确定所有的模块 关系和符号,然后s y s d e l e t e _ m o d u l e 系统调用被调用,执行一些需要的操作来 找到模块,修改其他模块对它的引用和本模块计数,然后释放模块内存( 使用v f r e e ( ) 函数) 。内核会将模块的输出函数从全局符号表中自动移除。一个关于模块移 除的高级功能自从2 4 版本的内核起开始使用,那就是c a nu n l o a d 模块函数,这 个函数可以指出目标模块是否可以卸载。 电子科技大学硕士学位论文 2 2 4 模块配置 模块在加载的时候( 从内核版本2 1 1 8 开始) 可以得到配置参数,在执行 i n s m o d 时用户可以设置参数,模块也可以自动检测到它们。这种方法允许s t r i n g 或i n t 类型的参数( 也包括数字型变量:字节,短整,长整) 。模块可以用“m o d u l e h ” 中定义宏m o d u l ep a r m 来输出期望的参数。 例如,攻击者可以设计他的模块根据用户的输入显示所有的有“r _ 叮” 权限而且属于“m i c k e y ”的e t c 文件,虽然输出参数对一个r o o t k i t s 来说不是 一个好的隐藏办法。下面是一个期望两个参数的模块的代码: 净p a r a m e t e r sd e f a u l tv a l u e s4 | i n tp e n n = 7 7 7 ; c h a r + u s v r ; * p a r a m e t e rd e f i n i t i o n , m o d u l e _ p a r m ( p e r m , i ”) ;严i n t + m o d u l ep a r m ( u s e r , ”s ”) ;严s t r i n g4 , 手动调用的时候要这样使用: 舟i n s m o de v i l m o dp e r m - - 4 4 0u s e r = m i c k e y 参数可以使用m o d u l e _ p a r m _ d e s c 宏来描述,还可以通过o b j d u m p 工具从模块e l f 目标文件中查看参数: m o d u l e _ p a r m _ d e s c ( p e r m 9 i f d i s p l a y e dp e r m i s s i o n sf o rf i l e si n e l c ”) ; m o d u l e _ p a r md e s c ( u s e r , ”d i s p l a y e do w n e rf o rf i l e si n e t c ”) ; 撑o b j d u m p st e s t 0m o t e t e s t o :f i l ef o r m a tc l f 3 2 q 3 8 6 c o n t e n t so f s e c f i o n t e x t : c o n t e n t so f s c c t i o n d a t a : c o n t e n t so f s e c t i o n m o d i n f o : 第二章基础知识 o o o o6 b 6 5 7 2 6 e6 5 6 e 5 t 7 66 5 7 2 7 3 6 96 f 6 e 3 d 3 2k e m dv e r s i o n = 2 0 0 1 02 e 3 4 2 e 3 23 0 2 d 3 8 0 07 0 6 1 7 2 6 d5 1 7 0 6 5 7 2 4 2 0 8 p a r m _ p e r 0 0 2 06 d 3 d 6 9 0 07 0 6 1 7 2 6 d5 1 7 5 7 3 6 57 2 3 d 7 3 0 0m - - i p a r r n 0 0 3 00 i 。o o o 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 4 07 0 6 1 7 2 6 d5 f 6 4 6 5 7 36 3 5 f 7 0 6 57 2 6 d 3 d 4 4p a r m _ d e s ep e r m = d 0 0 5 06 9 7 3 7 0 6 e6 1 7 9 6 5 6 42 0 7 0 6 5 7 26

温馨提示

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

评论

0/150

提交评论