




已阅读5页,还剩66页未读, 继续免费阅读
(信息与通信工程专业论文)linux下内核级rootkit检测防护机制的研究.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要 摘要 随着计算机技术的发展,计算机在越来越多的领域得到了应用。由于l i n u x 系统的开源性,使其深受广大用户的喜爱,那么l i n u x 系统的安全也比以往任何时 候都显得重要。随着l i n u x 下r o o t l d t 技术的不断深入以及其破坏越来越大,增加 l i n u x 系统的安全迫在眉睫。 论文首先介绍了r o o t k i t 的基本知识,l i n u x 系统下内核级r o o t l d t 术在国内外 的发展现状。由于r o o t l d t 的发展很快,而且破坏性很大,所以我们有必要要对系 统的安全作进一步的研究。接着介绍了l i n u x 系统的一些基础理论知识,如中断异 常,系统调用,可加载模块等,为下的内容打下基础 论文随后研究了内核级r o o t l d t 使用的各种主要技术,并在对其原理进行分析 的基础上,给出该方法的具体实现。主要技术包括中断劫持,分析中断劫持的可 行性,中断劫持的步骤和的实现;系统调用劫持,在分析可行性基础上给出导出 系统调用表和不导出系统调用表两种情况下系统调用劫持的实现方法;函数体劫 持,在分析可行性基础上给出函数劫持的具体实现;利用l k m 注入技术实现模块 隐藏和后门等技术。 本文最后重点研究了内核级r o o t l d t 的检测防护机制,内核级的r o o t l d t 要想 得到运行的机会,有两种方法一种方法就是修改函数指针,使它指向r o o t l d t 中的 函数;另一种方法就是修改函数体,把函数的开始几个字节改成跳转指令,本文 在分析基础上给出了内核级r o o t l d t 的检测方案,该方案不仅检查内核空间的函数 指针,还检查内核空间的函数体,因为内核空间的函数很多如果都要对它们进行 检查的话很耗时间,会严重影响系统的性能,所有本文采取了一种折中的办法, 与现有检测方法相比本文还分析该方案的优缺点。本文最后还研究了内核级 r o o t k i t 的防护机制,主要包括两个部分:一部分是对内核重要数据结构的保护, 另一部分是对内核函数的保护。 关键词:l i n u x ,内核,r o o t l d t ,检测,防护 a b s t r a c t c o m p u t e r i sw i d e l yu s e di nm o r ea n dm o r df i e l d sw i t ht h ed e v e l o p m e n to f c o m p u t e rt e c h n o l o g y l i n u xi sp e o p l e sf a v o r i t es y s t e mb e c a u s eo fi t so p e l ls o u r c e s ot h e s e c u r i t yo fl i n u xs y s t e mi sm o r ei m p o r t a n tt h a ne v e rb e f o r e i n c r e a s i n gt h es e e u t i t yo f t h es y s t e mi se x t r e m e l yu r g e n t 勰t h er a p i dd e v e l o p m e n ta n d h u g ed e s t r u c t i o no fr o o t l d t t e c h n o l o g y t h i sa r t i c l ef i r s ti n t r o d u c e st h eb a s i cc o n c e p t i o no fr o o t l d ta n dt h ep r e s e n t s i t u a t i o n i ti sn e c e s s a r yf o ri l l st or e s e a r c ht h es e c u r i t yo f t h el i n u xs y s t e mb e c a u s eo f t h ed e v e l o p m e n ta n dd e s t r u c t i o no f r o o t i d tt e c h n o l o g y t h e ni ti n t r o d u c e st h eb a s i c t h e o r yo f l i n u x , f o re x a m p l es y s t e mc a l l ,l k ma n ds oo n _ b yr e s e a r c h , w ei n t r o d u c ek i n d so f t h et e c h n o l o g y sd e t a i l s ,a n dw ea l s oa n a l y z e t h e i rp r i n c i p a l sa n di m p l e m e n t t h ew o r ki n c l u d e sf o u rp a r t s :1 ) i n t e r r u p ti n j e c t i o n , p r a c t i c a b l e ,s t e p st oi n j e c ta n dt h er e a l i z a t i o n ;2 ) h o wt h es y s t e me a ui n j e c t e d t h i sp a r t w i l lg i v eo u tt h em e t h o d s0 1 1t h ec o n d i t i o nw h e t h e r e x p o r tt h es y s t e mc a l lt a b l e ;3 ) f i m e t i o ni n j e c t i o n ,p r o v i d i n gt h ed e t a i l so ft h er e a l i z a t i o nb a s e d0 1 1a n a l y s i s ;4 ) t h e h i d i n gm e c h a n i s mo f m o d u l ea n db a c kd o o rt e c h n o l o g yt h r o u g hl k m e s p e c i a l l yw e r e s e a r c ht h ek e r n e lr o o t l d tc h e c k i n ga n d p r o t e c t i o nm e c h a n i s m t h e r ef i l et w om e t h o d st oh i l lr o o t l d t o n ei sm o d i f y i n gt h ep o i n t e rt om a k ei tp o i n tt 0 r o o t k i tf u n c t i o n s ,a n da n o t h e ri sm o d i f y i n gf u n c t i o n st om a k et h ef i r s ts o m eb y t e sb e j u m p i n gc o m m a n d w eg i v eo u tac h e c k i n gm e c h a n i s mb a s eo na n a l y s e s i tc h e c k sb o t h t h ek e r n e lf u n c t i o np o i n t e ra n dt h ef u n c t i o n s a sc h e c k i n gt o om a n yk e r n e lf u n c t i o n s w i l lw a s t et i m ea n da f f e c tp e r f o r m a n c e , w er e a c hc o m p a n i e sa tl a s t b yc o m p a r i n g 、i t l l t h ee x i s t e dm e t h o d s ;w ea l s og i v eo u tt h ea d v a n t a g e i nt h ee n d ,w er e s e a r c ht h er o o t k i t p r o t e c t i o nm e c h a n i s m ,a n di ti n c l u d e st w op a r t s o n ei sp r o t e c t i n gt h ei m p o r t a n tk e r n e l d a t as t r u c t u r ea n da n o t h e ri st h ep r o t e c t i o nf o rk e m df u n c t i o n s k e y w o r d s :l i n u x ,k e r n e l ,r o o t l d t , d e t e c t i o n ,p r o t e c t i o n i i 独创性声明 本人声明所呈交的学位论文是本人在导师指导下进行的研究工作 及取得的研究成果。据我所知,除了文中特别加以标注和致谢的地方 外,论文中不包含其他人已经发表或撰写过的研究成果,也不包含为 获得电子科技大学或其它教育机构的学位或证书而使用过的材料与 我一同工作的同志对本研究所做的任何贡献均已在论文中作了明确的 说明并表示谢意。 签名:蔓一日期:山7 年石月今日 关于论文使用授权的说明 本学位论文作者完全了解电子科技大学有关保留、使用学位论文 的规定,有权保留并向国家有关部门或机构送交论文的复印件和磁盘, 允许论文被查阅和借阅。本人授权电子科技大学可以将学位论文的全 部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描 等复制手段保存、汇编学位论文。 ( 保密的学位论文在解密后应遵守此规定) 签名:二裘l导师签名:茎:旦竺兰: 日期吵年莎月居e l 第一章绪论 1 1 引言 第一章绪论 r o o t l d t 这个术语已经存在很多年了。它是由有用的小型程序组成的工具包, 使得攻击者能够保持访问计算机上具有最高权限的用户 r o o t 。换句话说,r o o t l d t 是能够持久或可靠地、无法检测地存在于计算机上的一组程序和代码 2 1 。r o o t l d t 的关键是“无法检测”。r o o t l d t 所采用的大部分技术和技巧都用于在计算机上隐藏 代码和数据。例如,r o o t l d t 通过修改重要的文件或截获函数以达到隐藏自己的目 的。r o o t l c i t 还有个主要的特性就是留有后门,以方便后面的对它进行连续不断的 远程访问或窃听。如果r o o t l c i t 把所有的这些特性都集合在一起的话,那它对系统 的安全将构成严重的威胁。 l i n u x 下的r o o t i d t 分为两大类【3 】:应用层级r o o t k i t 和内核级别r o o t l d t 。 1 应用级r o o t l d t 应用层r o o t l d t 的破坏性要比内核级r o o t l d t 要小的多,因为每个进程都有独 立的进程空间,一般情况下,不会影响到其它的进程。但是应用层的r o o t l d t 也我 我们平时用的最多的。它实现起来相对要比较容易一点。它一般通过修改系统文 件或截获用户空间的函数来达到攻击或隐藏的目的。因为这些特点,它往往也很 容易被发现。 2 内核级r o o t l d t 内核级的r o o t l d t 是比用户层r o o t l d t 功能更强大的一种技术。从它的名字上 就可以看出它是运行在系统内核空间,运行于内核态。也正是因为这,让它拥有 了至高无上的权利。它可以任意的访问用户空间的数据和函数,也可以访问内核 空间的数据和函数,还可以执行特权级指令,如直接对硬件进行操作。如果一个 内核级的r o o t l d t 被运行以来,理论上讲它可以做任何它想做的事情。这系统就会 完全被它所控制,所以说它的破坏性要比用户级的r o o t l d t 大的多。 内核级的r o o t l d t 还有一个主要的特点就是它很难被发现。它悄悄的运行在系 统中,而让用户或管理员一点都不知道。现在很多l i n u x 系统都提供了动态可加载 模块的功能,通过它方法加载到系统中的代码都是运行在内核态的,所以要想当 小心。内核级r o o t l d t 一般有以下的行为特征: 】 电子科技大学硕士学位论文 ( 1 ) 隐藏。攻击者为了不被发现,常常会修改一些系统文件或者是修改内核 中一些关键函数或函数指针。 ( 2 ) 提升权限。为了让自己拥有更多更高的权利,r o o t k i t 一般都要进行权限 的提升。 ( 3 ) 对目标机器进行攻击。如果r o o t k i t 在某台机器上运行什么事都不做, 那它也就失去了存在的意义。r o o t l d t 一般都会对目标机有损坏,如窃取机密等。 ( 4 ) 留后门。为了能随时跟远方用户进行交互或接受指令,r o o t k i t 一般会在 目标机上开有后门。 1 2 国内外发展现状及研究意义 随着信息技术的发展,安全越来越受到人们的关注,由于l i n u x 系统开源性, 使其深受广大用户的喜爱,那么l i n u x 系统的安全也比以往任何时候都显得重要。 随着l i n u x 下r o o t k i t 技术的不断深入和广泛,增加l i n u x 的安全迫在眉睫。 在l i n u x 刚出现的时候,人人都认为它的设计很出色,具有很强的病毒防御能 力【4 】,所以人们相信l i n u x 系统不会感染病毒,针对l i n u x 系统的病毒也不会出现。 但是最终l i n u x 系统还是没有逃过这一节。1 9 9 6 年秋,针对l i n u x 系统的第一个 病毒s t a o g 出现了,它是有澳大利亚一个叫v l a d 的组织用汇编语言编写的,它 的目标就是感染系统里的二进制文件,并通过多种方式想得到r o o t 权限。当然, 改病毒对系统并没有任何的损坏,编写改病毒完全是为了验证l i n u x 也有被感染的 可能性。 2 0 0 1 年,针对l i n u x 系统的另一个病毒也出现了,它的名字叫r a n l e l l 。该病 毒不需要人的干预可以自动传播,虽然它对计算机的破坏性并不大,但是它会进 行端口扫描,会消耗大量的网络带宽,会严重影响系统的性能。因为不同的系统 有不同的安全漏洞,r a m e n 就是利用这些漏洞进行网络传播的。 2 0 0 4 年,在英国的一家安全公司。该公司对那年的一月份发生的攻击事件进 行统计,结果发现发现约有1 3 6 5 4 次的攻击是针对l i n u x 服务器的【5 1 ,约占整个数 量的8 0 ,而对w i n d o w s 服务器攻击大约只有2 0 0 5 次。另据伦敦安全分析及咨询 机构m i 2 9 公司的一份调查结果显示,从2 0 0 3 年1 1 月到2 0 0 4 年1 0 月份,该地区 总共发生了2 4 万次黑客攻击事件。这些攻击事件既有黑客远程手动攻击,也有通 过病毒、蠕虫或其他恶意程序发动的攻击。分析结果显示,大部分都是针对l i n u x 系统的,约占总数的6 5 ,而只有2 5 是针对w i n d o w s 系统的。 2 第一章绪论 在2 0 0 5 年,专业反病毒研究中心监测发现【6 】,r o o t l d t 技术开始广泛的被病毒 所使用。越来越多的用户开始被r o o t k i t 类病毒说困扰,纷纷发来求助信或电话。 目前大部分的病毒都采用了r o o t l d t 技术。 2 0 0 6 年,与2 0 0 5 年相比,r o o t l d t 工具数量比前一年有了前所未有的增长, 使用频率基本上以往的6 倍左右。r o o t k i t 已经成为众多恶意软件的藏身工具,在 其掩护下恶意软件可轻易逃脱反病毒及反问谍软件的监控。m c a f e e 公司表示,在 2 0 0 8 年,r o o t l d t 技术的发展更为迅速,对系统的安全构成了很大的威胁。 目前对l i n u x 威胁最大的就是r o o t k i t ,由前一节我们可以知道,r o o t k i t 这几 年发展的特别迅速,用户级的r o o t l d t 对系统的影响相对还比较小,因为每个进程 都有自己的独立空间,一般不会影响到其它进程。但是内核级的r o o t l d t 却不同, 因为它是运行内核态,拥有至高无上的权利,一旦在机器上运行,后果将不堪设 想,而且很难被用户或管理员发现。本文旨在对现有l i n u x 内核r o o t l d t 技术进行 研究并给出相应的检测防御策略。 1 3 论文所做的主要工作 本文首先对l i n u x 系统运行机制进行剖析,因为它是第三章和第四章的基础, 第三章和第四章是文章的重点,其主要工作有: ( 1 ) 研究了中断劫持技术的基本原理,在分析了可行性的基础上给出函数劫 持的具体实现方法; ( 2 ) 研究了系统调用劫持机制,在分析了可行性的基础上,给出了导出系统 调用表和不导出系统调用表两种的实现方法; ( 3 ) 研究了系统函数体劫持技术,研究分析了其可行性,并给出了具体的实 现; ( 4 ) 通过l k m 注入技术实现模块隐藏和后门的技术研究; ( 5 ) 在研究分析了r o o t l d t 以上技术的基础上,本文重点研究了内核级r o o t k i t 的检测防护机制,针对现有的r o o t k i t 技术提出自己内核级r o o t k i t 的检测方法, 与现有检测方法相比还分析了该方法的优缺点,还还提出自己的防御机制,最后 还给出相应的实验结果。 3 电子科技大学硕士学位论文 1 4 论文结构介绍 第一章是绪论,介绍r o o t k i t 的历史和现状以及本文所要做的工作;然后第二 章对l i n u x 内核进行分析,主要研究该系统的基本原理、运行机制和系统中用的主 要数据结构等知识;第三章主要研究了内核级r o o t k i t 攻击的基本技术,在研究的 基础上,给出了每种方法的具体实现方法;第四章在第三章的基础上重点研究了 内核级r o o t k i t 的检测防护机制,针对内核级r o o t k i t 的行为特征提出自己的检测 方案,并在此基础上提出自己的系统保护机制;第五章是总结;最后是感谢致词。 4 第二章r o o t l d t 相关原理分析 第二章r o o t k i t 相关原理分析 本章我们主要介绍l i n u x 操作系统的相关知识,分为硬件基础、l i n u x 操作系 统内核代码分析和l i n u x 下的可加载模块机制。在内核代码分析中,我们详细讨论 了内存访问、中断异常、系统调用和l k m 等机制。这些基础知识是论文第三章和 第四章的基础,只有只有知道系统的工作机制,才能更好的理解r o o t k i t 的攻击和 防御技术。 2 1 系统的硬件基础 我们使用的电脑大部分使用的是i n t e l 开发的x 8 6 系列c p u 体系结构,缩写i 3 8 6 有时用来指8 0 3 8 6 连同后来的i n t e lc p u ,i n t e lc p u 现在占有很大的市场,x 8 6c p u 也是l i n u x 最初编写的目标平台。 x 8 6c p u 硬件体系结构是操作系统实现的基础【l 刀,体系结构图如图2 1 所示。 在保护模式开始引进段选择子的说法,选择子是一个2 字节的数据结构,前 1 3 位代表索引,后三位有特殊的用途,其中第3 位表示该索引是对于哪个表而言 的,可能是全局描述符表( g d t ) ,也可能是局部描述符表( l d t ) 。最低2 位 代表请求特权级( r p l ) 。系统内的g d t 和l d t 只有一个,分别用寄存器g d t r 和l d t r 指向它们在内存中的位置。在8 0 x 8 6 系列的系统中还有另外一个重要的 表,就是中断描述符表( d t ) ,该表由中断门,陷阱门和任务门等组成,为系统 响应外部中断或异常提供了基础。i d t 表只有2 5 6 个表项,每个表项占有8 个字节, 所以i d t 表只占有2 k 内存空间。 该体系结构提供了多种运行模式,如实模式和保护模式。刚启动时,系统处 于实模式,初始化完成后系统转入保护模式执行。在实模式下,直接把发到地址 线上进行物理内存的访问,而在保护模式下,地址变换要复杂的多,首先把逻辑 地址转化成线性地址,再把线性地址转换成物理地址。 5 电子科技大学硕士学位论文 图2 1 系统硬件体系结构 当系统运行了保护模式时,硬件提供了特权级检查机制。对于数据段,要求 c p l = d p l :如果是通过门描述符实现的转移,则要求 c p l ,门的d p l 并且c p l 目标段的d p l 。 2 2l i n u x 内核分析 l i n u x 内核自发布之日起就一直在不段的更新,内核代码的数量也在急剧的增 加,由最初的几千行发展到现在的几千万行。虽然l i n u x 内核在不断的变化,但其 实现的基本原理却没有变。本章就对其中与r o o t l d t 相关的重要基础知识进行描述。 只有充分了解它们,我们才能更好的理解r o o t l d t 的攻击技术以及相应的检测防御 机制。 2 2 1 内存访问机制 当系统正常启动以后,系统运行在保护模式。在实模式下存储器管理机制用 的是分段式【l 引。在保护保护模式下,存储器管理机制主要有段式和段页式。在现 有系统中用的最多的是段页式。在实模式下,地址是一维的;在保护模式中虚拟 地址是二维的。二维地址的含义就是需要两个参数才能最终确定最后的地址。所 以,虚拟地址由两部分组成它们在实模式下和保护模式也是不一样的。在实模式 下,一部分分是段基地址另一部分是段的限长;在保护模式下,一部分是段选择 符另一部分是段内偏移量,表面上看它们没有太大的区别,但是保护模式下的限 长要比实模式的长的多。 一般说来,计算机可以寻址的空间是由地址线的位数决定的。但是这个可以 寻址的空间按范围也是理论上的,也就是理论寻址的最大范围。该地址我们就称 之为线性地址。当系统中可寻址的存储空间往往要小于这个值。处理器把发到地 址线上进行物理内存读取的地址称为物理地址。显然它们都是一维的,但是线性 地址一般不等于物理地址。线性地址可以从0 开始然后依次增加到最大值,而物 理地址可以占用任意的连续空间。 虽然这些地址从形式上看它们有很大的差异,但是处理它们的功能部件的工 作原理却是相似的。处理它们的功能部件分页部件和分段部件,它们主要的区别 就是页的大小是固定的,而段的大小是不固定的。将线性地址的位数分成几个部 分,我们可以依次标识为页内索引、页表索引等。不论是分页还是分段都是基址 ( 段基址或页基址) + 偏移量的形式。 7 电子科技大学硕士学位论文 在段页式系统中,地址的映射过程是:先将虚拟地址映射成线性地址,再把 线性地址映射成物理地址。具体过程是,处理器先把虚拟地址送到分段部件,得 到线性地址后,再把线性地址送到分页部件。它们的映射过程通过目录、页表以 及偏移量三级结构最终实现对物理内存的存取。 x 8 6 系列c p u 可以支持多个特权级o 3 ,数字越大级别越低,0 代表最高特权 级,3 带表最低特权级。l i n u x 系统只用了两个特权级0 和3 ,l i n u x 内核运行在0 级,用户程序运行3 级,用户程序是无法访问内核空间的数据,但系统内核既可 以访问系统的内核空间也可以访问用户空间的数据。 2 2 2 中断和异常处理机制 引入中断和异常处理机制是为了让正在执行任务的c p u 能够快速的响应一些 突发事件,从而能够让系统变得更加的灵活和高效。 2 2 2 1 中断和异常 中断( i n t e r r u p t ) 和异常( e x c e p t i o n ) 是指系统、处理器或当前执行程序( 或 任务) 的某处出现一个事件,该事件需要处理器进行处理【l l 】。通常,这种事件会 导致执行控制被强迫从当前运行程序转移到被称为中断处理程序( i n t e r r u p t h a n d l e r ) 或异常处理程序( e x c e p t i o nh a n d l e r ) 的特殊软件函数或任务中。处理器 响应中断或异常所采取的行动被称为中断或异常服务( 处理) 。 通常,中断是为了响应外部的突发事件,它可能发生在任意时刻,系统通过 硬件来处理外部的突发事件,例如网络中断服务,硬盘中断等。我们也可以通过 指令的方式产生软中断,如i n tn 指令。 异常发生在指令的执行过程中,c p u 在执行一条指令的过程中,如果发现任 何错误如缺页,访问越界等,都会引发异常。 8 0 x 8 6 处理器可以在无系统或用户的干预下,自动地进行中断和异常处理。当 处理器检测到中断或异常时,它会把当时正在运行的程序挂起,通过中断描述符 表转到相应的中断或异常处理程序。当中断或异常处理结束时,处理器就会恢复 刚被中断的程序,并让它继续执行。被中断的程序并不会因为执行过程中产生的 中断而影响执行的连贯性。除非是产生了非常严重的不可恢复的异常或错误。 8 第二章r o o t k i t 相关原理分析 2 2 2 2 中断向量 为了能处理每个中断或异常,需要给处理器能够处理的中断或异常赋予一个 标识,称为向量( v e c t o r ) 。当产生中断或异常时处理器把该向量作为索引号,来 查找中断描述符表i d t ( i n t e r r u p td e s c r i p t o rt a b l e ) ,最终确定处理该异常或中断 的处理程序入口点位置。 系统允许有2 5 6 个中断向量,范围是0 - - 一2 5 5 。其中0 - 3 1 由硬件保留,用于 处理c u p 定义的异常和中断,到目前为止还没有全部用完,剩下的向量号留着以 后再用。3 2 - 2 5 5 的向量号留给系统使用,系统可以根据自己的需要使用,如网络 中断和硬盘中断等,使得这些外部设备可以通过中断的方式与操作系统取得联系。 2 :2 2 3 中断描述符表 中断描述符表( i d t ) 用来将每个中断和异常跟它们各自的处理程序对应起来, 与全局描述符表类似的是中断描述符表也是由八个字节长的数组组成。当与它不 同的是中断描述符表的第一项也包含了描述符。 对中断描述符表的存放位置没有严格的要求,理论上可以存放在任何地方。 因为有一个寄存器i d t r 指向该表,不论该表在什么地方,c p u 都能通过i d t r 寄 存器来定位其位置。这个寄存器是个4 8 位的寄存器,用3 2 位表示中断描述符表 的基址用1 6 位来表示该表的限长。如图2 2 所示。 i d t r 寄存罂 图2 - 2 中断描述符表和寄存器i d t r 9 n + 8 2 4 1 6 8 o 电子科技大学硕士学位论文 我们可以通过s i d t 和l i d t 来获得或修改i d t r 寄存器的内容。s i d t 不是特 权级指令,在用户态和内核态都可以使用,通过该指令我们可以得到中断描述符 表的基址和限长,从而可以达到对其修改的目的,在实现部分我们也正是通过该 指令来获得中断描述符的地址的。l i d t 指令可以用来重新加载i d t r 寄存器的内 容,但是它是特权级指令,该指令只有在内核态下,即c p 瑚时才可以使用。 2 2 2 4 中断和异常处理过程 当发生一个中断或异常时,处理器以该中断或异常的向量作索引查找i d t 表, 并由该表中对应的表项来确定中断或异常的处理程序。异常或中断处理过程如图 2 3 所示。门中的段选择符指明处理程序所在的段,它有可能在g d t 中也有可能 在l d t 中。门描述符中的偏移字段指明处理程序相对于段开始地址的偏移量。 中断描述符表i d t f 中断向量 选择符j 属性l 偏移值 段描 述符 代码段 异常或中 断处理过 程 段限 长 图2 3 异常或中断处理过程 当响应中断或异常时,处理器会做一些相关处理,具体过程如下: ( 1 ) 如果要发生特权级的改变,如从3 级转到0 级,那么首先要进行堆栈的 切换。处理的过程是:处理器从当前任务的t s s 段得到更高特权级堆栈的段选择 符和栈指针。然后把原堆栈的栈选择符和栈指针压到新的栈中。如果没有发生特 权级的改变,直接进行第二步。 ( 2 ) 接着处理器会把e f l a g s 寄存器压栈,c s 和e i p 寄存器压栈。随后进 行第三步。 1 0 第二章r o o t l d t 相关原理分析 ( 3 ) 如果是异常会产生相应的错误号,那么也要把该错误号压栈。 为了从中断或异常返回到被中断的程序,中断异常处理程序需使用i r e t 指令 完成中断异常返回。i r e t 指令不仅会弹出堆栈中的e i p 寄存器和c s 段寄存器, 而且还会弹出e f l a g s 寄存器。如果发生了堆栈切换,在执行i r e t 指令时,还 会切换到原来的堆栈中去。 2 2 3 系统调用 每个系统为了方便用户的使用都会向用户提供一些接口,有了这些接口用户 就可以通过调用这些接口来与系统内核进行交互,这些接口如创建文件、打开文 件和关闭文件等。如果没有这些接口,用户必须要知道硬件知道,文件的组织结 构等,给用户的编程带来很大的难度,而且使系统也变得很不稳定。 从大的方向上来分,系统调用可以分为文件管理,外设管理,进程管理和内 存管理等,表面上看,系统调用与普通的函数调用并没有什么大的区别,它们的 主要区别是系统调用处于系统的内核空间,由系统提供,它的访问受到严格的保 护。用户空间的程序是不能随便访问内核空间的程序或数据的,要想访问它们, 唯一的方式就是通过系统调用。 2 2 3 1 系统调用的基本原理 在l i n u x 系统中,系统调用是通过软中断的方式进入系统内核的。通过该方式 可以让程序完成从用户态到内核态的切换。也就是说,执行该指令可以自动地将 程序的特权级由3 级变为0 级,然后再转到相应的中断处理程序去执行。l i n u x 系 统用来实现系统调用的软中断指令是i n t0 x 8 0 ,执行该指令可以产生向量号为1 2 8 的软中断,并将控制权转移给内核。为了方便用户的操作,在标准c 语言库中为 每一系统调用提供了一段短的子程序,完成机器代码的编程工作。 为了方便用户的使用,l i n u x 系统提供了一组预处理宏指令。这些宏指令带有 一定数量的参数。通过扩展该宏指令就可以得到调用系统调用的函数。这些宏指 令的格式如下: _ s y s c a l l n ( 参数) 该格式中的n 表示所需要参数的数目,而参数可以是一组参数,这些参数使 这些宏指令能适用于多种不同的情况。增加了它的灵活性。但是对参数有一个限 制就是参数占用的空间大小不能超过4 个字节。因为系统调用时这些参数都是放 电子科技大学硕士学位论文 在寄存器中,通过寄存器的方式传给内核的。同时对参数的数目也有一些限制, 就是参数的个数不能超过5 个。 2 2 3 2 添加系统调用的方法 在l i n u x 中添加新的系统调用,应该遵循一下几个步骤: ( 1 ) 编写系统函数 首先要做的就是编写系统函数,即你想在内核实现的功能,假设新增加的系 统调用为i n tm y _ s y s t e m c a l l ( i n tv a l u e ) ,在u s r s r e l i n u x k e r n e l s y s c 文件中添加源代 码,如下所示: a s m l i n k a g eh a tm y _ s y s t o m c a l l ( i n tv a l u e ) r o t u mv a l u e ; ) 作为例子,我编写的函数功能很简单就是返回一个整型的数据。 ( 2 ) 连接新的系统调用 编写好了系统函数后,下一步就是要把该函数容入到内核中去,即让其余的 模块知道它的存在。为此我们需要修改两个文件。 第一个要修改的文件是:u s r s r c l i n u x i n e l u d e a s m - i 3 8 6 u n i s t d h 。该文件包含 了所有系统调用函数列表,并给每个系统函数分配互不相同的号码一般是一次增 加的。格式如下: # d e f i n e n r n a l l l x 】【x 其中,n a m e 是指系统函数名,而x x x 就是分配给该系统函数的号码。我们把 我们写的函数名添加到文件的最后一行,给它分配的调用号是现在已用的调用号 的最大值加1 。 第二个要修改的文件是:u s r s r c l i n u x a r c h i 3 8 6 k e r n e l e n t r y s 该文件中有类似 如下的清单: 1 0 n gs y m b o l _ n a m e o 该部分是对系统调用表进行初始化模块。该数组中包含了系统调用的每个函 数的指针,我们把我们编写的函数指针放在该表的最后,添加如下一行代码: 1 0 n gs y m b o l _ n a m e ( m y _ s y s t e m e a u ) ( 3 ) 重新建的l i n u x 内核 1 2 第二章r o o t k i t 相关原理分析 为了让我们编写的函数能够使用,我们必须重新编译内核。编译完成后,会 生成一个安装的内核映象文件。 ( 4 ) 用新的内核启动系统 用刚生成的内核映象文件启动重新启动系统,为此,我们需要修改e t e l i l o c o r d 文件,编辑该文件,添加新的引导内核: i m a g e = b o o t b z l m a g e - n e w l a b d = l i n u x - n e w r o o t = d e v h d b l r e a d - o n l y 为了使用新的l i l o c o n f 配置文件,我们还要执行下面的命令: 样c p u s r s r e l i n u x a r c h i 3 8 6 b o o t z i m a g e b o o t b z i m a g e - n e w 其次配置l i l o : 撑i s b i n h l o 现在,当重新启动系统时,现在的系统就已经包含了我们编写的系统函数, 我们在用户程序中就可以使用它来了。 ( 5 ) 使用新的系统调用 完成了前面的几步,我们就可以调用s y s t e m e a l l 函数了,为实验目的,我编写 了一个简单的函数调用模块g o n g y o u c o | 鼻g o n g y o u c | _ s y s c a l l1 ( h a t , s y s t e m e a l l ,i n t , n u m b e r ) m a i a o p r i n t f 【”dk n , s y s t e m c a l l ( 2 0 ) ) ; ) 编译该程序,就可以看到执行的结果2 0 。 2 2 4l i n u x 内核符号表 当程序运行于核心态时,它不仅可以访问用户空间的代码和数据,而且可以 访问系统内核空间的代码和数据。如果要想访问系统内核里的代码和数据,就要 知道其在内核中的位置,即它们在内核中的地址。 1 3 电子科技大学硕士学位论文 l i n u x 系统提供了内核符号表,它是内核代码的一部分引用【1 9 1 。其中的内核代 码包括系统内核程序以及加载到系统空间的驱动程序,引用包括对函数的引用和 对变量的引用等。如内核调试时最经常用到p r i n t k 打印输出函数。通常内核符号表 是其它可以运行在内核态程序可以调用的接口。你可以调用它导出的函数或数据, 也可以通过e x p o r ts y m b o l 向内核符号表输出自己模块中的引用,以方便别 人对你的调用,最典型的应用如驱动程序的开发。 s y s t 锄m a p 是一个特定内核的内核符号表,符号表是内核中几乎所有函数或 变量符号连同它们地址的列表。它里面的内容只能被系统空间程序访问,而内核 符号可以根据需要自行导出。当我们每次重新编译内核的时候,编译器都会生成 一个新的s y s t e m m a p ,我们要用新生成的文件来替换原有的文件,以保证内核程 序能够正确的运行。 下一节我们将要介绍的可加载模块,因为它是被加载到系统的内核空间,所 以它拥有内核空间程序享有的一切特权,它可以对系统空间的函数和变量进行访 问,为了能正确的对其进行访问,我们需要内核符号表。当我们加载模块时,i n s m o d 才能进行重定向并把之加载到内核。 2 2 5 内核函数的特征 所谓的内核函数顾名思义就是运行在内核态下的函数,它拥有很高的特权级, 理论上它可以做任何它想做的事如执行特权级指令和访问内核重要的数据结构 等。它与运行在用户态下的普通程序是有很大的差别的,它给我们内核编程提供 了很多方便和更高的特权同时它对我们的编程能力也提出了很高的要求。 内核函数运行在内核态,与运行在用户态的普通程序不同,内核态的函数不 能调用c 函数库,当然其它函数库也不能调用【2 0 1 。原因是多方面,最主要的原因 是考虑到速度和占用空间大小问题。因为如果要把一个c 函数库全部加载到内核, 内核空间会造成很大的内核空间浪费,而且效率很低。内核栈的空间虽然不同的 体系结构有所不同,但都很小,一般是4 k b 或是8 k b ,所以在内核函数中调用的 函数不能太深,也不能定义太多的大的数据结构。 在内核态下的函数不能出现访问内存的错误,用户态的如果出现非法访问内 存的话,处理器会捕获到这个错误,并且内核会对该错误进行处理,而内核函数 如果也出现这种情况的话,那后果就很难预料了。 1 4 第二章r o o t l d t 相关原理分析 内核空间的各种资源都是共享的,一不小心就很容易产生死锁。l i n u x 系统是 多任务系统,必须要有严格的同步机制以保证各任务对资源的合理的使用。具体 有以下几个原因: ( 1 ) l i n u x 系统是多任务的抢占系统,任务切换的时间我们是不确定的,调度程 序可以根据需要随时进行任务的调度。 ( 2 ) l i n u x 系统支持多处理器。在多处理机上运行的程序可能会在同一时间访问 同一个资源,所以我们要有同步机制以保证它们的互斥访问。 ( 3 ) 中断可能随时到达。中断是发生在正在运行进程的上下文中,如果保护 不当的话,也会造成中断处理程序和原有进程访问同一个资源。 ( 4 ) l i n u x 系统内核是可以抢占的。处理器可以从一个任务随时被切换到另 一个任务,即使该任务正处于系统的内核态。所以就会造成处于内核态的两个任 务同时访问同一个资源。 现在用来解决竞争的办法主要有自旋锁和信号量所以我们编写内核函数时一 定要非常的谨慎和小心。 2 3l i n u x 操作系统的可加载内核机制 l i n u x 内核一旦编译以后,如果要想再向其添加内容的话如增加系统调用,以 前是要编写函数后要重新编译内核,很浪费时间。l i n u x 系统是单内核系统,它把 它所提供的大部分功能都包含在内核中, 同,微内核只把最基本的功能放入内核, 并都运行在核心态。它与微内核有所不 而其它功能如文件系统、驱动等放在了 内核之外,即它们是运行在用户态,因此l i n u x 给我们的印象好像是一个静态的系 统。但事实并非如此。 l i n u x 系统从1 2 版本开始,开始支持可加载的内核模块【2 6 l k m ( 1 0 a d a b l e k e r n e lm o d u l e ) ,它为系统提供了动态的可扩展性。这些模块是一些函数代码的集 合,它们可以被操作系统动态的加载到内核,也可以被动态的从内核中卸载。加 载和卸载这些模块不需要重新编译内核,也不需要重新启动系统,扩展系统的功 能。比如驱动程序,我们可以动态的向内核加载驱动程序,从而可以让系统可以 动态地响应外部新的硬件。如果没有这个机制,我们把函数写到内核代码中去, 然后重新编译内核,在重新启动系统,调试起来很麻烦。 1 5 电子科技大学硕士学位论文 2 3 1l k m 模块的框架 一个l k m 模块至少要包含两个函数,一个函数是初始化函数,还有一个函数 是结束函数,有点类似于w i n d o w s 系统的d l l 机制。当系统加载该模块时,初始 化函数i n i tm o d u l e 0 就被运行,当模块从内核中被卸载时,结束函数 c l e a n u p 就会被执行以便进行一些时候处理工作。从 开始,初始m o d u l e o l i n u x2 6 化函数和结束函数可以起任意的名字,只要通过宏m o d u l em o d u l ee x i t o 声明一下就可以了。例如: s t a t i ci n t j n i tm yi n i t _ f u n c t i o n ( v o i d ) s t a t i cv o i d e x i tm y _ e x i t _ f u n c t i o n ( v o i d ) ( ) m o d u l o _ i n i t ( m y _ i n i t f u n c t i o n ) ; m o d u l e _ e x i t ( m y _ e x i tf u n c t i o n ) ; 声明为s t a t i c 的目的是使该函数不输出,对外不可见。 2 3 2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版企业资产剥离与转让专项合同
- 2025短视频平台内容审核与安全防护服务合同
- 2025年度汽车举升机保养与维护方案定制合同
- 2025版户外拓展训练与团建活动综合服务合同
- 2025成都工商局外商投资企业股权转让与税收筹划合同
- 2025年度起重机操作员培训合同
- 2025地毯品牌跨界合作研发生产合同
- 2025版农产品直供基地采购合同
- 2025年度医院食堂承包运营管理与服务合同
- 7不甘屈辱奋勇抗争(教学设计)-部编版道德与法治五年级下册
- 医院重症护理技能竞赛理论考试(CRRT)试题及答案
- 2025年新乡事业单位招聘考试笔试试卷(附答案)
- 厦门闽南话趣味教学课件
- 2025秋人教版八年级上册历史全册重点知识点早背晚默
- 2025年标准货物出口合同范本(中英文版)
- 2025年新钢铁安全员考试题库及答案
- 人教版四年级上册数学各单元教材分析(1-4单元)
- 2025版电子购销合同模板
- 护理中医小讲课课件
- 学校均衡编班管理办法
- 2025年内蒙古自治区中考英语试卷真题 (含答案详解)
评论
0/150
提交评论