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

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

内容摘要:我们这篇文章的核心就是要谈谈卡巴斯基的杀毒软件。跟很多其他的杀毒软件一样,卡巴斯基的杀毒软件也是既能手动操作扫描病毒也可以实时扫描病毒。我们这篇文章的核心就是要谈谈卡巴斯基的杀毒软件。跟很多其他的杀毒软件一样,卡巴斯基的杀毒软件也是既能手动操作扫描病毒也可以实时扫描病毒。

.text:F82237B0 ; NTSTATUS __stdcall KavNtOpenProcess(PHANDLE ProcessHandle,
  ACCESS_MASK DesiredAccess, POBJECT_ATTRIBUTES ObjectAttributes,
  PCLIENT_ID ClientId)
.text:F82237B0 KavNtOpenProcess proc near       ; DATA XREF: sub_F82249D0+BFo
.
.
.
.text:F8223800  cmp   eax, 7FFF0000h ; eax = ClientId
.text:F8223805  jbe   short loc_F822380D
.text:F8223807
.text:F8223807 loc_F8223807:              ; CODE XREF: KavNtOpenProcess+4Ej
.text:F8223807  call  ds:ExRaiseAccessViolation

  比较合适的、进行此项验证的方法应该是:使用带有SEH框架的ProbeForRead存档函数。这种功能在地址是非合法用户的地址的时候,会自动阻止其访问。

  另外,很多KAV的定制系统服务都没有好好地验证用户层的指针自变量,而黑客们正可以利用这些自变量来使系统崩溃。

.text:F8222BE0 ; int __stdcall KAVService10(int,PVOID OutputBuffer,int)
.text:F8222BE0 KAVService10  proc near        ; DATA XREF: .data:F8227D14o
.text:F8222BE0
.text:F8222BE0 arg_0      = dword ptr 4
.text:F8222BE0 OutputBuffer  = dword ptr 8
.text:F8222BE0 arg_8      = dword ptr 0Ch
.text:F8222BE0
.text:F8222BE0  mov   edx, [esp+OutputBuffer]
.text:F8222BE4  push  esi
.text:F8222BE5  mov   esi, [esp+4+arg_8]
.text:F8222BE9  lea   ecx, [esp+4+arg_8]
.text:F8222BED  push  ecx       ; int
.text:F8222BEE  mov   eax, [esi]   ; 未验证的用户层指针访问
.text:F8222BF0  mov   [esp+8+arg_8], eax
.text:F8222BF4  push  eax       ; 输出缓存长度
.text:F8222BF5  mov   eax, [esp+0Ch+arg_0]
.text:F8222BF9  push  edx       ; 输出缓存
.text:F8222BFA  push  eax       ; int
.text:F8222BFB  call  sub_F821F9A0  ;
                     ; 该例行程序从内部假设所有的指针参数都是合法的。
.text:F8222C00  mov   edx, [esi]
.text:F8222C02  mov   ecx, [esp+4+arg_8]
.text:F8222C06  cmp   ecx, edx
.text:F8222C08  jbe   short loc_F8222C13
.text:F8222C0A  mov   eax, 0C0000173h
.text:F8222C0F  pop   esi
.text:F8222C10  retn  0Ch
.text:F8222C13 ; ---------------------------------------------------------------------------
.text:F8222C13
.text:F8222C13 loc_F8222C13:       ; CODE XREF: KAVService10+28j
.text:F8222C13  mov   [esi], ecx
.text:F8222C15  pop   esi
.text:F8222C16  retn  0Ch
.text:F8222C16 KAVService10  endp
.text:F8222C20 KAVService11  proc near        ; DATA XREF: .data:F8227D18o
.text:F8222C20
.text:F8222C20 arg_0      = dword ptr 4
.text:F8222C20 arg_4      = dword ptr 8
.text:F8222C20 arg_8      = dword ptr 0Ch
.text:F8222C20
.text:F8222C20  mov   edx, [esp+arg_4]
.text:F8222C24  push  esi
.text:F8222C25  mov   esi, [esp+4+arg_8]
.text:F8222C29  lea   ecx, [esp+4+arg_8]
.text:F8222C2D  push  ecx
.text:F8222C2E  mov   eax, [esi]   ; 非合法用户层指针的访问
.text:F8222C30  mov   [esp+8+arg_8], eax
.text:F8222C34  push  eax
.text:F8222C35  mov   eax, [esp+0Ch+arg_0]
.text:F8222C39  push  edx
.text:F8222C3A  push  eax
.text:F8222C3B  call  sub_F8214CE0  ; 这段例行程序在内部假设所有的指针参数都是合法的
                     ; 所有的指针参数都是合法的
.text:F8222C40  test  eax, eax
.text:F8222C42  jnz   short loc_F8222C59
.text:F8222C44  mov   ecx, [esp+4+arg_8]
.text:F8222C48  mov   edx, [esi]
.text:F8222C4A  cmp   ecx, edx
.text:F8222C4C  jbe   short loc_F8222C57
.text:F8222C4E  mov   eax, STATUS_INVALID_BLOCK_LENGTH
.text:F8222C53  pop   esi
.text:F8222C54  retn  0Ch
.text:F8222C57 ; ------------------------------------------------------------------------
.text:F8222C57
.text:F8222C57 loc_F8222C57:       ; CODE XREF: KAVService11+2Cj
.text:F8222C57  mov   [esi], ecx
.text:F8222C59
.text:F8222C59 loc_F8222C59:       ; CODE XREF: KAVService11+22j
.text:F8222C59  pop   esi
.text:F8222C5A  retn  0Ch
.text:F8222C5A KAVService11  endp

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

正在加载评论...