基于Windows内核的进程隐藏工具的设计与实现本科毕业设计.docx
《基于Windows内核的进程隐藏工具的设计与实现本科毕业设计.docx》由会员分享,可在线阅读,更多相关《基于Windows内核的进程隐藏工具的设计与实现本科毕业设计.docx(48页珍藏版)》请在冰点文库上搜索。
基于Windows内核的进程隐藏工具的设计与实现本科毕业设计
本科毕业设计(论文)
基于Windows内核的进程隐藏工具的设计与实现
摘要
随着计算机技术和互联网技术的快速发展,信息安全技术显得格外重要,其中的rootkit技术在安全领域越来越重要,是21世纪威胁计算机安全的最大挑战之一。
rootkit是电脑上存在的持久的难以检测的一组程序和代码,包括隐藏进程,注册表隐藏文件隐藏,后门木马等。
其中最重要的是进程隐藏技术,它是rootkit技术中非常典型的一种应用。
本文主要介绍Windows系统的内核rootkit的一种,通过直接操作windows内核对象实现进程隐藏。
Windows的许多公开的rootkit都是在用户空间实现的,但内核rootkit比较复杂,也最难检测。
本文主要的研究环境包括Windowsxp,Win7x86和Win7x64,因为这3种系统占据国内大部分的市场份额,比较具有代表性。
这3类Windows系统,在运行的时候,会在内存中保留内核对象信息,包括进程对象。
每个内核对象的本质就是一个由操作系统分配的内存块。
这个内存块是一个数据结构,其成员维护着与内核对象相关的信息,应用程序只能通过调用系统API访问这块内存。
最后介绍了Windows为进程对象建立的结构体和链表,阐述了一个常用内核态进程隐藏技术的原理,直接操作内核对象,并使用该技术设计并实现一个基于Windows内核进程隐藏工具,提供可操作界面,进行一系列测试,在实际中能够实现批量隐藏进程。
关键词:
进程隐藏;rootkit;DKOM;直接操作内核对象;windows内核
Abstract
WiththerapiddevelopmentofcomputertechnologyandInternettechnology,informationsecuritytechnologyisparticularlyimportantwheretherootkittechnologyisincreasinglyimportantinthefieldofsecurity,oneofthegreatestchallengesofthe21stcenturythreatstocomputersecurity.Arootkitisasetofproceduresandenduringdifficulttodetectthepresenceofthecodeonthecomputer,includinghiddenprocesses,registryhiddenfileshidden,backdoorTrojans.Oneofthemostimportantisthehiddenprocesstechnology,itisrootkittechniquesisverytypicalkindofapplication.ThispaperdescribesaWindowssystemkernelrootkitthroughdirectmanipulationofwindowskernelobjectshiddenprocess.ManypublicrootkitWindowsareimplementedinuserspace,butthekernelrootkitismorecomplex,butalsothemostdifficulttodetect.Inthispaper,themainresearchenvironmentincludingWindowsxp,Win7x86andWin7x64,becausethesethreesystemsaccountformostofthedomesticmarketshare,comparedwitharepresentative.ThesethreetypesofWindowssystems,atruntime,theinformationwillberetainedinmemoryandkernelobjects,includingtheprocessobject.Eachkernelobjectisessentiallyanoperatingsystemfromtheallocatedmemoryblock.Thismemoryblockisadatastructurethatmaintainsitsmemberswithinformationrelatedtokernelobjects,theapplicationcanonlyaccessthismemorybycallingthesystemAPI.Finally,thestructuresandprocesseslinkedtoobjectscreatedbyWindows,elaboratedacommonkernelmodeprocesseshidingprinciple,thedirectoperatingkernelobjects,andusesthetechnologytodesignandimplementaprocessofhidingtheWindowskernel-basedtoolthatprovidesactionableinterface,conductedaseriesoftests,thebatchcanbeachievedinpracticetohidetheprocess.
Keyword:
Hiddenprocess,rootkit,DKOM,DirectKernelObjectManipulation,
Windowskernel
第一章绪论
1.1引言
1.1.1研究背景及现状
随着计算机的技术的迅猛发展和计算机网络的普及,世界各国的经济、政治、军事以及人们的日常生活都严重依赖计算机,智能家居和智能城市已经开始被人们所接受。
信息技术越是普及,信息安全就显得越为重要,试想一下,当未来生活充满智能电子设备,而这些设备中充斥着木马、病毒、后门,那是多么可怕的一件事情。
最近几年出现的CSDN论坛、小米论坛、天涯论坛等相继发生泄密的事件。
CSDN论坛泄密造成600万用户的个人信息被泄漏,小米论坛被拖库导致超过800万用户信息被泄漏。
2007年肆虐中国的熊猫烧香病毒感染了数百万台计算机,2013年3月,中国解放军报报道,美国曾利用“震网”蠕虫病毒攻击伊朗的铀浓缩设备,已经造成伊朗核电站推迟发电。
如果我们的生活全部都依赖只能电子设备,而这些设备却被非法份子恶意操控,你还能安心生活吗?
rootkit现在的定义,是指持久且无法察觉地存在与计算机之上的一组程序和代码,包括进程隐藏,注册表隐藏,文件隐藏,后门木马等[1]。
其实,嵌入式设备等电子设备,也是有恶习代码的存在。
只是现在的这些设备,功能比较单一,与外界交互更少,基本没有接入互联网之中。
未来的只能家居、只能城市必定连接互联网,就会给那些不法分子有机可乘,这些设备上的rootkit也会应运而生。
rootkit具有隐藏的特性,它本身不具备恶意性质,但恶意程序却可以利用它。
rootkit是把双刃剑,不仅可以用于合法的用途,例如法律实施机构可以使用来在监控犯罪嫌疑人中搜集证据,但也可以被黑客利用,非法。
Windows上的rootkit主要分为用户态和内核态。
用户态就是普通应用程序执行的权限状态,内核一般是驱动、系统内核才拥有的权限。
Windows用户态的rootkit实现起来比较容易,主要依赖钩子技术,一是导入地址表钩子,二是内联函数钩子,还可以使用硬件操作技术,把rootkit写入BIOS之中,此外还可以注册为系统服务、远线程注入,替换可执行文件、替换链接库等,缺点就是容易被检测。
Windows内核态的rootkit拥有ring0级的权限,能够操作内核代码,实现方式主要有内核钩子直接内核对象操作(DKOM)两种方式。
内核钩子有一下三种,系统服务描述表钩子(SSDTHook)和中断描述符表钩子(IDTHook),以及请求报文表钩子(IRPHook)。
在第二章,会详细阐述这几种进程隐藏的技术,本文实现进程隐藏是使用了DKOM技术,并进行对比。
1.1.2研究意义
Windowsrootkit逐渐成为木马等恶意软件隐藏自己的技术,rootkit具有隐藏的特性,普通的安全软件很难检测到它们的存在,同时,rootkit具有比传统病毒更强的攻击性和破坏性,同时,rootkit的防御与清除也比普通的木马和病毒困难。
由于rootkit的特性,会有更多的商业软件或者恶意软件,为了实现自己特殊的目的,而采用rootkit技术来实现。
而在内核中实现进程隐藏,是rootkit中最为复杂也是最重要的部分。
本文选择rootkit的一个重要部分,研究通过在WindowsNT系统下,通过直接操作内核对象的方法,来实现进程隐藏。
在国内WindowsXP、Win7x86和Win7x64占据着大部分个人电脑市场,虽然微软已经停止为XP系统更新,鉴于国内的用户量,国内的安全软件金山、360继续为XP提供更新,随着技术的发展,内存越来越大,64位系统必定会成为主流,研究这3个系统下的进程隐藏,很有代表性。
研究进程隐藏的方法,能够知己知彼,对检测windowsrootkit提供一些新的思路、技术,这样才能加强检测非法的rootkit能力,保护用户的信息安全。
多年以来,病毒开发者已经使用rootkit技术来改进病毒,这是一个很危险的趋势。
已经出现了能够在一小时内渗透数十万台机器的病毒传播算法,而且破坏计算机系统和硬件的技术早已存在。
同时,微软公司windows系统中远程可利用漏洞将不会消失,采用了rootkit技术的病毒更难以检测和预防。
不仅如此,从国家战略角度来说,信息安全就更加重要了。
我们国内的民用用户大部分都是使用美国微软公司的windows系统,该系统不公开源码,所以需要我们自己进行很多的研究,才能保证系统的安全,以免受制于人。
在军事上,就更重要了,要打赢一场信息化时代下的战争,重点在于获得信息的控制权。
保护好自己的信息系统,同时摧毁对方的信息系统,美国的震网病毒就是一个很好的例子,兵不血刃就让伊朗的核设施停止工作好几个月。
研究rootkit技术,有助于研究rootkit的防御技术,以及对rootkit分类的提高rootkit的判断的能力。
生活中,我们加强安全意识,而做为安全技术人员就要提高安全技术,才能维护我国在信息空间的权益。
隐蔽性是rootkit的最突出的特征,研究进程隐藏技术是研究rootkit的第一步,当然,仅仅是进程隐藏还是不够的,比如,rootkit获得信息后需要与外界联系等,需要我们以后付出继续进行研究,这里本文是先抛砖引玉,在内核中实现进程隐藏。
1.2研究内容
本学位论文主要包括以下四个主要的内容:
1、全面详细阐述了Windowsrootkit的相关技术,分别介绍了Windows用户模式和Windows内核模式下如何实现进程隐藏技术。
2、具体介绍了相关的背景知识,包括Windows系统的体系结构,Windows分层,用户模式和内核模式,Windows相关的系统组件,把与进程隐藏相关Windows底层的知识进行了分析。
3、阐述了本文要实现的内核进程隐藏方式,直接操作内核对象(DirectKernelObjectManipulation,DKOM),该技术的原理是通过NT式驱动,在内核模式中,把目标进程的信息从活动进程链表的信息中删除,由此成功把目标进程隐藏起来。
并详细说明了相关的重要数据结构以及对原理进行深入分析。
4、在本文的结尾,使用直接操作内核对象技术为模型,使用软件工程领域的知识,设计并实现一个基于Windows内核进程隐藏工具。
该工具具有友好的操作界面,以及稳定的性能。
同时进行测试实验,使之达到预期的标准。
1.3论文结构
本文包括三大部分:
1、对相关背景知识的详细介绍,说明需要用到的技术,并对已有的技术进行分析。
2、说明本论文的实现进程隐藏的技术原理并建立一个进程隐藏模型
3、进程隐藏工具的整体架构和详细设计,以及关键技术的实现
全文的章节安排为:
第一章,绪论。
概要讲述了课题的研究背景、课题的研究意义、国内外的研究结果还有论文的研究内容和论文的安排。
第二章,相关背景知识。
介绍和分析相关的背景知识,包括Windows分层的总体架构、操作驱动的基本概念,具体阐述目前已有的相关技术。
第三章,内核进程隐藏模型。
详细介绍了本文所研究的进程隐藏的原理技术,与其它内核隐藏进程的技术相对比。
建立一个进程隐藏模式,通过直接修改内核对象的手段实现Windows进程隐藏的目的。
第四章,进程隐藏工具的设计与实现。
具体包括windows内核进程隐藏工具的整体架构以及详细设计。
详细分析进程隐藏工具各个模块的内部机理,以及每个模块的关键技术的具体实现。
第五章,测试与实验分析。
主要介绍进程隐藏工具的开发环境,调试环境以及在WindowsXPSP3,Win7x86,以及Win7x64这3个系统下,按照软件工程领域的知识完成相关的实验和测试,最后最实验结果进行分析。
第六章,总结。
总结全文,分析本文所研究Windows进程隐藏技术的局限性,并指出需要进一步研究的工作。
第二章相关背景知识
2.1Windows系统总体架构
2.1.1用户模式和内核模式
Windows总体上分为内核模式(KernelMode)和用户模式(UserMode)。
在Intel的i386CPU中有4个权限层次,从Ring0到Ring3。
其中,它的最高权限是R0层,可以执行我们所有的代码,而最低的权限是R3层,准许只执行我们部分代码。
因此,在Windows系统中,CPU层级的R0层上运行的是内核模式,而在CPU层级的R3层上运行的是权限比较低的用户模式。
另外我们要区分一个概念,模式是操作系统中的概念才会有内核与用户的差别,而环层级权限是CPU中的概念,如图2-1表示的它们的关系示意图。
Ring3层
用户模式
Ring0层
内核模式
图2-1显示CPU权限(左)和操作系统模式(右)的关系示意图
应用程序是在用户模式下运行的也就是在R3层,如果它想对系统底层做一些操作,或者要对计算机硬件设备进行操作,都需要调用Win32子系统,然后该子系统向windows系统内核发出请求才能获得返回的句柄,并只能使用系统API进程操作。
因为驱动程序是运行在内核模式(对应R0层),所以它可以对系统内核执行所有的操作。
2.1.2操作系统分层
如图2-2所示,这是Windows操作系统的简化结构示意图。
其中,Windows有一个非常重要的子系统,它就是Win32子系统。
Win32子系统的作用就是,转换系统提供的API函数,它把这些函数的调用转化为了NativeAPI函数的调用。
而在NativeAPI这个模块中,又把这些函数调用进行转换,这次转换为内核之中系统服务函数的调用。
应用程序
应用程序
Win32子系统
其它子系统
NativeAPI
用户模式
内核模式
系统服务函数
驱动
程序
执行体组件
进程管理器
对象管理器
I/O管理器
其它组件
配置管理器
虚拟内存管理器
内核
硬件抽象层
具体硬件
图2-2Windows架构简图
2.1.3Win32子系统与应用程序
Windows有一个非常重要的子系统,它就是Win32子系统。
Win32子系统的作用就是,转换系统提供的API函数,它主要的功能就是把这些函数的调用转化为了NativeAPI函数的调用。
WindowsAPI函数分为三类,存储在三个对应的动态链接库之中:
USER32.DLL中窗口管理的函数,GDI32.DLL中关于图形图像处理显示的函数,以及KERNEL32.DLL中管理除了GUI资源以外的其它资源。
图2-3简明地展示了Win32子系统在内核中的示意图。
GDI32.DLL
GDI函数
USER32.DLL
窗口管理函数
KERNEL32.DLL内核调用函数
WIN32K.SYS
Win32子系统的内核实现
NTOSKRNL.EXE
Win32子系统的内核实现
图2-3简明地展示了Win32子系统在内核中的示意图
2.1.4NativeAPI
实际上,通过调用NativeAPI提供的函数来实现自己的功能,几乎所有的Win32子系统里面的函数所采用的办法。
而且所有的NativeAPI,其实都是在Ntdll.dll这个动态链接库中实现的,它们函数名不同的地方是内核中的会带有Nt两个字母,表示在Ntdll.dll中。
开发人员只要使用Win32API就能开发出适用于Windows系列都适用的应用程序,这是因为系统内核更新的话只是改变NativeAPI的实现方式。
NativeAPI非常重要,它进入内核的方式是通过软中断,由此离开用户模式。
2.1.5系统服务
NativeAPI离开用户模式后,会在内核中调用新的系统服务。
不仅如此,它还把用户模式中相关的参数传了进去。
在系统服务组件中,有一个系统服务描述符表(SystemServiceDescriptorTable,SSDT)。
有了SSDT中映射的信息,应用程序由此获得明确的相应系统服务函数的地址。
具体映射关系如图2-4所示。
ntoskrnl.exe
SSDT
Nt!
NtAcceptConnectPort
(0x0000)地址1
........
Nt!
NtOpenProcess
(0x0070)地址2
........
图2-4系统服务描述符表的实际映射关系示意图
2.2Windows相关的系统组件
2.2.1对象管理器
Windows对象管理器用来管理对象。
每个Windows对象都有一个对象头(名词、类型、位置等)和一个对象体(各种相关的数据)。
Windows包含超过25种类型的对象,其中就包括我们接下来会用到的进程对象和设备对象。
对象管理器一般会有如下的操作:
1、负责对象的创建和销毁
2、维护一个对象,并且要跟踪对象信息
3、管理器会跟踪每个进程的分配到资源,包括但不只是内存块
4、跟踪具体对象的访问权限
5、关注对象的生命期内,用来判断对象什么时候结束使命,可以被销毁
2.2.2进程和线程管理器
进程是一个“执行中的程序”。
它包括两个部分,一是内核对象,只有拥有了这个数据结构,它才会被操作系统所管理。
二是地址空间,只有拥有这个空间,才能存放进程代码以及数据。
一个进程中至少有一个线程,这就是主线程,另外,它还可以通过主线程创建多个线程,这些线程属于同一个进程,可以共享该进程拥有的所有资源。
Windows的进程和线程管理器负责处理进程中所有线程的执行问题。
无论机器是单核的还是多核的,在驱动编程中必须仔细处理所有的线程,无论这些线程按照什么顺序执行,驱动程序都会稳定的运行。
2.2.3I/O管理器
计算机的组成包括多个输入和输出设备,它们负责计算机和外界的信息交互。
这些设备的驱动程序把硬件设备与操作系统两者完美地连接起来。
Windows的I/O管理器的任务就是,通过使用I/O请求包(IRP)传递应用程序和设备驱动程序的各种信息,起到桥梁的作用。
这些I/O请求包就相当于网络通信中的数据包一样。
Windows的I/O系统还创建了一种模型,称为驱动设备栈的驱动模型,通过这个模型,I/O请求包可以从一个驱动的设备栈中直接传递到另一个驱动程序的设备栈中。
2.3Windows常见名词解释
2.3.1NT式和WDM式驱动
NT式驱动模型没有固定形式,可以开发一个完全不支持硬件工具的应用程序,本文最后就是使用该模型,创建出来的驱动程序可以很方便地加载。
WDM式驱动模型是基于NT式驱动模型上的模型,同时创建的设备对象要属于WDM对象设备,必须支持即插即用(PnP)的硬件驱动。
2.3.2符号链接
当你创建一个设备时,可以给它一个名称,但名称只能被其他驱动程序识别,应用程序不能识别这个名字,因为它们的名字空间不同。
如果你想打开这个设备进行操作,你必须为你的驱动设备创建一个符号链接,相当于给应用程序所识别的一个别名。
2.3.3IRQL
中断请求级别(InterruptRequestLevel,IRQL)是Windows设定的一个概念包括硬中断请求级别和软中断请求级别。
在同一个处理器上,只有IRQL级别高的线程才能中断别的中断别的IRQL级别比它低的线程。
常见的IRQL有:
PASSIVE_LEVEL,APC_LEVEL,DISPATCH_LEVEL,DIRQL。
其中,PASSIVE_LEVEL是级别最低的IRQL,运行在这个级别的函数有DriverEntry(驱动入口函数),大多数的分发函数,驱动创建的线程等。
运行在APC_LEVEL这个IRQL级别上的函数不多,除了自定义还有就是一部分的驱动分发函数。
运行在DISPATCH_LEVEL级别上的有StartIo函数、自定义的DPC函数、IoTimer函数等。
而DIRQL是硬件中断级别的统称,有最高的级别权限,运行在这个级别的包括中断服务函数等。
2.3.4IRP
I/O管理器与驱动程序之间进行通信的最基础数据结构,就是I/O请求包(I/ORequestPackets,IRP)。
不仅如此,IRP也是驱动程序之间通信的最基础数据结构。
通信的流程如下:
应用程序首先发起一个I/O请求,I/O管理器创建IRP,然后根据应用程序的请求内容来填充IRP,最后由管理器把IRP发给驱动程序。
IRP包括两个部分:
IRP头和IRP栈。
其中,IRP头是固定大小的,由I/O管理器用来存储原始请求的相关信息,而IRP栈是不固定大小的,驱动设备栈中每一个驱动程序分别和一个I/O单元对应,内容包括参数、功能码等。
2.3.5对象名字空间
对象名字空间是一个对象名称数据库,它由对象管理器所维护。
对象管理器按照对象的类型进行分类管理。
Win7系统可以在我的电脑-设备管理器中查看创建的对象设备,在非即插即用驱动程序中,前提是显示隐藏的设备信息。
2.4rootkit进程隐藏技术介绍
2.4.1用户模式rootkit
钩子(hook)简单的说就是把原有的函数地址修改为指向自定义的函数地址,通过勾住API函数,可以使得代码执行的时候跳转到恶意软件的地址。
在用户模式下的rootkit有很多种方式,而且都比较容易实现,但是缺陷就是是容易被检测出来。
主要有以下几种方式实现rootkit:
★导入地址表钩子(ImportAddressTableHook,IATHook)。
Windows下的可执行文件,一般都会使用其它库,比如大部分都会使用USER32.DLL,当它需要执行动态链接库中的函数时,必须导入该函数的在库中的地址才能够调用。
输入表以一个IMAGE_