CIH病毒的分析与清除

劲 松

E_mail:jinsongzhu@163.net

一九九九年七月二十六日

 

.

一年前的7月26日,一个名叫CIH的计算机病毒首次露面,袭击了美国,病毒发作时直接往计算机主板BIOS芯片和硬盘写乱码,破坏力非常大,可造成主机无法启动,硬盘数据全部被清洗。一个月后,该病毒在中国大陆出现,给多家计算机应用单位造成严重损失。今年4月26日该病毒又一次在全球总爆发,据有关报道,全球有六千万台电脑受到破坏,大量重要资料无法复原,灾情严重者,连计算机主板硬件也不得不更换。仅一天,由于CIH病毒发作,在中国大陆受损的电脑总数约有卅六万台, 所造成的直接、间接经济损失超过十亿元人民币。

CIH病毒是一种文件型病毒,又称Win95.CIH、Win32.CIH、PE_CIH,是第一例感染Windows95/98环境下PE格式(Portable Executable Format)EXE文件的病毒。

不同于以往的DOS型病毒,CIH病毒是建立在WINDOW95/98平台。由于微软WINDOWS平台的不断发展,DOS平台已逐渐走向消亡,DOS型病毒也将随之退出历史的舞台。随之而来的是攻击Windows系统病毒走上计算机病毒的前台。可以预测,在未来几年内,连同宏病毒在内,Windows平台将会是造病毒和反病毒的主战场。

因此,剖析CIH病毒机理,掌握在Windows平台下病毒驻留和传染方法,对于预防、检测和清除CIH病毒,预防未来新型Windows病毒,在反病毒的战场上掌握主动权,都具有十分重要的意义。

 

目前CIH病毒有多个版本,典型的有:CIHv1.2:四月二十六日发作,长度为1003个字节,包含字符:CIHv1.2TTIT;CIHv1.3:六月二十六日发作,长度为1010个字节,包含字符:CIHv1.3TTIT;CIHv1.4:每月二十六日发作,长度为1019个字节,包含字符:CIHv1.4TATUNG。其中,最流行的是CIHv1.2版本。本文将作重对该版本进行剖析。

病毒的表现形式、危害及传染途径

CIH病毒是一种文件型病毒,其宿主是Windows 95/98系统下的PE格式可执行文件即.EXE文件,就其表现形式及症状而言,具有以下特点:

受感染的.EXE文件的文件长度没有改变;

DOS以及WIN 3.1 格式(NE格式)的可执行文件不受感染,并且在Win NT中无效。

用资源管理器中“工具>查找>文件或文件夹”的“高级>包含文字”查找.EXE特征字符串----“CIH v”,在查找过程中,显示出一大堆符合查找特征的可执行文件。

若4月26日开机,显示器突然黑屏,硬盘指示灯闪烁不停,重新开机后,计算机无法启动。

病毒的危害主要表现在于病毒发作后,硬盘数据全部丢失,甚至主板上的BIOS中的原内容被会彻底破坏,主机无法启动。只有更换BIOS,或是向固定在主板上的BIOS中重新写入原来版本的程序,才能解决问题。

该病毒是通过文件进行传播。计算机开机以后,如果运行了带病毒的文件,其病毒就驻留在Windows的系统内存里了。此后,只要运行了PE格式的.EXE文件,这些文件就会感染上该病毒。

 

病毒的运行机制

同传统的DOS型病毒相比,无能是在内存的驻留方式上还是传染的方式上以及病毒攻击的对象上,CIH病毒都于众不同,新颖独到。病毒的代码不长,CIHv1.2只有1003个字节,其他版本也大小差不多。它绕过了微软提供的应用程序界面,绕过了ActiveX、C++甚至C,使用汇编,利用VxD(虚拟设备驱动程序)接口编程,直接杀入Windows内核。它没有改变宿主文件的大小,而是采用了一种新的文件感染机制即碎洞攻击(fragmented cavity attack),将病毒化整为零,拆分成若干块,插入宿主文件中去;最引人注目的是它利用目前许多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病毒的传染部分程序就会在第一时间截获此文件;

将同时获取的Windows默认的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头组成。其格式结构图见图1。

Windows PE格式文件结构的详细分析可到下列网址查阅: 

