首页
社区
课程
招聘
[讨论]KIS7.0关于溢出检测的处理似乎有bug
2008-8-10 21:23 4651

[讨论]KIS7.0关于溢出检测的处理似乎有bug

2008-8-10 21:23
4651
卡巴为了对程序可能出现的溢出进行检测对部分API进行了挂钩,其中之一就是LoadLibraryA。在对detours库的1.5版本进行测试的时候发现在没有装卡巴的时候DetourCreateProcessWithDllA函数能够顺利运行,但是装了卡巴之后DetourCreateProcessWithDllA函数执行没有反应,程序并没有启动,而且也没有提示溢出。由于detours1.5中的DetourCreateProcessWithDllA使用的是在栈中执行代码,再看了基于栈指纹检测缓冲区溢出的一点思路之后想到可能是被卡巴带到坟墓里去了。于是跟了一下发现程序在f6d9f6ab repne scas byte ptr es:[edi]出现了异常,似乎是应用层访问了只有ring0才能访问的内存。
klif+0x32bd0: ;这个就是卡巴对LoadLibraryA函数的处理部分
f6d9fbd0 51              push    ecx
f6d9fbd1 8b442408        mov     eax,dword ptr [esp+8]
f6d9fbd5 53              push    ebx
f6d9fbd6 56              push    esi
f6d9fbd7 57              push    edi
f6d9fbd8 6a00            push    0
f6d9fbda 50              push    eax
f6d9fbdb 680801d7f6      push    offset klif+0x3108 (f6d70108)
f6d9fbe0 8d4c2420        lea     ecx,[esp+20h]
f6d9fbe4 6a00            push    0
f6d9fbe6 51              push    ecx
f6d9fbe7 c744242000000000 mov     dword ptr [esp+20h],0
f6d9fbef e8acf6ffff      call    klif+0x322a0 (f6d9f2a0);这个函数判断是否溢出了,在这里F11
f6d9fbf4 84c0            test    al,al

klif+0x322a0:
f6d9f2a0 8b442408        mov     eax,dword ptr [esp+8]
f6d9f2a4 8b542404        mov     edx,dword ptr [esp+4]
f6d9f2a8 56              push    esi
f6d9f2a9 8d4c240c        lea     ecx,[esp+0Ch]
f6d9f2ad 50              push    eax
f6d9f2ae 51              push    ecx
f6d9f2af 52              push    edx
f6d9f2b0 e8fbfdffff      call    klif+0x320b0 (f6d9f0b0);F10
f6d9f2b5 8bf0            mov     esi,eax
f6d9f2b7 85f6            test    esi,esi
f6d9f2b9 7434            je      klif+0x322ef (f6d9f2ef)
f6d9f2bb 56              push    esi
f6d9f2bc e8ef070000      call    klif+0x32ab0 (f6d9fab0); F10
f6d9f2c1 85c0            test    eax,eax
f6d9f2c3 742a            je      klif+0x322ef (f6d9f2ef)
f6d9f2c5 8b4c2418        mov     ecx,dword ptr [esp+18h]
f6d9f2c9 8b44240c        mov     eax,dword ptr [esp+0Ch]
f6d9f2cd 8b542410        mov     edx,dword ptr [esp+10h]
f6d9f2d1 81e1ff000000    and     ecx,0FFh
f6d9f2d7 50              push    eax
f6d9f2d8 8b442418        mov     eax,dword ptr [esp+18h]
f6d9f2dc 51              push    ecx
f6d9f2dd 52              push    edx
f6d9f2de 50              push    eax
f6d9f2df 56              push    esi
f6d9f2e0 e8fb020000      call    klif+0x325e0 (f6d9f5e0); F11
f6d9f2e5 85c0            test    eax,eax

