APP下载

PE病毒的入侵途径和防治措施

2012-04-29李卓

商场现代化 2012年12期
关键词:防治措施

李卓

[摘 要]由于Windows操作系统的广泛使用,PE病毒已经成为当前危害计算机安全的主要病毒之一。针对传播最广泛、危害最大、使用了多态变化技术的windows PE文件病毒的PE病毒,本论文详细的分析了windows PE文件结构及PE病毒的入侵原理,针对windows PE病毒的特点,提出了windows PE文件病毒的防御思想,即在病毒传播时期就把其拒之于系统之外,使其失去寄宿生存的空间,再配合一般的杀毒技术,可以有效的防杀windows PE病毒,使系统的安全性和稳定性大大提高,最后有针对性地提出对PE病毒预防的多种有效策略,从而为防毒、杀毒提供必要的理论依据。

[关键词]PE病毒 入侵途径 防治措施

计算机病毒一直是计算机用户和安全专家的心腹大患,虽然计算机反病毒技术不断更新和发展,但是仍然不能改变被动滞后的局面。计算机病毒一般都具有潜伏传染激发破坏等多种机制,但其传染机制反映了病毒程序最本质的特征,离开传染机制,就不能称其为病毒。因此,监控和及时发现计算机病毒的传染行为,是病毒制造者和安全专家的争夺焦点。目前主流的操作系统是Windows操作系统,利用windows操作系统中存在的漏洞和系统程序接口,病毒可轻易获取控制权,感染硬盘上的文件,并进行破坏。因此计算机病毒入侵途径和防治研究显得尤为重要。

病毒要在Windows操作系统上实现其感染目的是要获得系统的控制权,而感染可执行文件时取得控制权的最好途径。在WINDOWS NT/XP/2000/98/95等系统下,可执行文件和动态链接库均采用的是PE文件格式。只有透彻研究了PE的文件格式,才能了解病毒如何寄生在文件中,才能有的放矢的采取对策以检测和制止病毒的入侵。在各种病毒中,又以PE病毒数目最大,传播最广,破坏力最强,分析PE病毒有非常重要的意义。因此本文将重点介绍PE病毒的入侵途径和防治措施。

一、PE病毒

1.PE病毒的定义

一个正常的程序感染后,当你启动这个程序的时候,它通常会先执行一段病毒代码,然后自身运行,这样病毒就悄无声息的运行起来,然后再去感染其他PE文件,这就是PE病毒的行为。

2.PE病毒的特征

(1)具有感染性。该类病毒通过感染普通PE.EXE文件并把自己的代码加到EXE文件的尾部,修改原程序的入口点以指向病毒体,病毒本身没有什么危害,但是被感染的文件可能被破坏而不能正常运行。

(2)潜伏性。指病毒依附于其他文件而存在,即通过修改其他程序而把自身的复制品嵌入到其他程序中。

(3)可触发性。即在一定的条件下激活这类病毒的感染机制使之进行感染。

(4)破坏性。病毒一旦感染其他文件,病毒本身没什么危害,但是会导致被感染的文件丢失数据或被破坏而不能正常运行。

3.PE文件格式

在PE文件格式中有一个重要的概念相对偏移量(RAV),RAV是虚拟空间中某句代码到参考点的一段距离。例如,如果PE文件装入虚拟地址(VA)空间的400000h处,且进程从虚拟401000h开始执行,就可以说进程执行起始地址在RVA1000h。PE文件格式用到RVA的原因是为了减少PE装载器的负担,因为每个模块都有可能被重载到任何虚拟地址空间。

PE文件格式被组织为一个线性的数据流,他由一个MS-DOS头部开始,接着是实模拟程序残余以及一个PE文件标识,之后紧接着PE文件头和可选头部。这些之后是所有的段头部,断头不之后跟随者所有的段实体。文件的结束处事一些其它的区域,其中是一些混杂的信息,包括重分配信息、符号表信息、行号表信息以及字符串数据。如图:

(1)MS-DOS头部、实模式头部

如上所述,PE文件格式的第一个组成部分是MS-DOS头部。保留这个相同的结构的最主要原因是:当在WINDOWS3.1一下或MS-DOS2.0以上的系统下装在一个文件的时候,操作系统能够读取这个文件并明白是和当前系统不相兼容的。

