2
第三章计算机病毒的基本机制 3.1 计算机病毒状态3.2 计算机病毒的三种机制3.3 计算机病毒的传播机制3.4 计算机病毒的触发机制3.5 计算机病毒的破坏机制
3
3.1 计算机病毒状态计算机病毒在传播中存在静态和动态两种状
态。静态病毒 , 指存在于辅助存储介质 ( 如软盘、
硬盘、磁带、 CD-ROM) 上的计算机病毒。 动态病毒,指进入了计算机内存的计算机病
毒,它必定是随病毒宿主的运行,如使用寄生了病毒的软、硬盘启动机器,或执行染有病毒的程序文件时进入内存的。
4
计算机病毒状态内存中的动态病毒又有两种状态:能激活态和
激活态
能激活态 : 当内存中的病毒代码能够被系统的正常运行机制所执行时,动态病毒就处于能激活态。
激活态 : 系统正在执行病毒代码时,动态病毒就处于激活态。
5
计算机病毒状态一般认为病毒链接到中断向量或块设备驱动
程序上,成功地驻留内存后,病毒就获得了系统控制权。实际上,处于“能激活态”的病毒并未获得系统控制权。
内存中的病毒还有一种较为特殊的状态——失活态。如果用户把中断向量表恢复成正确的值,修改中断向量表的动态病毒就失活了;如果用户把设备驱动程序头恢复成正确的值,修改设备驱动程序头的动态病毒就失活了。
6
3.2 计算机病毒的三种机制 病毒程序是一种特殊程序,其最大特点是具有感染能力。病毒的感染动作受到触发机制的控制,病毒触发机制还控制了病毒的破坏动作。病毒程序一般由感染模块、触发模块、破坏模块、主控模块组成,相应为传染机制、触发机制和破坏机制三种。有的病毒不具备所有的模块,如巴基斯坦智囊病毒没有破坏模块。
7
感染模块
感染模块是病毒进行感染动作的部分,负责实现感染机制。感染模块的主要功能:
1) 寻找一个可执行文件。2) 检查该文件中是否有感染标记。3) 如果没有感染标记,进行感染,将病毒
代码放入宿主程序。
8
感染模块小球病毒的传染:a) 读入目标磁盘的自举扇区( BOOT 区)。b) 判断是否满足传染条件。c) 若满足(目标盘 BOOT 区的 01FC 偏移位置为 5713H 标志),则将病毒代码前 512 个字节写入 BOOT 引导程序,将其后 512 个字节写入该簇,并将该簇标记为坏簇,保护起来。d) 跳转至原 INT 13H 的入口执行正常的磁盘操作。
9
触发模块 触发模块根据预定条件满足与否,控制病毒的感染或破坏动作。依据触发条件的情况,可以控制病毒感染和破坏动作的频率,使病毒在隐蔽的状态下,进行感染和破坏动作。
10
触发模块病毒的触发条件有多种形式,例如:日期、时间、
发现特定程序、感染的次数、特定中断调用的次数等。
病毒触发模块主要功能:·检查预定触发条件是否满足。·如果满足,返回真值。·如果不满足,返回假值。
11
破坏模块 破坏模块负责实施病毒的破坏动作。其内部是实现病毒编写者预定破坏动作的代码。这些破坏动作可能是破坏文件、数据。破坏计算机的空间效率和时间效率或者使机器运行崩溃。有些病毒的该模块并没有明显的恶意破坏行为,仅在被传染的系统设备上表现出特定的现象,
该模块有时又被称为表现模块。
12
主控模块
主控模块在总体上控制病毒程序的运行。其基本动作如下:·调用感染模块,进行感染。·调用触发模块,接受其返回值。·如果返回真值,执行破坏模块。· 如果返回假值,执行后续程序。 计算机磁盘的管理计算机磁盘的管理
13
3.3 计算机病毒的传播机制 3.3.1 病毒感染目标和过程3.3.2 感染长度和感染次数3.3.3 引导型病毒的感染3.3.4 寄生感染3.3.5 插入感染和逆插入感染3.3.6 链式感染3.3.7 破坏性感染3.3.8 滋生感染3.3.9 没有入口点的感染3.3.10 OBJ、 LIB 和源码的感染3.3.11 混合感染和交叉感染3.3.12 零长度感染
14
3.3.1 病毒感染目标和过程 硬盘系统分配表扇区 (主引导扇区 ) 硬盘 BOOT 扇区 软盘 BOOT 扇区 覆盖文件 (OVL) EXE文件 COM文件 COMMAND文件 IBMBIOS文件 /IBMD0S 文件另外, eml,doc,dot,bvs,bat, pl,html,flash,dll,sys, asp
15
3.3.1 病毒感染目标和过程
病毒入侵宿主程序的基本方式有两种:替代方式和链接方式。染毒程序运行时,必须能使病毒代码得到系统的控制权。染毒程序运行时,首先运行病毒代码。而病毒的宿主程序可分为两类:操作系统和应用程序。
病毒代码替换磁盘的 Boot扇区、主引导扇区。
COMMAND 程序做宿主程序
16
3.3.1 病毒感染目标和过程
(a) 病毒感染文件头部 (b)病毒感染文件尾部 (c)病毒感染文件中部
图 3. 1 病毒与宿主程序的链接方式
病毒代码
宿主程序
宿主程序
病毒代码
宿主程序病毒代码宿主程序
17
3.3.1 病毒感染目标和过程中断矢量表 中断矢量表
(a)正常中断 (b) 病毒修改中断
…
入口地址
…
中断处理程序
…
入口地址
…
原
中断处理程序
病毒
中断程序
18
3.3.2 感染长度和感染次数·保持原长度。·增长长度为恒定值。·增长长度的单位为一基数,在 1 节 (16
字节 ) 内浮动。 ·每次感染,宿主程序增长长度都在变化。
19
3.3.2 感染长度和感染次数
单次感染病毒在每次感染宿主程序时,将病毒代码放入宿主程序的同时,还放置了感染标记。当病毒再次遇到已染毒程序时,当发现染毒程序中的感染标记时,便不会再进行感染。
重复感染
单次感染 病毒程序 目标程序
带毒的目标程序
20
3.3.2 感染长度和感染次数
重复感染是指病毒遇到宿主文件时,不论宿主文件是否已感染过,都再次进行感染。重复感染的结果是病毒文件长度不断膨胀。病毒的重复感染可分如下几种:·简单的重复感染。·有限次数重复感染。·每次重复感染时,长度变化。·每次重复感染时,病毒代码的位置变化。
21
3.3.2 感染长度和感染次数
(a) 初次感染 (b) 重复感染
图 3. 4 Anto病毒变位重复感染
Anto(1)
宿主程序
Anto(1)
宿主程序
Anto(2)
……
Anto(n)
22
3.3.3 引导型病毒的感染 uni nfected di sk
0 1 2 ……(sector No)
…… ……
Boot sector or Master Boot Record
I nfected di sk (repl aced boot/ MBR)
0 1 2 ……(sector No)
XXXXX …… XXXXX ……
病毒的首部 BS or MBR 病毒的尾部
I nfected di sk (modi fi ed address of acti ve boot sector)
0 1 2 ……(sector No)
……X XXXXX XXXX ……
病毒地址 病毒
23
3.3.3 引导型病毒的感染隐藏方法
1 、把 FAT 表中的簇标记为 bad
2 、改变 BPB 中的逻辑驱动器的容量
3 、非常规格式化磁盘
24
3.3.4 寄生感染 病毒将其代码放入宿主程序中,不论放入宿主程序
的头部、尾部还是中间部位,都称之为寄生感染。病毒放入宿主程序中部的感染方式称为插入感染,另外有插入感染和逆插入感染。
有两种方法把病毒放入文件的头部。第一种方法把目标文件的头部移到文件的尾部,然后拷贝病毒体到目标文件的头部的空间。第二种方法是病毒在 RAM中创建其拷贝,然后追加目标文件,最后把连接结果存到磁盘。
25
3.3.4 寄生感染感染前
感染后(第一种方法)
感染后(第二种方法)
图 3.6 病毒感染文件的头部
文件头部 文件其它部分
文件头部 文件其它部分 病毒
文件头部 文件其它部分 病毒
26
3.3.4 寄生感染
DOS-COM DOS-EXE New EXE
病毒入口
病毒入口
图 3.7 病毒感染文件的尾部
JMP
Program
code/data
Virus
Header
Program
code/data
Virus
DOS stub
Program
code/data
Virus
NE-Header
27
SYS文件感染前
SYS文件感染后(第一种方法)
SYS文件感染后(第二种方法)
图 3.8 病毒感染 SYS文件
文件头部 设备驱动的代码和数据
文件其它部分
文件头部 设备驱动的代码和数据 病毒
文件头部 设备驱动的代码和数据 病毒 新文件头部
3.3.4 寄生感染
28
3.3.5 插入感染和逆插入感染 一般病毒感染宿主程序时,病毒代码放在宿主程序头部或尾部。而插入感染病毒能够自动地将宿主程序拦腰截断,在宿主程序的中部插入病毒代码。必须保证:
病毒首先获得运行权。
病毒不能卡死。
宿主不能因病毒代码的插入而卡死。
29
3.3.5 插入感染和逆插入感染
插入 感染
图 3.9 插入感染
Proud病毒
宿主程序
宿主程序
Proud病毒
宿主程序
30
3.3.5 插入感染和逆插入感染
(a) Stinkfoot病毒 (b)RAM病毒
图 3.10 逆插入感染
Stinkfoot病毒
(259字节)
宿主程序
RAM病毒
宿主程序
RAM病毒 Stinkfoot病毒
(995字节)
31
3.3.6 链式感染
切 断
(a) 病毒写软盘 (b) 修改文件目录 (c) 原起始簇加密后加入目录区
图 3.11 链式感染
DIR-Ⅱ 病毒 文件目录
软盘
最后一簇
起始簇
宿主程序 软盘最后一簇
文件目录
起始簇
加密后的
原起始簇
DIR-Ⅱ
病毒 宿主程序
32
3.3.7 破坏性感染
感染 宿主程序
12032字节
(b) 病毒的长度不小于宿主的长度
(a) 病毒的长度小于宿主的长度
图 3.12 破坏感染
Number One病毒
病毒代码
宿主程序
病毒
代码
33
3.3.8 滋生感染
NORMAL.EXE NORMAL.COM(病毒程序)
NORMAL.EXE(原来的程序)
NORMAL.EXE(病毒程序)
NORMAL.OLD(原来的程序)
NORMAL.EXE(病毒程序),放在当前目录
NORMAL.EXE(病毒程序),放在系统目录
NORMAL.EXE(病毒程序),放在 PATH搜索目录中
NORMAL.EXE(原来的程序)
伴随方式 3 伴随方式 2
伴随方式 1
34
中断向量表
3.3.9 没有入口点的感染
这些病毒在宿主文件中没有执行入口,病毒没有记录 COM文件的 JMP指令,也不修改 EXE文件头中的入口地址。该病毒在宿主文件的中部记录跳转到病毒本身的指令,当运行宿主文件后,病毒没有立即得到控制权,而是当宿主例程调用包含病毒跳转指令时才获得系统的控制权。
EPO是 EntryPoint Obscuring的简写,即入口模糊技术。
35
3.3.9 没有入口点的感染
EXE文件头
运行时刻库的初始化程序
原来的程序代码
病毒的感染部分找到这部分代码,使用跳转到病毒代码的指令替换
感染之后
EXE文件头
运行时刻库的初始化程序
原来的程序代码
跳转到病毒代码的指令
病毒代码
36
3.3.9 没有入口点的感染
感染之前的程序
病毒使用反汇编程序对代码进行反汇编
ADD AX,100H
JMP cd00
INC
MOV AX, 0
…
发现合适的插入点,将病毒代码插入
感染前的程序
插入点:JMP [病毒代码]
感染前的程序
病毒代码
37
3.3.9 没有入口点的感染1.第一个节是 .text2.在 .text 中一定可以找到 call xxxxxxxx.(E8 xxxxxxxx).3.JMP DWORD PTR [YYYYYYYY]在 .text 中4.根据找到的 call xxxxxxxx计算出来的地址不会越界造成内存错误。 其思路是这样的:1.判断 PE合法性和可感染性(有多余空间)2.添加新节,修改 SizeOfImage3.开始EPO1 )在 .text 中寻找 E8 xxxxxxxx, 根据 xxxxxxxx获得 JMP DWORD …的文件偏移。2 )计算跳转到 VStart 的相对距离,覆盖xxxxxxxx。 3)拷贝 JMP DWORD PTR [YYYYYYYY]中的 YYYYYYYY到病毒体内。
38
3.3.9 没有入口点的感染hume/pkxp ——.不要问我从哪里来 浅析病毒入口模糊技术 EPO.黑客防线, 2003年第 8期, CVC病毒专栏
39
3.3.10 OBJ、 LIB 和源码的感染
病毒感染编译库文件、目标文件和源码,这种方式少且没有广泛流传。这些该感染的 OBJ、 LIB合并代码到一个对象模块或对象库。因此,感染文件不是可执行文件,不会马上传播。其 COM和 EXE文件通过对已感染的 OBJ/LIB连接而成,则该文件已感染。因此,该病毒传播有两个阶段:OBJ/LIB先感染;然后合成不同的病毒体。
如 SrcVir 病毒和 Urphin 病毒。
40
3.3.11 混合感染和交叉感染 A 混合感染
既感染文件又感染主引导区或 Boot 扇区的混合感染病毒。
如 Flip
B 交叉感染
在一个宿主程序上感染多种病毒 .
41
3.3.11 混合感染和交叉感染
Tai wan 3
Sunday
J erusal em
宿主程序
J-S-T.com
宿主程序
1591
FLI P
l 591
OROPAx
V1591-FL.com
42
3.3.12 零长度感染 病毒感染宿主文件时,将其病毒代码放入宿主程序,一般会使宿主程序长度增加,因而很容易被用户发现。而有些病毒在感染时,将病毒代码放入宿主程序,同时保持宿主程序长度不变,称为零长度感染。此类病毒在感染时,采取了特殊技巧。首先在宿主
“ ” “ ”程序中寻找 空洞 ,将病毒代码放入 空洞 之中,“ ”而后改变宿主程序开始处代码,使藏在 空洞 中的
病毒代码首先运行,在病毒运行结束时,恢复宿主 程序开始处代码,而后运行宿主程序。
43
3.3.12 零长度感染什么是“空洞”( cavity)呢 ?就是具有足够长度的全部为零的程序数据区或堆栈区。
44
3.3.12 零长度感染
cv
P'1
p2
cv
P'1 P'2
cv
p1 p2
2
3 1
4
t0 t1
45
3.3.12 零长度感染宿主程序
插入
54A2H
执行 62BCH
(a) 病毒代码插入空洞和改写跳转指令 (b) COMMAND.COM的空洞
图 3.18 零长度感染
病毒代码
全部为 00H的
数据区(空洞)
JMP 空洞地址 病毒代码
MS-DOS3.30
COMMAND.COM
全部为 00H
的 0D19H字节
46
3.4 计算机病毒的触发机制 1. 日期和时间触发 :特定日期触发、月份触发、
前半年 /后半年触发 .2. 键盘触发 : 击键次数触发、组合键触发和热
启动触发 3. 感染触发 :感染文件个数触发、感染序数触
发、感染磁盘数触发和感染失败触发 4. 启动触发5. 磁盘访问触发和中断访问触发6. 其它触发
47
3.4 计算机病毒的触发机制其它触发 :OS型号、 IP地址、语言、地区、特定漏洞
48
3.4 计算机病毒的触发机制感染失败触发 -Worm.Sasser
49
3.5 计算机病毒的破坏机制 1. 攻击系统数据区:硬盘主引导扇区、 B
oot 扇区、 FAT 表和文件目录 2. 攻击文件和硬盘:删除、改名、替换内容、丢失部分程序代码、内容颠倒、写入时间变空白、变碎片、假冒文件、丢失文件簇、攻击数据文件。
3. 攻击内存:占用大量内存、改变内存总量、禁止分配内存、蚕食内存
50
3.5 计算机病毒的破坏机制4. 干扰系统的运行:不执行命令、干扰内部命令
的执行、虚假报警、打不开文件、内部栈溢出、占用特殊数据区、换现行盘、时钟倒转、重启动、死机、强制游戏、扰乱串并行口。
5. 扰乱输出设备:字符跌落、环绕、倒置、显示前一屏幕、光标下跌、滚屏幕、抖动、乱写、吃字符,演奏曲子、警笛声、炸弹噪声、鸣叫、咔咔声和嘀嗒声,假报警、间断性打印和更换字符
6. 扰乱键盘:响铃、封锁键盘、换字、抹掉缓存区字符、重复和输入紊乱。
51
与病毒现象类似的硬件故障 1. 系统的硬件配置 :软件不能正常运行。 2. 电源电压不稳定: 磁盘文件丢失或破坏3. 插件接触不良:设备时好时坏 4. 软驱故障:读坏磁盘 5. 关于 CMOS的问题: CMOS的高级设
置中有一些影子内存开关,这也会影响系统的运行速度。
52
与病毒现象类似的软件故障 1. 出现 "Invalid drive specification"(非法驱动器号 ) :说明用户的驱动器丢失 2. 软件程序已被破坏 (非病毒 ) :由于磁盘质量等问题,
文件的数据部分丢失,而程序能运行且出现不正常现象。 3. DOS系统配置不当:DOS操作系统在启动时会去查找
其系统配置文件 CONFIG.SYS,并按其要求配置运行环境。如果系统环境设置不当会造成某些软件不能正常运行,如 CC++语言系统、AUTOCAD等等。 4. 软件与DOS版本的兼容性:DOS操作系统自身的特点
是具有向下的兼容性。许多软件都要过多地受其环境的限制。
53
与病毒现象类似的软件故障5. 引导过程故障:系统引导时屏幕显示 "Missing ope
rating system"(操作系统丢失), 故障原因是硬盘的主引导程序可完成引导,但无法找到 DOS系统的引导记录。造成这种现象的原因是 C 盘无引导记录及 DOS系统文件,或 CMOS中硬盘的类型与硬盘本身的格式化时的类型不同。 6. 用不同的编辑软件程序:用户用一些编辑软件编辑源程序,编辑系统会在文件的特殊地方做上一些标记。这样当源程序编译或解释执行时就会出错。例如,用WPS的 N命令编辑的文本文件,在其头部也有版面参数,有的程序编译或解释系统却不能将之与源程序分辨开,这样就出现了错误。
54
与病毒现象类似的软件故障 7. 某些软件无法正常运行:如 word 由于
内存不足无法存盘。 8. 网络连接数过多导致新的应用无法上网:句柄数有限
9. 防火墙配置不当导致无法上网。
55
作业试提出一种新的感染机制、一种新的触发
机制、一种新的破坏机制(仅限于 win32 病毒或Worm )。