RootKit攻防和检测技术

来源 :电脑知识与技术·学术交流 | 被引量 : 0次 | 上传用户:wangxingchuang
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:随着计算机网络技术的发展,网络安全问题越来越多的受到人们的关注,同时,也出现了各种类型的计算机病毒和木马程序。最近,出现了一种特殊木马程序——Rootkit,该文详细的介绍了Rootkit的隐藏技术和检测方法。
  关键词:Rootkit;木马程序;网络安全;隐藏;检测
  中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)31-0838-02
  Defence and Detection Technology Against RootKit
  ZHANG Gui-qiang1,LI Lan-lan2
  (Lanzhou Petrochemical College of Vocational Technology, Lanzhou 730060, China; 2.Lanzhou University, Lanzhou 730030, China)
  Abstract: With the development of computer network, security of network attracts more and more attention. Meanwhile, all kinds of computer viruses and Trojan programs arised, inluding a special Trojan program: RootKit. A detailed introduction of hidden technology and detection method of RootKit has been put forward in this paper.
  Key words: rootkit; trojan program; network security; hidden technology; detection
  众所周知,木马病毒是指寄生于用户计算机系统中,盗窃用户信息,并通过网络发送给作者的一类病毒程序。但是随着安全技术的发展和计算机用户安全技术的提高,普通的木马越来越难生存,于是一部分有能力的后门作者把眼光投向了系统底层——ring 0。利用系统驱动模块以驱动形式隐藏木马程序,这就是让人闻之色变的Rootkit。
  1 什么是Rootkit
  ring 0 层的是系统核心模块和各种驱动程序模块,因此,位于这一层的木马也是以驱动形式生存的,而不是一般的exe。后门作者把后门写成符合wdm规范(windows driver model)的驱动程序模块,把自身添加进注册表的驱动程序加载入口,便实现了“无启动项”运行。一般的进程查看器都只能枚举可执行文件exe的信息,所以通过驱动模块和执行文件结合的后门程序便得以生存下来,由于它运行在 ring 0 级别,拥有与系统核心同等级的权限,因此它可以更轻易的把自己隐藏起来,无论是进程信息还是文件体,甚至通讯的端口和流量也能被隐藏起来,在如此强大的隐藏技术面前,无论是任务管理器还是系统配置实用程序,甚至系统自带的注册表工具都失去了效果,这种木马就是Rootkit。所以,Rootkit是通过加载特殊的驱动,修改系统内核,进而达到隐藏信息的目的。
  2 rootkit的隐藏技术
  2.1 删除进程双项链表上的进程对象。
  现在所有人查看进程一般都是通过任务管理器(taskmgr.exe)来查看。任务管理器枚举进程信息是靠的NtQuerySystemInformation 也就是ZwQuerySystemInformation 函数。其中,Native Api枚举进程是要通过进程活动链表的,如果我们将进程对象从进程双向链表中移除,那么调用NtQuerySystemInformation来枚举进程的任务管理器taskmgr.exe中就不会看到我们的进程了。那么就有人会担心了。如果进程从链表中删除,那还会被运行么?答案是,会。因为windows的ds,也就是线程分派器,也叫任务调度分配器(dispatcher scheduler)使用的是另一个数据结构,也就是说,进线程是否被调度处理与进程双向活动链表无关,不会被CPU忽略。所以,rootkit会将进程双向链表中的相关对象删除,这样使用任务管理器是看不到的。
  2.2 修改系统调用表(sst)
  系统调用,就是操作系统提供给用户程序调用的一组“特殊”接口。用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务,比如用户可以通过文件系统相关的调用请求系统打开文件、关闭文件或读写文件,可以通过时钟相关的系统调用获得系统时间或设置定时器等。在相应寄存器中储存着系统调用号,中断处理程序把该寄存器里的值作为查找表中的索引,去找到最终的目标函数,这个表就是系统服务表SST。rootkit可以通过在系统调用表中添加自己的服务然后运行想要执行的任务。He4HookInv就是这样,He4HookInv也是一个比较有名的windows rootkit。
  2.3 端口隐藏
  很多人检查自己中没中木马或后门,都会一些方法来查看自己本机所开的端口来判断是否有木马监听,而有些rootkit就开始想如何隐藏端口了。最简单的枚举当前所开放的端口信息是调用iphlpapi.dll中的AllocateAndGetTcpTableFromStack和AllocateAndGetUdpTableFromStack函数,或者AllocateAndGetTcpExTableFromStack和AllocateAndGetUdpExTableFromStack函数。还有另外一种方法。当程序创建了一个套接字并开始监听时,它就会有一个为它和打开端口的打开句柄。我们在系统中枚举所有的打开句柄并通过NtDeviceIoControlFile把它们发送到一个特定的缓冲区中,来找出这个句柄是否是一个打开端口的。这样也能给我们有关端口的信息。因为打开句柄太多了,所以我们只检测类型是File并且名字是DeviceTcp或DeviceUdp的。打开端口只有这种类型和名字。而通过察看iphlpapi.dll的代码。就会发现这些函数同样都是调用NtDeviceIoControlFile并发送到一个特定缓冲区来获得系统中所有打开端口的列表。也就是说,我们挂接NtDeviceIoControlFile函数就可以隐藏端口。
  2.4 文件隐藏
  在WINNT里在某些目录中寻找某个文件的方法是枚举它里面所有的文件和它的子目录下的所有文件。文件的枚举是使用NtQueryDirectoryFile函数。与隐藏文件相关的重要参数是FileHandle、FileInformation、FileInformationClass。如果我们想要隐藏一个文件,我们需要分别通知FileDirectoryInformation、FileFullDirectoryInformation、FileBothDirectoryInformation 、FileNamesInformation这4种类型,对每种类型的返回记录我们需要和我们打算隐藏的文件比较名字。如果我们打算隐藏第一个记录,我们可以把后面的结构向前移动,移动长度为第一个结构的长度,这样会导致第一个记录被改写。如果我们想要隐藏其它任何一个,只需要很容易的改变上一个记录的NextEntryOffset的值就行。如果我们要隐藏最后一个记录就把它的NextEntryOffset改为0,否则NextEntryOffset的值应为我们想要隐藏的那个记录和前一个的NextEntryOffset值的和。然后修改前一个记录的Unknown变量的值,它是下一次搜索的索引。把要隐藏的记录之前一个记录的Unknown变量的值改为我们要隐藏的那个记录的Unkown变量的值即可。
  3 隐藏技术的应对方法
  像刚才提到的将进程对象从进程双向链表中删除就有办法突破。虽然NtQuerySystemInformation所需要的链表已经被做了手脚,但windows dispatcher scheduler跟他所用的链表不一样,那么我门可以通过读取windows dispatcher scheduler所用的另一个链表来列出进程。也就是说可以直接通过读取KiWaitInListHead和KiWaitOutListHead来列举进程,这样就突破了修改双向链表隐藏进程的方法,pjf通过读取KiWaitInListHead列出隐藏的进程中给出了代码。不过这种检测方法不久又被突破了,就是替换内核的进程链表。
  还有人提出使用HOOK SwapContext方法来检测,只要被处理器调度的线程就逃不掉。
  WINDOWS 2K/NT/XP系统中,处理器的调度对象是线程,在非SMP的OS中某时间段内当前 CPU 处理的进程只可能有一个。每个进程分配特定的 CPU 时间片来达到执行目的,而系统的 CPU 时钟中断确定了每个进程分配的时间片。也就是当系统 CPU 时钟中断触发时,产生的进程调度请求。处理器时钟中断发生的时候会调用KiDispatchInterrupt(),比较当前进程分配的时间片,如用完后会调用 KiQuantumEnd() 根据各线程优先级等信息用特定的调度算法选择新的线程(ETHREAD),然后将其返回值,一个 ETHREAD 结构作为参数,来调用 SwapContext() 设置 ETHREAD,EPROCESS 中的各项参数,并替换 KPCR 中的相应结构完成线程切换,调度到另一个进程(EPROCESS)的线程(ETHREAD)继续执行。可以说CPU的线程切换离不开SwapContext函数,当然,rootkit所执行线程的都会通过SwapContext函数来切换使之被CPU处理。
  而在这之后有人就提出自己替换线程的调度就可以躲过这种检测。在我看来,这种检测方法会占用很大的资源,毕竟CPU的线程切换非常频繁。如果谁有条件可以自己看看,一秒内会发生多少次的线程切换。
  4 rootkit的检测
  我们可以借助一些rootkit检测工具,如RootkitRevealer(成名的和令人尊敬的安全专家Mark Russinovich和Bryce Cogswell制作的)、Blacklight(知名安全软件厂商F-Secure公司制作的)、Klister(卑鄙的内核模式rootkitFU的作者制作的)。这些工具都有自己独特的功能和缺陷。但是,恶意软件作者不断地更新他们的工具以便避开最新的检测应用程序,因此,某一种工具也许也不能检测出所有的恶意软件。你也许需要手工执行微软研究院2004年发布的工具软件“Strider GhostBuster”的白皮书中解释的那些程序。简言之,你要在系统启动的时候拍下系统的快照,收集每个硬盘的目录列表等信息。然后,你使用替代的操作系统启动计算机,用你在干净的操作系统中所看到的东西与被攻破的操作系统中的东西进行比较。
  计算机网络技术在不断的发展和更新,而一些恶意软件的作者也在不断的更新自己的技术和攻击工具,所以,要达到100%绝对安全的计算机系统是不可能的。但是,计算机用户要不断提高自己的安全意识,在日常的使用过程中随时更新自己的系统,不断加强防范措施。
  参考文献:
  [1] 崔甲.Rootkit的分类方法和检测技术研究[D].电子科技大学,2007.
  [2] 颜仁仲.实时检测Rootkit并自动修复系统的研究与实现[D].中国科学院研究生院(计算技术研究所),2006.
  [3] 王松涛,吴灏.Linux下基于可执行路径分析的内核rootkit检测技术研究[J].计算机工程与应用,2005(11):121-123.
  [4] 吴昆.Windows Rootkit技术概述[D].湖南大学软件学院,2008(05)
  [5] 冯万利.基于内核入侵的木马设计与实现[J].微计算机信息,2006(18):59-60,92.
