找回密码
 注册创意安天

计算机病毒特征码提取分析(swordlea 03年古董文章)

[复制链接]
发表于 2009-7-29 23:41 | 显示全部楼层 |阅读模式
计算机病毒特征码提取分析
作者:安天实验室系统程序员 李柏松
时间:2003-1
说明
样本文件(来自安天ASTS#6样本库):Win95.cih.1013.ex$ 4,608 字节 [1996-10-18 4:00]
第一节 特点
    病毒绕过了微软提供的应用程序界面,绕过了ActiveX、C++甚至C,使用汇编,
利用VxD(虚拟设备驱动程序)接口编程,直接杀入Windows内核。它没有改变宿主文件
的大小,而是采用了一种新的文件感染机制即碎洞攻击(fragmented cavity attack),
将病毒化整为零,拆分成若干块,插入宿主文件中去;最引人注目的是它利用目前许多
BIOS芯片开放了可重写的特性,向计算机主板的BIOS端口写入乱码,开创了病毒直接进
攻计算机主板芯片的先例。可以说CIH病毒提供了一种全新的病毒程序方式和病毒发展方向。
第二节 CIH病毒的初始化
1.用SIDT指令取得IDT base address(中断描述符表基地址),然后把IDT的INT 3 的入口地址改为指向CIH自己的INT3程序入口部分;
2.执行INT 3指令,进入CIH自身的INT 3入口程序,这样,CIH病毒就可以获得Windows最高级别的权限(Ring 0级),可在Windows的内核执行各种操作(如终止系统运行,直接对内存读写、截获各种中断、控制I/O端口等,这些操作在应用程序层Ring 3级是受到严格
  限制的)。病毒在这段程序中首先检查调试寄存器DR0的值是否为0,用以判断先前是否有CIH病毒已经驻留。
3.如果DR0的值不为0,则表示CIH病毒程式已驻留,病毒程序恢复原先的INT 3入口,然后正常退出INT3,跳到过程9;
4.如果DR0值为0,则CIH病毒将尝试进行驻留。首先将当前EBX寄存器的值赋给DR0寄存器,以生成驻留标记,然后调用INT 20中断,使用VxD call Page Allocate系统调用,请求系统分配2个PAGE大小的Windows系统内存(system memory),Windows系统内存地址范围为C0000000h~FFFFFFFFh,它是用来存放所有的虚拟驱动程序的内存区域,如果程序想长期驻留在内存中,则必须申请到此区段内的内存。
5.如果内存申请成功,则从被感染文件中将原先分成多块的病毒代码收集起来,并进行组合后放到申请到的内存空间中;
6.再次调用INT 3中断进入CIH病毒体的INT 3入口程序,调用INT20来完成调用一个IFSMgr_InstallFileSystemApiHook的子程序,在Windows内核中文件系统处理函数中挂接钩子,以截取文件调用的操作,这样一旦系统出现要求开启文件的调用,则CIH病毒的传染部分程序就会在第一时间截获此文件;
7.将同时获取的Windows默认的IFSMgr_Ring0_FileIO(核心文件输入/输出)服务程序的入口地址保留在DR0寄存器中,以便于CIH病毒调用;
8.恢复原先的IDT中断表中的INT 3入口,退出INT 3;
9.根据病毒程序内隐藏的原文件的正常入口地址,跳到原文件正常入口,执行正常

第三节 病毒发作条件判断

在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 病毒发作程序

之所以不采用这段代码做特征码,是为防止正常程序使用,或者易于发作条件修改。
第四节 病毒的破坏
1.通过主板的BIOS端口地址0CFEH和0CFDH向BIOS引导块(boot block)内各写入一个字节的乱码,造成主机无法启动。
随着闪存(FlashMemory)价格的下跌,奔腾机器上BIOS普遍采用PROM(可编程只读存储器),它可以在12伏以下的电压下利用软件的方式,从BIOS端口中读出和写入数据,以便于进行程序的升级。CIH病毒正是利用闪存的这一特性,往BIOS里写入乱码,造成BIOS中的原内容被会彻底破坏,主机无法启动。
所幸的是,CIH只能对少数类型的主板BIOS构成威胁。这是因为,BIOS的软件更新是通过直接写端口实现的,而不同主
板的BIOS端口地址各不相同。现在出现的CIH只有1K,程序量太小,还不可能存储大量的主板和BIOS端口数据。它只对
端口地址为0CFEH和0CFD的BIOS(据有关资料为Intel 430TX chipset、部分Pentium chipsets)进行攻击
2.覆盖硬盘
通过调用Vxd call IOS_SendCommand直接对硬盘进行存取,将垃圾代码以2048个扇区为单位,从硬盘主引导区开始依
次循环写入硬盘,直到所有硬盘(含逻辑盘)的数据均被破坏为止。

特征码:
    55 8D 44 24 F8 33 DB 64 87 03 E8 00 00 00 00 5B 8D
    4B 42 51 50 50 0F 01 4C 24 FE 5B 83 C3 1C FA 8B 2B
    66 8B 6B FC 8D 71 12 56 66 89 73 FC C1 EE 10 66 89
    73 02 5E CC 56 8B F0 8B 48 FC F3 A4 83

偏移位置:0x240

特码长度:0x40

反汇编代码:

00400240 > 55               PUSH EBP
00400241   8D4424 F8        LEA EAX,DWORD PTR SS:[ESP-8]
00400245   33DB             XOR EBX,EBX
00400247   64:8703          XCHG DWORD PTR FS:[EBX],EAX
0040024A   E8 00000000      CALL Win95_ci.0040024F
0040024F   5B               POP EBX
00400250   8D4B 42          LEA ECX,DWORD PTR DS:[EBX+42]
00400253   51               PUSH ECX
00400254   50               PUSH EAX
00400255   50               PUSH EAX
00400256   0F014C24 FE      SIDT FWORD PTR SS:[ESP-2]  ; 用SIDT指令取得IDT base address(中断描述符表基地址),
                                                       ; 然后把IDT的INT 3 的入口地址改为指向CIH自己的INT3程序入口部分;
0040025B   5B               POP EBX
0040025C   83C3 1C          ADD EBX,1C
0040025F   FA               CLI
00400260   8B2B             MOV EBP,DWORD PTR DS:[EBX]
00400262   66:8B6B FC       MOV BP,WORD PTR DS:[EBX-4]
00400266   8D71 12          LEA ESI,DWORD PTR DS:[ECX+12]
00400269   56               PUSH ESI
0040026A   66:8973 FC       MOV WORD PTR DS:[EBX-4],SI
0040026E   C1EE 10          SHR ESI,10
00400271   66:8973 02       MOV WORD PTR DS:[EBX+2],SI
00400275   5E               POP ESI
00400276   CC               INT3                       ; 执行INT 3指令,进入CIH自身的INT 3入口程序,获得权限(Ring 0级),
00400277   56               PUSH ESI
00400278   8BF0             MOV ESI,EAX
0040027A   8B48 FC          MOV ECX,DWORD PTR DS:[EAX-4]
0040027D   F3:A4            REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]
0040027F   83E8 08          SUB EAX,8
与1.3版本匹配,源病毒初始代码如下:
                                                                                 