它的第一域e_magic,被称为魔术数字,它被用于表示一个MS-DOS兼容的文件类型。所有MS-DOS兼容的可执行文件都将这个值设为0x5A4D,表示ASCII字符MZ。MS-DOS头部之所以有的时候被称为MZ头部,就是这个缘故。还有许多其它的域对于MS-DOS操作系统来说都有用,但是对于WINDOWS NT来说,PE结构中只有一个有用的域—最后一个域e_lfnew,一个4字节的文件偏移量,PE文件头部就是由它定位的。对于WINDOWS NT的PE文件来说,PE文件头部是紧跟在MS-DOS头部和实模式程序残余之后的。

(2)实模式残余程序

实模式残余程序是一个转载时能够被MS-DOS运行的实际程序。对于一个MS-DOS的可执行映像文件,应用程序就是从这里执行的。对于WINDOWS、OS/2、WINDOWS NT这些操作系统来说,MS-DOS残余程序就代替了主程序的位置被放在这里。这种残余程序通常什么也不做,而只是输出一行文本,例如:“This program requires Microsoft Windows v3.1 or greater.”

当为WINDOWS 3.1构建一个应用程序的时候,链接器将向你的可执行文件中链接一个名为WINSTUB.EXE的默认残余程序。你可以用于一个基于MS-DOS的有效程序取代WINSTUB,并且用STUB模块定义语句指示器,这样就能够取代链接器的默认行为。为WINDOWS NT开发的应用程序可以通过使用-STUB:连接器选项来实现。

(3)PE头部

该头部的结构如下:

{

DWORO Signature;

IMAGE_FILE_HEADER FileHeader;

IMAGE_OPTIONAL_HEADER OptionalHeader;

}IMAGE_NT_HEADERS,*PIMAGE_NT_HEADERS;

它包括三个域:第一个域是固定的格式“PE”,用来标示PE文件;第二个域包括:PE文件头部、结构体IMAGE_FILE_HEADER,该结构体有20个字节,它具体的定义如下:

Typedef struct_IMAGE_DOS_HEADER

{

USHORT Machine;//指定运行平台

USHORT NumberOfSections;//文件的节表(Section)数目

ULONG TimeDateStamp;//文件创建日期和时间

ULONG PointerToSymbolTable;//用于调试

ULONG NumberOfSymbols;//用于调试

USHORT SizeOfOptionalHeader;//指示紧随本结构之后的OtionalHeader 结构大小,必须有效值

USHORT Characteristics;//关于文件信息的标记,比如文件时exe还是dll

}IMAGE_FILE_HEADER,*PIMAGE_FILE_HEADER;

第三个域:PE可选头部,结构体IMAGE_FILE_HEADER。虽说是可选,但还是必不可少的,它包含了很多信息,如可执行映像的重要信息,例如初始的堆栈大小、程序入口点的位置、首选地址、操作系统版本、段对的信息等等。这个结构体分为两块:第一块是标准域,适合UNIX可执行文件的COFF格式共有的部分。达尔快为Windows NT特定的进程行为提供了装载器的支持。

二、PE病毒入侵

1.PE病毒入侵的原理分析

Windows PE病毒同时也是所有病毒中数量极多,破坏性极大,技巧性最强的一类病毒。它们一般采用嵌入宿主程序的方式来进行传染,利用PE文件中的空隙或增加一节方法栖身于PE文件中,并将程序入口点指向病毒代码,当文件执行时首先执行该病毒,然后执行宿主程序,其原理与DOS下病毒大同小异,但具体实现方法有许多创新。PE病毒入侵文件时用到的基本技术主要有以下几方面:

(1)病毒的重定位

在正常程序中,变量在编译时它在内存的位置就都被计算好了,装入内存后,不用程序员重定位,直接引用就可以了。但病毒程序中,因感染宿主程序的位置不同,各个变量在内存中的位置自然也不同。为了引用这些变量,病毒必须自己重定位。CALL是一条函数调用指令也可以当成是跳转指令。它可以调到目的地址继续执行,执行完毕后会返回到主程序继续执行。当CALL执行时CPU首先把要返回的地址(即吓一条指令的地址)压入堆栈然后跳到目的地址执行。可以看出在跳转之后只要执行一条POP指令或MOV ESP,[ESP]就可以得到吓一跳指令在内存中的实际位置。

(2)获取API函数地址

windows PE病毒就无法象普通PE程序那样直接调用相关API函数,而应该先找出这些API函数在相应动态链接库中的地址。对于这类病毒来说,通常是通过已知API函数序列号或仅知API函数名称来查找API函数地址。

①已知API函数序列号查找入口地址

a.定位到PE文件头。

b.从PE文件头中的可选文件头中取出数据目录表的第一个数据目录,得到导出表的地址。

c.从导出表的Base字段取得起始序号。

d.将需要查找的导出序号减去起始序号,得到函数在入口地址表中的索引。