其他文献
【摘要】文章从来源期刊、栏目分布、作者所属地域和单位等方面对《复印报刊资料·小学语文教与学》2020年度论文转载情况进行统计与分析,回顧本年度小学语文教育教学几个热点和重点问题所取得的研究成果,并对未来研究方向进行展望。  【关键词】小学语文,教育教学研究,转载情况,研究方向  一、2020年度小学语文教育教学论文转载概况  1.论文来源期刊转载数量  2020年《复印报刊资料·小学语文教与学》(
摘要:在PKI中,证书路径的构建是非常重要的过程,也许在可信赖的第三方与终端实体之间有多个候选路径,探讨了PKI路径的构建时蚁群算法的应用,并对PKI路径的构建时最短路径问题进行了研究。  关键词:公钥基础设施;蚁群算法;证书路径构建  中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)08-1pppp-0c    为了验证一个证书,在证书与可信赖的第三方之间必须建立一条
《中国传统文化视域下学生德育研究》一书围绕当前学校教育中学生德育工作的焦点,从当代学生思想与道德教育基本理论出发,对中国传统文化与德育教育的关系进行了详尽论述,重点讨论了中国传统文化对学生德育的影响及其与学生德育融合的策略,旨在对相关领域的教育工作者起到启发与借鉴作用。  全书共分为九章,第一至第三章是理论分析,主要介绍了当代学生德育教育的现状、德育教育发展历程,以及传统文化与德育教育的相关理论和
潘强、徐中原、邵光辉主编的《多元文化背景下大学生思想政治教育的挑战与创新》(中国纺织出版社)一书通过对当前大学生思想政治教育研究现状与存在问题的全面总结,提出了以我国大学生为主体的新的教育理论,为当前多元文化背景下的大学生思想政治教育提供了新方向。该书有三个突出特点。  一是内容完善,层次清晰。该书研究内容立足于实际,从多元化的视角出发,阐述了当前大学生思政教育的研究现状与存在的问题,并针对这些问
摘要:语文阅读是语文教育教学的基本要求和重要目标,是培养良好学习习惯的重要环节,是提升语文课堂教学质量的重要举措,处于至关重要的地位,发挥着重要的作用。良好的语文阅读可以有效培养学生学习语文的自信心和自觉性,可以有效激发学生学习语文的兴趣,培养学生的兴趣爱好。本文试图简要分析阅读的重要性,提出加强语文阅读的对策建议。  关键词:语文阅读 教育教学 重要性  语文阅读能力是学习语文的重要基础,不仅具
摘要:文章介绍了一个运行在Windows下的网络检测软件Windump,详细描述了Windump的使用方法及参数,并通过实例介绍了Windump在网络管理中的实际应用。  关键词:网络;TCP/IP;Windump  中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)16-21214-02  A Way(or Analysis) to Detect the Network
摘要:自动气象站资料在气象业务工作中具有重要的价值。文章对ASP.NET与GDI 的某些方法进行了研究,利用ASP.NET实现在网页中以图表方式显示自动站数据库资料。  关键词:自动气象站;.NET;GDI   中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)19-30080-02  Displaying the Data of Automatic Station Da
摘要:在互联网高速发展的今天,JSP技术也得到了飞速的发展,它在运行速度、安全性、可移植性均比传统的Web编程语言有很大的改进。因此了解并掌握在JSP开发中使用数据库的方法和技巧日益重要。  关键词:JSP;数据库;网站  中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)27-1889-03  The Application of JSP Technology in D
摘要:在高等职业教育中,采用CBE 教学模式进行实践课教学, 利用基于建构主义教育理论的开源网络教学平台Moodle 对如何做好高职教学, 建立以职业能力培养为目标的高职高专新型教学模式的方法与策略进行了研究和探索。  关键词:Moodle平台;CBE教学模式;应用  中图分类号:TP311文献标识码:A 文章编号:1009-3044(2008)24-1355-02    Moodle Platf
【摘要】“画配话”是低年级写话训练的一种形式,一般是纸张的上面为画,下面为写话。画可以是学生自己画,也可以利用剪贴画等现成的图画,主旨是以“画”促“话”,训练学生的表达能力,为写话服务。本文拟从课内和课外训练两个方面对“画配话”在教学中的应用进行阐述。  【关键词】画配话,语言训练,课内,课外  “画配话”一般是纸张的上面为画,下面为写话,画可以是学生自己画,也可以利用剪贴画等现成的图画形式。学生