第八章恶意程序及其防范Word文档格式.docx
《第八章恶意程序及其防范Word文档格式.docx》由会员分享,可在线阅读,更多相关《第八章恶意程序及其防范Word文档格式.docx(51页珍藏版)》请在冰豆网上搜索。
1.传染性
病毒也是一种程序,它与其他程序的显著不同之处,就是它的传染性。
与生物界中的病毒可以从一个生物体传播到另一个生物体一样,计算机病毒可以借助各种渠道从已经感染的计算机系统扩散到其他计算机系统。
早在1949年,计算机的先驱者VonNeumann就在他的论文《复杂自动机组织论》中,提出了计算机程序在内存中自我复制的设想,勾画了病毒程序的蓝图。
1977年夏天,美国作家托马斯·
捷·
瑞安在其幻想小说《P-1的青春》一书中构思了一种能够自我复制的计算机程序,第一次使用了“计算机病毒”的术语。
所以自我复制应当是计算机病毒的主要特征。
20世纪60年代初,美国贝尔实验室里,三个年轻的程序员编写了一个名为“磁芯大战”的游戏,游戏中通过复制自身来摆脱对方的控制,这就是计算机“病毒”的雏形。
1983年美国计算机专家弗雷德·
科恩博士研制出一种在运行过程中可以自我复制的具有破坏性的程序,并在同年11月召开的国际计算机安全学术研讨会,首次将病毒程序在VAX/750计算机上进行了实验。
世界上第一个计算机病毒就这样出生在实验室中。
20世纪80年代初,计算机病毒(如“巴基斯坦智囊”病毒)主要感染软盘的引导区。
20世纪80年代末,出现了感染硬盘的病毒(如“大麻”病毒)。
20世纪90年代初,出现了感染文件的病毒(如“Jerusalem,黑色13号星期五”病毒)。
接着出现了引导区和文件型“双料”病毒,既感染磁盘引导区又感染可执行文件。
20世纪90年代中期,称为“病毒生产机”的软件开始出现,使病毒的传播不再是简单的自我复制,而是可以自动、轻易地自动生产出大量的“同族”新病毒。
这些病毒代码长度各不相同,自我加密、解密的密钥也不相同,原文件头重要参数的保存地址不同,病毒的发作条件和现象不同。
1995年大量具有相同“遗传基因”的“同族”病毒的涌现,标志着“病毒生产机”软件已出现。
目前国际上已有上百种“病毒生产机”软件。
这种“病毒生产机”软件不用绞尽脑汁地去编程序,便可以轻易地自动生产出大量的“同族”新病毒。
这些病毒代码长度各不相同,自我加密、解密的密钥也不相同,原文件头重要参数的保存地址不同,病毒的发作条件和现象不同,但主体构造和原理基本相同。
这就是病毒的衍生性。
与此同时,Internet的发展,也为病毒的快速传播提供了方便途径。
2.潜伏性
计算机病毒通常是由技术高超者编写的比较完美的、精巧严谨、短小精悍的程序。
它们常常按照严格的秩序组织,与所在的系统网络环境相适应、相配合。
病毒程序一旦取得系统控制权,可以在极短的时间内传染大量程序。
但是,被感染的程序并不是立即表现出异常,而是潜伏下来,等待时机。
除了不发作外,计算机病毒的潜伏还依赖于其隐蔽性。
为了隐蔽,病毒通常非常短小(一般只有几百或1K字节,此外还寄生于正常的程序或磁盘较隐蔽的地方,也有个别以隐含文件形式存在,使人不经过代码分析很难被发觉。
20世纪90年代初,计算机病毒开始具有对抗机制。
例如YankeeDoole病毒,当它发现有人用Debug工具跟踪它,就会自动从文件中逃走。
此外还相继出现了一些能对自身进行简单加密的病毒,如1366(DaLian)、1824(N64)、1741(Dong)、1100等。
加密的目的主要是防止跟踪或掩盖有关特征等。
例如在内存有1741病毒时,用DIR列目录表,病毒会掩盖被感染文件所增加的字节数,使人看起来字节数很正常。
3.寄生性
寄生是病毒的重要特征。
计算机病毒一般寄生在以下地方:
(1)寄生在可执行程序中。
一旦程序执行,病毒就被激活,病毒程序首先被执行并常驻内存,然后置触发条件。
感染的文件被执行后,病毒就会趁机感染下一个文件。
文件型病毒可以分为源码型病毒、嵌入型病毒和外壳型病毒。
源码型病毒是用高级语言编写的,不进行编译、链接,就无法传染扩散。
嵌入型病毒是嵌入在程序的中间,只能针对某些具体程序。
外壳型病毒寄生在宿主程序的前面或后面,并修改程序的第1条指令,使病毒先于宿主程序执行,以便一执行宿主程序就传染一次。
(2)寄生在硬盘的主引导扇区中。
这类病毒也称引导型病毒。
任何操作系统都有自举过程,自举依靠引导模块进行,而操作系统的引导模块总是放在某个固定位置,这样系统每次启动就会在这个固定的地方来将引导模块读入内存,紧接着就执行它,来把操作系统读入内存,实现控制权的转接。
引导型病毒程序就是利用这一点,它自身占据了引导扇区而将原来的引导扇区的内容和病毒的其他部分放到磁盘的其他空间,并将这些扇区标志为坏簇,不可写其他信息。
这样,系统的一次初始化,就激活一次病毒,它首先将自身拷贝到内存,等待触发条件到来。
引导型病毒按其寄生对象,可以分为MBR(主引导区)病毒和BR(引导区)病毒。
MBR病毒也称分区病毒,这类病毒寄生在硬盘分区主引导程序所占据的硬盘0头0柱面第1扇区,典型的有Stoned(大麻)病毒、2708病毒等。
BR病毒则寄生在硬盘逻辑0扇区或软盘0扇区(即0面0道的第1扇区),典型的有Brain病毒、小球病毒等。
4.触发性
潜伏下来的计算机病毒一般要在一定的条件下才被激活,发起攻击。
病毒具有判断这个条件的功能。
(1)日期/时间触发。
(2)计数器触发.
(3)键盘触发.
(4)启动触发.
(5)感染触发.
(6)组合条件触发:
5.非授权执行性
用户在调用一个程序时,常常就把系统的控制权交给这个程序并给它分配相应的系统资源,使程序的执行对用户是透明的。
计算机病毒具有正常程序所具有的一切特性,它隐蔽在合法程序和数据中;
当用户运行正常程序时,病毒伺机取得系统的控制权,先于正常程序执行,并对用户呈透明状态。
6.破坏性
(1)占用CPU资源,额外占用或消耗内存空间,或禁止分配内存、蚕食内存,导致一些大型程序执行受阻,使系统性能下降。
(2)干扰系统运行,例如不执行命令、干扰内部命令的执行、虚发报警信息、打不开文件、内部栈溢出、占用特殊数据区、时钟倒转、重启动、死机、文件无法存盘、文件存盘时丢失字节、内存减小、格式化硬盘等。
(3)攻击CMOS。
CMOS是保存系统参数(如系统时钟、磁盘类型、内存容量等)的重要场所。
有的病毒(如CIH病毒)可以通过改写CMOS参数,破坏系统硬件的运行。
(4)攻击系统数据区。
硬盘的主引导扇区、boot(引导)扇区、FAT(文件分配)表、文件目录等,是系统重要的数据,这些数据一旦受损,将造成相关文件的破坏。
(5)干扰外部设备运行,如
·
干扰键盘操作。
如EDV病毒能封锁键盘,使按任何键都没有反应;
还有病毒产生换字、抹掉缓存区字符、输入紊乱等。
干扰屏幕显示。
如小球病毒产生跳动的小白点;
瀑布病毒使显示的字符像雨点一样一个个落到屏幕底部等。
干扰声响。
如感染Attention病毒后,每按一键,喇叭就响一声;
YankeeDoodle病毒在每天下午5时整会播出歌曲“YankeeDoodle”;
救护车病毒(AmbulanceCar)会在屏幕上出现一辆鸣着警笛来回跑的救护车。
干扰打印机。
如Azsua病毒可以封锁打印机接口LPT1,当使用打印机时,会发出缺纸的假报警;
1024SBC病毒会使打印机出现断断续续的打印失常;
Typo-COM病毒会更换字符。
(6)攻击文件。
现在发现的病毒中,大多数是文件型病毒。
这些病毒会使染毒文件的长度、文件存盘时间和日期发生变化。
例如,百年病毒、4096病毒等。
(7)劫取机密数据。
例如,微软公司在它的MicrosoftNetwork中加入一种特洛伊木马程序,会把用户系统软件和硬件的完整清单送回到微软公司。
(8)破坏网络系统的正常运行。
例如发送垃圾邮件、占用带宽,使网络拒绝服务等。
有些病毒的破坏作用往往是多样的。
1.1.2计算机病毒分类
•1.按照所攻击的操作系统分类
•·
DOS病毒:
攻击DOS系统。
UNIX/Linux病毒:
攻击UNIX或Linux系统。
Windows病毒:
攻击Windows系统,如CIH病毒。
OS/2病毒:
攻击OS/2系统。
Macintosh病毒:
攻击Macintosh系统,如Mac.simpsons病毒。
手机病毒。
2.按照寄生方式和传染途径分类
(1)引导型病毒。
引导型病毒在系统初始化时自动装入内存,然后简单地将指令指针(指令计数器的内容)修改到一个存储系统指令的新的位置。
主引导区(masterbootrecord,MBR)病毒,寄生在硬盘分区主引导程序所在的硬盘的0柱面0磁道1扇区,也称分区病毒,如大麻病毒、2708病毒等。
引导区(bootrecord,BR)病毒,寄生在硬盘逻辑0扇区或软盘逻辑0扇区,即0面0道1扇区,如Brain病毒和小球病毒等。
•
(2)文件型病毒。
•传播病毒的文件可以分为三类:
可执行文件,即扩展名为.COM,.EXE,.PE,.BAT,.SYS,.OVL等的文件。
文档文件或数据文件,例如Word文档,Exel文档,Accss数据库文件。
宏病毒(Macro)就感染这些文件。
Web文档,如.html文档和.htm文档。
已经发现的Web病毒有HTML/Prepend和HTML/Redirect等。
•按照驻留内存的方式,文件型病毒可以分为:
驻留(Resident)病毒:
复制病毒装入内存后,发现另一个系统运行的程序文件后进行传染。
驻留病毒又可进一步分为高端驻留型、常规驻留型、内存控制链驻留型、设备程序补丁驻留型。
非驻留(Nonrresident)病毒:
病毒选择磁盘上一个或多个文件,不等它们装入内存,就直接进行感染。
•(3)目录型病毒。
是文件型病毒的一种特例,它们仅修改目录区,如DIR2病毒。
•(4)引导兼文件型病毒。
这类病毒在文件感染时还伺机感染引导区,例如CANCER病毒、HAMMERⅤ病毒等。
•(5)CMOS病毒。
CMOS是保存系统参数和配置的重要地方,它也存在一些没有使用的空间。
CMOS病毒就隐藏在这一空间中,从而可以躲避磁盘的格式化清除。
3.按照传播媒介分类
•·
单机病毒:
以磁盘为传染媒介。
网络病毒:
以网络中的传输的命令或数据作为媒介。
4.按照计算机病毒的链接方式分类
•
(1)源码型病毒。
攻击高级语言编写的程序,在被攻击程序编译前插入进来,并在编译后成为合法程序的一部分。
•
(2)嵌入型病毒。
计算机病毒的主体与被攻击对象以插入方式链接,把自己嵌入到攻击对象中。
这类病毒程序编写难度大,清除也难。
•(3)外壳(shell)病毒。
这类病毒程序
•这类病毒通常附加在正常程序的头部或尾部,相当于给程序添加了一个外壳,在被感染的程序执行时,病毒代码先被执行,然后才将正常程序调入内存。
目前大多数文件型的病毒属于这一类。
•(4)译码型病毒。
隐藏在微软的office、AmiPro文档中,如宏病毒、脚本病毒等(VBS/WSH/JS)等。
•(5)操作系统型病毒。
这类病毒意图用自己的代码加入或取代操作系统的某些模块,具有很强的破坏性,例如小球病毒、大麻病毒等。
5.按照破坏能力分类
•按照病毒的破坏能力,可将病毒划分为以下几类:
无害型:
除了传染时减少磁盘的可用空间外,对系统没有其它影响。
无危险型:
这类病毒仅仅是减少内存、显示图像、发出声音及同类音响。
危险型:
这类病毒在计算机系统操作中造成严重的错误。
非常危险型:
这类病毒删除程序、破坏数据、清除系统内存区和操作系统中重要的信息。
1.1.3计算机病毒的结构
计算机病毒的种类很多,但是它们的主要结构是类似的,一般需要包含3部分:
隐藏部分、传染部分和表现部分分。
(1)隐藏部分:
就是病毒程序的初始化部分。
它的作用是将病毒的主体加载到内存,为传染部分做准备(如驻留内存、修改中断、修改高端内存、保存原中断向量等操作)。
(2)传染部分:
作用是将病毒代码复制到传染目标上去。
传染需要一定的条件。
不同类型的病毒在传染方式、传染条件上各不相同。
进行传播之前,先要判断传染条件。
(3)表现部分:
作用是在被传染系统上表现出特定现象。
大部分病毒都是在一定条件下才会触发表现部分的。
二、计算机病毒编制的关键技术
1.3.1DOS引导型病毒编制的关键技术
1.DOS系统的结构
DOS系统由以下4部分组成:
(1)引导记录(BootRecord)。
用于将IO.SYS模块装入内存。
(2)IO.SYS(DOS的基本输入输出模块BIOS),由下面两块组成:
·
系统初始化程序SYSINIT,完成初始化工作,主要包括:
确定系统设备配置和内存容量;
初始化串、I/O并口;
计算后面模块的装入位置并将MSDOS.SYS和COMMAND.COM装入内存;
设置系统参数,加载设置驱动程序。
标准字符和块设备驱动程,用于支持基本输入输出操作。
(3)MSDOS.SYS(DOS的内核),提供应用程序管理、内存管理、文件管理等。
(4)COMMAND.COM(DOS的外壳),是用户与操作系统的接口。
2.硬盘存储结构
DOS格式化磁盘由4个区域组成:
主引导扇区、
文件分配表(FAT)、
根目录表(RootDirectoryTable,FDT)
文件数据区(DataArea)
主引导扇区位于硬盘的0柱面0磁道1扇区,存放:
•主引导记录(mainbootrecord,MBR)
•硬盘主分区表(DiskPartitionTable,DPT)
•引导扇区标记(bootrecordID)
(1)主引导记录(MBR)占用引导扇区的前466个字节(0000~01BD),作用是检查分区表是否正确以及确定哪个分区为引导分区(要将控制权交给的操作系统所在分区),并在程序结束时把该分区的启动程序(即操作系统引导程序)调入内存加以执行。
•在DOS的启动过程中,中断服务程序INT19H(自举程序)将引导记录调入内存的0000H~7C00H处,并把控制权交给它。
这时,引导记录将检查启动盘上是否有DOS系统,即根目录中的前两个文件是否为IO.SYS和MSDOS.SYS。
若是,则把文件IO.SYS读入到内存的70H~0H处,并把主控制权交给IO.SYS;
否则给出非系统盘的错误信息。
•
(2)磁盘主分区表(DPT)中记录了磁盘的基本分区信息。
它占用的64字节,分为4个分区项,分别记录了每个主分区的信息。
•(3)引导区标记——55AA,占用两个字节,用于判断引导区是否合法。
3.DOS的自举过程
ROMBIOS→DOS引导程序→IO.SYS→MSDOS.SYS→COMMAND.COM→用户
主引导记录程序的基本功能是读出自举分区的BOOT程序,并把控制权转移到分区BOOT程序。
在这一过程中,关键性的技术有:
(1)将本来要读入到0000:
7C00H处的硬盘主引导记录程序转移到0000:
0600H处。
代码段如下:
(2)顺序读入4个分区表的自举标志,以找出自举分区:
若找不到,就转向执行INT18H的BOOT异常,执行异常中断程序。
偏移机器码符号指令说明
001DBEBE07movsi,07be;
分区表首地址01BE=07BE-0600
0020B304movbl,04;
最多4个分区
0022803C80cmpbyteptr[si],80;
80H表示活动分区
0025740Ejz0035;
找到活动分区则跳走
0027803C00cmpbyteptr[si],00;
00H表示有效分区
002A751Cjnz0048;
非80H,也非00H,为无效分区
002C83C610addsi,+10;
下一个分区表项,每项16(10H)字节
002FFECBdecbl;
循环计数减1
003175EFjnz0022;
检查下一个分区表项
0033CD18int18;
4个都不可引导,进入ROMBIOS
00358B14movdx,[si]
00378B4C02movcx,[si+02];
取分区的引导扇区的柱面、扇区活动
003A8BEEmovbp,si;
继续检查后面的分区表项
003C83C610addsi,+10
(3)找到自举分区后,检测该分区的标志:
如果是32位或16位FAT,并支持13号中断的扩展功能,就转到执行13号中断的41号功能调用,进行安装检测;
检测成功,就执行42号扩展功能调用,把BOOT程序读入到内存0000:
7c00H处。
读入成功,就执行0000:
7c00H处的程序;
读入失败,就调用13号中断的读扇区功能,把BOOT程序读入到内存0000:
4.引导型病毒的传染过程
引导型病毒制驻留在硬盘的主引导分区或硬/软盘的DOS引导分区的病毒。
它的感染过程分两大步:
装入内存和攻击。
(1)装入内存过程:
1系统开机后,进入系统检测,检测正常后,从0面0道1扇区,即逻辑0扇区读取信息到内存的0000~7C00处:
正常时,磁盘0面0道1扇区,即逻辑0扇区存放的是boot引导程序;
操作系统感染了引导扇区病毒时,磁盘0面0道1扇区,即逻辑0扇区存放的是病毒引导部分,boot引导程序被放到其他地方。
例如,大麻病毒在软盘中将原DOS引导扇区搬移到0道1面3扇区,在硬盘中将原DOS引导扇区搬移到0道0面7扇区;
香港病毒则将原DOS引导扇区搬移到39磁道第8扇区;
Michelangelo病毒在高密度软盘上,是第27扇区,在硬盘上是0道0面7扇区。
2系统开始运行病毒引导部分,将病毒的其他部分读入到内存的某一安全区,常驻内存,监视系统的运行。
3病毒修改INT13H中断服务处理程序的入口地址,使之指向病毒控制模块并执行,以便必要时接管磁盘操作的控制权。
4病毒程序全部读入后,接着读入正常boot内容到内存0000:
7C00H处,进行正常的启动过程(这时病毒程序已经全不读入内存,不再需要病毒的引导部分)。
5病毒程序伺机等待随时感染新的系统盘或非系统盘。
(2)攻击过程。
病毒程序发现有可攻击的对象后,要进行下列工作:
1将目标盘的引导扇区读入内存,判断它是否感染了病毒。
2满足感染条件时,将病毒的全部或一部分写入boot区,把正常的磁盘引导区程序写入磁盘特定位置。
3返回正常的INT13H中断服务处理程序,完成对目标盘的传染过程。
5.引导型病毒的编制技术
个人计算机开机后,会先执行主引导区代码这一机制,给引导型病毒窃取第一控制权提供了机会。
但是引导型病毒窃取控制权的时间只能是短暂的,然后就要引导DOS操作系统,否则就将败露。
在窃取控制权的这段时间内,病毒的引导部分主要要做下列事情。
(1)为病毒代码申请内存空间,为此要尽量减少DOS的存储空间。
相关代码如下:
…
xorax,ax
movess,ax
movsp,7c00h
movds,ax
movax,wordptrds:
[413h];
存放最大内存空间0000:
0413
subax,4;
给病毒申请4kB的内存空间
movds:
[413h],ax
(2)修改传播需要的中断向量。
…
beginprocfar
pushds;
axds:
ax
subax,ax;
pushax
movax,code;
将代码段地址装入ds,es
movds,ax
movex,ax
movax,segctrl_c;
修改向量,ds:
dx指向ctrl_c子程序
movds,ax;
movdx,offsetctrl_c
movah,25h;
调用号ah=25H
moval,23h;
修改中断向量号al=23H
int21h;
系统调用指令
(3)读入病毒的其他部分,进行病毒拼装(在内存高端):
先从已经标记的簇中某扇区读入病毒的其他部分(这些簇往往被标记为坏簇),然后再读入原引导记录到0000:
7C00H处,跳转执行。
movcl,06h
shlax,cl;
(ax)=8F80
addax,0840h;
(ax)=97c0
moves,ax
movsi,7c00h;
(si)=7c00
movdi,si
movcx,0100h
repzmovsw;
将病毒移到高端
v2:
pushax
popds
pushax