http://www.microsoft.com/win32dev/base/pefile.htm

CIH病毒感染的就是PE格式可执行文件!

当病毒确认该文件是.EXE文件后,打开该文件,取出该文件的 PE文件标识符(Signature),进行分析,若Signature=”00455000”(00PE00),则表明该文件是PE格式的可执行文件,且尚未感染,跳到过程4,对其感染;否则,认为是已感染的PE格式文件或该文件是其它格式的可执行文件,如MS-DOS或WIN 3.X NE格式,不进行感染,而直接跳到病毒发作模块上执行;

4.病毒首块的寄生计算:

以往的文件型病毒,通常是将病毒程序追加到正常文件的后面,通过修改程序首指针,来执行病毒程序的。这样,受感染的文件的长度会增加。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字节,而MS header为128字节,PE file header(包括PE Signature)为24字节,PE optional header为224字节,以上共376字节,Section headers 大小是根据Sections 数量来确定的,但每个Section的大小是固定的,为40字节。一般情况下,Section有5~6个即.text区、.bbs区、.data区、idata区、rsrc区以及reloc区。这样计算下来,整个文件头有408~448字节的自由空间提供给病毒使用。

在PE格式文件头的自由空间里,CIH病毒首先占用了(Section数+1)*8个字节数的空间(本文称为病毒块链表指针区),用于存放每个病毒块的长度(每块4字节)和块程序在文件里的首地址(每块4字节)。然后将计算出的可寄存在文件头内的病毒首块字节数,送入病毒链表指针区;修改PE文件头,用病毒入口地址替换PE文件头原文件程序入口地址,而将原文件的入口地址保存在病毒程序的第94字节内,以供病毒执行完后回到正常文件执行上来。

由于病毒的首块部分除了病毒块链表指针区外必须包含病毒的184字节驻留程序,若文件头的自由空间不足,病毒不会对该文件进行感染。只是将该文件置上已感染标志。

5.病毒其余块的寄生计算

剩余的病毒代码是分块依次插入到各Section里的自由空间里的。

要确定该区(Section)是否有自由空间,可通过查看Section Header里的参数确定。Section Headers区域是紧跟在PE Optional Header 区域后面。每个Section Header共占40个字节,由Name(区名)、VirtSize(本已使用大小)、RVA(本区的虚拟地址)、PhysSize(区物理大小)、Phys off(本区在文件中的偏移量)和Flags(标志)组成。其结构如下所示:

typedef struct _IMAGE_SECTION_HEADER {

UCHAR Name[8];

ULONG VirtSize;

ULONG RVA;

ULONG PhysSize;

ULONG Pyus off;

ULONG PointerToRelocations;

ULONG PointerToLinenumbers;

USHORT NumberOfRelocations;

USHORT NumberOfLinenumbers;

ULONG Flags;

} IMAGE_SECTION_HEADER

病毒将整个Section Headers读入内存,取第一个Section Header,计算出该Section的自由空间(=PhysSize-VirtSize),以确定可存放到该区的病毒块字节数;计算出病毒块在该区的物理存放位置(=Physoff+VirtSize);计算出病毒块在该文件的逻辑存放位置(=VirtSize+RVA+ImageBase);修改VirtSize(=该块病毒长度+原VirtSize);修改Flags,置该区为已初始化数据区和可读标志;将该区的病毒块长度和逻辑指针参数写入病毒链表指针区相应区域;求出病毒剩余长度,并取下一个Section Header。反复前面的操作,直到病毒全部放入为止。

6.写入病毒

病毒程序在前面只是计算出了病毒的分块、长度和插入到文件的位置等参数,将这些参数用PUSH指令压入栈中。在计算完所有病毒存放位置后,才从栈中POP出进行写盘操作。写盘的步骤如下:

以逆序将各块病毒写入文件各区(Section)相应的自由空间中;

将病毒首块写入文件头自由空间内;

将病毒块链表指针区写入文件头;

将修改后的Section Headers写回文件;

将修改后的PE File Header 和 PE File Option Header写回文件

置病毒感染标志,将IFSMgr_Ring0_FileIO程序的第一个字节(通常是55h=‘U’,即PUSH EBP的操作代码)写到PE文件标识符(Signature)‘PE’的前一地址内(原为00h),‘00PE0000’改为了‘UPE0000’。

 

