利用木马的自启动特性对其进行监控_第1页
利用木马的自启动特性对其进行监控_第2页
利用木马的自启动特性对其进行监控_第3页
利用木马的自启动特性对其进行监控_第4页
利用木马的自启动特性对其进行监控_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

1、利用木马的自启动特性对其进行监控0引言随着网络技术的迅速发展,网络安全日益引起人们的重视,因为计算机病毒、特洛伊木马、网络蠕虫等恶意软件会给正常的社会生活造成巨大的损失。在这些恶意软件中,特洛伊木马因为其独特的作用,备受黑客的青睐,被广泛使用。特洛伊木马是指一种计算机程序,这种程序通常伪装成一个正常的程序,以欺骗的方式诱使用户运行,运行以后潜伏在入侵主机中,偷偷地搜集用户的敏感资料;当接收到控制端发送来的特定命令时,就将这些敏感资料通过网络发送出去,造成泄密事件,或控制入侵主机,造成锁定主机、重新启动甚至破坏系统等,具有极大的危害性。特洛伊木马不同于普通的计算机病毒,病毒的危害一般是造成数据的

2、破坏或是造成网络的拥塞,而木马的危害在于信息的泄漏。特别是对政府、军队等保密性要求比较高的部门来说,木马的危害性更大。目前,木马检测所采用的技术主要是特征码检测技术,即将木马看做是一种特殊的病毒,提取木马样本的特征码,放到病毒库中;扫描系统时,如果被扫描的文件与特征码符合,则断定其是木马程序。特征码技术对检测已知病毒、木马和蠕虫等恶意代码非常有效,算法简单,检测迅速,因此目前也被业界所广泛使用。但特征码技术有一个先天缺陷就是只能检测已知的恶意代码,面对每天大量涌现的新恶意代码却无能为力。本文提出一种新的检测方法,此方法利用木马所共同具有的一个特征来进行检测,使其不仅能够检测已知的木马程序,而且

3、能够检测新出现的或未知的木马。1 木马的共有特征自第一个特洛伊木马诞生以来,经过多年的发展,特别是随着互联网的普及,到现在为止,已经有几万种木马程序。虽然这些程序使用不同的程序设计语言编写,在不同的环境下运行,但是木马不同于普通的病毒程序,因为它的主要目的是相似的,都是为了远程控制和窃取资料,因而所有的木马存在一些共同的特征。其中,一个木马必须具备的特征可以总结为以下几个:( 1) 隐蔽性隐蔽性是木马的首要特征。木马程序为了悄悄地长期运行于入侵主机中,往往会千方百计地隐藏自己,不被发现。比较简单的木马一般要隐藏自己的窗口;技术比较复杂一些的木马会将自己伪装成系统进程或是系统服务,还有的木马将自

4、己的代码注入到别的合法进程中去;技术比较高级一些木马会以驱动程序的形式修改内核,让用户查看不到它的存在。( 2) 自动运行性木马为了长期控制入侵主机,一般会修改系统的注册表或配置文件,以便在系统重新启动以后,自动加载木马程序;如果一个木马程序不能自动运行,那么每次重启,入侵者都要重新攻击。在注册表的某些项例如HKLMSoftwareMicrosoftWindowsCurrentVersionRun中设置内容为“c:trojan.exe”,则系统启动以后会自动运行trojan.exe这个程序。修改系统的win.ini、system.ini、autorun.bat等系统配置文件也可以达到同样的效果

5、。( 3) 功能特殊性木马的目的就是控制入侵主机或者窃取敏感资料,因而木马必然会具有一些特殊的功能,如搜索计算机的口令、记录键盘操作、远程抓屏,甚至会锁定键盘和鼠标、删除系统文件、破坏系统等功能。( 4) 网络通信为了远程控制入侵主机,木马程序肯定会有网络通信功能。初期的木马会在服务器端开一个端口,监听控制端发来的命令。现在的木马为了更加隐蔽自己,不再开启通信端口,而是利用ICMP包通信,或者是采用反弹端口形式实现通信。但不管采用哪种技术,网络通信是木马必须具有的功能。一个成功的木马必须具备上面的五个特征,如果用S表示木马成功植入和运行,C1C4表示上述的四个木马必备的特征,则可用表达式如下表

6、示它们之间的关系:因此,可以利用上述的任何一个特征来防范木马入侵。一旦阻止了一个木马程序的某一特征的实现,它就不能成功安装或不能完成入侵以及窃取等功能。本文主要针对木马的自启动特性来完成对木马的防范。2 木马自启动的实现为了使木马程序在系统重新启动以后能够自动运行,木马程序利用了很多操作系统的特性。例如修改注册表,很多木马利用了注册表中RUNRUNSERVICE键值,实现自启动;还有的木马修改系统配置文件,如win.ini、system.ini文件等。下面介绍木马最为常用的自启动机制:( 1) 系统启动文件夹在Windows的文件系统中,有个文件夹是专门存放系统启动以后自动运行的程序。下面给出

