郑州轻工业学院本科设计题目:病毒与计算机安全_学生姓名:张波__系别:计算机与通信工程学院专业:网络运维____班级:13—02____学号:************指导教师:吉星、程立辉_2016 年摘要:计算机技术不断进化创新,病毒技术也与时俱进。
病毒己经成为一种社会现象,影响力与日俱增。
现在的视窗操作系统下的病毒己经非常完善了,它们使用汇编、高级和脚本语言编写,利用了系统的种种漏洞,使用先进的加密和隐藏算法,可以对杀毒软件进行攻击。
全世界每年因病毒造成的损失不可估量。
在反病毒行业中,杀毒软件厂商迫于商业性的目的,不得不将一些很简单的问题隐藏在广告和宣传的迷雾之中。
从Win32病毒所需基础知识开始,详细阐述了PE格式、重定位、API地址获取、遍历网络与硬盘、利用IRC,P2P,E-Mail传播病毒的原理与细节。
最后,本文讨论了反病毒的一些关键技术:样本的截获、特征码提取、特征字原理以及当前最流行的对抗变形和未知病毒的启发式扫描技术。
关键词:病毒;多态;变形;扫描;启发式1.绪论 (1)1.1 课题背景 (1)1.1.1 什么是计算机病毒 (1)1.1.2 目的与意义 (2)2. 病毒基础知识 (2)2.1 PE文件格式与计算机病毒 (2)2.1.1 PE文件格式与Win32病毒的关系 (2)2.1.2 PE文件格式介绍 (3)2.2 地址与汇编指令的本质 (4)2.2.1 地址的基本概念 (4)2.2.2 映射的本质 (4)2.2.3 重要汇编指令的含义与技巧 (5)2.3 方汇编技术 (6)2.4 小结 (6)3. 病毒传播途径 (7)3.1 通过1PC传播 (7)3.2 通过电子邮件传播 (8)3.2.1 原理 (8)3.2.2 SMTP协议框架 (8)3.3 利用Sniffer来建立信任关系 (8)3.4 通过IRC聊天通道传播 (9)4. 病毒的攻与防 (10)4.l样本截获技术 (10)4.2提取样本技术 (11)4.3如何发现普通病毒 (11)4.3.1 特征码扫描简介 (11)4.3.2 特征字扫描 (12)4.4如何发现变形病毒和未知病毒 (13)4.4.1简单变形 (13)4.4.2模拟器 (Emulator)原理 (13)4.4.3传统扫描技术与启发式代码分析扫描技术的结合运用 (15)4.5小结 (17)5. 病毒预测 (17)6. 结论 (18)1. 绪论1.1 课题背景人类进入了信息社会创造了电子计算机,同时也创造了计算机病毒。
由于计算机软件的脆弱性与互联网的开放性,我们将与病毒长久共存。
而且,病毒主要朝着能够迅速传播、更好的隐蔽自己并对抗反病毒手段的方向发展。
同时,病毒己被人们利用其特有的性质与其他功能相结合进行有目的的活动。
病毒的花样不断翻新,编程手段越来越高,防不胜防。
特别是Internet的广泛应用,促进了病毒的空前活跃,网络蠕虫传播更快更广,Windows病毒更加复杂,网络蠕虫成为病毒设计者的首选(也有人认为蠕虫并不是病毒,蠕虫和病毒是有分别的,见Internet标准RFC2828).目前,计算机病毒之所以到处不断的泛滥,其一方面的原因就是查解病毒的手段总是跟在一些新病毒的后面发展,所以新病毒就能跳过传统的病毒特征代码分析、动态仿真跟踪、实时监控程序、自动解压缩技术等常用反病毒手段的监视而到处传染。
1.1.1 什么是计算机病毒计算机病毒(Computer Virus)在《中华人民共和国计算机信息系统安全保护条例》中被明确定义为:11指编制或者在计算机程序中插入的破坏计算机功能或者破坏数据,影响计算机使用并且能够自我复制的一组计算机指令或者程序代码”。
简单精确的说,能够主动复制自身的一组指令就是病毒。
这包含了两个要素,一个是主动,这是病毒传播特性的体现,如果可以四处传播但却是被动进的,就不是病毒,比如QQ,大家从腾讯网站上下载,QQ.exe得到四处传播,但因为是被动进行,所以不是病毒;另一个是一段指令,这体现了病毒的寄生性,也就是病毒这个名称的来历,因为生物界中的病毒都是寄生在细胞内,它不是细胞,不能单独生存,却可以在不同细胞中复制自身。
病毒也一样,它的寄生体就是程序(文件)。
那么,作为一个完整的文件来传播的,就类似于生物界中的细菌(细菌是细胞),那就是蠕虫,现在也被广义地看作病毒。
随着互联网的普及和迅猛发展,病毒也向着多元化方向发展,很多病毒都具有病毒和蠕虫等的多重特性。
1.1.2 目的与意义计算机病毒破坏硬盘上的数据,拥塞网络,干扰人们的正常生活,每年的直接和间接经济损失都数以百亿计。
防治病毒的重要性不言而喻。
2. 病毒基础知识2.1 PE文件格式与计算机病毒在编写Dos文件型病毒时,不可避免我们要非常了解MZ文件格式。
同样如果想在Windows环境下编写感染EXE的文件型病毒,我们不得不先在PE文件格式上下一番功夫。
2.1.1 PE文件格式与Win32病毒的关系Win32病毒感染文件时,一般都是针对EXE,SCR文件,而这些文件都是PE格式,所以,只有了解PE格式的规范和细节,才能编写PE 文件型病毒。
一般来说,Win32病毒是这样被运行的:1.用户点击 (或者系统自动运行)一个染毒程序2.PE装载器(系统程序)通过PE文件中的Address Of Entry Point 和Image Base之和来定位第一条语句在内存的偏移。
3.从第一条语句开始执行 (这时其实执行的是病毒代码)4.病毒主体代码执行完毕,将控制权交给染毒程序。
5.染毒程序继续执行。
可见,Win32病毒要想对.EXE文件进行传染,了解PE文件格式确实是不可少的。
下面我们就将结合计算机病毒的感染原理,具体分析一下PE文件的具体格式。
2.1.2 PE文件格式介绍PE就是Portable Executable(可移植的执行体)。
它是Win32可执行文件的标准格式。
"Portable Executable"意味着此文件格式是跨win32平台的。
即使Windows运行在非Intel的CPU上,任何win32平台的PE装载器都能识别和使用该文件格式。
当然,移植到不同的CPU上PE执行文件必然得有一些改变。
所有Win32执行体(都使用PE 文件格式,包括 NT的内核模式驱动程序 (kernel mode drivers).因而研究PE文件格式,除了有助于了解病毒的传染原理之外,也给了我们洞悉悉Windows结构的良机。
表1-1是PE文件格式的概要。
所有PE文件(甚至32位的DLLs)必须以一个简单的DOS MZ header 开始。
有了它,一旦程序在DOS下执行,DOS就能识别出这是有效的执行体,然后运行紧随MZ header之后的DOS stub. DOS stub实际上是个有效的EXE,在不支持PE文件格式的操作系统中,它将简单显示一个错误提示,类似于字符串 "This program requires Windows"。
紧接着DOS stub的是PE header。
包含了许多PE装载器用到的重要域。
执行体在支持PE文件结构的操作系统中执行时,PE装载器将从DOS MZ header中找到PE header的起始偏移量。
因而跳过了DOS stub直接定位到真正的文件头PE header。
2.2 地址与汇编指令的本质2.2.1 地址的基本概念虚拟地址=逻辑地址=【段选择子】:【线形地址】,利用段选择子找到描述符,描述符有字段表示段的基地址 (在Win32中都是0,所以线形地址就是真正地址)还有字段表示段属性,实际上起到保护作用。
事实上,在Win32中,其他地址己经不重要了,关键的只是线形地址。
我们在程序中使用的都是线形地址,我们完全可以忘记虚拟内存的概念,认为每个进程确实具有4G的物理内存,OS和CPU屏蔽了这个细节。
不考虑它,也不会影响程序的编写。
程序在执行时,CPU 会将我们使用的地址(可能是硬编码或寄存器)转换为物理地址。
寻址时,最重要的寄存器是eip和CR3.CR3的内容是物理地址,这在寻址过程中是很特殊的,因为Win32在保护模式下,感觉上都是虚拟地址,但是,如果真的都是虚拟地址,可就真的没办法定位到物理内存了。
CPU只是根据eip的值一条一条的执行。
此时访问的地址就是本进程(P)的4G空间,执行P的指令。
如何实现的呢?关键是页表。
2.2.2 映射的本质内存和CPU,之间有一个MMU部件(Memory Management Unit),cpu 执行时,把eip高20位作为一个索引,再将[index+CR3]的作为高20位,eip的低12位作为低12位组合在一起,形成新的32位地址,这就是物理地址.把页表想象成一个数组,个数为2~20(1M),大小为4M,页表当然存储在物理内存中,CR3就是数组首地址。
数组的每一项为一个DWORD,双字的前20位表示一个物理页面。
形象地:页号(0~19) …页属性保留(30) 提交 (31) CR3一> 00100 rw 1 101001 r 1 001010 0 0 000111 0 0 010011 0 0 0这表明,物理内存的第4个物理页面提交,第9个保留.每个进程都含有这样一个页表,其中的页号可能一样,就是对应相同的物理页面,比如内存映射文件。
此时一个进程修改的数据,其他进程访问时也会改变。
每个进程都有4G的内存可以使用,只是很多页面没有提交而己,这就是每个进程有4G的原理。
所谓映射,简单的说,就是将页表项的保留和提交设置为1而已。
解除映射则置。
解除后,再使用线形地址访问内存时,找到页表相应项,发现此页面没有保留,就会发生内存错误。
值得注意的是,即使使用Map View Of File,页表中提‘交’字段也未必是1,只是作了保留标志,其他函数请求内存时就不会重复分配了,真正访问这个页面时再产生页错误而真正分配物理页。
2.2.3 重要汇编指令的含义与技巧指令含义1.CALLX <一>PUSH EIP;IMPX这是唯一获得EIP的方法。
2.PUSHX <一>SUB ESP,4;MOV[ESP],X3.RET <->POP EIP把栈顶内容放入EIP4.STOSD <一>MOV [EDI],EAX ;ADD EDI,4技巧1.将寄存器清零XOR EAX,EAX不要用MOV EAX,O寄存器和零比较OR EAX,EAX 不要用CMP EAX,O连续多个PUSH 0XOR EAX, EAXPUSH EAX PUSH EAX PUSH EAX不要用PUSH 0 PUSH 02.3 方汇编技术这种方法要求病毒包括一个小型的反汇编软件,感染的时候,将被感染文件加载到内存中,然后一条一条代码的进行反汇编,当满足某个特定的条件的时候(病毒认为可以安全的改变代码了),将原来的指令替换成一条跳转指令,跳转到病毒代码中,“CNTV”和“中间感染”病毒是用这种方法插入跳转到病毒的指令。