klif+0x325e0:
f6d9f5e0 81eccc030000    sub     esp,3CCh
f6d9f5e6 53              push    ebx
f6d9f5e7 55              push    ebp
f6d9f5e8 56              push    esi
f6d9f5e9 57              push    edi
f6d9f5ea 8bbc24e4030000  mov     edi,dword ptr [esp+3E4h]
f6d9f5f1 33ed            xor     ebp,ebp
f6d9f5f3 3bfd            cmp     edi,ebp
f6d9f5f5 c744241807000000 mov     dword ptr [esp+18h],7
f6d9f5fd c644241300      mov     byte ptr [esp+13h],0
f6d9f602 896c2414        mov     dword ptr [esp+14h],ebp
f6d9f606 0f84e6000000    je      klif+0x326f2 (f6d9f6f2)
f6d9f60c 39ac24ec030000  cmp     dword ptr [esp+3ECh],ebp
f6d9f613 7456            je      klif+0x3266b (f6d9f66b)
f6d9f615 81ff00000100    cmp     edi,10000h
f6d9f61b 7318            jae     klif+0x32635 (f6d9f635)
f6d9f61d 8d442420        lea     eax,[esp+20h]
f6d9f621 57              push    edi
f6d9f622 50              push    eax
f6d9f623 e8c8feffff      call    klif+0x324f0 (f6d9f4f0)
f6d9f628 8d4c2420        lea     ecx,[esp+20h]
f6d9f62c 898c24e4030000  mov     dword ptr [esp+3E4h],ecx
f6d9f633 8bf9            mov     edi,ecx
f6d9f635 803f00          cmp     byte ptr [edi],0
f6d9f638 0f84b4000000    je      klif+0x326f2 (f6d9f6f2)
f6d9f63e 57              push    edi
f6d9f63f ff15a000daf6    call    dword ptr [klif+0x330a0 (f6da00a0)]
f6d9f645 8d740002        lea     esi,[eax+eax+2]
f6d9f649 8b8424ec030000  mov     eax,dword ptr [esp+3ECh]
f6d9f650 83c404          add     esp,4
f6d9f653 3bc5            cmp     eax,ebp
f6d9f655 747c            je      klif+0x326d3 (f6d9f6d3)
f6d9f657 50              push    eax
f6d9f658 ff15a000daf6    call    dword ptr [klif+0x330a0 (f6da00a0)]
f6d9f65e 8d540002        lea     edx,[eax+eax+2]
f6d9f662 83c404          add     esp,4
f6d9f665 89542414        mov     dword ptr [esp+14h],edx
f6d9f669 eb68            jmp     klif+0x326d3 (f6d9f6d3)
f6d9f66b 81ff00000100    cmp     edi,10000h
f6d9f671 7318            jae     klif+0x3268b (f6d9f68b)
f6d9f673 8d442420        lea     eax,[esp+20h]
f6d9f677 57              push    edi
f6d9f678 50              push    eax
f6d9f679 e8f2feffff      call    klif+0x32570 (f6d9f570)
f6d9f67e 8d4c2420        lea     ecx,[esp+20h]
f6d9f682 898c24e4030000  mov     dword ptr [esp+3E4h],ecx
f6d9f689 8bf9            mov     edi,ecx
f6d9f68b 66392f          cmp     word ptr [edi],bp
f6d9f68e 7462            je      klif+0x326f2 (f6d9f6f2)
f6d9f690 83c9ff          or      ecx,0FFFFFFFFh
f6d9f693 33c0            xor     eax,eax
f6d9f695 f2ae            repne scas byte ptr es:[edi]
f6d9f697 8bbc24e8030000  mov     edi,dword ptr [esp+3E8h]
f6d9f69e f7d1            not     ecx
f6d9f6a0 49              dec     ecx
f6d9f6a1 8bf1            mov     esi,ecx
f6d9f6a3 46              inc     esi
f6d9f6a4 3bfd            cmp     edi,ebp
f6d9f6a6 740b            je      klif+0x326b3 (f6d9f6b3)
f6d9f6a8 83c9ff          or      ecx,0FFFFFFFFh
f6d9f6ab f2ae            repne scas byte ptr es:[edi] ;这里的edi指向字符串"LoadLibraryA",在这里出现了异常,可能是应用层无法访问edi所指向的内存,所以程序崩溃了,而且无声无息
f6d9f6ad f7d1            not     ecx
f6d9f6af 894c2414        mov     dword ptr [esp+14h],ecx
不知道卡巴是怎么样让处于内核中的驱动代码也能在ring3环境下执行?怎么没有把必要的数据也相应处理?

[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

收藏
点赞0
打赏
分享
最新回复 (5)
雪    币: 216
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
ayarei 1 2008-8-10 22:11
2
0
没怎么明白楼主指的BUG是什么....假如是绕过检测,确实存在BUG
雪    币: 331
活跃值: (57)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
better 2 2008-8-11 17:45
3
0
f6d9f6ab f2ae            repne scas byte ptr es:[edi]
不是已经在ring0了吗,按你说应该蓝屏才对……
雪    币: 220
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
compiler 2008-8-11 20:57
4
0
[QUOTE=better;495300]f6d9f6ab f2ae            repne scas byte ptr es:[edi]
不是已经在ring0了吗,按你说应该蓝屏才对……[/QUOTE]
不在ring0,你可以用OD自己跟一下装了KIS的LoadLibraryA函数,是直接就跳进去的
用windbg可以跟进去
雪    币: 331
活跃值: (57)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
better 2 2008-8-14 15:29
5
0
我跟过,OD不能跟进去,但用movs可以在ring3下读出来。我想卡巴只是把那一页改成了可读,可执行。但ring3下写不进去
雪    币: 220
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
compiler 2008-8-14 21:36
6
0
像是"LoadLibraryA"所在的那一页没有处理好
游客
登录 | 注册 方可回帖
返回