e.检查索引值是否大于等于导出表中的函数个数。如果大于的话,说明输入的序号无效。

f.用该索引值在AddressOfFunctions字段指向的导出函数入口地址表中取出相应的项目,这就是函数的入口地址RVA值,当函数被装入内存后,这个RVA值加上模块实际装入的基址(ImageBase),就得到了函数真正的入口地址。

②从函数名称查找入口地址

a.定位到PE文件头。

b.从PE文件头中的可选文件头中取出数据目录表的第一个数据目录,得到导出表的地址。

c.从导出表的NumberOfNames字段得到以命名函数的总数,并以这个数字做微循环的次数来构造一个循环。

d.从AddressOfNames字段指向的函数名称地址表的第一项开始,在循环中将每一项定义的函数名与要查找的函数名比较,如果没有任何一个函数名符合,说明文件中没有指定名称的函数。

e.如果某一项定义的函数名与要查找的函数名符合,那么记住这个函数名在字符串地址表中的索引值(如x),然后在AddressOfNameOrdinals指向的数组中以同样的索引值x去找数组项中的值,假如该值为m。

f.以m值作为索引值,在AddressOfFunctions字段指向的函数入口地址表中获取的RVA就是函数的入口地址,当函数被装入内存后,这个RVA值加上模块实际装入的基址(ImageBase),就得到了函数真正的入口地址。

(3)文件搜索

文件搜索算法(文件搜索一般采用递归算法进行搜索):

FindFile Proc

①指定找到的目录为当前工作目录

②开始搜索文件(*.*)

③该目录搜索完毕?是则返回,否则继续

④找到文件还是目录?是目录则调用自身函数FindFile,否则继续

⑤是文件,如符合感染条件,则调用感染模块,否则继续

⑥搜索下一个文件(FindNextFile),转到③继续

FindFile Endp

(4)内存映射文件

在计算机病毒中,使用内存映射文件读写文件, 通常采用如下几个步骤:

①调用CreateFile函数打开想要映射的HOST程序,返回文件句柄hFile。

②调用CreateFileMapping函数生成一个建立基于HOST文件句柄hFile的内存映射对象,返回内存映射对象句柄hMap。

③调用MapViewOfFile函数将整个文件(一般还要加上病毒体的大小)映射到内存中。得到指向映射到内存的第一个字节的指针(pMem)。

④用刚才得到的指针pMem对整个HOST文件进行操作,对HOST程序进行病毒感染。

⑤调用UnmapViewFile函数解除文件映射,传入参数是pMem

⑥调用CloseHandle来关闭内存映射文件,传入参数是hMap。

⑦调用CloseHandle来关闭HOST文件,传入参数是hFile。

2.PE病毒入侵的路径分析

(1)PE病毒入侵过程

PE病毒常见的感染其他文件的方法是在文件中添加一个新节,然后往该新节中添加病毒代码和病毒执行后的返回Host程序的代码,并修改文件头中代码开始执行位置(AddressOfEntryPoint)指向新添加的病毒节的代码入口,以便程序运行后先执行病毒代码。下面我们具体感染过程如图所示:

(2)下面以CIH病毒为例具体分析病毒感染过程:

CIH病毒属于文件型病毒,主要感染Windows PE可执行文件。由于CIH病毒使用了VxD技术使得这种病毒在Windows环境下传播,其实施性和隐蔽性都特别强,使用一般反病毒软件很难发现这种病毒在系统中传播。

感染了CIH病毒的程序被执行时,CIH首先使用了SIDT取得中断描述符表基地址,然后将INT3的入口地址改为指向CIH病毒自身的INT3程序入口。接着CIH自己产生一条INT3指令,这样CIH病毒就可以获得最高级别的CPU使用权限。接下来,CIH将判断DR0寄存器的值是否为0,如果不是则表明计算机已被CIH病毒感染,自己则正常退出;如果DR0寄存器的值为0,就表明没有CIH病毒驻留内存,这时CIH病毒首先会将当前EBX寄存器的值赋给DR0寄存器,作上驻留标记,然后调用INT20,使用VxD call page ALLocate系统调用,向系统申请内存空间来驻留,当申请成功后,CIH病毒就从被感染的文件中将其病毒代码组合起来,放到申请的内存空间中。随后CIH病毒再次调用INT3进入CIH病毒体的INT3入口程序,接着调用INT20,调用一个IFSMgr_Install File System ApiHook 子程序,目的是借助文件系统处理函数来截取系统文件,调用操作。完成这个工作之后,Windows 98/95默认的IFSMgr_Ringo_ FileI0服务程序的入口地址将被CIH病毒保留,以便它的调用。

