国外高手谈卡巴斯基存隐患(2)

http://tech.ddvip.com   2007年06月22日    社区交流 收藏本文

内容摘要:KAV的杀毒软件依靠诸多不安全内核层的黑客程序,从而将系统稳定性置于危险中。想要解决这个问题,首先KAV需要去掉不安全的内核层黑客程序,比如给非输出函数打补丁或者不加验证地关联系统服务等等。

  真正的镜像补丁会保护 kernel32的输出表,它将输出地址表的入口改成LoadLibrary* 函数族,指向thunk,该thunk被写进Kernel32 镜像的空闲空间,并将真正的thunk代码写出:

.text:F8221680 ; int __stdcall KavPatchImage(PUCHAR ImageBase)
.text:F8221680 KavPatchImage  proc near        ; CODE XREF: KavPatchImageForNewProcess+21p
.text:F8221680
.text:F8221680 var_C      = dword ptr -0Ch
.text:F8221680 FunctionVa   = dword ptr -8
.text:F8221680 var_4      = dword ptr -4
.text:F8221680 ImageBase    = dword ptr 4
.text:F8221680
.text:F8221680  mov   eax, [esp+ImageBase]
.text:F8221684  sub   esp, 0Ch
.text:F8221687  push  ebp
.text:F8221688  push  3Ch
.text:F822168A  push  eax
.text:F822168B  call  KavReprotectExportTable
.text:F8221690  mov   ebp, eax
.text:F8221692  test  ebp, ebp
.text:F8221694  jnz   short loc_F822169F
.text:F8221696  xor   al, al
.text:F8221698  pop   ebp
.text:F8221699  add   esp, 0Ch
.text:F822169C  retn  4
.text:F822169F ; ---------------------------------------------------------------------------
.text:F822169F
.text:F822169F loc_F822169F:       ; CODE XREF: KavPatchImage+14j
.text:F822169F  push  ebx
.text:F82216A0  push  esi
.text:F82216A1  push  edi
.text:F82216A2  xor   ebx, ebx
.text:F82216A4  mov   edi, ebp
.text:F82216A6  mov   esi, offset ExportedFunctionsToCheckTable
.text:F82216AB
.text:F82216AB CheckNextFunctionInTable:        ; CODE XREF: KavPatchImage+B4j
.text:F82216AB  mov   edx, [esi+0Ch]
.text:F82216AE  mov   eax, [esp+1Ch+ImageBase]
.text:F82216B2  lea   ecx, [esp+1Ch+var_C]
.text:F82216B6  push  ecx
.text:F82216B7  push  edx
.text:F82216B8  push  eax
.text:F82216B9  call  LookupExportedFunction
.text:F82216BE  test  eax, eax
.text:F82216C0  mov   [esp+1Ch+FunctionVa], eax
.text:F82216C4  jz   short loc_F8221725
.text:F82216C6  mov   edx, [esp+1Ch+var_C]
.text:F82216CA  lea   ecx, [esp+1Ch+var_4]
.text:F82216CE  push  ecx
.text:F82216CF  push  40h
.text:F82216D1  push  4
.text:F82216D3  push  edx
.text:F82216D4  call  KavExecuteNtProtectVirtualMemoryInt2E
.text:F82216D9  test  al, al
.text:F82216DB  jz   short loc_F8221725
.text:F82216DD  cmp   dword ptr [esi], 0
.text:F82216E0  jnz   short loc_F82216EF
.text:F82216E2  mov   eax, [esp+1Ch+FunctionVa]
.text:F82216E6  mov   ecx, [esp+1Ch+var_C]
.text:F82216EA  mov   [esi], eax
.text:F82216EC  mov   [esi+8], ecx
.text:F82216EF
.text:F82216EF loc_F82216EF:       ; CODE XREF: KavPatchImage+60j
.text:F82216EF  mov   eax, edi
.text:F82216F1  mov   edx, 90909090h
.text:F82216F6  mov   [eax], edx
.text:F82216F8  mov   [eax+4], edx
.text:F82216FB  mov   [eax+8], edx
.text:F82216FE  mov   [eax+0Ch], dx
.text:F8221702  mov   [eax+0Eh], dl
.text:F8221705  mov   byte ptr [edi], 0E9h
.text:F8221708  mov   ecx, [esi+4]
.text:F822170B  mov   edx, ebx
.text:F822170D  sub   ecx, ebx
.text:F822170F  sub   ecx, ebp
.text:F8221711  sub   ecx, 5
.text:F8221714  mov   [edi+1], ecx
.text:F8221717  mov   ecx, [esp+1Ch+ImageBase]
.text:F822171B  mov   eax, [esp+1Ch+var_C]
.text:F822171F  sub   edx, ecx
.text:F8221721  add   edx, ebp
.text:F8221723  mov   [eax], edx   ;
.text:F8221723        ; Patching Export Table here
.text:F8221723        ; e.g. write to 7c802f58
.text:F8221723        ; (kernel32 EAT entry for LoadLibraryA)
.text:F8221723        ;
.text:F8221723        ;     578 241 00001D77 LoadLibraryA = _LoadLibraryA@4
.text:F8221723        ;     579 242 00001D4F LoadLibraryExA = _LoadLibraryExA@12
.text:F8221723        ;     580 243 00001AF1 LoadLibraryExW = _LoadLibraryExW@12
.text:F8221723        ;     581 244 0000ACD3 LoadLibraryW = _LoadLibraryW@4
.text:F8221723        ;
.text:F8221723        ; KAV在这写入一个新的RVA指向它自己的钩子代码。
.text:F8221725
.text:F8221725 loc_F8221725:       ; CODE XREF: KavPatchImage+44j
.text:F8221725        ; KavPatchImage+5Bj
.text:F8221725  add   esi, 10h
.text:F8221728  add   ebx, 0Fh
.text:F822172B  add   edi, 0Fh
.text:F822172E  cmp   esi, offset byte_F82357E0
.text:F8221734  jb   CheckNextFunctionInTable
.text:F822173A  pop   edi
.text:F822173B  pop   esi
.text:F822173C  pop   ebx
.text:F822173D  mov   al, 1
.text:F822173F  pop   ebp
.text:F8221740  add   esp, 0Ch
.text:F8221743  retn  4
.text:F8221743 KavPatchImage  endp

来源:赛迪网    作者:杜莉    责编:豆豆技术应用

正在加载评论...