友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
次次小说 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

知者无畏--一个真实的簿世界-第19章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!



《净悖鸱殖扇舾煽椋迦胨拗魑募腥ァ�
最引人注目的是特征可能是“CIH”病毒破坏硬件的能力,它利用目前许多BIOS芯片开放了可重写的特性,向计算机主板的BIOS端口写入乱码,开创了病毒直接进攻计算机主板芯片的先例。可以说CIH病毒提供了一种全新的病毒程序方式和病毒发展方向。下面对该病毒作进一步的剖析,该病毒程序由三部分组成。

CIH病毒的驻留(初始化)
当运行带有该病毒的。EXE时,由于该病毒修改了该文件程序的入口地址(Address of EntryPoint),首先调入内存执行的是病毒的驻留程序,驻留程序长度为184字节,其驻留主要过程如下:
用SIDT指令取得IDT base address(中断描述符表基地址),然后把IDT的INT 3 的入口地址改为指向CIH自己的INT3程序入口部分;
执行INT 3指令,进入CIH自身的INT 3入口程序,这样,CIH病毒就可以获得Windows最高级别的权限(Ring 0级),可在Windows的内核执行各种操作(如终止系统运行,直接对内存读写、截获各种中断、控制I/O端口等,这些操作在应用程序层Ring 3级是受到严格限制的)。病毒在这段程序中首先检查调试寄存器DR0的值是否为0,用以判断先前是否有CIH病毒已经驻留。
如果DR0的值不为0,则表示CIH病毒程式已驻留,病毒程序恢复原先的INT 3入口,然后正常退出INT3,跳到过程9;
如果DR0值为0,则CIH病毒将尝试进行驻留。首先将当前EBX寄存器的值赋给DR0寄存器,以生成驻留标记,然后调用INT 20中断,使用VxD call Page Allocate系统调用,请求系统分配2个PAGE大小的Windows系统内存(system memory),Windows系统内存地址范围为C0000000h~FFFFFFFFh,它是用来存放所有的虚拟驱动程序的内存区域,如果程序想长期驻留在内存中,则必须申请到此区段内的内存。
如果内存申请成功,则从被感染文件中将原先分成多块的病毒代码收集起来,并进行组合后放到申请到的内存空间中。
再次调用INT 3中断进入CIH病毒体的INT 3入口程序,调用INT20来完成调用一个IFSMgr_InstallFileSystemApiHook的子程序,在Windows内核中文件系统处理函数中挂接钩子,以截取文件调用的操作,这样一旦系统出现要求开启文件的调用,则CIH病毒的传染部分程序就会在第一时间截获此文件;
将同时获取的视窗操作系统默认的IFSMgr_Ring0_FileIO(核心文件输入/输出)服务程序的入口地址保留在DR0寄存器中,以便于CIH病毒调用。
恢复原先的IDT中断表中的INT 3入口;退出INT 3;
根据病毒程序内隐藏的原文件的正常入口地址,跳到原文件正常入口,执行正常程序。

病毒的感染
CIH病毒的传染部分实际上是病毒在驻留内存过程中调用Windows 内核底层函数IFSMgr_InstallFileSystemApiHook函数挂接钩子时指针指示的那段程序。这段程序共586字节,感染过程如下:
文件的截获
每当系统出现要求开启文件的调用时,驻留内存的CIH病毒就截获该文件。病毒调用INT20的VxD call UniToBCSPath系统功能调用取回该文件的名和路径。
EXE文件的判断
对该文件名进行分析,若文件扩展名不为〃。EXE〃,不传染,离开病毒程序,跳回到Windows内核的正常文件处理程序上。
PE格式。EXE判别
目前,在Windows 95/98以及Windows NT,可执行文件。EXE采用的是PE格式。PE格式文件不同于MS…DOS文件格式和WIN 3。X(NE格式,Windows and OS/2 Windows 3。1 execution File Format)。PE格式文件由文件头和代码区(。text Section)、数据区(。data Section)、只读数据区(。rdata Section)、资源信息区(。rsrc Section)等文件实体部分组成。其中文件头又由MS…DOS MZ头、MS…DOS实模式短程序、PE 文件标识(Signature)、PE文件头、PE文件可选头以及各个Sections头组成。
当病毒确认该文件是PE 格式的。EXE文件后,打开该文件,取出该文件的 PE文件标识符(Signature),进行分析,若Signature=〃00455000〃(00PE00),则表明该文件是PE格式的可执行文件,且尚未感染,跳到过程4,对其感染;否则,认为是已感染的PE格式文件或该文件是其它格式的可执行文件,如MS…DOS或WIN 3。X NE格式,不进行感染,而直接跳到病毒发作模块上执行;

病毒的寄生方法,下图是病毒感染PE文件前后的示意图:

感染CIH病毒之前 感染CIH病毒之后














    以往的文件型病毒,通常是将病毒程序追加到正常文件的后面,通过修改程序首指针,来执行病毒程序的。这样,受感染的文件的长度会增加。CIH病毒则不是。它利用了PE格式文件的文件头和各个区(Section)都可能存在自由空间碎片这一特性,将病毒程序拆成若干不等的块,见缝插针,插到感染文件的不同的区(Section)内。
    CIH病毒的首块程序是插在PE文件头的自由空间内的。病毒首先从文件的第134字节处读入82个字节,这82个字节包含了该文件的程序入口地址(address of EntryPoint);文件的分区数(Number of Section),第一个Section header 首址以及整个文件头大小(Size of Headers=MS header+PE file header+PE optional header+PE section headers+自由空间)等参数。以计算病毒首块存放的位置和大小。
    通常PE格式文件头的大小为1024字节,而MZ (DOS可执行文件头)为128字节,PE文件头(包括PE文件的标志)为24字节,PE可选文件头为224字节,以上共376字节,“程序段头”区域大小是根据程序段的数量来确定的,但每个程序段头的大小是固定的,为40字节。一般情况下,一个PE可执行文件有5到6个段,即。text段、。bbs段、。data段、idata段、rsrc段以及reloc段。这样计算下来,整个文件头有408~448字节的自由空间提供给病毒使用。