这样CIH病毒就完成了引导工作,驻留在内存中,开始监视系统的文件调用操作。一旦系统出现要求调用文件CIH就首先截获被调用的文件。然后判断该文件是否为PE格式的EXE 文件,如果是就将自身拆成几段,插入到该文件的空域中,然后修改PE格式文件的文件头中的文件映像执行参数,使其首先指向病毒体;如果不是就将调用转接给Windows 98/95的IFSMgr_I0服务程序。

(CIH病毒感染流程图)

三、PE病毒的清除和防治

1.PE病毒的清除

清除PE病毒不光是去除病毒程序,或使病毒程序不能进行,还要尽可能恢复系统或文件本来面目,以将损失减少至最低程度。清除PE病毒的过程其实可以看作病毒感染宿主程序的逆过程,只要搞清楚病毒的感染机理,清除病毒其实是很容易的。事实上每一种病毒,甚至是每一个病毒的变种,它们的清除方式可能都是不一样的,所有清除病毒时,一定要针对具体的病毒来进行。下面仍以CIH病毒为例分析PE文件病毒手工清除过程。

例:文件感染CIH 病毒的手工消除

(1)准备工作

准备工作主要有两步,一是获得对可执行文件浏览全部代码的文本,二是打印一份感染CIH病毒后的完整的文件头数据样本。

(2)恢复文件头数据及清除病毒代码

①文件感染标志值55H

②EIP相对值

③入口表

④病毒代码组合表

⑤病毒代码文件头部分

⑥病毒代码各个分块部分

(3)写入正常文件代码

以上工作完成后,一份正常的文件数据已经在内存中生成了,最后用下述指令存盘保存:

W 0100

这样,EXCHNG32.DAT就是消除CIH感染影响后的正常文件了,再删除掉原来的可执行文件EXCHNG32.EXE,将EXCHNG32.DAT重命名为EXCHNG32.EXE即可。

尽管每种病毒的清除方法有区别,但是都要遵循病毒清除的基本流程。

(清除病毒的基本流程)

2.PE病毒的防御

(1)PE病毒防御框架的提出

在深入了解WINDOWS PE 文件结构与其中的重要数据和重点分析 PE文件病毒传软、破坏所使用的各种技术后,可以看出病毒应用各种技术可以轻而易举的将自己插入到正常的PE 文件中,当触发条件满足后,便开始破坏行为。目前,较为流行的各种杀毒软件,主要是防御病毒的破坏行为,而对病毒的传播却重视不足。即使能够拦截一部分病毒传播,但是,当病毒使用变形技术后,这种拦截就无能为力了。

设想如果在PE病毒传播时期就将其拒之于系统之外,那么系统的安全性和稳定性将大大提高。针对PE文件病毒而言,在其感染阶段,不让其插入到正常的PE文件中,使其失去寄存空间,在配合一定的杀毒技术,就能对该类病毒实施防御了。

在此基础上本论文提出 PE文件病毒的防御框架,如图:

(2)PE文件型病毒的预防

凡是PE文件型病毒,都要寻找一个可执行文件的宿主,当可执行文件被感染时,其表现症状为文件长度增加或文件头部信息被修改、文件目录表中信息被修改、文件长度不变而内部信息被修改等。

针对这种症状提出一种预防PE文件型的方法。在源程序中增加自检及清除病毒的功能。这种方法的优点是可执行文件从生成起,就有抗病毒的能力,从而可以保证可执行文件的干净。自检清除功能部分和可执行文件的其他部分融为一体,不会和程序的其他功能才冲突,也是病毒制造者无法造出针对性的病毒。可执行文件染不上病毒,PE文件型病毒就无法传播了。

预防PE文件型病毒方法的核心就是使可执行文件具有自检功能,在被加载时检测本身的几项指标——文件长度、文件头部信息、文件内部抽样信息、文件目录表中有关信息。其实现的过程是在使用汇编语言或其他高级语言时,先把上述有关的信息定义为若干大小固定的几个变量,给每个变量先赋一个值,待汇编或编译之后,根据可执行文件中的有关信息,把源程序中的有关变量进行修改,再重新汇编或编译,就得到了所需的可执行文件。

本文以CIH 病毒为例介绍病毒的防治措施。

①查解压文件病毒和实时监控病毒的反病毒软件,并正确使用反病毒软件的各项功能,特别是实时反病毒功能。

②所有的反病毒软件都能够检查和清除CIH病毒,如果用户 在Windows环境下清除CIH病毒失败,可以用干净的DOS盘引导系统,再用DOS版的反病毒软件清除CIH病毒。