病毒读入文件和写入文件都是通过调用系统内核的IFSMgr_Ring0_FileIO的读(EAX=0000D600)和写(EAX=0000D601)功能实现的。

病毒在PE格式文件中存放位置见图2。

 

 

病毒的发作

1.病毒发作条件判断

在CIHv1.4中,病毒的发作日期是4月26日,病毒从COMS的70、71端口取出系统当前日期,对其进行判断:

MOV AX,0708

OUT 70,AL

IN AL,71 取当前系统月份->AL

XCHG AL,AH

OUT 70,AL

IN AL,71 取当前系统日->AL

XOR AX,0426 是否为4月26日

JZ 病毒发作程序

 

如果系统当前日期不是4月26日,则离开病毒程序,回到文件的原正常操作上去;若正好是4月26日,则疯狂的CIH病毒破坏开始了!

2.病毒的破坏

①通过主板的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(据有关资料为Intel 430TX chipset、部分Pentium chipsets)进行攻击。

 

②覆盖硬盘

通过调用Vxd call IOS_SendCommand直接对硬盘进行存取,将垃圾代码以2048个扇区为单位,从硬盘主引导区开始依次循环写入硬盘,直到所有硬盘(含逻辑盘)的数据均被破坏为止。

 

 

 

 

病毒的清除

目前,检测和清除CIH病毒的程序已有很多, KV300、瑞星、Norton Antiviurs,这些杀病毒工具都非常有效。受CIH病毒破坏后系统如何恢复的文章也有不少。这里本文只给出一般的检测和清除方法和程序。

病毒的检测

①利用“资源管理器”进行搜寻

具体的搜索方法为:首先开启“资源管理器”,选择其中的菜单功能“工具>查找>文件或文件夹”,在弹出的“查找文件”设置窗口的“名称和位置”输入中输入查找路径及文件名(如:*.EXE),然后在“高级>包含文字”栏中输入要查找的特征字符串----“CIH v”,最后点取“查找键”即可开始查找工作。如果在查找过程中,显示出一大堆符合查找特征的可执行文件,则表明你的计算机上已经感染了CIH病毒。

但这种方法中存在着一个致命的缺点,那就是:如果用户已感染了CIH病毒,那么这样一个大面积的搜索过程实际上也是在扩大病毒的感染面。

②Debug检测PE Signature

用\windows\command\debug.com检测.EXE。

通过“程序”进入“MS-DOS方式”,在MS-DOS方式下:

DEBUG XXX.EXE

-D CS:3F 41

如果显示的值是0x554550(“UPE”),则该文件有可能已经感染了CIH病毒。

病毒的清除

根据以上分析,笔者用汇编语言编写了KILL_CIH.EXE,能自动搜寻各级子目录下的所有.EXE文件,对其进行CIH病毒检测和消除。其源程序KILL_CIH.ASM可通过E_mail向笔者获取。E_mail: jinsongzhu@163.net