在PE格式文件头的自由空间里,CIH病毒首先占用了(Section数+1)*8个字节数的空间(本文称为病毒块链表指针区),用于存放每个病毒块的长度(每块4字节)和块程序在文件里的首地址(每块4字节)。然后将计算出的可寄存在文件头内的病毒首块字节数,送入病毒链表指针区;修改PE文件头,用病毒入口地址替换PE文件头原文件程序入口地址,而将原文件的入口地址保存在病毒程序的第94字节内,以供病毒执行完后回到正常文件执行上来。
由于病毒的首块部分除了病毒块链表指针区外必须包含病毒的184字节驻留程序,若文件头的自由空间不足,病毒不会对该文件进行感染。只是将该文件置上已感染标志。
病毒其余块的寄生计算
    剩余的病毒代码是分块依次插入到各段里的自由空间里的。
    要确定该区(段)是否有自由空间,可通过查看“段头”的参数确定。“程序段头”区域是紧跟在PE可选头区域后面。每个“程序段头”共占40个字节,由Name(程序段名)、VirtualSize(程序段已使用大小)、RVA(程序段的虚拟地址)、PhysicalSize(程序段物理大小)、PhysicalOffset(程序段在文件中的偏移量)和Flags(标志)组成,详细结构就不描述了。
    病毒将整个“程序段头”区域读入内存,取第一个“程序段头”,计算出该程序段的自由空间(程序段物理大小 …程序段已使用大小),以确定可存放到该程序段的病毒块字节数。计算出病毒块在该区的物理存放位置(本程序段在文件中的偏移量 +本程序段已使用大小)。计算出病毒块在该文件的逻辑存放位置(=本程序段已使用大小 + 虚拟地址A + PE文件的相对基地址);修改程序段已使用大小为 (病毒长度 + 原来的程序段已使用大小)。修改标志位,置该区为已初始化数据区和可读标志;将该区的病毒块长度和逻辑指针参数写入病毒链表指针区相应区域;求出病毒剩余长度,并取下一个“程序段头”。反复前面的操作,直到病毒全部放入为止。
写入病毒
    病毒程序在前面只是计算出了病毒的分块、长度和插入到文件的位置等参数,将这些参数用PUSH指令压入栈中。在计算完所有病毒存放位置后,才从栈中POP出进行写盘操作。写盘的步骤如下:
    以逆序将各块病毒写入文件各段(Section)相应的自由空间中;将病毒首块写入文件头自由空间内;将病毒块链表指针区写入文件头;将修改后的“段头”区域写回文件;将修改后的PE 文件头和 PE可选文件头写回文件置病毒感染标志,将IFSMgr_Ring0_FileIO程序的第一个字节(通常是55h='U',即PUSH EBP的操作代码)写到PE文件标识符(Signature)'PE'的前一地址内(原为00h),'00PE0000'改为了'UPE0000'。
    病毒读入文件和写入文件都是通过调用系统内核的IFSMgr_Ring0_FileIO的读(EAX=0000D600)和写(EAX=0000D601)功能实现的。
病毒的发作
病毒发作条件判断:
在CIHv1。4中,病毒的发作日期是4月26日,病毒从S的70、71端口取出系统当前日期,对其进行判断:

    如果系统当前日期不是4月26日,则离开病毒程序,回到文件的原正常操作上去;若正好是4月26日,则疯狂的CIH病毒破坏开始了!
病毒的破坏
对基本输入输出系统的破坏
通过主板的BIOS端口地址0CFEH和0CFDH向BIOS引导块(boot block)内各写入一个字节的乱码,造成主机无法启动。
为了保存BIOS中的系统基本程序,BIOS先后采用了两种不同的存储芯片:ROM和PROM。ROM(只读存储器)广泛应用于x86时代,它所存储的内容不可改变,因而在当时也不可能有能够攻击BIOS的病毒;然而,随着闪存(FlashMemory)价格的下跌,奔腾机器上BIOS普遍采用PROM(可编程只读存储器),它可以在12伏以下的电压下利用软件的方式,从BIOS端口中读出和写入数据,以便于进行程序的升级。
  CIH病毒正是利用闪存的这一特性,往BIOS里写入乱码,造成BIOS中的原内容被会彻底破坏,主机无法启动。所幸的是,CIH只能对少数类型的主板BIOS构成威胁。这是因为,BIOS的软件更新是通过直接写端口实现的,而不同主板的BIOS端口地址各不相同。现在出现的CIH只有1K,程序量太小,还不可能存储大量的主板和BIOS端口数据。它只对端口地址为0CFEH和0CFD的BIOS(据有关资料为英特尔430TX 芯片组、部分奔腾电脑使用的芯片组)进行攻击。
对硬盘的破坏
通过调用Vxd call IOS_Sendmand直接对硬盘进行存取,将垃圾代码以2048个扇区为单位,从硬盘主引导区开始依次循环写入硬盘,直到所有硬盘(含逻辑盘)的数据均被破坏为止。
第五节 漏洞、臭虫还有其他
象任何人造的物品一样,电脑软件作为人类的创造物,同样存在缺陷。越是代码量多,规模庞大的软件,出现漏洞的可能性也就越大,这是由于软件本身的复杂性决定的。在六十年代,曾经出现过一次软件危机。在这一时期软件开始作为一种产品被广泛使用,出现了专门的软件开发公司
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!