计算机病毒传播及复制机理.docx
- 文档编号:15523142
- 上传时间:2023-07-05
- 格式:DOCX
- 页数:63
- 大小:166.38KB
计算机病毒传播及复制机理.docx
《计算机病毒传播及复制机理.docx》由会员分享,可在线阅读,更多相关《计算机病毒传播及复制机理.docx(63页珍藏版)》请在冰点文库上搜索。
计算机病毒传播及复制机理
摘要
随着计算机的普及以及信息技术的高速发展,计算机以及相关的因特网服务为人们的生活、企业的经营甚至整个国家的管理提供了极大的便利,也正是因为如此人们对计算机以及因特网的依赖程度越来越大。
然而在享受计算机带给我们的高效率的同时,各种安全隐患也伴随而来。
计算机病毒便是这些安全威胁的罪魁祸首,因此了解并充分分析计算机病毒的传播与复制机制是主动防范与阻断计算机病毒的先决条件,同时对病毒的传播与复制机制的研究也有利于病毒防范策略的制定。
本文分别从理论以及具体实现两方面来论述目前大部分病毒传播及复制的方法,并针对这些方法提出一些防范的措施。
我们将简要的介绍计算机病毒的历史及发展历程,然后将根据计算机病毒的传播以及复制的方式将计算机病毒分类介绍,进而将对一些常用的传播复制方式进行介绍并最终给出一个简单病毒的代码,并围绕代码进行必要的叙述。
关键词:
计算机病毒、传播复制机理、计算机病毒防范.
Abstract
Gowiththepopularizationofcomputerandthehighspeeddevelopmentofinformationtechnology,computerandtheinterrelatedinternetserviceaffordsagreatconveniencetoourlives,andalsogivesgreathelptothemanagementofaenterpriseandeventhewholecountry.Becauseofthis,People'slivesmoreandmoredependonthecomputerandtheinternet.Butwhenweenjoythehighefficiencybroughtbythecomputer,moreandmoresecurityhiddentroubleswemustfaced.Computervirusisthedeputyofthesehiddentroubles.Sofindoutthewayofcomputervirusspreadandcopyitselfisthepreconditiontokeepawaythecomputervirus,anditcanalsohelpusestablishastrategytostopthevirus.
Inourpaperwewilldiscussthemechanismofthevirus'sspreadandcopyintwoaspects-theoryandpractice.Andwewilltalksomemeasurestostopthem.
Wewillintroducethehistoryanddevelopcourseofthecomputervirusinbriefly,andthenwewilltalkabouttheclassificationofthecomputervirus.Afterthis,wewillintroducethecommonwaythevirususedtospreadandcopythemselves.Finally,wewillprovideasimpleviruscode,andintroduceit.
Keyword:
ComputerVirus,SpreadandCopyMechanism.
摘要I
AbstractII
1绪言
1.1计算机病毒的定义及其由来1
1.2计算机病毒的分类2
1.3计算机病毒的基本特征3
1.4计算机病毒的研究现状3
2PE文件格式介绍
2.1概论5
2.2PE文件头6
2.2.1DOS文件头和DOS块6
2.2.2PE文件头(NT文件头)7
2.3节表和节12
2.4资源节15
2.5小结17
3病毒的感染策略
3.1感染引导区18
3.1.1主引导记录感染技术18
3.1.2DOS引导记录感染技术19
3.2文件感染技术19
3.3内存驻留技术22
3.4小结23
4病毒的传播策略
4.1计算机病毒的传播途经24
4.2蠕虫病毒的传播机制24
4.3病毒传播过程中的相关技术28
4.3.1和远程主机建立连接28
4.3.2常见的蠕虫代码传送及执行技术31
4.4小结33
5一个简单病毒程序的分析
5.1编程环境34
5.2病毒程序功能模块介绍34
5.2.1进程注入模块34
5.2.2唯一实例模块38
5.2.3用户程序执行模块39
5.2.4插入代码模块40
5.3小结43
6总结与展望
6.1工作总结44
6.2工作展望44
致谢45
参考文献46
1绪言
1.1计算机病毒的定义及其由来
早在1949年,计算机技术的先驱、美籍葡萄牙人约翰·冯·诺依曼(JohnvonNeumann)在他的论文《复杂自动机组织论》中就提出了自我复制系统的概念,并对自我复制结果进行了建模[1,2,3]。
在冯·诺伊曼看来,可以用自我构建的自动机来实现自我复制过程,这样一个系统主要有以下三个主要部分构成:
1)一个通用机器(universalmachine)
2)一个通用构造机(universalconstructor)
3)保存在磁带上的信息
通用机器(图灵机)读取磁带存储器上的信息,通过使用这些信息,能够通过通用构造机来逐块的重建自身。
而机器本身对这一过程是一无所知的,他仅仅是执行磁带机上的信息而已。
1959年英国科学家LionelPenrose[4]提出了另外一种自我复制机器,它具备繁殖,变异,攻击等特性。
这一计算机病毒的数学模型不久便被FrederickG.stahl[5]用IBM650机器语言实现。
真正的计算机病毒的雏形,是在1966年前后,由RobertMorrisSr.以及他的两个好朋友VictorVyssotsky,DennisRitchie共同开发的,他们将这一游戏代码命名为Darwin.Darwin的最初版本是在贝尔实验室为PDP-1设计的。
不久之后,Darwin演变成了磁芯大战(CoreWar),这是一个至今仍然有许多程序员和数学家玩的电脑游戏。
这是一个通过在内存中不断复制自身来覆盖对手的程序而将其‘杀’掉的游戏,它具备了自我复制的特点,因而成为了计算机病毒的雏形。
计算机病毒在微型计算机上的出现是在20世纪80年代,然而在70年代便出现了计算机病毒的先驱:
1971-1972年的爬行者(Creeper)和1975年JohnWalker在UNIVAC(通用自动计算机)上编写的流行游戏ANIMAL的一个传染性版本[6]。
微型计算机上出现的第一个病毒大约是1982年在Apple-II上由美国宾夕法尼亚州匹兹堡的一个九年级的学生RichSktenta[7]编写的名为ElkCloner程序。
每当第50次用被感染的磁盘启动系统后,按系统重启动键时,ElkCloner就会在屏幕上显示Sktenta写的一首诗。
他是在每50次启动时把自己的payload挂(hook)在操作系统的重启动处理程序上,从而实现按下重启动键后触发病毒。
1984年,数学家FredetickCohen博士[8]引入了计算机病毒(ComputerVirus)这一术语,他为计算机病毒提出了一个形式化的数学模型,并给出了计算机病毒的非形式化定义:
“计算机病毒是一种计算机程序,它通过修改其他程序把他自己的一个拷贝或其演化的拷贝插入到其他程序中,从而感染它们。
”这个定义揭示了计算机病毒的许多重要特性,但却并不能概括所有病毒,如:
伴生病毒就没有必要改变其他程序的代码。
1994年2月18日,我国正式颁布实施的《中华人民共和国信息系统安全保护条例》的第28条指出:
“计算机病毒,是指编织或者在计算机程序中插入的坡滑计算机功能或者毁坏数据,影响计算机使用,并能自我复制的一组计算机指令或者程序代码。
”[9]此定义具有法律性、权威性。
1.2计算机病毒的分类
虽然计算机病毒的种类非常多,表现形式也多种多样,但是通过一定的标准可以将当今的病毒分成几种特定的类型。
根据计算机病毒的不同特点,对计算机病毒的分类可以有多种方法。
例如:
可以着眼于病毒的攻击方式进行分类,也可以着眼于病毒的破坏能力进行分类,等等。
1.2.1根据病毒破坏能力分类[10]
1)无害型:
除了传染时减少磁盘的空间外,对系统无其他影响。
2)无危险型:
这种病毒仅仅是占用内存,显示图像,发出声音等。
3)危险型:
这类病毒会造成计算机操作系统的严重错误。
4)非常危险型:
这类病毒删除程序,破坏数据,清除系统内存区及操作系统中的重要信息。
1.2.2根据病毒感染策略分类
1)引导型病毒[11]:
这类病毒是通过感染磁盘的引导扇区或者主引导记录(MBR)来实现先于操作系统的执行。
引导型病毒按其寄生对象的不同,又可以分为MBR(主引导)病毒,BR(引导区)病毒。
MBR病毒也称分区病毒,将病毒寄生在磁盘分区主引导程序所占据的磁盘0头0柱面第1个扇区中。
BR病毒是将病毒寄生在磁盘逻辑0扇区或软盘逻辑0扇区(即0面0道第一个扇区)。
1986年,巴基斯坦一对兄弟在IBMPC上编写的Brain便是这类病毒。
2)文件型病毒[11]:
是利用文件系统进行进行传染的一类病毒。
这类病毒的感染对象大多是扩展名为.com,.exe和.ovl的可执行程序。
大多数的文件型病毒会把自己的代码插入到这些文件的头部或结尾部分,当用户执行这些文件时便会启动这类病毒。
也有一部分病毒会直接改写这些文件,当然源文件便遭到破坏。
90年代后还出现了以感染WORD,EXCEL等OFFICE文件的宏病毒。
之后出现的脚本病毒,与宏病毒类似,但执行环境不再局限于OFFICE文件,而出现在任何使用脚本语言的地方。
3)混合型病毒[11]:
这类病毒可以同时感染文件和磁盘引导扇区,并且采用较复杂的算法。
这类病毒的传染性以及存活率得到了大大提高,1991年的Tequila病毒便属于此类。
1.2.3根据病毒所采用的内存驻留技术分类[12]
1)直接感染型病毒:
这类病毒一般不主动驻留在内存中,而是随着宿主程序一起装入到内存中,在获取系统控制权后,通过枚举所有目录,感染磁盘文件。
2)内存驻留病毒:
这类病毒在完成病毒代码初始化以后仍然驻留在系统内存中,这种病毒的工作过程主要包括以下几个步骤:
1.获得系统的控制权;2.为病毒自身分配一块内存空间;3.将病毒拷贝到新分配的内存空间;4.激活刚刚拷贝的病毒程序体;5.通过钩挂方式接管大妈执行流程;6.感染新的文件或者系统。
3)临时内存驻留病毒:
这类病毒并不是一支驻留在内存中,而是只在内存中保留一段很短的时间或者等到某个特定事件发生后就退出。
保加利亚人编写的病毒Anthraxjiu属于这类病毒。
4)其他类型:
如交换型病毒,进程病毒,内核模式病毒等等。
1.2.4其他分类方法
如按病毒自保护方式还可以分为隧道病毒,装甲病毒等。
按传播媒体分又有单机病毒,网络病毒等,其中蠕虫病毒便是目前让人头痛的通过网络传播的病毒。
1.3计算机病毒的基本特征
计算机病毒一般具有以下特征:
1.非授权执行。
病毒在进驻系统后往往会感染用户的磁盘文件,当用户在不知情的情况下,运行被感染的文件时,病毒便获得系统控制权,在未授权的情况下破坏系统或窃取信息等。
2.隐蔽性。
这是所有病毒都试图具备的特性,病毒的本质决定它不能名目账单的在系统中破坏,这样不仅很快会被用户察觉,而且也可能在病毒还未开始破坏就被终止,因此只有具备良好隐蔽性的病毒才能广泛传播,造成巨大破坏。
3.自我复制。
这是计算机病毒的最根本的特征。
病毒在进驻系统内存后,便会以不同的方式复制自己,将自己的一个拷贝插入大磁盘文件或共享文件中,通过移动介质或互联网传播出去。
4.潜伏性。
一些病毒在感染系统后并不立即运行,而是在用户难以察觉的情况下病毒才发作,这样的病毒更难以发觉,进而提高了其存活率。
5.破坏性。
这是病毒程序进驻系统后的另一个目的,它们往往会试图做出一些破坏行为,如:
删除用户加密数据,破坏系统致使系统崩溃,甚至造成计算机硬件的不可逆破坏,当然当今的病毒并不一定对系统造成破坏,它们往往执行偷窃用户机密信息的功能,但无论怎样,运行在后台的病毒程序总会占用系统资源,因而会表现出系统效率下降,等副作用。
6.可触发性。
计算机病毒往往具备一个或几个触发条件,当满足触发条件后,病毒便会进行传染或对系统进行能够破坏。
触发的实质是一种条件控制,当满足条件后病毒便会发作。
1.4计算机病毒的研究现状
近几年来由于计算机病毒的大规模爆发,如:
1999年的Mellisa,2000年的ILoveYou,2001年的CodeRed,2002年的Nimda,2003年的SQL,Slamme,2004年的Worm.sasser等,致使计算机病毒的研究逐渐的成为了人们研究的热点问题。
2001年Staniford等人根据CodeRed爆发时的数据,利用传播病学模型建立了一个病毒传播模型[13],这个模型较好的描述了病毒传播的初期状况。
在这个模型的基础上考虑到人为因素的影响,ZonC.C.等人还提出了双因素模型[14]。
Giuseppe等人在考虑了网络中存在网络堵塞的情况,给出了机遇分组的病毒传播模型(compartment-basedmodel)[15].上述模型都是连续模型,ChenZ.等人还给出了离散的病毒传播模型[16]。
目前国内对于计算机病的理论的研究较少。
文伟平等人给出了一个计算机蠕虫病毒的进展情况的综述[17]。
但是随着计算机病毒的危害越来越大,国内研究病毒的专业人士也会越来越多。
2PE文件格式介绍
2.1概论
在一个操作系统中,可执行的文件代码在被装入内存执行之前是以文件的方式存放在磁盘中的,DOS操作系统中的COM文件是最早也是最简单的可执行文件,由于在COM文件中仅仅包含执行代码,没有附带任何“支持性”数据,所以COM在使用方便的同时也存在诸多限制:
首先是没有附加数据来指定文件入口,这样,第一句执行指令必须安排在文件头部;再就是没有重定位信息,这样代码中不能有跨段操作数据的指令,造成代码和数据,甚至包括堆栈只能限制在同一个64KB的段中[18]。
因此,为了解除这些限制,DOS系统由定义了另一种可执行文件-EXE文件,在EXE文件中可执行代码的前面添加了一个文件头,文件头中包含了各种附加性说明数据,如:
文件入口,堆栈位置,重定位表等,借由这些附加数据,操作系统能够根据文件头的信息将代码装入内存,同时可以根据重定位信息修正代码,在设置好堆栈后通过文件入口信息执行代码,这显然解决了COM文件带来的诸多不便。
由于可执行文件是在操作系统的基础上运行的,因而可执行文件的头部信息以及格式可因操作系统的不同而不同。
因此本节主要介绍基于WINDOWS的可执行文件。
在WINDOWS刚刚面世的时候,尤其是在Windows3.X出现的时候,虽然32位代码出现在了可执行文件之中,但是在程序转到保护模式之前需要在实模式下进行一些初始化,因而这就要求可执行文件必须同时包含16位和32位代码,故在Windows3.X中使用LE格式的可执行文件来满足要求(Linearexecutable/线性可执行文件)[18]。
另:
在Windows9x中的VxD驱动程序也使用LE格式,因为这些驱动程序中也同时包括16位和32位代码。
进入Windows9x,NT,2000,XP以后,可执行程序可以不再包含16位代码,从而对于纯32位的可执行文件在Windows系统中使用一种新的文件格式——PE格式(PortableExecutable可移植的执行体)。
PE文件的基本结构如下[18]:
PE文件的基本结构
在PE文件中,代码、已初始化的数据、资源和重定位信息等数据被按照属性分类放到不同的节(Section)中,而每个节的属性和位置等信息用一个IMAGE_SECTION_HEADER结构来描述,所有的IMAGE_SECTION_HEADER结构组成一个节表(SectionTable),节表数据在PE文件中被放在所有节数据的前面。
这是为了适应当文件加载到内存中后对内存页属性的统一指定。
2.2PE文件头
由于PE文件中数据是按照属性在节中放置的,不同用途但是属性相同的数据(如导入表、导出表以及.const段指定的只读数据)可能被放在同一个节中,所以PE文件中还用一系列的数据目录结构IMAGE_DATA_DIRECTORY来分别指明这些数据的位置,数据目录表和其他描述文件属性的数据合在一起称为PE文件头,PE文件头被放置在节和节表的前面。
同时为了与DOS系统的文件格式兼容,在上述部分的前面又加上了一个标准的DOSMZ格式的可执行部分,所有这些部分合起来组成了现在使用的PE文件。
下面将分别介绍PE文件头的具体结构。
2.2.1DOS文件头和DOS块
PE文件是以DOS的可执行文件头开始的(图中的部分1),这部分是为了实现程序向下兼容性而保留的。
由于操作系统对可执行文件的识别是通过文件的结构而非扩展名来实现的,因此虽然DOS传统的EXE文件,WINDOWS的LE,PE格式的可执行文件都沿用了.EXE的扩展名,但操作系统仍能正确识别这些文件并将它们按照正确的方法装载入内存并执行。
但是这样做存在的问题在于,当在DOS执行PE格式的可执行文件时,由于DOS操作系统无法正确识别PE文件头的格式,DOS操作系统将整个PE文件当作执行代码装载入内存,而这将直接导致系统挂起。
为了避免这种问题的发生,在PE文件的头部首先加入了DOS文件头,并在其后加入了一个DOS块(DOSstub),从而使得DOS系统通过DOS文件头将PE文件按照DOS文件装载并执行DOS块中的程序,这段程序一般就是显示一段“ThisprogramcannotberuninDOSmode.”的提示,然后退出。
显然这有效的防止了系统挂起。
PE文件中DOS文件头由MZ格式的文件头构成,而MZ格式的文件头由IMAGE_DOS_HEADER结构定义(汇编语言格式,以后相同)[18]:
DOS文件头的第一个字段e_magic被定义成字符“MZ”(在Windows.inc文件中已经预定义为IMAGE_DOS_SIGNATURE)作为识别标志,后面的一些字段指明了入口地址、堆栈位置和重定位表位置等信息。
标准的DOS文件头的定义只到e_ovno字段位置,后面的这些字段是在Windows系统出现后为了定义LE、PE等文件格式而扩充的,DOS系统对这些字段不进行解释。
对于PE文件来说,有用的是最后的e_lfanew字段,这个字段指出了真正的PE文件头(如图中的②所示)在文件中的位置,这个位置总是以8字节为单位对齐的。
当然,Windows中使用的其他几种可执行文件格式也是这样引出的,如果是LE,LX等格式的文件,那么e_lfanew字段指向的位置会是LE文件头和LX文件头。
2.2.2PE文件头(NT文件头)
通过DOS文件头的e_lfanew字段(文件头偏移003ch)可以得到真正的PE文件头位置。
PE文件头是由IMAGE_NT_HEADERS结构定义的,其结构如下:
IMAGE_NT_HERDERSSTRUCT
SignatureDWORD?
;PE文件标识
IMAGE_<>
OptionalHeaderIMAGE_OPTIONAL_HEADER32<>
IMAGE_NT_HEADERSENDS
IMAGE_NT_HERDERS结构中的Signature字段被定义为00004550h,也就是字符'P''E'再加上0,这是用来标识PE头部的开始,两个字段用来标识文件的大部分属性。
下面将分别介绍这两个字段。
1.字段
字段是由IMAGE_结构描述的,其结构定义如下:
IMAGE_STRUCT
MachineWORD?
NumberOfSectionsWORD?
TimeDateStampDWORD?
PointerToSymbolTableDWORD?
NumberOfSymbolsDWORD?
SizeOfOptionalHeaderWORD?
CharacteristicsWORD?
IMAGE_ENDS
其中的各个字段解释如下:
●Machine字段
用来指定文件的运行平台,常见的定义值如下图,如果Windows检测到这个字段指定的适用平台与当前的硬件平台不兼容,系统将拒绝装入这个文件。
运行平台识别码(更多定义参见Windows.inc文件)[18]
●NumberOfSections字段
指出了PE文件所包含的节的数目。
●TimeDateStamp字段
编译器创建此PE文件的时间,它的数值是从1969年12月31日下午4:
00开始到创建时间为止的总秒数[19]
●PointerToSymbolTable字段
表示文件的COFF符号表的偏移量。
仅用于带有COFF类型调试信息的COFF型OBJ文件和PE文件中。
因为PE文件支持多种调试格式,所以该字段一般总是为0[20]。
●NumberOfSymbols字段
表示在COFF符号表中的符号数目。
●SizeOfOptionalHeader字段
紧接在当前结构下面的IMAGE_OPTIONAL_HEADER32结构的长度,这个值等于00e0h。
●Characteristics字段
属性标志字段,它的不同数据位定义了不同的文件属性,具体内容如下表,计算机操作系统根据该字段决定PE文件的装入方式,比如当位13为1时,表示这是一个DLL文件,那么系统将使用调用DLL入口函数的方式调用文件入口,否则的话,表示这是一个普通的可执行文件,系统直接跳到入口处执行。
对于普通的可执行PE文件,这个字段的值一般是010fh,而对于DLL文件来说,这个字段的值一般是210eh。
数据位
Windows.inc中的预定义值
为1时的含义
0
IMAGE_
文件中不存在重定位信息
1
IMAGE_
文件是可执行的
2
IMAGE_
不存在行信息
3
IMAGE_
不存在符号信息
7
IMAGE_
小尾方式
8
IMAGE_
只在32位平台上运行
9
IMAGE_
不包含调试信息
10
IMAGE_
不能从可移动盘(如软盘、光盘)运行
11
IMAGE_
不能从网络运行
12
IMAGE_
系统文件(如驱动程序),不能直接运行
13
IMAGE_
这是一个DLL文件
14
IMAGE_
文件不能在多处理器上计算机上运行
15
IMAGE_
大尾方式
Characteristics字段各位含义
2.OptionalHeader字段
OptionalHeader字段由IMAGE_OPTIONAL_HEAD
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机病毒 传播 复制 机理