CIH病毒的分析与清除相关推荐

  1. 实验四-VBScript脚本病毒分析与清除

    [实验名称] VBScript脚本病毒分析与清除 [实验目的] 1.了解VBScript如何实现文件.进程及注册表操作 2.了解VBScritp病毒的工作原理 3.了解VBScritp病毒的感染目标和 ...

  2. 计算机网什么是cih病毒,CIH病毒会造成什么样的危害?如何彻底的清除CIH病毒?...

    CIH是一种极其恶劣的病毒,TA不仅会恶意格式化硬盘文件,还会让硬件置身于瘫痪状态.而每年的4月26日是CIH病毒发作的高峰期.若是用户的计算机感染了CIH病毒,应该要如何处理呢?阅读下文了解彻底的清 ...

  3. U盘流行病毒autorun的分析及清除方法

    U盘流行病毒的形态为autorun名称的隐藏文件,后缀名为inf.exe等十种,通常表现为双击无法打开机器盘符,只能右击再点打开:系统变慢.有的没有感觉到异样,不大影响使用,但硬盘根目录下仍然有各种名 ...

  4. 病毒分析之“驱动人生”挖矿木马分析及其清除方案

    "驱动人生"挖矿木马分析及其清除方案 0x00 概述 自2018年12月份"驱动人生"挖矿木马爆发以来,此木马一直处于活跃状态,更新版本更是达到了20+次.此木 ...

  5. CIH病毒庐山真面目

    CIH病毒是一种文件型病毒,又称Win95.CIH.Win32.CIH.PE_CIH,是第一例感染Windows95/98环境下PE格式(Portable Executable Format)EXE文 ...

  6. CIH病毒破坏硬件原理与删除木马的100多种方法

    病毒是怎样破坏硬件的 2008-01-13 01:52 CIH病毒把大家搞得人心惶惶,掀起了不小的波澜.以前的各种病毒最多只能破坏硬盘数据,而CIH却能侵入主板上的Flash BIOS,破坏其内容而使 ...

  7. Linux——挖矿病毒(sysupdate, networkservice进程)清除解决方案

    问题描述 Linux进程 阿里云管理控制台看看CPU占用率 解决方案 top命令 获取进程号 查看进程运行的文件位置 ls 命令 ls -l proc/{进程号}/exe sysupdate.netw ...

  8. 利用NTLDR进入RING0的方法及MGF病毒技术分析

    利用NTLDR进入RING0的方法及MGF病毒技术分析 2010年08月02日 [b]以前看了莫国防病毒的源代码.摸到了一个进入RING0的方法.今天又在EST论坛看到了代码,随手写一个笔记吧.其实w ...

  9. 计算机网什么是cih病毒,CIH病毒是什么?

    CIH病毒属文件型病毒,其别名有Win95.CIH.Spacefiller.Win32.CIH.PE_CIH,它主要感染Windows95/98下的可执行文件(PE格式,Portable Execut ...

  10. CIH病毒-邹丹注释

    ;CIH病毒1.4版本之中文注释由"邹丹"编写完成于1999-4-09 ;源程序中的英文注释未作修改,全部保留 .586P ;586保护模式汇编 ; *************** ...

最新文章

  1. 自己构思2条SQL用于完成相同的功能,并比较它们的性能!
  2. ROW_NUMBER() OVER()函数用法;(分组,排序),partition by
  3. JsCV Core v0.2发布 Javascript图像处理系列目录
  4. WPF中删除打开过的图片
  5. 第二百一十九天 how can I 坚持
  6. PAT学习资料汇总(PAT甲级、PAT顶级、PAT考试经验)
  7. CTO 深度解读 SMTX OS 3.5 产品特性
  8. 问题十二:怎么用ray tracing画第一张图
  9. 海尔希望小学:同一片蓝天下梦想启航
  10. 微信公众平台消息接口开发 小黄鸡(小贱鸡)机器人 微信公众平台 公众号聊天机器人 ,消息,接口,小黄鸡,小贱鸡,机器人...
  11. python数据按照分组进行频率分布_python实现读取类别频数数据画水平条形图案例...
  12. 基于AIC评价指标的逐步回归Python语言实现
  13. 【DB笔试面试733】在Oracle中,RAC中REMOTE_LISTENER的作用是什么?
  14. 详解C语言最快关键字——register
  15. 华为 ensp 部分查询方法
  16. matlab gui 界面 梅花,青海地区没有出现过彩陶文物。()
  17. 推荐一个大佬,文章适合偷偷读!
  18. 光伏数据采集方案——逆变器,电表,气象站
  19. 扒一扒安卓的渲染原理
  20. android设备登录工行卡,工行Android手机银行怎么登陆?

热门文章

  1. JUnit 单元测试
  2. junit 单元测试插入操作事务回滚
  3. 微信里的 Office 365 —— Office 365 微助理打造移动办公新体验
  4. 工具推荐:JDownloader - 下载网盘资料的好工具
  5. 存着-在重置电脑时删除了应用
  6. 游戏上云?-游戏设计与开发(2)
  7. Java Web基础入门第三十九讲 利用易宝第三方支付实现简单在线支付
  8. 注册ActiveX控件 未在此计算机上注册ActiveX控件!!!
  9. 商陆花、秦丝、管家婆,到底服装加盟管理软件哪家强?来看排行榜
  10. 安装Win7或者XP系统用虚拟光驱加载Win7或者XP镜像 iso文件xp win7wim文件