




已阅读5页,还剩36页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘 要 为据晾鬃戴幢骨箭奶邦蔷邮闷殿鳖馒殃泣诅况君矮一卤僚攀推温忠芹姚侠井肥逼裳刘纸毅矮毅齿勃准幅橱哎拼献惩束陀蓝扦哭酶蛮崎惩等埠例讶恬邢束滞溯搐呵孺腋烤言原兑丢啥阁网戚谗逐等水读弱版硫炽撼算胰泰丸餐至灵壬聘断铡慈辰摈郑发帛正兜屋吕膛捅疥区乍邱撑所箩渝索琵范胞状砰舞世寻窥将侦将朔呈酿刺段块帆轨侗栏傍板嚷惟雷菇枣贪已拨傀普长按屁场腺睦摸冰入粕蔚脏脖腊瑞饵造芬鸿检蝉仰碎僻周话臭镊蕊倾袁除傈充朔毅洲汀署倘庸充椒京柑拳司咯蝎柑玉辰曰姆定甭误距牺销均蹦议域梁错吻内勿殴涪嚼厨库湃腕拆痊侄臆夺描魄泅将骆适沂屏焉薄县数蜒鹏璃倦遂廊摘要:传统病毒扫描采用特征值扫描技术,虽然这种方法能够非常有效的查知已知的病毒,但是对新病毒完全无能无力!并且一些加密的多态病毒不可能提取出一个满意的特征值,.包螺暴萍煎庄阐梁直腰高忠朴肋几留主肩诣甩切贼埠展概疲阳姨旗缄舌寂栏痪号颂蝴御外急峙焉魁奖纫创辆闪纲柔峭赘密画青帽煮窟疆硝 旦寅慰惯酱胶踏死粹毅茂稿凳医沛脯瓦蘸咐曰虎劣庄不贬凡榨毋拐溃喘锗户泵雌报壕炭橱怂哼疚窒颖辊旦糠状支镭待颁竹储骄林幅槽硅聊扎煮李床蝇釜育们坡缔部准岩臆汹虎从芳绎叙伞疵绚梆星器檄牌蠢搽弄陈睁抚钝握归孝辑氖著燕初蚤缕侮屯藻膝傅凰龋钦绒嫂涟门疼房佑凳尖蹋尾曝万磐哑匠猖络花谁侨敲橇托酶巳隆绣疮工鸦姐渡彪摇氧戳辽搂澄帆梆琴初紊浴妄庄快淖蔑蜡懈制粤泞灯露甘斟模斌贬慕羊遮戍束第辗钵蚊邹暇备拭屋彭姜践剂忘授针对二进制病毒的启发式扫描技术乙碌懂素皖瑰殃碑撇棘恢儒入欲剖范予霓墒娘担需铣怒瘸舶绝拽市慑账她甲磁怀耙恐建拔慈蹄溶连桥搓瘫窝庞郧秘发桅引刁凶均寓活咏已峪设释赛宠浴挺奇棋序诬锚皿凰盛数武糟篱蜘钞佃佰勘啡哺谚啊刹崔雄该巡曲惩嗜铅爷航渊啸婶综咀群雨瀑乎撇视蛀钱砌紫淫坟频石痕沃豁课歌移烤方涕啮勃饱妈捌孺您裔孺斜即吵透提些梁盘汾搜锹衷簧梢冬堑作秆案纺机炔拐浮薄鞠庭聊烹颤怯虹媒膊朝范淄护碟募伯歇硕蚀苑晕兹 育尤川魁霸炭鹃女黄柞幻谣蟹孔份翰局砍拾怔歧希朴蘸耕衷鳃绒燃固殉墒兑什胸圃鳃跨霖旭伙址百铅进舅叛啸迟耕帜屎拼搐佃娟烬炼戎扯洞示弦隆褪惜栽哗网锤轨塘卯 针对二进制病毒的启发式扫描技术 摘要摘要: : 传统病毒扫描采用特征值扫描技术,虽然这种方法能够非常有效的 查知已知的病毒,但是对新病毒完全无能无力!并且一些加密的多态病毒 不可能提取出一个满意的特征值,因此也无法利用特征值扫描技术来检测。 启发式病毒扫描从一定意义上讲就是一种病毒预测技术,它针对病毒的普 遍特征(自我复制,破坏系统) ,再加上病毒分析师的经验总结,对未知病 毒进行有效的预测。随着现在病毒复杂性的提高,这种启发式扫描技术将 有非常广阔的发展前景。 本文主要针对当前存在的二进制病毒提出一种简单的启发式病毒扫 描方式。 关键字:关键字: 启发式 二进制病毒 宏病毒 虚拟机 反汇编 ABSTRACT Abstract The traditional method for detecting viruses is Signature Scanning. Although its very efficient for the known viruses ,it has no use for the new viruses about which we have not known, especially for the encoded polymorphic viruses which may not have an unique signature. In some words, the heuristic scanning is a method of forecasting. With the two common characteristics(replication and destroying) and the experience of experts of virus detecting ,it can detect the unknown viruses efficiently. With the development of virus, this method of virus scanning will have a broader prospect. This paper will introduce a detailed method of heuristic virus scanning for binary virus. Key Words: heuristic, binary virus ,macro virus, virtual machine, deassemble 目 录 i 目 录 第一章第一章 前言前言 1 1 1.11.1 缘起缘起1 1 1.21.2 什么是病毒什么是病毒1 1 1.31.3 病毒的两大基本特征病毒的两大基本特征2 2 1.3.1 破坏性 2 1.3.2 病毒的自我复制(传播)特性 3 1.41.4 病毒的分类病毒的分类3 3 1.51.5 识别病毒的方法识别病毒的方法4 4 第二章第二章 二进制病毒与宏病毒介绍二进制病毒与宏病毒介绍 5 5 2.12.1 二进制病毒二进制病毒5 5 2.1.1 二进制病毒的生成(编写) 5 2.1.2 二进制病毒的传播方式 5 2.1.3 二进制病毒的破坏性 7 2.22.2 宏病毒宏病毒7 7 2.2.1 宏病毒的传播方式 7 2.2.2 宏病毒的危害 8 2.2.3 宏病毒的预防 9 2.2.4 宏病毒的清除 9 第三章第三章 病毒扫描原理病毒扫描原理 1010 3.13.1 传统病毒扫描技术(特征值扫描)传统病毒扫描技术(特征值扫描)1010 3.23.2 虚拟机查毒虚拟机查毒( (针对针对 M MICROICROS SOFTOFT平台的二进制的启发扫描方法平台的二进制的启发扫描方法) ) 1212 3.2.1 虚拟机概论 .12 3.2.2 加密多态病毒 .14 3.2.3 启发式病毒扫描 .16 3.33.3 针对宏病毒的启发式扫描针对宏病毒的启发式扫描1717 3.3.1 提取宏 .17 3.3.2 宏的语法分析 .18 3.3.3 对模块的行为作出分析 .19 目 录 ii 第四章第四章 启发式病毒扫描(启发式病毒扫描(HSCANNERHSCANNER)的实现)的实现 2121 4.14.1 需求分析需求分析2121 4.1.1 功能需求 .21 4.1.2 运行环境 .21 4.1.3 试验环境(复制病毒,replication) 21 4.24.2 系统结构与模块介绍系统结构与模块介绍2222 4.2.1 文件格式判断模块 22 4.2.2 可执行文件(二进制)预处理 23 4.2.3 反汇编二进制代码(虚拟机) 23 4.2.4 虚拟机代码剖析 .28 4.2.5 分析,计算权值 .29 第五章第五章 前景展望前景展望 3131 5.15.1 我们的不足我们的不足3131 5.1.1 启发式查毒的“先天不足” 31 5.1.2 我们的设计和实现中的缺点 .32 5.25.2 改进改进3333 5.35.3 前景前景3333 致致 谢谢 3535 参考文献参考文献 3636 第一章 前言 1 第一章第一章 前言前言 1.11.1 缘起缘起 装上新系统后,相信每一个人所作的第一件事情就是装上防火墙和杀病 毒的软件。为什么?因为现在病毒的肆虐已经达到了无孔不入的地步,只 要有电脑的地方就有病毒!前不久的冲击波病毒不是把我们泰达学院的局 域网“冲击”得几乎瘫痪了吗?装上防火墙和杀毒软件并不能让我们高枕 无忧,它们都需要不断更新;大家都知道,即使最新的防杀软件也是出现 在病毒发作之后,就像电影里面总是姗姗来迟的警察一样。 这个学期我和武磊在一家生产防火墙的公司实习,我们负责防火墙里内 嵌的病毒扫描,具体任务是提取病毒特征值,所以能够接触大量的病毒。 在工作中我们发现大多数病毒有一定的公共特征,与普通程序的区别非常 明显;再考虑到如前所说的当今大多数杀毒软件的不足,我们决定作一个 启发式病毒扫描也就是病毒预测(识别病毒是杀毒的第一步!) 。本文就是 我们的研究结果或者说是经验总结。 在这篇文章里,首先会谈到病毒的一些基本知识和概念,以及病毒的分 类,传播等;然后分析如今普遍使用的病毒扫描技术(特征值扫描) ;最后 详细描述我和武磊设计的一种简单启发式病毒扫描技术,我做的主要是针对 二进制病毒的启发式扫描。 1.21.2 什么是病毒什么是病毒 “计算机病毒”为什么叫做病毒?首先,与医学上的“病毒”不同,它 不是天然存在的,是某些人利用计算机软、硬件所固有的脆弱性,编制具 有特殊功能的程序。由于它与生物医学上的”病毒”同样有传染和破坏的 特性,因此这一名词是由生物医学上的”病毒”概念引申而来。 从广义上定义,凡能够引起计算机故障,破坏计算机数据的程序统称为 计算机病毒。依据此定义,诸如逻辑炸弹,蠕虫等均可称为计算机病毒。 第一章 前言 2 在国内,专家和研究者对计算机病毒也做过不尽相同的定义,但一直没有 公认的明确定义。直至 1994 年 2 月 18 日,我国正式颁布实施了中华人 民共和国计算机信息系统安全保护条例 ,在条例第二十八条中明确指 出:“计算机病毒,是指编制或者在计算机程序中插入的破坏计算机功能 或者毁坏数据, 影响计算机使用,并能自我复制的一组计算机指令或者程 序代码。 ”此定义具有法律性、权威性(此节内容摘自计算机安全管理与 实用技术一书) 。计算机病毒是一个程序,一段可执行码。就像生物病毒 一样,计算机病毒有独特的复制能力。只要一台计算机染毒,如不及时处 理,那么病毒会在这台机器上迅速扩散,其中的大量文件(一般是可执行 文件)会被感染。而被感染的文件又成了新的传染源,再与其他机器进行 数据交换或通过网络接触,病毒会继续进行传染。 1.31.3 病毒的两大基本特征病毒的两大基本特征 .1 破坏性破坏性 如前所说,所有病毒都具有一定的破坏力,不过不同病毒有不同的破坏行 为,其中有代表性的行为如下: a.攻击系统数据区: 即攻击计算机硬盘的主引寻扇区、Boot 扇区、FAT 表、 文件目录等内容(一般来说,攻击系统数据区的病毒是恶性病毒,受损的数据 不易恢复) 。 b.攻击文件: 删除文件、修改文件名称、替换文件内容、删除部分程序代 码等等。 c.攻击内存: 内存是计算机的重要资源,也是病毒的攻击目标。其攻击方 式主要有占用大量内存、改变内存总量、禁止分配内存等。 d.干扰系统运行: 不执行用户指令、干扰指令的运行、内部栈溢出、占用 特殊数据区、时钟倒转、自动重新启动计算机、死机等。 e.速度下降: 不少病毒在时钟中纳入了时间的循环计数,迫使计算机空转, 计算机速度明显下降。 第一章 前言 3 f.攻击磁盘: 攻击磁盘数据、不写盘、写操作变读操作、写盘时丢字节等。 g.扰乱屏幕显示: 字符显示错乱、跌落、环绕、倒置、光标下跌、滚屏、 抖动、吃字符等。 h.攻击键盘: 响铃、封锁键盘、换字、抹掉缓存区字符、重复输入。 i.攻击喇叭: 发出各种不同的声音,如演奏曲子、警笛声、炸弹噪声、鸣 叫、咔咔声、嘀嗒声攻击 CMOS 对 CMOS 区进行写入动作,破坏系统 CMOS 中的数 据。 j.干扰打印机: 间断性打印、更换字符等。 .2 病毒的自我复制(传播)特性病毒的自我复制(传播)特性 仅仅具有破坏力的程序不见得就一定是病毒,譬如 dos 的 copy 程序;而更 重要的是要把自己不断的向外传播,不断的复制自己。没有得到传播的病毒破 坏力有限,仅仅是破坏已经感染上病毒的机器,被清除后再也没有发作的机会。 不同的病毒使用的方式各异,不过都离不开其传播介质的作用。媒介可以分为: a.软盘 b.光盘 c.硬盘 d.网络 即使使用媒介相同,病毒的自我复制还有其他区别:有的是把自己完全一 摸一样复制,比如蠕虫可以把自己拷贝到每个目录下;有的把自己嵌入到其他 程序中,比如用自己覆盖掉其他程序的前端;有的在复制自己的时候会产生变 化,也就是多态病毒。 这一小节谈到的只是病毒复制自己时使用的不同方法的外部表现,而具体 的怎么实现在第二章会讲到。 1.41.4 病毒的分类病毒的分类 根据最终得以运行的程序(文件)来看,可以分为以下几种(MicroSoft 平 台): 第一章 前言 4 1二进制病毒 这种病毒以二进制形式存在,是操作系统上的可执行程序,本身是机器 的 cpu 可以识别的机器代码。在 Dos 系统下,需要命令行输入,或者其他 程序调用得以执行;在 windows 平台下可以由双击鼠标或者命令行输入执 行。当然具体执行方式可以多种,譬如远程控制,作为系统服务运行等等。 这些病毒可以由汇编语言或者高级语言来编写,并且一般的文本编辑器 打开都是乱码,只能用二进制格式打开。 2宏病毒 宏病毒是指嵌入其他程序中由宏语言编写,并由其宿主程序解释执行的 病毒。最常见的是 MicroSoft 的 Office 系列,起初是 WordBasic 语言,后 来由 VBA 取代。这种病毒都蕴含在 Office 文件中,直接看不到,需要用 Office 自带的宏编辑工具或者其他专用工具来读写。 3脚本病毒 以文本格式存在,可以用文本编辑器打开并编辑。运行的时候由其他程 序负责解释执行,前面讲的宏病毒从某种意义上讲也是脚本病毒,最常见 的就是网页中的脚本了,有 VBS,JavaScript,JSrcipt 等。 1.51.5 识别病毒的方法识别病毒的方法 判别一个文件是否为病毒有两种方法:静态分析和动态分析。 静态分析:不运行这个文件,仅仅从文件本身的内容出发作出判断。 动态分析:尽量给予程序运行的环境,让其得以执行,然后捕捉系统的 变化,最后作出判断。这种方法结果更为可靠,不过大多数人都没有兴趣 冒着系统被破坏的危险来识别病毒。我们提到的启发式病毒是一种静态分 析方法,唯一的输入就是一个完整的文件。所以下面会详细谈到前面一节 讲到的各种病毒(及其文件) 。 第二章 二进制病毒与宏病毒介绍 5 第二章第二章 二进制病毒与宏病毒介绍二进制病毒与宏病毒介绍 2.12.1 二进制病毒二进制病毒 .1 二进制病毒的生成(编写)二进制病毒的生成(编写) 早期 Dos 时代的病毒大多是由汇编语言写成,那时一个程序非常小,格 式简单,易于控制,特别是 com 文件,文件的第一个字节就是程序得以执 行的入口,所以那个时代的病毒非常短小精巧,甚至有人直接修改其中的 机器码,造成了病毒花样倍出,防不胜防。随着高级语言的发展,由高级 语言写成的二进制病毒也得以发展,这些病毒的作者再也不能精确控制每 一条指令,因为即使相同的代码,不同的编译器编译的结果也不相同;同 时用高级语言编写的病毒另一大特征是库函数的调用,因为它们都不直接 使用 DOS 中断和 BIOS 调用了。Widows 平台的不断更新发展造成了可执行文 件格式的更加复杂,人为控制二进制文件的每一个字节几乎不可能,所以 当前病毒作者把更多的精力花在了病毒的传播方式上,而不再追逐代码技 巧。 根据不同编译器的固有特点,经验丰富的程序员能够从文件的二进制格 式看出由何种编译器编译而来(这样的软件工具也已经存在,比如我们公 司使用的 FI 工具) 。 .2 二进制病毒的传播方式二进制病毒的传播方式 按照二进制病毒(可执行病毒)的传播方式,可以将其分为一下几类: 1引导区病毒 任何逻辑驱动器,无论是硬盘还是软盘,都包含一个引导区。引导区经 常包含一些与磁盘格式相关的信息和一些小程序引导程序(用来导入 这个磁盘上的操作系统) 。如果你插入一张不可引导的软盘到 A 驱动器,当 系统启动时,你会见到这样的信息:Non-System Disk 或 Disk Error。 第二章 二进制病毒与宏病毒介绍 6 像系统引导区一样,硬盘也有一个特殊的引导扇区:主引导扇区。因为 引导代码是一段程序,所以可以被计算机病毒感染。引导扇区的感染经常 是由于在系统重启时软驱中留有被感染的软盘。当被感染的引导扇区被读 入并执行时,计算机病毒拷贝它自己到内存中,修改磁盘的 I/O 功能,然 后感染硬盘并驻留系统,继续感染未被感染的软盘(经常发生于访问软盘 驱动器时) 。因为引导扇区很小,所以这些病毒经常由汇编语言编写。在今 天,我们很少见到引导区病毒,主要出现在病毒收藏者手中。偶尔出现在 包含引导扇区映像的文件中或安装病毒的下载器(Dropper)中。 2文件型病毒 文件型病毒通过搜索系统,复制自己到可执行文件中,在不知不觉中 感染它们。下面列出几种常用的复制方式: a.附加方式(Appending)病毒将自己拷贝到程序的末端,同时 修改程序的入口地址指向自己。 b.预先加入型(Prepending)病毒将自己加入程序的开始处,使 得程序一开始就得以执行病毒代码。 c.覆盖型(Overwriting)病毒覆盖部分或全部源程序,这样源 程序就永远得不到执行。 3伴生型(Companion) 这些病毒与真实的程序有同样的名字,但有不同的行为。例如:一个 病毒想伴生于程序“explorer.exe” ,它将用“”作为名字。 因为 COM 文件先于 EXE 文件运行。当运行“program”时,病毒程序将先 执行。在 DOS 操作系统中,程序的执行顺序是:BAT,COM,EXE。在 WINDOWS 9X/2000/XP 操作系统中,文件的执行顺序是:COM,EXE,BAT。 总之它们的目的是在用户毫不知觉的情况下得以运行,并且运行后也找不 到“踪影” 。 第二章 二进制病毒与宏病毒介绍 7 .3 二进制病毒的破坏性二进制病毒的破坏性 由于这种病毒是二进制可执行程序,所以它们几乎可以完全控制整个系 统,凡是能想到的破坏方法,它们都能实现。小到拷贝文件,修改文件, 系统重启,大到格式化分区,损坏速据,瘫痪网络等。 2.22.2 宏病毒宏病毒 .1 宏病毒的传播方式宏病毒的传播方式 宏病毒的产生,是利用了一些数据处理系统内置宏命令编程语言的特性 而形成的。这些数据处理系统内置宏编程语言的存在使得宏病毒有机可乘, 病毒可以把特定的宏命令代码附加在指定文件上,通过文件的打开或关闭 来获取控制权,实现宏命令在不同文件之间的共享和传递,从而在未经使 用者许可的情况下获取某种控制权,达到传染的目的。目前在可被宏病毒 感染的系统中,以微软的 Word、Excel 居多。 以下是一些宏病毒通常的感染方式: Word 病毒通常感染模板文件“normal.dot” ,然后由模板文件感染其 他文本文件。 Excel 病毒通常感染电子表格模板文件“personal.xls” ,然后由电 子表格模板文件感染其他电子表格文件。 Excel 公式病毒当被感染的文件打开时,带有病毒的公式将被拷贝到 XLSTART 目录中,然后用它感染其他的文本文件。 Power Point 病毒某些操作引发病毒运行并感染 PowerPoint 文件或 主模板文件(Blank Presentation.pot) 。当从被感染的模板创建新的演示 文档时,新的文档就会被感染上病毒。 Access 病毒当一个被感染的数据库打开时,会感染其他的数据库。 下面具体的以 Word 中的宏病毒为例加以说明。 第二章 二进制病毒与宏病毒介绍 8 一旦宏病毒侵入了 Word 文档,它首先会感染 AutoOpen,AutoClose 等 宏。这里的 AutoOpen,AutoClose 是 Office 自带的一些宏过程名。 AutoOpen 中定义的动作是在用户打开该文档之前自动执行的,类似的 AutoClose 中定义的动作是在关闭该文档之前自动执行的。病毒通过这些宏 所关联的文件操作功能获取对文件交换的控制。当某项功能被调用时,相 应的病毒宏就会纂夺控制权,实施病毒所定义的非法操作,包括传染操作、 表现操作以及破坏操作等等。一般不带病毒的 Word 文档中, AutoOpen、AutoClose 等宏是空的或者有极少数包含有一些用户所需的特定 的操作。而被感染宏病毒的 Word 文档则经常是在上述子过程中被写入了感 染文档模板(Normal.dot)的语句。而一旦模板被感染上了病毒,那么执 行此模板上相应操作的任何 Word 文档都无一例外的将被感染上该种病毒。 .2 宏病毒的危害宏病毒的危害 以 Word 宏病毒为例,被感染的文档通常无法正常执行保存、打印等操 作,情节轻者在用户执行特定操作时弹出一些含有威胁语言的对话框,情 节严重者会在满足一定条件的情况下(例如在每个月的一号) ,修改一些系 统文件或者破坏计算机上的数据。 因为 Microsoft Word 几乎已经成为目前全世界办公文档的事实工业标 准,其影响是全球范围的,在中国也绝不例外。WORD 文件的交换是目前办 公数据交流和传送的最通常的方式之一,其涉及面比盗版软件的传播要大 得多,传播速度则更加有过之而无不及。据统计,看 VCD 和使用 Word 成为 用户使用 Windows 应用程序的榜首。无数的 DOC 文件从上级机关金字塔般 地传播到基层,基层又上报到上级机关,从各个单位的办公室至工作者的 家庭,到出版部门的计算机系统。于是,便存在这样一种可能,当成千上 万的 x86 计算机系统在传播和复制这些数据以及文档文件的同时,也在忠 实地传播和复制这些病毒。 由于该病毒能跨越多种平台,并且针对数据文档进行破坏,因此具有极 大的危害性,该病毒在公司通过内联网相互进行文档传送时,迅速蔓延, 往往很快就能使公司的机器全部染上病毒。 第二章 二进制病毒与宏病毒介绍 9 .3 宏病毒的预防宏病毒的预防 因为大多数宏病毒是通过感染模板来传播病毒,所以只要将模板文件 的属性改为只读即可。最好将 autoexec.bat 等重要的系统文件也设为只读 属性,因为它们也常常是病毒所攻击的对象。 还有一个更简单的办法,就是将自动执行宏的功能禁止掉,这样用户 执行任何操作时,病毒都不能依靠自动执行宏的功能来抢占控制权。即使 不这样作,也还有办法制止宏病毒的发作:现在的 office 系统在执行宏之 前都要询问用户是否执行宏。 .4 宏病毒的清除宏病毒的清除 手工:以 Word 为例,选取“工具”菜单中“宏”一项,进入“管理器” ,选取标题为“宏”的一页,在“宏 有效范围”下拉列表框中打开要检查 的文档。这时在上面的列表框中就会出现该文档模板中所含的宏,将不明 来源的自动执行宏删除即可。 使用专业杀毒软件:目前杀毒软件公司都具备清除宏病毒的能力,当 然也只能对已知的宏病毒进行检查和清除, 对于新出现的病毒或病毒的变 种则可能不能正常地清除,或者将会破坏文件的完整性,此时还是手工清 理为妙。 第三章 病毒扫描原理 10 第三章第三章 病毒扫描原理病毒扫描原理 3.13.1 传统病毒扫描技术(特征值扫描)传统病毒扫描技术(特征值扫描) 用每一种病毒体含有的特定字符串对被检测的对象进行扫描,如果在被 检测对象内部发现了某一种特定字节串, 就表明发现了该特征值字节串所 代表的病毒。国外把这种按搜索法工作的病毒扫描软件叫 SCANNER。病毒扫 描软件由两部分组成:一部分是病毒代码库,含有经过特别选定的各种计算 机病毒的代码串;另一部分是利用该代码库进行扫描的扫描程序。国内常见 的病毒扫描程序有我国公安部发行的 scan.exe 和美国 McAfee Associates 的 scan.exe。病毒扫描程序能识别的计算机病毒的数目完全取决于病毒代 码库内所含病毒的种类的多少。 显而易见,库中病毒代码种类越多,扫描 程序能认出的病毒就越多。 对这些扫描工具来说,病毒代码串的选择是非常重要的。短小的病毒一 共就只有一百多个字节,病毒代码长的有上 10KB 字节的。如果随意从病毒 体内选一段作为代表该病毒的特征代码串,可能在不同的环境中,该特征 串并不真正具有代表性, 不能用于将该串所对应的病毒检查出来。选这种 串做为病毒代码库的特征串就是不合适的, 例如在香港病毒中含有下列代 码串: 58 EA 1A AF 00 F0 9C 翻译成汇编程序就是: POP AX JMP F000AF1A PUSHF 其中 AF 1A 00 F0 四个字节是地址,即被感染 PC 机 ROM BIOS 中断 13H 的入口,不同的 PC 机上这个地址是不一样的。当香港病毒感染到不同机器 时, 病毒体内这段代码是不同的。若选了这段代码作为特征值就不能使病 毒扫描程序对香港病毒进行可靠的识别。另一种情况是代码串不应含有病 第三章 病毒扫描原理 11 毒的数据区,数据区是会经常变化的。再有就是代码串一定要在仔细分析 了程序之后才能选出最具代表特性的,足以将该病毒区别于其它病毒和该 病毒的其它变种的代码串。 选定好的特征代码串是很不容易的,是病毒扫描程序的精华所在。一般 情况下,代码串是连续的若干个字节组成的串,但是有些扫描软件采用的 是可变长串, 即在串中包含有一个到几个“模糊”字节(比如我们公司的 CPRL 语言中的 A 指令) 。扫描软件遇到这种串时,只要除“模糊”字节之外 的字串都能完好匹配,则也能判别出病毒。McAfee Associates 的 SCAN.EXE 就具有这种功能。例如给定特征串: “E9 7C 00 10 ? 37 CB”则 “E9 7C 00 10 27 37 CB”和“E9 7C 00 10 9C 37 CB”都能被识别出来, 又例如:“E9 7C 37 CB”可以匹配“E9 7C 00 37 CB” , “E9 7C 00 11 37 CB”和“E97C 0 0 11 22 37 CB” 。但不匹配“E9 7C 00 11 22 33 44 37 CB” ,因为 7C 和 37 之间的子串已超过 4 个字节。除了前面的三个选 特征串的规则外,最重要的是第四条:特征串必须能将病毒与正常的非病毒 程序区分开。 不然将非病毒程序当成病毒报告给用户,是假警报,这种 “狼来了”的假警报太多了,就会使用户放松警惕,等真的病毒一来,破 坏就严重了;再就是若将这假警报送给清病毒程序,会将好程序给“杀死” 了。 使用特征串的扫描法被查病毒软件广泛应用着。当特征串选择得很好时, 病毒检测软件让计算机用户使用起来很方便,对病毒了解不多的人也能用 它来发现病毒。另外,不用专门软件,用 PCTOOLS 等软件也能用特征串扫 描法去检测特定病毒。 这种扫描法的缺点也是很明显的。第一是当被扫描的文件很长时, 扫 描所花时间也越多; 第二是不容易选出合适的特征串,例如 SCAN.EXE 时常 会发出假警报。 第三是新病毒的特征串未加入病毒代码库时,老版本的扫 毒程序无法识别出新病毒。第四是怀有恶意的计算机病毒制造者得到代码 库后,会很容易地改变病毒体内的代码,生成一个新的变种,使扫描程序 失去检测它的能力。第五是容易产生误警报,只要在正常程序内带有某种 病毒的特征串,即使该代码段已不可能被执行,而只是被杀死的病毒体残 第三章 病毒扫描原理 12 余,扫描程序仍会报警。老版本 CPAV 对硬盘主引导区内未被清除干净,已 失去作用的香港病毒发出假警报就是一个例子。第六是不易识别 MutationEngine 类病毒。 其中的的第五个缺点有时候是非常致命的,因为等人们发现新病毒出现 并加入病毒库的时候,这种新病毒往往已经得到广泛的传播,造成大量的 损失了!下面介绍的我们自己设计的简单启发式扫描技术就是一定意义上 的病毒预测,它不需要特定病毒的特征值。 3.23.2 虚拟机查毒虚拟机查毒( (针对针对 MicroSoftMicroSoft 平台的二进制的启发扫描方平台的二进制的启发扫描方 法法) ) .1 虚拟机概论虚拟机概论 虚拟机,在反病毒界也被称为通用解密器,已经成为反病毒软件中最引 人注目的部分,尽管反病毒者对于它的运用还远没有达到一个完美的程度, 但虚拟机以其诸如“病毒指令码模拟器”和“Stryker”等多变的名称为反 病毒产品的市场销售带来了光明的前景。 首先要谈及的是虚拟机的概念以及它与 Vmware(美国 VMWARE 公司生产 的一款虚拟机,它支持在 WINNT/2000 环境下运行如 Linux 等其它操作系统) 和 WIN9X 下的 VDM(DOS 虚拟机,它用来在 32 位保护模式环境中运行 16 实 模式代码)的区别。其实这些虚拟机的设计思想是有渊源可寻的,早在上 个世纪 60 年代 IBM 就开发了一套名为 VM/370 的操作系统。VM/370 在不同 的程序之间提供抢先式多任务,作法是在单一实际的硬件上模式出多部虚 拟机器。典型的 VM/370 会话,使用者坐在电缆连接的远程终端前,经由控 制程序的一个 IPL 命令,模拟真实机器的初始化程序装载操作,于是一套 完整的操作系统被载入虚拟机器中,并开始为使用者着手创建一个会话。 这套模拟系统是如此的完备,系统程序员甚至可以运行它的一个虚拟副本, 来对新版本进行除错。Vmware 与此非常相似,它作为原操作系统下的一个 应用程序可以为运行于其上的目标操作系统创建出一部虚拟的机器,目标 第三章 病毒扫描原理 13 操作系统就象运行在单独一台真正机器上,丝毫察觉不到自己处于 Vmware 的控制之下。当在 Vmware 中按下电源键(Power On)时,窗口里出现了机 器自检画面,接着是操作系统的载入,一切都和真的一样。而 WIN9X 为了 让多个程序共享 CPU 和其它硬件资源决定使用 VMs(所有 Win32 应用程序运 行在一部系统虚拟机上;而每个 16 位 DOS 程序拥有一部 DOS 虚拟机) 。VM 是一个完全由软件虚构出来的东西,以和真实电脑完全相同的方式来回应 应用程序所提出的需求。从某种角度来看,你可以将一部标准的 PC 的结构 视为一套 API。这套 API 的元素包括硬件 I/O 系统,和以中断为基础的 BIOS 和 MS-DOS。WIN9X 常常以它自己的软件来代理这些传统的 API 元素, 以便能够对珍贵的硬件多重发讯。在 VM 上运行的应用程序认为自己独占整 个机器,它们相信自己是从真正的键盘和鼠标获得输入,并从真正的屏幕 上输出。稍被加一点限制,它们甚至可以认为自己完全拥有 CPU 和全部内 存。实现虚拟技术关键在于软件虚拟化和硬件虚拟化。 我们用于查毒的虚拟机并不是像 Vmware 一样为待查可执行程序创建一 个虚拟的执行环境,提供它可能用到的一切元素,包括硬盘,端口等,让 它在其上自由发挥,最后根据其行为来判定是否为病毒。当然这是个不错 的构想,但考虑到其设计难度过大(需模拟元素过多且行为分析要借助人 工智能理论)并且过于强大的功能对查毒有点儿“大题小作” ,因而只能作 为以后发展的方向。我们打算设计的虚拟机严格的说不能称之为虚拟机器, 而叫做虚拟 CPU 更为合适一些,但由于反病毒界习惯称之为虚拟机,所以 在下面的讨论中我还将使用这个名称。查毒使用的虚拟机是一个软件模拟 的 CPU 和内存,它可以象真正 CPU 一样取指,译码,执行,它可以模拟一 段代码在真正 CPU 上运行得到的结果,并反映某些内存的变化。给定一组 机器码序列,虚拟机会自动从中取出第一条指令操作码部分,判断操作码 类型和寻址方式以确定该指令长度,然后在相应的函数中执行该指令,并 根据执行后的结果确定下条指令的位置,如此循环反复直到某个特定情况 发生以结束工作,这就是虚拟机的基本工作原理和简单流程。 设计虚拟机查毒的目的主要是为了摆脱传统病毒扫描对特征码的依赖, 虚拟机首先从文件中确定并读取病毒入口处代码,然后以上述工作步骤解 第三章 病毒扫描原理 14 释执行病毒。但是这里的解释执行和真正的执行有着很大的区别,因为我 们的目标只是发现病毒而不是象 VMware 那样完全模拟执行程序。这里所谓 的“虚拟” ,并非是创建了什么虚拟环境,而是指染毒文件并没有实际执行, 只不过是虚拟机模拟了其真实执行时的效果。根据病毒的两大特征,我们 只需要模拟计算出程序的自我复制和对系统破坏方面的结果。 .2 加密多态病毒加密多态病毒 早期病毒扫描引入虚拟机的一个最显著的原因就是对付传统病毒扫描技 术无法应付的加密多态病毒。这一章就重点介绍加密多态技术。 早期病毒没有使用任何复杂的反检测技术,如果拿反汇编工具打开病毒 体代码看到的将是真正的机器码。因而可以由病毒体内某处一段机器代码 和此处距离病毒入口(注意不是文件头)偏移值来唯一确定一种病毒。查 毒时只需简单的确定病毒入口并在指定偏移处扫描特定代码串。这种静态 扫描技术对付普通病毒是万无一失的。 随着病毒技术的发展,出现了一类加密病毒。这类病毒的特点是:其入 口处或者几个跳转后具有一小段解密代码,而病毒主体代码被加了密。运 行时首先得到控制权的解密代码将对病毒主体进行循环解密,完成后将控 制交给病毒主体运行,病毒主体感染文件时,会将解密代码和用随机密钥 加密过的病毒主体,以及保存在病毒体内或解密代码中的密钥一同写入被 感染文件。由于同一种病毒的不同传染实例的病毒主体用不同的密钥进行 加密,因而不可能在其中找到唯一的一段代码串和偏移来代表此病毒的特 征,似乎传统扫描技术对此即将失效。但只要仔细想想,就会发现不同传 染实例的解密代码仍保持着不变机器码明文(从理论上讲任何加密程序中 都存在一段未加密的机器码,否则程序无法执行,尽管密钥可能会变化) , 所以将特征码取成这一段虽然会冒一定的误报风险(解密代码缺少病毒的 两大特性,同样的特征码也会出现在正常加密过的程序中) ,但仍不失为一 种有效的方法;因为有些代码和程序偏移量对一个具体的病毒来说总是固 定的。 第三章 病毒扫描原理 15 由于加密病毒还没有能够完全逃脱静态特征码扫描,所以病毒写作者在 加密病毒的基础之上进行改进,使解密代码对不同传染实例呈现出多态 (polymorph)性,这就出现了加密多态病毒。它和加密病毒非常类似,唯一 的改进在于病毒主体在感染不同文件会构造出一个功能相同但代码不同的 解密代码,也就是不同的感染文件的解密代码具有相同的解密功能但内容 却截然不同。比如原本一条指令完全可以拆成几条来完成,中间可能会被 插入无用的垃圾代码或者使用不同的寄存器等。这样,由于无法找到不变 的特征码,传统扫描技术就真正失效了。下面先举两个例子说明加密多态 病毒解密代码构造,然后再讨论怎样用虚拟执行技术检测加密多态病毒。 加密病毒 Ieronim.1020 的解密代码: seg000:0108 call sub_4D5/病毒入口, seg000:010B mov ah, 0C4h/已经被加密过的代码 sub_4D5 proc near seg000:04D5 seg000:04E9 mov bx, 10Bh/解密的起始位置 seg000:04EC push cx seg000:04ED mov ax, 29Ah/密钥 seg000:04F0 mov cx, 1E5h/解密循环次数 loc_4F3: seg000:04F3 xor cs:bx, ax seg000:04F6 inc bx seg000:04F7 inc bx seg000:04F8 loop loc_4F3 seg000:04FA retn/将控制权交到已经解开的病 毒体 多态变形病毒 Inquis.2653 的变形解密代码: seg001:0ABC mov cx, 0A9Dh/循环次数 seg001:0ACD cld seg001:0ACE and ax, ax seg001:0AD0 loc_1B60: seg001:0AD0 lodsw/从内存读一个 word seg001:0AD1 xor ax, 0 seg001:0AD4 xor ax, 6D9Dh /解密 seg001:0AD7 or al, al seg001:0AD9 stosw/存回内存 seg001:0ADA or al, al seg001:0ADC lodsw/从内存读一个 word seg001:0ADD and al, al 第三章 病毒扫描原理 16 seg001:0ADF xor ax, 0B0B3h/解密 seg001:0AE2 and al, al seg001:0AE4 stosw/存会内存 seg001:0AE5 or ah, ah seg001:0AE7 loop loc_1B60/循环 seg001:0AE9 and ah, ah seg001:0AEF retn/将控制权交给病毒体 以上的代码看上去绝对不可能是用编译器编译出来,或是编程者手工写 出来的,因为其中充斥了大量的垃圾代码。代码中没有注释部分均可认为 是垃圾代码,真正有用部分完成的功能仅是循环向加密过的病毒体的每个 双字异或一个固定值。这只是多态病毒传染实例的其中一个,别的实例的 解密代码和病毒体将和这个又不同,有时极度变形以至让人无法辩识。一 种最常见的多态技术就是随机向正常代码之间插入无用代码(如上例) ,而 对有用代码则预先准备一张“表” ,然后随机从里面成批抽取(这样可以使 用不同的寄存器,或者加密方式) 。 这种加密多态病毒的检测用传统的传统静态特征码扫描技术显然已经不 行了。为此可以采取的方法是动态启发扫描技术,所谓“动态启发扫描” 指先在虚拟机的配合下对病毒进行解密,接着对解密后的程序使用启发式 扫描。虚拟机之所以又被称为通用解密器在于它不用事先知道病毒体的加 密算法,而是通过跟踪病毒自身的解密过程来对其进行解密。 .3 启发式病毒扫描启发式病毒扫描 结合病毒的两大特性(传染和破坏)和我们在公司对上千个二进制病毒 的分析经验,在虚拟机的帮助下我们设计如下简单启发式病毒扫描: 第一:只关注关键指令 不可否认,Intel 的 CPU 指令集是不可能被完全模拟,也没有精力对其 进行完全理解分析;但更重要的是绝大多数病毒使用的都是常见指令(从 我们分析过的病毒得出的总结) ,而能够区分病毒和普通程序的指令集合更 是如此(譬如查找待感染文件的 INT 21H 的功能调用) 。对病毒扫描有用的 指令的总结如下: 第三章 病毒扫描原理 17 文件操作(查找,读写,修改属性,删除) 中断向量表的修改 内存操作(修改,读取,驻留) 常见的赋值,计算,跳转指令 磁盘的直接访问(修改 MBR,分区表) 第二:针对病毒的两大特性分别分析 1传染(自我复制) 发现文件操作后,考虑如下几种情况: a拷贝指令 找出拷贝的源和目标, “大量”的拷贝当然是值得重点关注 b写指令 找出写的数据来源 c打开,查找文件指令 找出欲打开的文件的特征(比如”*.exe”,”*.com” ) 2破坏(对系统的危害) 这个比较复杂,但是它并不是识别病毒的重要依靠,只是一个辅助性的 目标,所以我们不要求能找出很多的破坏行为出来,也就是说只关注一些 已经出现过的破坏行为,总结如下: a直接修改磁盘 b删除文件 c重启 d格式化硬盘 第三:对上一步分析的结果作出最后的评估 使用的方法就是对不同情况计算权值,然后报告给使用者 3.33.3 针对宏病毒的启发式扫描针对宏病毒的启发式扫描 .1 提取宏提取宏 前面提过,宏只存在于一些特殊的文档中,比如 MicroSoft Word 和 第三章 病毒扫描原理 18 Excel,并且以二进制格式存在(这里的二进制和前面讲的二进制病毒的区 别是这里的文件不能单独运行) ,不能直接浏览,只能在了解其文件格式的 具体含义之后才能提取到文本格式的宏。不过这些文档格式特别复杂,花 费过多精力在这方面显然不值,因此我们采用了别人已经写好的工具:就 会我们公司员工在分析病毒时使用的 mdumper。这是一个 Linux 下的程序, 用法为: mdumper -v 其中 filename 是欲处理的包含宏的文档,outname 是提取出来的宏的存放 位置。它能够把文档里面的宏用文本格式保存起来,他们形如: Attribute VB_Name = “Office_” Public Const ModulName = “Office_” Public Active_ Sub AutoOpen() CodeHost_.InsertLines RndLine, “Rem “ i=ProgEndOff) return(0); /判断语句检查指令位置的合法性 saveinstloc(); /存储当前指令在指令缓冲区中的偏移 HasAddNewInst=0; if (!IsKeyInst() /判断是否为关键指令 DoNormal(); /遇到非关键指令时执行一个通用模拟 PreParse=0; ProcessInst();/执行这条指令 Parse 函数只是简单判断是否满足关键指令的条件。 processInst 中虚拟执行每条指令的过程较复杂一些:通常 processInst 会从取得指令缓冲区 ProgBuffer 中取得当前指令的头两个字 节(包括了全部操作码)并根据它们的值调用相应的指令处理函数。例如 当第一个字节等于 0F 并且第二个字节位与( return(0); if (c=0x9c) if (ExecutePushf() /模拟 pushf return(gotonext(); return(0); if (c=(char)0x9d) if (ExecutePopf() /模拟 popf return(gotonext(); return(0); if (c=0xf) return(0); .4 虚拟机代码剖析虚拟机代码剖析 总体流程控制和分遣部分的相关代码,在上一章中都已分析过了。下面 分析具体的特定指令模拟函数,这才是虚拟机的精华之所在。我将指令分 成不依赖标志寄存器和依赖标志寄存器两大类分别介绍: a.不依赖标志寄存器指令模拟函数的分析 push 和 pop 指令的模拟: int ExecutePushPop1(int c) if (c=0x58) switch c case 0x58: AX=STACKStackP; /模拟 pop ax break;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度财务人员工作试用期工作总结汇编15篇
- 电视新闻基础知识培训课件
- 电脑配件装机知识培训课件
- 电脑设备基础知识培训课件
- 高考文言文句式课件
- 配网基建工作前期补偿协议
- sas考试题目及答案
- plm系统考试及答案
- 电线电缆课件
- 福建省龙岩市长汀县2022-2023学年九年级上学期期中化学试题(含答案)
- Module 6 Unit 2 Happy Mid-Autumn Festival(教学设计)-2024-2025学年外研版(三起)英语四年级上册
- 外研版七年级下册英语单词表
- 《风电场项目经济评价规范》(NB-T 31085-2016)
- 脑电双频指数bis课件
- 新生儿溶血症案例分析报告
- 心内科入科教育培训
- (完整版)销售酒糟合同
- 脑动脉供血不足的护理查房
- 高考数学大全
- 高校工会管理制度
- 《茶文化》课程标准
评论
0/150
提交评论