Microsoft Windows 2003堆栈保护实现漏洞
发布日期:2003-09-11
更新日期:2003-09-17
受影响系统:Microsoft Visual Studio .NET Trial Edition
Microsoft Visual Studio .NET Professional Edition
Microsoft Visual Studio .NET Enterprise Developer Edit
Microsoft Visual Studio .NET Enterprise Architect Edit
Microsoft Windows 2003
Microsoft Visual Studio .NET Academic Edition
- Microsoft Windows XP Professional
- Microsoft Windows NT 4.0 SP6a
- Microsoft Windows NT 4.0 SP6
- Microsoft Windows NT 4.0 SP5
- Microsoft Windows NT 4.0 SP4
- Microsoft Windows NT 4.0 SP3
- Microsoft Windows NT 4.0 SP2
- Microsoft Windows NT 4.0 SP1
- Microsoft Windows NT 4.0
- Microsoft Windows 2000 Server SP2
- Microsoft Windows 2000 Server SP1
- Microsoft Windows 2000 Server
- Microsoft Windows 2000 Professional SP2
- Microsoft Windows 2000 Professional SP1
- Microsoft Windows 2000 Professional
- Microsoft Windows 2000 Datacenter Server SP2
- Microsoft Windows 2000 Datacenter Server SP1
- Microsoft Windows 2000 Datacenter Server
- Microsoft Windows 2000 Advanced Server SP2
- Microsoft Windows 2000 Advanced Server SP1
- Microsoft Windows 2000 Advanced Server
描述:
BUGTRAQ ID:
8522
Microsoft Windows 2003是微软开发和维护的操作系统,对堆栈缓冲区溢出存在保护措施。
Microsoft Windows 2003的堆栈保护实现存在问题,本地攻击者可以利用这些漏洞通过已存在的堆栈缓冲区溢出问题绕过限制执行任意指令。
Microsoft Windows 2003的堆栈保护机制类似其他如canary或者对某个函数进行cookie计算等实现。在每个函数返回前调用这个保护函数实现,并函数返回的值与存储在堆栈中的canary值对比,如果这些值不匹配,程序就会终止执行。
Microsoft Windows 2003的堆栈保护机制实现存在漏洞,其中之一是实际上异常处理结构存储在堆栈内存中,结构是理论上攻击者可以在有漏洞的程序中覆盖缓冲区,破坏canary值和返回地址,直接异常处理指针被破坏,然后通过在Cookie验证函数调用之前触发异常,就可能重定向程序执行,使位于堆栈或其他内存中的数据被执行。
另外一个问题是,如存储在全局内存中的注册的32位canary值可被应用程序改写,结果可导致攻击者修改Cookie值来匹配发生缓冲区后的值来绕过限制。
<*来源:David Litchfield of NGSSoftware
链接:
http://www.nextgenss.com/papers/defeating-w2k3-stack-protection.pdf
*>
建议:
临时解决方法:
如果您不能立刻安装补丁或者升级,NSFOCUS建议您采取以下措施以降低威胁:
* David Litchfield提供如下第三方解决方案:
使用VirtualProtect()确保32位COOKIE值存储在只读的.data段。
在所有'loaded modules'的地址范围之外的代码不允许执行异常处理。
厂商补丁:
Microsoft
---------
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:
http://www.microsoft.com/technet/security/浏览次数:3414
严重程度:0(网友投票)