公司介绍
企业文化
员工心声
加盟安络
与我们联系
产品简介
安全专家
评估产品
服务体系
专家检测
检测服务
案例分析
咨询建议
系统漏洞
安全工具
参考资料
安全论坛
安全文摘
 

Sophos Anti-Virus SSDT钩子本地拒绝服务漏洞 (Other,缺陷)
 
涉及程序:
Sophos Anti-Virus
 
描述:
Sophos Anti-Virus SSDT钩子本地拒绝服务漏洞
 
详细:
Sophos Anti-Virus是一款适用于多种操作系统的杀毒软件。

Sophos杀毒软件的NtCreateKey函数没有正确地验证参数,本地攻击者可能利用此漏洞导致程序不可用。

相关的代码如下:

/-----------

int __cdecl NtCreateKeyHook(PHANDLE pKeyHandle,
ACCESS_MASK DesiredAccess,
POBJECT_ATTRIBUTES ObjectAttributes,
ULONG TitleIndex,PUNICODE_STRING Class,
ULONG CreateOptions,
PULONG Disposition)

[...]
.text:0001C01C push   4          ; Alignment
.text:0001C01E push   18h         ; Length
.text:0001C020 mov   esi, [ebp+ObjectAttributes]
.text:0001C023 push   esi         ; Address
.text:0001C024 call   ds:ProbeForRead

- -----------/

这里检查ObjectAttributes指向有效的地址:

/-----------

.text:0001C02A mov   eax, [esi+OBJECT_ATTRIBUTES.RootDirectory]
.text:0001C02D mov   [ebp+Handle], eax
.text:0001C030 mov   esi, [esi+OBJECT_ATTRIBUTES.ObjectName]
.text:0001C033 mov   [ebp+pUnicodeString], esi

- -----------/

现在从OBJECT_ATTRIBUTES得到句柄和指向UNICODE_STRING结构的指针:

/-----------

.text:0001C095 push   4
.text:0001C097 push   8
.text:0001C099 push   esi
.text:0001C09A mov   ebx, ds:ProbeForRead
.text:0001C0A0 call   ebx         ; ProbeForRead, it checks the
pointer before the dereference.

.text:0001C0A2 mov   eax, dword ptr [esi+UNICODE_STRING.Length]
.text:0001C0A4 mov   dword ptr [ebp+stUnicodeString.Length], eax
.text:0001C0A7 mov   esi, [esi+UNICODE_STRING.Buffer]  ; And gets
from the UNICODE_STRING structure
; a pointer to the unicode buffer.
.text:0001C0AA mov   [ebp+stUnicodeString.Buffer], esi
.text:0001C0AD push   2          ; Alignment
.text:0001C0AF shr   eax, 10h
.text:0001C0B2 push   eax         ; Length
.text:0001C0B3 push   esi         ; Address
.text:0001C0B4 call   ebx         ; ProbeForRead

- -----------/

尽管执行了检查,但仍存在问题:

/-----------

.text:0001C0B6 push   gdwValue
.text:0001C0BC lea   eax, [ebp+stUnicodeString]
.text:0001C0BF push   eax
.text:0001C0C0 push   [ebp+Object]
.text:0001C0C3 call   sub_1cb40

- -----------/

函数没有正确地检查UNICODE_STRING结构的Length字段,在执行检查时ProbeForRead未经任何验证便接收到了结构的长度字段用作参数,因此如果将这个字段设置为0的话,即使传送了无效的地址ProbeForRead也不会生成任何异常,在试图访问无效地址时会崩溃。

/-----------

sub_1cb40

[...]
.text:0001CB5E xor   esi, esi
.text:0001CB60 mov   [ebp+ms_exc.disabled], esi
.text:0001CB63 mov   edi, [ebp+pUnicodeString]
.text:0001CB66 mov   eax, [edi+UNICODE_STRING.Buffer]

- -----------/

在以下位置发生崩溃:

/-----------

.text:0001CB69 cmp   word ptr [eax], '\' ; Reference the first
pointed byte

- -----------/

<*来源:Core Security

链接:http://marc.info/?l=bugtraq&m=120943082007527&w=2#3
     http://www.matousec.com/info/articles/plague-in-security-software-drivers.php
*>

受影响系统:
Sophos Anti-Virus 7.05
 
攻击方法:
暂无有效攻击代码
 
解决方案:
厂商补丁:

Sophos
------
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:

http://www.sophos.com/
 
附加信息:
 
发布时间:2008年4月30日

返回

版权所有,如需转载,请与安络联系