




已阅读5页,还剩80页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
上海交通大学工学硕士学位论文Linux环境中基于Rootkit的网络攻防技术研究学 校:上海交通大学院 系:信息安全工程学院班 级:B0503691学 号:1050369012硕 士 生:史力力专 业:通信与信息系统导 师:薛 质 教授上海交通大学信息安全工程学院2008年1月IIA Dissertation Submitted to Shanghai Jiao Tong University for Master Degree of EngineeringRESEARCH ON THE TECHNIQUES OF NETWORK ATTACK AND DEFENSE BASED ON ROOTKIT IN LINUXAuthor:Shi,liliMajor: Communication and InformationAdvisor: Prof. Xue ZhiSchool of Information Security EngineeringShanghai Jiao Tong UniversityShanghai, P.R.ChinaJanuary, 2008上海交通大学学位论文原创性声明本人郑重声明:所呈交的学位论文,是本人在导师的指导下,独立进行研究工作所取得的成果。除文中已经注明引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写过的作品成果。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律结果由本人承担。 学位论文作者签名: 日期: 年 月 日上海交通大学学位论文版权使用授权书本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权上海交通大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。 保密,在 年解密后适用本授权书。本学位论文属于 不保密。(请在以上方框内打“”)学位论文作者签名: 指导教师签名: 日期: 年 月 日 日期: 年 月 日上海交通大学工程硕士学位论文 摘要Linux环境中基于Rootkit的网络攻防技术研究摘 要随着计算机网络的飞速发展,信息安全日益成为当今社会的重大问题之一。所谓道一尺,魔高一丈,攻与防永远是信息安全领域中恒久不变的主题。能够深入了解黑客如何展开攻击行动,对于更好地实施信息安全保障具有很好的借鉴意义。Rootkit作为黑客攻击Linux系统的强有力的工具,已经更加深入地侵入到PC之中,从操作系统内核一直到硬件,每一代Rootkit都深入到系统的更深一层,其流行速度和高级程度正在迅速增长。本文主要对其攻击和防御技术进行了详细的阐述和研究,并基于对Rootkit入侵信息的捕获和分析,实现了一个蜜网防御系统,提高了网络系统的防御性能。本文从Rootkit的起源、功能和危害说起,介绍了Linux系统中与Rootkit相关的一些基础知识、运行原理和数据结构等,包括:系统调用机制、可加载模块机制、内核目录以及EXT2/3文件系统。在对用户模式和内核模式Rootkit的实现原理分别说明后,主要就内核模式Rootkit的各种攻击技术进行了分析和讲解。首先介绍了最流行的恶意可加载内核模块(LKM)技术,详细阐述了对系统调用的攻击手段;又就LKM被禁止情况下的攻击手段/dev/kmem的修改进行了讨论;然后就解决系统重启的问题阐述了在硬盘上修改内核映象的办法,其中分别一一举例说明;由内核模块对Rootkit的重要性,分析了模块的隐藏,并提出了一些具体的方法;还探讨了对EXT2/3文件分别使用系统调用隐藏法和物理隐藏法的实现过程;接着提到了更深层次BIOS级别的Rootkit,讨论了其可能实现的一些方法。本文在分析了Rootkit的攻击手段后,提出了Rootkit的防御主要从预防、检测和采取措施三方面出发,比较详细地归纳了几种检测技术,分别在原有的基础上提出了一些改进。而为了更好地了解Rootkit的攻击手段,获得各种Rootkit的相关特征和数据信息,提出利用蜜网系统捕获和检测Rootkit的方法,对具体蜜网系统的构建和实现进行了讲解,并完成了对该蜜网系统所捕获的一种Rootkit的分析和定位。关键词:Linux,Rootkit,网络攻防,系统调用,LKM,蜜网 第 II 页上海交通大学工程硕士学位论文 ABSTRACTRESEARCH ON THE TECHNIQUES OF ROOTKIT ATTACK AND DEFENSE TO THE NETWORKS IN LINUXABSTRACTAlong with the rapid development of computer network, the information security day by day becomes one of societys major issues.A so-called the good is strong, but the evil is ten times stronger, attacks with defenses against forever is the permanent invariable subject in the information security domain.Can understand thoroughly how the hacker does launch the attack motion, regarding implements the information security safeguard to have the very good model significance well. As a powerful tool for attacking Linux, Rootkit has already invaded in PC thoroughly, from the operating system kernel to the hardware, each generation of Rootkit all penetrated continuously into system deeper, its popular speed and the high-level degree were growing rapidly. This article mainly has carried on the exhaustive analysis and the research to its attack and the defense technology, and based on to the Rootkit invasion information capture and the analysis, has realized a honeynet defense system, enhanced the network system defense performance.This article from the Rootkit origin, the function and the harm mentioned, introduced some elementary knowledge about the Linux system and the Rootkit, the principle and the framework of data and so on, including: The system call mechanics, loadable the module mechanics, the essence directory and EXT2/3 file system.In explains separately after the user mode and the kernel mode Rootkit realization principle, mainly has carried on the analysis and the explanation to each kind of attack technology based on the kernel mode Rootkit.First introduced the most popular may loadable kernel module (LKM) technology, elaborated in detail to the sys_call attack method; Also in the situation without LKM the dev/kmem revision has carried on the discussion; Then in the question which on the solution to restart system elaborated the means by revising the kernel reflection on the hard disk, in which explains with examples;Being the importance which kernel module to Rootkit, has analyzed the module hideaway, and proposed some methods; Also discussed the realization process to hide the EXT2/3 document both with the system call hideaway and the physical hideaway method; Then mentioned deeper BIOS-level Rootkit, discussed some methods which it possibly realizes.After has analyzed the Rootkit attack method, proposed the Rootkit defense mainly from the prevention, detect and measure three aspects, concluded and compared with several kind of detection technologies, proposed some improvements in the original foundation.But in order to understood well Rootkits attack method, obtains each kind of Rootkit the related characteristic and the data message, we proposed catches and detects Rootkit using the honeynet system the method, has carried on the explanation to the honeynet system construction and the realization, has completed the analysis and the localization to one kind of Rootkit which catched in this honeynet system.Finally is the full paper summary and the forecast.Keywords: Linux,Rootkit,Network Attack and Defense,System_call,LKM,Honeynet第 IV 页上海交通大学工程硕士学位论文 目录目 录摘 要IABSTRACTIII第一章 绪论21.1当前网络安全问题21.3 Rootkit31.4 Rootkit的组成及能力41.5 Rootkit与特洛伊木马的区别51.6 Rootkit给计算机带来的危害61.7 本文的组织结构7第二章 Rootkit相关基础知识92.1 Linux的系统调用机制92.1.1 Linux环境下的系统调用92.1.2 系统调用的作用92.1.3 与系统调用相关的代码、数据结构102.1.4 系统调用流程及举例实现122.2 可加载内核模块LKM机制152.2.1 内核的特征152.2.2 内核模块162.2.3 内核模块和应用程序的比较172.2.4 内核模块的加载182.2.5 加载内核模块时的版本检查192.3 Linux的内核目录192.3.1 /proc目录192.3.2 /dev/kmem目录202.4 Linux的EXT2/3文件系统202.4.1 ext2/3的体系结构212.4.2 ext2/3文件的创建与删除232.5 本章小结24第三章 Rootkit的各种攻击技术和实现253.1 Rootkit攻击原理253.2 用户模式Rootkit263.3 内核模式Rootkit263.3.1 恶意可加载内核模块(LKM)273.3.2 /dev/kmem的修改323.3.3 在硬盘上修改内核映象343.3.4 隐藏模块383.3.5 隐藏EXT2/3文件433.4 更深层次的Rootkit453.4.1 BIOS和Linux BIOS453.4.2 基于BIOS的Rootkit463.5 本章小结47第四章 当前Rootkit的防御484.1 Rootkit的预防484.1.1 第一道防线484.1.2 针对LKM的预防484.1.3 辅助性工具504.2 目前Rootkit的检测技术504.2.1基于病毒特征库检测技术514.2.2 完整性检测技术534.2.3 针对攻击系统调用的检测技术544.2.4 可执行路径分析(EPA)检测技术564.3 采取措施574.4 本章小结58第五章 构建蜜网系统防御Rootkit595.1蜜网系统的简介595.1.1 信息控制595.1.2 信息捕获605.1.3 蜜网系统的三重保护605.2 构建蜜网系统605.3 利用蜜网系统检测和分析Rootkit635.3.1 目标系统说明635.3.2 入侵方式635.3.3 过程分析645.3.4 特征总结675.4 本章小结68第六章 结论及未来展望696.1论文总结696.2前景展望70致 谢71参 考 文 献72攻读学位期间已发表或录用的学术论文75上海交通大学工程硕士学位论文 第一章第一章 绪论1.1 当前网络安全问题随着现代科学技术的迅猛发展和广泛应用,互联网快速发展,计算机及其通信网络已经成为当今社会不可缺少的基本组成部分。人们之间通过网络认识、进行文化交流和各种商务活动等等,使我们的生活越来越方便和快捷。网络技术和信息化应用范围还在不断扩大着,网络信息应用领域开始从传统的、小型业务系统逐渐向大型、关键业务系统扩展,如政府部门业务系统、金融业务系统、教育科研系统等等,对经济发展、国家安全、国民教育和现代管理都起着重要的作用。网络同时也使人类社会淡化了国家的限制。各国的政治、经济、文化、社会等各个方面都开始倚重于网络方便迅速的信息传递方式。可以说,人类社会正大踏步地向网络社会进发。网络安全问题是随着网络的发展而发展的,随着Internet的发展,计算机的互连、互通和互操作能力逐渐增强,安全问题也变得尤为突出。不管是DOS、Windows系列,还是Solaris、Unix系列等操作系统,每一类操作系统都存在一些自身漏洞和安全风险。当使用这些系统的计算机用户通过因特网互相连接上以后,在获得信息的方便与快捷的同时,也会遭到网络上各种各样恶意攻击。其中,病毒、蠕虫、后门、特洛伊木马、Rootkit技术等,是黑客们通常采用的网络攻击手段。为了应对信息安全这个大问题,我们正在进行大量相关的研究工作,但是要取得突破性进展,则还有相当长的路要走。本文主要就Linux环境下Rootkit的网络攻防技术进行了专门地分析和研究。1.2 特洛伊木马(Trojans)简述在介绍Rootkit之前,先简单了解特洛伊木马的基础知识4。现代的特洛伊木马是以欺骗手段,试图偷偷越过计算机安全防线,例如防火墙。特洛伊木马程序一般用于以下目的:1、欺骗用户或系统管理员安装特洛伊木马,这样特洛伊木马和毫无戒备的用户一起成为系统中恶意软件的进入媒介。2、在计算机上与正常的程序一起混合运行,特洛伊木马将自己伪装成该系统的一部分。那么用户和系统管理员就不会察觉到恶意软件的存在。3、特洛伊木马可以在用户全然不知的情况下,获得访问并控制其计算机系统权限,进而利用计算机做其他事情。特洛伊木马的攻击方法:特洛伊木马攻击者已经设计出无数的攻击方法,比如简单而高效的命名方法,这是最简单一级的特洛伊木马技术,攻击者只是修改系统中恶意代码的名字,这样它看起来如同是属于那台计算机一样。举例说,与系统中文件的扩展名放在一起,像.exe、.com、.bat、.scr、.pif、.vbs等,或是模仿其他的文件名等等,让用户一时无法分清谁是谁非。还有种攻击方法是使用可执行的包装工具,也即将恶意软件与正常的良性程序捆绑在一起,创建成一个看起来不错而且好用的软件包。用户和系统管理员很容易被这种混合后的产品欺骗,在运行软件包后,嵌在包中的恶意软件会首先运行,之后才是良性程序。但现在最有威胁的特洛伊木马技术却是越来越普及的特洛伊软件站点发行技术。每个下载并安装了这个工具的计算机都会受到特洛伊木马的攻击。当然,还有许多其他的特洛伊木马攻击方法,至于特洛伊木马程序则更是数不胜数了,这里就不再一一介绍了。考虑一下这些特洛伊木马技术,都依赖于在受害者的计算机里添加软件,以达到攻击的目的。Rootkit技术超越了这种对附加伪装程序的使用,攻击者不需要添加新的程序到受害者的计算机中,而是替换或修改计算机上已经存在的程序,特别是那些与操作系统相关的程序。1.3 Rootkit Rootkit是一种特殊类型的恶意软件,Rootkit的目的在于隐藏自己以及其他软件不被发现,让用户无法检测到Rootkit,也几乎不可能删除它们,更不知道它们在做什么事情。虽然相关的检测工具在不断增多,但Rootkit软件的开发者也在不断寻找新的途径来掩盖它们的踪迹。简单地说,Rootkit是安装到电脑上的一组程序,用于以管理员(即“根账户”)身份访问该系统。如果对根账户拥有访问权,攻击者就可以完全控制这台电脑,随时添加或者更改删除、监控进程、收发网络流量以及进入后门。从技术上讲,Rootkit是一种奇特的程序,它具有隐身功能:无论静止时(作为文件存在),还是活动时(作为进程存在),都不会被察觉。换句话说,这种程序可能一直存在于我们的计算机中,但我们却浑然不知,这一功能正是许多人梦寐以求的不论是计算机黑客,还是计算机取证人员。黑客可以在入侵后置入Rootkit,秘密地窥探敏感信息,或等待时机,伺机而动;取证人员也可以利用Rootkit实时监控嫌疑人员的不法行为,它不仅能搜集证据,还有利于及时采取行动。Rootkit出现于二十世纪90年代初,在1994年2月的一篇安全咨询报告(CERT-CC的CA-1994-01)中首先使用了Rootkit这个名词,题目是“Ongoing Network Monitoring Attacks”,最新的修订时间是1997年9月19日。从出现至今,Rootkit的技术发展非常迅速,应用越来越广泛,检测难度也越来越大。其中针对SunOS和Linux两种操作系统的Rootkit最多。1.4 Rootkit的组成及能力计算机安全研究中心SANS1定义术语Rootkit为:Rootkit:A collection of tools (prorgams) that a hacker uses to mask intrusion and obtain administrator-level access to a computer or computer network.NSA安全和入侵检测术语字典(NSA Glossary of Terms Used in Security and Intrusion Detection)对Rootkit的定义如下:A hacker security tool that captures passwords and message traffic to and from a computer. A collection of tools that allows a hacker to provide a backdoor into a system, collect information on other systems on the network ,mask the fact that the system is compromised , and much more. Rootkit is a classic example of Trojan Horse software. Rootkit is available for a wide range of operating systems.所有的Rootkit都是由许多程序组成的,其中包含各种辅助工具。一个典型Rootkit包括以下几种基本程序和工具:A、以太网嗅探器程程序,用于获得网络上传输的用户名和密码等信息。 B、特洛伊木马程序,例如:inetd或者login,为攻击者提供后门。 C、隐藏攻击者的目录和进程的程序,例如:ps、netstat、rshd和ls等。 D、可能还包括一些日志清理工具,例如:zap、zap2或者z2,攻击者使用这些清理工具删除wtmp、utmp和lastlog等日志文件中有关自己行踪的条目。 E、一些复杂的Rootkit还可以向攻击者提供telnet、shell和finger等服务。 F、还包括一些用来清理/var/log和/var/adm目录中其它文件的一些脚本。 因此,可以将Rootkit总结为一个或者多个工具的集合,用来使入侵者隐藏自己已经成功入侵的事实,同时保持或者再次取得系统的管理员权限。需要注意的是,Rootkit不会让攻击者一开始就获得目标系统的根或管理员权限。通常,攻击者必须以其他某种方式获得超级用户权限,例如通过远程攻击、密码猜测、缓冲区溢出攻击、或者密码强制破译的方式获得系统的超级用户权限。在获得root超级权限后,攻击者会在侵入的主机中将Rootkit安装配置好, 然后离开这个系统,以后随时都可以回来。Rootkit能为攻击者提供各种强有力的手段5。比如说,攻击者可以经常通过Rootkit的后门检查系统是否有其他的用户登录,并着手清理日志中的有关信息。攻击者也可以通过Rootkit的嗅探器获得其它系统的用户和密码,之后便利用这些信息侵入其它的系统。攻击者还经常使用Rootkit中的相关程序替代系统原来的ls、ps、netstat和df等程序,使系统管理员无法通过这些工具发现自己的踪迹。而且攻击者也会经常通过安装的后门进入系统查看嗅探器的日志,以发起其它的攻击。如果攻击者能够正确地安装Rootkit并合理地清理了日志文件,系统管理员就会很难察觉系统已经被侵入。但是,大多数攻击者在清理系统日志时不是非常小心或者干脆把系统日志全部删除了事,警觉的系统管理员可以根据这些异常情况判断出系统被侵入。不过,在系统恢复和清理过程中,大多数常用的命令例如ps、df和ls已经不可信了。例如,许多Rootkit中有一个叫做FIX的程序,在安装Rootkit之前,攻击者可以首先使用这个程序做一个系统二进制代码的快照,然后再安装替代程序。FIX能够根据原来的程序伪造替代程序的三个时间戳(atime、ctime、mtime)、date、permission、所属用户和所属用户组。如果攻击者能够准确地使用这些优秀的应用程序,并且在安装Rootkit时行为谨慎,就会让系统管理员很难发现。1.5 Rootkit与特洛伊木马的区别一般来说,Rootkit可以运行在两个不同的的层次上,这取决于它替换或者修改了目标系统中的哪种程序。一种是“用户模式Rootkit”,因为Rootkit可以修改系统中现有的二进制可执行程序或者库文件,也就是说它可以修改用户和管理员运行的程序,控制了操作系统的用户级工具组件。另一种叫“内核模式Rootkit”,Rootkit直接进攻系统最深处,操作系统的内核本身。这两个层次上的Rootkit有着明显不同的特征,在后面会分别讨论。先来看用户模式Rootkit与特洛伊木马的区别,因为特洛伊木马是应用程序级软件,所以只需与用户模式Rootkit进行比较。如图11所示。 应用程序级特洛伊木马 用户模式Rootkit恶意应用程序内 核特洛伊ps程序特洛伊ls程序特洛伊木马库善意的函数库善意的函数库善意的程 序善意的程 序内 核 善意的程 序图 11 应用程序级特洛伊木马和用户模式RootkitFig. 1-1 Application level Trojans and user mode Rootkit前面所讨论的特洛伊木马工具都是在系统中加入了有害的应用程序,因为是应用程序级的恶意软件。使用这样的工具,有害的应用程序允许攻击者访问,但目标计算机底层的操作系统包括各种各样的程序、库,以及内核都完好无损。现在,有了用户模式Rootkit,攻击者可以深入系统,替换目标系统的可执行程序(例如前面所谈的ls和ps程序)和各种共享代码库。这些替换程序看上去完好无损,但这正好掩饰了系统中攻击者的存在。1.6 Rootkit给计算机带来的危害现在,用户模式Rootkit对于多种操作系统都是可用的。术语Rootkit源自Unix超级用户账号root,而且最初就是为了攻击Unix系统而开发的。如今,开发人员不仅开发了用于Unix操作系统的Rootkit,还开发了应用于Windows的Rootkit。但大多数人对Rootkit危害性的认识还是不够,从图12的调查数据中我们可以看出,人们对Rootkit的大概看法2。图 12 Rootkit威胁的调查数据Fig 1-2 Research Data of Rootkit Threat这组调查数据说明Rootkit还不是人们在网络安全中关注的首要问题。一个重要原因就是,还没有出现恶意Rootkit大规模感染的现象,虽然关于Rootkit有许多报道,不过被感染的机器所占比率还比较小。影响比较大的事件是2005年10月份,一位独立研究人员披露在索尼-BMG CD上存在Rootkit工具。另一个原因就是,蠕虫和病毒的发作会对网络可用性会带来极为明显的影响,所以避免网络停用成了IT管理人员关注的首要问题。相比之下,偷偷实施的入侵不大被人注意,因为后果不会立即显现出来。另外从绝对数量方面来看,普通的恶意软件,如蠕虫和木马软件,在数量上超过Rootkit。恶意软件传播者也还没有把Rootkit作为其工具包中的一个标准组件。据防间谍软件厂商Aluria Software的威胁研究主管Hiep Dang声称,现有的间谍软件程序大约只有5%把Rootkit安置到被感染的电脑上。不过尽管如今渗透到电脑的Rootkit数量还不多,但安全专家们估计,Rootkit问题会急剧恶化。ysinternals公司的Mark Russinovich说:“这个危险绝对是越来越严重。”也正是他揭发了索尼公司的Rootkit。更多的特洛伊木马把Rootkit安置在PC上,并通过这些恶意软件来隐藏自己。把这项功能添加到其他恶意软件里面已变得越来越容易。恶意软件编写者没必要精通复杂深奥的操作系统内核。他们只要把这些公之于众的Rootkit加入到自己的工具包里面,或者改动代码就可以满足自己的需要。安全厂商McAfee也指出,越来越多的商业软件利用Rootkit技术隐藏代码。已知利用Rootkit技术的包括索尼-BMG唱片公司、赛门铁克。这是会有更多的人使用Rootkit的一个重要原因。使用间谍软件、广告软件和木马的不法分子把Rootkit作为工具箱当中的一个标准工具有其经济上的动力。恶意软件在一台机器上驻留时间越长,窃取信息、发布广告、控制大量电脑用于敲诈勒索及发送垃圾邮件的可能性也就越大。据McAfee发表的报告称,尽管Rootkit在1986年就开始出现了,但它的数量和复杂性在最近3年才有了大幅度增加。McAfee旗下Avert 实验室监察到,2006年第一季度,与05年同期相比,Rootkit数量增长了700%。仅在06年第一季度,McAfee就发现了827个Rootkit。2005 年第一季度和全年的这一数字分别是约70和769。被黑客用来隐藏恶意软件的Rootkit的数量正在增长,而且也在日益复杂。而另一个会有更多的人使用Rootkit的重要原因,在于黑客中Rootkit开发的“开放源代码环境”6,这种氛围正在推动Rootkit的快速增长。它指出,协作性的网站和博客中包含有大量Rootkit代码供重新编译和增强这种技术,以及可执行的二进制Rootkit代码。黑客能够更轻松地拥有隐藏他们的恶意文件、进程、注册码的方法,而且不需要对所针对的操作系统有过多的了解。更为严重的是,协作不仅仅传播Rootkit技术,它还培育新的和更复杂的Rootkit技术的开发。我们知道,衡量Rootkit复杂性的一个标准是软件包中组件文件的数量。2006年第一季度提交给Avert实验室的Rootkit组件数量是612个,2005年同期的这一数字是60个。06年第一季度的数字与05年全年的数字基本相当。我们能够预测的是,在未来2-3 年里,Rootkit急速发展的这一趋势正在制造越来越多,越来越顽固和有害的恶意代码“菌株”,将继续威胁着我们的计算机和网络安全。1.7 本文的组织结构第一章是绪论,对当前网络安全问题做了说明,简要介绍了木马,Rootkit,还有他们之间的区别,并叙述了关于Rootkit检测研究的相关背景及它给计算机所带来的危害。第二章介绍了Rootkit相关基础知识。对Rootkit所涉及到的Linux内核机制的相关原理知识进行了简单的介绍,包括Linux系统的调用机制、可加载内核模块LKM机制、Linux的内核目录和文件系统。第三章阐述了Rootkit攻击技术及其实现。讲述了Rootkit的攻击原理,分别对用户态Rootkit和内核态Rootkit进行介绍,重点分析和研究了结合Linux系统本身特性的一些内核模式Rootkit攻击技术,就其存在的缺陷和不足进行了说明,并提出了一些改进。最后对基于BIOS的Rootkit攻击技术进行了讨论。 第四章从当前Rootkit的防御机制角度进行了研究,主要从预防、检测、采取措施三个方面提出如何针对Rootkit进行防御。重点讨论了Rootkit的各种检测技术。第五章提出使用蜜网系统收集并检测Rootkit的方法,在构建了一个蜜网系统后进而完成了该方法的实现和验证。第六章是总结与展望,对全篇论文进行了总结,并作出了以后进一步研究工作的展望。75上海交通大学工程硕士学位论文 第二章第二章 Rootkit相关基础知识要了解Linux系统下的Rootkit,特别是内核级Rootkit技术,首先需要知道Linux内核中跟Rootkit相关的一些基础知识,主要包括Linux的系统调用机制,可加载内核模块LKM机制以及Linux的一些内核目录和EXT2/3文件系统。2.1 Linux的系统调用机制2.1.1 Linux环境下的系统调用 系统调用是内核提供的、功能十分强大的一系列函数。它们在内核中实现,然后通过一定的方式(库、陷入等)呈现给用户,是用户与内核交互的一个接口。可以这么说,没有了系统调用,我们就不可能编写出十分强大的用户程序,因为你失去了内核的支持。由此可见,系统调用在Linux系统中的重要性10。内核的主体可以归纳为:(1)系统调用的集合;(2)实现系统调用的算法。2.1.2 系统调用的作用在Unix界,IEEE有一个关于操作系统的标准POSIX(Portable Operating System Interface),其中有一节POSIX.1专门规定了系统调用的接口标准。这里所说的操作系统指的是内核部分(kernel),这也是传统意义上的操作系统(区别于微软所提的操作系统概念,在微软看来,图形界面、IE浏览器都算是操作系统的一部分)。只要操作系统的实现遵循POSIX标准,那么程序在这些操作系统之间的移植就变得非常容易,有些甚至根本不用改动。Linux是遵循POSIX标准的操作,因此很多Unix程序可以轻易地移植到Linux的世界中来。Linux运行在两个模式(mode)下:用户模式(user mode)和内核模式(kernel mode)。在内核模式中可以运行一些特权指令,然后按照内核的特权方式进行内存的读写检查(根据代码段寄存器cs和数据段寄存器ds),当然还有堆栈也切换到内核堆栈(堆栈寄存器ss变为内核堆栈)。区分用户模式与内核模式的主要目的是出于安全考虑,使得用户模式运行的程序不能自主地访问某些敏感的内核变量,内核函数。用户态的程序只有通过门(gate)陷入(trap)到系统内核中去,才能执行一些具有特权的内核函数。系统调用是用户程序与内核的接口,通过系统调用进程可由用户模式转入内核模式,执行相应的系统调用代码,在内核模式下完成相应的服务之后再返回到用户模式。这种实现方式的过程可如图22所示。Sys_foo模式切换用户空间内核空间图 21 模式切换Fig 2-1 mode switch2.1.3 与系统调用相关的代码、数据结构Linux下跟系统调用相关的内核代码文件主要有: arch/i386/kernel/entry.S arch/i386/kernel/traps.c include/linux/unistd.h还有一些代码零散地分布在内核代码目录下的其他文件中。跟系统调用相关的数据结构主要包括系统调用响应函数、系统调用表和系统调用号3。(1)每一个系统调用对应有一个系统调用的响应函数。响应函数名以“sys_”开头,后跟该函数调用的名字,由此构成221个形似“sys_name()”的函数名。例如,系统调用fork()的响应函数是sys_fork(),exit()的响应函数是sys_exit()。(2)在arch/i386/kernel/entry.S文件中有一个很重要的地方,它是维护整个系统调用的一张表系统调用表(sys_call_table)。系统调用表是一个实现真正系统调用内核各部分的指针集合,依次保存着所有系统调用的函数指针,以方便总的系统调用处理程序(system_call)进行索引调用。换句话说,系统调用表是保存在内核存储器中的实际的数据结构,将各种系统调用描绘成内核代码。其函数指针的具体格式如下:arch/i386/kernel/entry.SENTRY(sys_call_table).long SYMBOL_NAME(sys_ni_syscall).long SYMBOL_NAME(sys_exit).long SYMBOL_NAME(sys_fork).long SYMBOL_NAME(sys_read).long SYMBOL_NAME(sys_write).long SYMBOL_NAME(sys_open) /* 5 */.long SYMBOL_NAME(sys_ni_syscall) /*reserved for lremovexattr*/.long SYMBOL_NAME(sys_ni_syscall) /*reserved for lremovexattr*/.rept NR_syscalls-(.-sys_call_table)/4.long SYMBOL_NAME(sys_ni_syscall).endrsys_call_table代表数组首地址,所以倒数第三行中两个变量相减,得到差值表示这个系统调用表的大小(两个地址之间相差的byte数),除以4,得到现在的系统调用个数。用NR_syscalls减去系统调用个数,得到的是没有定义的系统调用。然后用.rept .long SYMBOL_NAME(sys_ni_syscall).endr往数组剩余空间里填充sys_ni_syscall。(3)include/asm_i386/unistd.h这个头文件定义了所有的系统调用号,还定义了几个与调用相关的关键的宏。include/asm_i386/unistd.h #define _NR_exit1 #define _NR_fork2 #define _NR_read3 #define _NR_write4 #define _NR_open5 #define _NR_close6 #define _NR_llistxattr233 #define _NR_flistxattr234 #define _NR_removexattr235 #define _NR_lremovexattr236 #define _NR_fremovexattr237很清楚,文件一开始就定义了所有的系统调用号,在2.4.18版的内核中,总共有237个系统调用,它们整齐地按线性排列。每一个系统调用号都以“_NR_”开头,每一个系统调用号都唯一地对应一个系统调用,在系统调用表syscall_table中找到对应的表项内容,就是该系统调用号对应的系统调用函数sys_name的地址。接下来,在unistd.h文件中定义了7个宏,分别是:_syscall0(type,name)_syscall1(type,name,type1,arg1)_syscall2(type,name,type1,arg1,type2,arg2)_syscall3(type,name,type1,arg1,type2,arg2,type3,arg3)_syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4)_syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5)_syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5,type6,arg6)很多系统调用都是通过这些宏,进行展开,形成定义,这样用户程序才能进行系统调用。内核也才能知道用户具体的系统调用,然后进行具体的处理。_syscall后面跟的数字指明了展开后形成函数的参数的个数,type表示参数的类型,name表示参数的名字。2.1.4 系统调用流程及举例实现系统调用的一般流程:系统调用的初始化:在traps.c中,系统在初始化程序trap_init()中,通过调用set_system_gate(0x80,&system_call)函数,在中断描述符表(idt)里面填入系统调用的处理函数system_call,这就保证每次用户执行指令int 0x80的时候,系统能把控制
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人力资源管理师专项培训与职业资格认证协议
- 软件开发企业员工入职软件知识产权保护劳动合同
- 跨国汽车维修企业场地租赁及市场拓展合同
- 离婚诉状模板定制与婚姻家庭法律援助合同
- 老字号酒庄酿酒大师傅技艺传承聘用合同
- 研发中心建设资金借款合同范本
- 非全日制定向兼职人员招聘协议
- 高端人才薪酬保密及保密协议
- 文化创意商业街商铺租赁与知识产权保护合同
- 股东企业战略发展规划协议书
- 2025至2030中国牙科手机消耗行业项目调研及市场前景预测评估报告
- NBT 11551-2024 煤矿巷道TBM法施工及验收标准
- 口腔瓷贴面诊疗沟通指南
- 山东安全管理人员大考试题库
- 2025-2030冲牙器行业市场深度调研及发展趋势与投资前景预测研究报告
- 70华诞主题班会课件
- 建筑抗震设计规程(下)DB62T3055-2020
- 商品赠品协议书范本
- 工伤事故赔偿协议书范本
- 2025-2030中国稀土催化材料行业市场发展现状及发展趋势与投资前景研究报告
- 运费补充合同协议
评论
0/150
提交评论