③算机进行分区,把重要的数据存放在D盘以后的分区中,当计算机被CIH病毒破坏以后,反病毒软件独有的修复功能可以修复被CIH病毒破坏的硬盘分区表,找回硬盘上的数据。

④范于未然,对重要的数据进行备份,不使用来历不明的软件和光盘,养成使用计算机的良好习惯,同时在每月的26日CIH病毒的发作时间前,提前修改时间。

⑤给计算机进行终身的CIH日病毒免疫。利用CIH病毒传染前检查“感染标记”的特征,运用先进的编程技术,可以“克隆”CIH病毒的“感染标记”,这样一来用户就可以利用反病毒软件的这个功能,使计算机永久性的不会被CIH病毒感染。

(3)一种预防PE文件病毒感染的方法

基于上述的分析研究,本文提出一种预防PE文件病毒的感染的方法。本方法主要是利用了TOOLS7.0中的数据监控(Data Monitor)功能。

首先启动PCTOOLS7.0,选择运行数据监控功能,根据屏幕显示,选择运行写保护后,在根据屏幕提示,按“L”键,选择运行此功能。然后按“S”键选择“System Areas(系统区域)”,这时系统确认对硬盘的系统区如硬盘分区表、FAT表、和BOOT区等实行写保护。按“F”键,选择“File Listed Below”。此时系统对屏幕所示的“Include”表中的各类文件实行写保护。然后可以按“Tab”键,分别激活“Include”和“Exclude”表,根据自己实际工作需要,选择增加对哪些类别的文件实行写保护,对哪些类别的文件不实行写保护。系统默认类别是扩展名为.EXE、.COM、.DLL和扩展名前两位为OV的文件。以上操作完成以后,就可以退出系统,结束操作了。

以上的操作完成了最初的设置,并激活了写保护功能。在以后的使用中如果要激活本功能,只要在自动批处理文件中加入一条命令:

DATAMON/WRITE+>NUL

这样,只要我们启动微机,系统将自动激活数据监控功能,并对硬盘系统区中的各种数据和用户选择的各类文件实行写保护。当我们一旦运行感染病毒的软件时,由于激活的数据监控功能能监控所有读写操作,因此当病毒要对硬盘的系统区进行改写或对.EXE和.COM文件进行删除和写操作是hi,系统将立即发出警报声,并在屏幕上警告用户。让用户从屏幕中选择是否中断操作、继续执行还是取消报警后继续执行。从而使我们能够及时发现病毒,并采取相应的措施。这样就有效的防止了PE文件病毒的感染、扩散及破坏,做到了真正的“防毒”。

四、总结

PE文件病毒是感染Windows系统可执行文件最基本的病毒,了解其工作原理,对防护计算机病毒的能力具有重要的作用。

本论文分成三个部分,首先分析PE病毒的定义和PE文件格式,了解PE病毒的感染机理是通过嵌入其他文件体,当用户执行文件的时候,会先执行病毒代码,然后再去感染其他PE文件,使被感染文件被破坏。其次,本文重点分析了PE病毒的入侵途径,每一个PE病毒的入侵都离不开病毒的重定位、获取API函数地址、文件搜索、使用内存映射文件读写文件这几个过程,又以CIH病毒为例具体分析病毒入侵的过程。最后,在了解PE病毒的感染机理的基础上,提出清除病毒的方法和防御病毒的措施,防御病毒的核心是在病毒感染文件之前将之拒之门外。可以配合一定的杀毒软件,是病毒彻底失去寄存的空间,达到安全防治的目的。

参考文献:

[1]卓新建,郑康锋,辛阳.计算机病毒原理与防治.北京邮电大学出版社,2007

[2]郝文化防黑反毒技术指南.机械工业出版社,2004

[3]程胜利,谈冉,熊文龙.计算机病毒与其防治技术.清华大学出版社,2004

[4]张仁斌,李钢,侯整风.计算机病毒与反病毒技术.清华大学出版社,2004

[5]傅建明,彭国军,张焕国.计算机病毒与对抗.武汉大学出版社,2004

[6]吴万钊,吴万铎.计算机病毒分析与防治大全.学苑出版社,1993

猜你喜欢

防治措施
城市地下空间的灾害和防治措施
围绝经期妇女骨质疏松症的病因分析及防治
浅谈噪声污染现状与防治措施
浅析建筑地基不均匀沉降问题的防治措施
蝴蝶兰软腐病的防治
水产养殖中病害的防治措施分析
我国外资企业避税的主要方式与防治措施
化工机械设备腐蚀原因及防腐措施