7、系统的文件夹:C:WindowsstartmenuprogramsstartupC:WINDOWSAllUsersStartMenuProgramsStartup这是最基本、最常用的Windows启动方式,主要用于启动一些应用软件的自启动项目,如Office的快捷菜单。一般用户希望启动时所要启动的文件也可以通过这里启动,只需把所需文件或其快捷方式放入文件夹中即可。这个文件夹是可以更改的,虽然文件夹中的内容在默认状态下可以被用户看得一清二楚,但通过改动还是可以达到相当隐蔽的启动目的。( 2) 系统配置文件由于系统的配置文件对于大多数的用户来说都是相当陌生的,这就造成了这些启动方法相对来说都是相当

8、隐蔽的。有的木马就是通过修改配置文件实现自启动的。这两个系统配置文件是WIN.INI和SYSTEM.INI。WIN.INI文件格式如下:WindowsLoad=trojan.exe这样设置,程序Trojan就会在系统启动以后自动在后台运行。SYSTEM.INI文件格式如下:BootShell=Explorer.exe可以将Shell的内容改为Shell=Explorer.exetrojan.exe这样,系统启动后就会自动运行Explorer和Trojan两个程序。( 3) 注册表启动注册表中的启动应该是被使用最频繁的启动方式,但这样的方式也有一些隐蔽性较高的方法。常规的启动方法是在下列键值中设

9、置要启动的程序:HKLMSoftwareMicrosoftWindowsCurrentVersionRunHKLMSoftwareMicrosoftWindowsCurrentVersionRunOnceHKLMSoftwareMicrosoftWindowsCurrentVersionRunServicesHKLMSoftwareMicrosoftWindowsCurrentVersionRunServicesOnceHKCUSoftwareMicrosoftWindowsCurrentVersionRunHKCUSoftwareMicrosoftWindowsCurrentVersionR

10、unOnce例如,在HKLMSoftwareMicrosoftWindowsCurrentVersionRun中,新建一个字符串型的值,字符串的内容为C:WINDOWSSystem32newtrojan.exe,那么系统再次启动以后,就会自动运行newtrojan.exe这个程序。除此之外,注册表中还有一些地方经常被特洛伊木马所利用。例如在HKEY_CLASSES_ROOTtxtfileshellopencommand中,系统默认的值为SystemRoot%system32NOTEPAD.EXE%这样就将以.txt为后缀的文本文件和NOTEPAD.EXE个应用程序关联起来,每次用户打开文本文件

11、时,系统就会自动调用NOTEPA这个应用程序。而有的木马,如冰河,就修改了这个键值,将其修改为%SystemRoot%system32SYSEXPLR.EXE%,这样,当用户每1次打开文本文件时,系统就会自动调用SYSEXPL这个程序,这实际上是一个木马程序。木马程序运行后,再去启动NOTEPAD!序,这样用户可能很难察觉系统已经运行了木马程序。综上可以看出,只要能够从底层对上述的几个文件和目录以及注册表中与自启动相关的目录进行监控,就可以监控木马的入侵。而如何从底层进行监控呢,笔者采用的是从驱动层挂接系统服务调度表的技术。3Windows系统服务调用机制所谓系统服务是由操作系统提供的一个函数

12、集,应用程序可以通过API函数直接或间接地调用系统服务。在Windows操作系统中,应用程序是运行在Win32子环境中的。Win32子环境为应用程序提供了一套动态链接库。其中包括Kernel32.dll、Advapi32.dll、User32.dll和Gdi32.dll等。应用程序调用系统服务主要是通过上面的动态链接库提供的API函数实现的。在操作系统中存在两种模式,即用户模式和内核模式。一般的应用程序都是运行在用户模式,只有操作系统等关键组件才运行于内核模式。将系统分为用户模式和内核模式有利于系统的安全和稳定。从用户模式调用本机系统服务是通过NTDLL.DLL来实现的。例如Kernel32.

13、dll通过Ntdll.dll这个动态链接库来真正地触发系统调用服务,Ntdll.dll执行INT指令产生陷阱,由用户态进入到内核态,系统服务真正地实现是在ntoskrnl.exe中完成的。也就是说NTDLL.DLL只是系统服务调用接口在用户模式下的一个外壳。创建一个文件和创建一个注册表的项对于Windows的系统服务调用机制是一样的,只是调用的函数不同而已。下面就以注册表为例。而注册表操作的系统服务是在ntoskrnl.exe中实现ntoskrnl.exe为例。它们之间的关系如图1所示。当应用程序在注册表中创建一个新的项目时,就会调用Advapi32.dll中的RegCreateKey函数,R