MyVirusStart:                                                                    
                        push    ebp                                             
                                                                                 
; *************************************                                          
; * Let's Modify Structured Exception *                                          
; * Handing, Prevent Exception Error  *                                          
; * Occurrence, Especially in NT.     *                                          
; *************************************                                          
                                                                                 
                        lea     eax, [esp-04h*2]                                 
                                                                                 
                        xor     ebx, ebx                                         
                        xchg    eax, fs:[ebx]                                    
                                                                                 
                        call    @0                                               
@0:                                                                              
                        pop     ebx                                             
                                                                                 
                        lea     ecx, StopToRunVirusCode-@0[ebx]                  
                        push    ecx                                             
                                                                                 
                        push    eax                                             
                                                                                 
; *************************************                                          
; * Let's Modify                      *                                          
; *************************************
                        pop     esi                                             
                                                                                 
; *************************************                                          
; * Generate Exception to Get Ring0   *                                          
; *************************************                                          
                                                                                 
                        int     HookExceptionNumber     ; GenerateException      

ReturnAddressOfEndException     =       $                                       
                                                                                 
; *************************************                                          
; * Merge All Virus Code Section      *                                          
; *************************************                                          
                                                                                 
                        push    esi                                             
                        mov     esi, eax                                         
                                                                                 
LoopOfMergeAllVirusCodeSection:                                                  
                                                                                 
                        mov     ecx, [eax-04h]                                   
                                                                                 
                        rep     movsb                                            

                        sub     eax, 08h                                         


                                                                                 
; *************************************                                          
; * Generate Exception Again          *                                          
; *************************************                                          
                                                                                 
                                                                                 
; *************************************                                          
; * Let's Restore                     *                                          
; * Structured Exception Handing      *                                          
; *************************************                                          
                                                                                 
                                                                                 
; *************************************                                          
; * When Exception Error Occurs,      *                                          
; * Our OS System should be in NT.    *                                          
; * So My Cute Virus will not         *                                          
; * Continue to Run, it Jmups to      *                                          
; * Original Application to Run.      *                                          
; *************************************                                          

StopToRunVirusCode:                                                              
@1                      =       StopToRunVirusCode     
                                                                             
; *************************************                                          
; * Return Original App to Execute    *                                          
; *************************************
发表于 2009-7-30 09:14 | 显示全部楼层
没看懂
回复

使用道具 举报

发表于 2009-7-30 17:02 | 显示全部楼层
:lo 对CIH病毒的分析吧。不过现在的CIH 就垃圾了。呵呵。
回复

使用道具 举报

发表于 2009-7-30 19:36 | 显示全部楼层
老李03年就在安天了?
回复

使用道具 举报

发表于 2009-7-31 15:39 | 显示全部楼层
有够老,特征码分析走过了很长的一段路,未来前景堪优。
本人十分看好微点的主动防御,技术已趋于成熟。
回复

使用道具 举报

发表于 2009-8-18 11:10 | 显示全部楼层
有够老,特征码分析走过了很长的一段路,未来前景堪优。
本人十分看好微点的主动防御,技术已趋于成熟。
antiytest 发表于 2009-7-31 15:39

无论是猪流感还是HIV,外在的症状都不是确诊的最终标准,只有基因测试才能确诊。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册创意安天

本版积分规则

Archiver|手机版|小黑屋|创意安天 ( 京ICP备09068574,ICP证100468号。 )

GMT+8, 2024-11-15 23:48

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表