14、egCreateKey函数检查传进来的参数是否有效,并将它们都转换成Unicode码。接下来,RegCreateKey就会调用Ntdll.dll中的NtCreateKey函数。由于每一个系统服务都对应着一个系统服务号,NtCreateKey函数将系统服务号填入到寄存器EAX中,然后再将参数在堆栈中的指针赋给寄存器EDX最后触发INT2E指令,从用户态进入到内核态。系统服务调用模型大体如下:moveax,ServiceIdleaedx,ptrParameterint2ehret其中,ServiceId是系统服务号,ptrParameter是参数在堆栈中的位置。进入内核态之后,系统调用KiSyst

15、emService函数,内核根据系统服务号在中断描述表(IDT)中查找相应的系统服务指针。这个指针指向函数ZwCreateKey,然后执行这个服务程序。服务程序首先将参数从用户态的堆栈空间拷贝到内核态的堆栈空间,最后执行具体的服务功能。Windows中默认存在两个系统服务调度表,它们对应了两类不同的系统服务。这两个调度表分别是KeServiceDescriptorTable和KeServiceDescriptorTableShadow。系统服务调度表KeServiceDescriptorTable定义了在ntoskrnl.exe中实现的系统服务,通常在kernel32.dll/advapi32

16、.dll中提供函数接口均是调用的这个系统服务调度表中的函数;KeServiceDescriptorTableShadow除了包含上面的系统服务,还包含在Win32k.sys中实现的相关Win32USE序口GDI函数,它们是属于另一类系统服务调用,它提供了内核模式实现的USE林口GDI服务。在Windows2000操作系统中存在两类系统服务。一类是Win32内核API经过Kernel32.dll/advapi32.dll进入NTDLL.dll后使用int0x2e中断进入内核,最后在ntoskrnl.exe中实现了真正的函数调用;另一类是Win32USER和GDIAPI直接通过User32.dll

17、/Gdi32.dll进入了内核,最后是在Win32k.sys中实现了真正的函数调用。要实现对注册表和文件系统的写操作的监控,就需要将系统服务调度表中相应的函数指针重新定位,使它指向本文自定义的函数,在该函数进行完预处理之后,再根据具体情况决定,或者调用原来的系统服务函数,或直接运行后面的程序,这就是系统服务挂接(HOOKING技术。4挂接系统服务调度表实现监控挂接(HOOKING技术也称为钩子技术,是Windows操作系统中一种通用的技术,它可以拦截或监听可执行代码在执行过程中的一些信息,可以更改操作系统的行为。可以帮助人们了解系统内部结构、运作机制等。被广泛应用于事件追踪、修改系统行为等操作

18、中。为了实现文件系统以及注册表的监控,首先要在系统服务调度表中找到需要替换的函数指针,将这个指针指向本文自定义的函数;当调用相应的系统服务时,首先就会执行本文自定义的函数。这样,就实现了系统服务的挂接。由于文件系统和注册表监控只是Hook的内核中的函数不同而已,在此仍以RegCreateKey为例。当它调用Ntdll.dll中的NtCreateKey时,通过软中断进入到内核态,每个在Ntdll.dll中导出的以Nt开头的系统服务占位函数在内核中都有一个相应的以Zw开头函数与之对应,系统就会根据中断服务号在系统服务调度表中查找到ZwCreateKey函数,然后执行调用这个函数。如图2所示,现在,

19、将系统服务调度表中的函数指针指向本文自定义的函数myZwCreateKey,这样,执行系统服务调用时,就会先执行函数myZwCreateKey,在这个函数中进行笔者所需要的预处理。首先显示目前试图添加自启动特性的进程,然后再根据使用者的选择。如果用于允许该进程自启动,则执行原来的ZwCreateKey函数;否则跳过这个系统服务函数,直接执行后面的代码。由于系统服务调度表是在内核的ntoskrnl.exe中定义的,如果要对其进行修改,必须使修改程序也要运行在内核态。这样就需要编写驱动程序,驱动程序是运行在内核态的。关于驱动程序的编写在这里就不作详细描述,下面只给出监控注册表的挂接注册程序的主要示意代码。/声明系统服务表externPSRVTABLEKeServiceDescriptorTable;/定义系统服务入口的宏定

温馨提示

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

评论

0/150

提交评论