安全公告
Microsoft 安全公告 MS02-039 - 严重
SQL Server 2000 解析服务中的缓冲区溢出可以启用代码执行(Q323875)
发布时间: 2002 年 7 月 24 日 |更新时间:2003 年 1 月 31 日
版本: 1.2
最初发布: 2002 年 7 月 24 日
更新时间: 2003 年 1 月 31 日
总结
谁应阅读此公告: 使用 Microsoft® SQL Server™ 2000 和 Microsoft 桌面引擎 2000 的系统管理员。
漏洞的影响: 三个漏洞,其中最严重的漏洞可能使攻击者能够控制受影响的服务器。
最大严重性分级: 严重
建议: 系统管理员应立即安装修补程序。
注意: 此公告发布的修补程序在保护 SQL Server 2000 和 MSDE 2000 免受“SQL 大满贯”蠕虫病毒方面有效。 但是,此修补程序已被 MS02-061 发布的修补程序取代,该修补程序包含这些产品中其他安全漏洞的修补程序。 Microsoft 建议 SQL 2000 和 MSDE 2000 客户应用 MS02-061 中的修补程序。
受影响的软件:
- Microsoft SQL Server 2000
- Microsoft 桌面引擎 (MSDE) 2000
常规信息
技术详细信息
技术说明:
此安全修补程序不包含 Microsoft 知识库文章 317748 的修补程序,这是确保 SQL Server 2000 和 MSDE 2000 正常运行所必需的。 如果在应用 Microsoft 知识修补程序文章 317748之前将此安全修补程序应用到 SQL Server 2000 或 MSDE 2000 安装,则必须在系统提示覆盖文件时回答“否”,以确保不会覆盖安全修补程序中的文件。
SQL Server 2000 和 MSDE 2000 引入了在单个物理计算机上托管 SQL Server 的多个实例的功能。 每个实例针对所有意向和目的运行,就像它是单独的服务器一样。 但是,多个实例不能全部使用标准 SQL Server 会话端口(TCP 1433)。 当默认实例侦听 TCP 端口 1433 时,命名实例侦听分配给它们的任何端口。 在 UDP 端口 1434 上运行的 SQL Server 解析服务为客户端提供了一种方法,用于查询要用于特定 SQL Server 实例的相应网络终结点。
此处有三个安全漏洞。 前两个是缓冲区溢出。 通过向解析服务发送精心制作的数据包,攻击者可能会导致系统内存部分(一种情况下是另一个情况中的堆栈)被覆盖。 用随机数据覆盖它可能会导致 SQL Server 服务失败;使用精心选择的数据覆盖它可能会让攻击者在 SQL Server 服务的安全上下文中运行代码。
第三个漏洞是拒绝服务漏洞。 SQL 使用保持活动机制来区分主动和被动实例。 可以创建一个保持连接数据包,当发送到解析服务时,会导致 SQL Server 2000 使用相同的信息进行响应。 创建此类数据包的攻击者欺骗了源地址,以便它似乎来自一个 SQL Server 2000 系统,并将其发送到邻近的 SQL Server 2000 系统可能会导致这两个系统进入保持连接数据包交换永无止境的周期。 这将消耗这两个系统上的资源,从而大幅降低性能。
缓解因素:
SQL Server 解析服务中的缓冲区溢出:
- SQL Server 2000 在安装时由管理员选择的安全上下文中运行。 默认情况下,它以域用户身份运行。 因此,尽管攻击者的代码可以在数据库上采取任何所需操作,但如果遵循最佳做法,则它不一定在操作系统级别具有重大特权。
- 如果可行,可以在防火墙中阻止端口 1434 来缓解漏洞造成的风险。
通过 SQL Server 解析服务拒绝服务:
- 通过在任一受影响的系统上重启 SQL Server 2000 服务,可能会中断攻击。 两个系统上的正常处理将在攻击停止后恢复。
- 该漏洞无法获取系统上的任何特权。 它只是拒绝服务漏洞。
严重性分级:
SQL Server 解析服务中的缓冲区溢出: | Internet 服务器 | Intranet 服务器 | 客户端系统 |
SQL Server 2000 | 严重 | 严重 | 无 |
通过 SQL Server 解析服务拒绝服务: | Internet 服务器 | Intranet 服务器 | 客户端系统 |
SQL Server 2000 | 严重 | 严重 | 无 |
上述 评估 基于受漏洞影响的系统类型、其典型部署模式以及利用漏洞对它们的影响。
漏洞标识符:
- SQL Server 解析服务中的缓冲区溢出: CVE-CAN-2002-0649
- 通过 SQL Server 解析服务拒绝服务: CVE-CAN-2002-0650
测试的版本:
Microsoft 测试了 SQL Server 2000 和 7.0(及其关联的 MSDE 版本),以评估它们是否受这些漏洞的影响。 以前的版本不再 受支持,可能会或不受这些漏洞的影响。
常见问题解答
将此修补程序与317748中讨论的修补程序一起安装此修补程序的正确顺序是什么?
此安全修补程序不包含知识库文章 317748 的修补程序,这是确保 SQL Server 2000 和 MSDE 2000 正常运行所必需的。 安装的正确顺序是安装317748修补程序,然后安装此安全修补程序。 如果在应用知识修补程序文章 317748之前将此安全修补程序应用到 SQL Server 2000 或 MSDE 2000 安装,则必须在系统提示覆盖文件时回答“否”,以确保不会覆盖安全修补程序中的文件。
如何实现 检查已安装此安全修补程序?
应验证应用修补程序的实例的 \MSSQL\BINN 文件夹中ssnetlib.dll的版本为:2000.80.636.0 如果 \MSSSQL\BINN 文件夹中的 ssnetlib.dll版本小于 2000.80.636.0,则需要重新应用安全修补程序。 但是,Microsoft 建议应用 MS02-061 中所述的最新安全修补程序,因为这包含这些产品中其他安全漏洞的修补程序。
此修补程序消除了哪些漏洞?
此修补程序消除了三个漏洞,这两个漏洞都涉及 SQL Server 2000 解析服务:
- 前两个漏洞可能会使攻击者能够对受影响的 SQL Server 进行重大且完全的控制。
- 第三个漏洞可能导致攻击者导致两个受影响的 SQL Server 进行永不结束的信息交换,以减缓服务器的性能。
什么是 SQL Server 2000 解析服务?
SQL Server 2000 引入了在单个计算机上安装 SQL Server 的多个副本的功能,并且似乎副本是完全独立的数据库服务器。 这些副本(称为 实例)彼此独立运行。 默认实例侦听 TCP 端口 1433。 其他实例不能共享此同一端口,并且需要自己的端口。
挑战在于如何使 SQL Server 客户端能够查找特定实例正在运行的端口;解决方案是 SQL Server 解析服务。 SQL Server 上的第一个实例始终通过端口 1433 运行。 其他实例将动态分配自己的端口号。 当 SQL 客户端需要连接到 SQL Server 上的其他实例时,它会查询 SQL Server 解析服务(该服务在 UDP 端口 1434 上运行),这告诉它请求的实例正在使用哪个端口。
UDP 1434 端口通常在防火墙上被阻止吗?
这取决于特定的部署方案。
- 如果网络不托管任何连接到 Internet 的 SQL Server,则应阻止与 SQL Server 解析服务关联的端口(以及与 SQL Server 关联的所有其他端口)。
- 如果网络向 Internet 提供 SQL Server 服务,但服务器上只有一个实例,则 SQL 解析服务可以且应被阻止。
- 如果网络向 Internet 提供 SQL Server 服务并具有多个实例,则必须通过防火墙访问 SQL 解析服务。
SQL Server 的早期版本上是否存在 SQL Server 解析服务?
否。 以前版本的 SQL Server 不支持多个实例,并且 SQL Server 解析服务不存在。 因此,其他版本的 SQL Server 不会受到漏洞的影响。
“受影响的版本”部分表示,Microsoft 桌面引擎(MSDE)也受这些漏洞的影响。 什么是 MSDE?
MSDE 是一种基于 SQL Server 2000 技术构建和构建的数据库引擎,它作为 Microsoft 产品(包括 Microsoft Visual Studio 和 Microsoft 办公室 Developer Edition)的一部分提供。 MSDE 版本与 SQL Server 版本之间存在直接连接。 MSDE 2000 基于 SQL Server 2000。
SQL Server 解析服务中的缓冲区溢出(CVE-CAN-2002-0649):
此漏洞的范围是什么?
这里实际上有两个漏洞,这两个漏洞都是 缓冲区溢出 漏洞。 成功利用任一漏洞的攻击者可能会使服务器失败,或使用 SQL Server 的权限运行代码。
尽管利用漏洞会使攻击者能够完全控制数据库,但它不一定传达对系统本身的完全控制。 可以将 SQL Server 2000 配置为使用不同级别的特权运行;默认情况下,它使用域用户的权限而不是管理员运行。
导致漏洞的原因是什么?
漏洞的原因是 SQL Server 解析服务提供的一对函数包含未检查缓冲区。 通过将特殊格式的请求发送到 UDP 1434 端口,可以溢出与任一函数关联的缓冲区。
此漏洞会使攻击者能够执行哪些操作?
此漏洞可能使攻击者能够执行以下两项操作之一:
- 导致 SQL Server 失败。 这是装载的最简单攻击类型,并且只需要攻击者用随机数据溢出缓冲区。
- 修改 SQL Server 的功能,以便执行攻击者选择的功能。 这要求攻击者使用精确选择的数据溢出缓冲区。
谁可以利用漏洞?
任何可以将请求传递到受影响服务器上的 SQL Server(通过 UDP 端口 1434)的用户都可以利用该漏洞。
如果攻击者利用漏洞导致 SQL Server 失败,管理员需要执行哪些操作才能还原正常操作?
管理员可以通过重启 SQL Server 服务来恢复正常操作。
如果攻击者利用漏洞导致 SQL Server 执行自己选择的函数,攻击者的代码将运行哪些特权?
显然,攻击者的代码将完全控制数据库函数,因为它将在 SQL Server 本身的安全上下文中运行。 但它在 SQL Server 之外可能很少有特权。 在 SQL Server 2000 安装过程中,管理员必须选择应在其中运行的 Windows 帐户 SQL Server。 默认情况下,SQL Server 服务以域用户身份运行。 如果遵循了最佳做法,并且选择了正常的用户上下文,则攻击者不会获得对操作系统的管理控制权,也不会获得域的管理权限。
修补程序如何消除漏洞?
该修补程序可确保 SQL Server 解析服务正确限制输入数据的大小,并阻止其溢出其任何缓冲区。
通过 SQL Server 解析服务拒绝服务(CVE-CAN-2002-0650):
此漏洞的范围是什么?
这是 拒绝服务 漏洞。 攻击者可以使用漏洞来降低受影响 SQL Server 的性能。 系统性能降低的精确量取决于多种因素,例如 SQL Server 上的处理器速度和内存、攻击服务器的系统数量等。
该漏洞不能用于使服务器完全失败,也不会向攻击者提供系统上的任何特权。 一旦攻击中断,服务器就会恢复正常操作。
导致漏洞的原因是什么?
此漏洞是由于 SQL Server 2000 保持连接机制存在缺陷,该机制通过解析服务运行。 如果将特定数据包发送到 SQL Server 2000 keep-alive 函数,它将使用相同的数据包回复发送方。 通过欺骗此类数据包的源地址,可能会导致两个 SQL Server 2000 系统启动数据包交换的无限周期。
SQL Server 2000 中的 keep-alive 函数是什么?
SQL Server 2000 包括一种机制,通过该机制可以确定服务器是否处于活动状态。 它通过将所谓的保持连接数据包发送到 UDP 端口 1434 上的 SQL Server 解析服务并侦听回复来执行此操作。
在 SQL Server 2000 中实现 keep-alive 函数有什么问题?
可以创建一个保持活动数据包,其响应将与请求相同。 如果一个 SQL Server 将此类数据包发送到另一个 SQL Server,则它们将进入一个不间断的循环,以相互发送相同的数据包。 此活动可以在两台计算机上使用大部分或全部可用带宽。
这种情况会自然发生吗?
否。 在正常情况下,无法发生漏洞所涉及的情况。 SQL Server 通常不会生成具有所需特征的保持活动数据包。 但是,攻击者可能引入此类数据包,以便启动交换,此后会自我维持。
攻击者怎么会执行此操作?
假设有两个 SQL Server 存在漏洞:Server 1 和 Server 2。 现在,假设攻击者创建了所需的保持连接数据包并修改了源地址,使其包含服务器 1 的地址,然后将数据包发送到服务器 2。 这会启动交换,因为服务器 2 将回复服务器 1,这将回复服务器 2,ad infinitum。
此漏洞使攻击者能够执行哪些操作?
攻击者可以使用此漏洞同时在两个 SQL Server 2000 系统上使用资源。
谁可以利用漏洞?
可以将数据发送到受影响的 SQL Server 解析服务端口的任何用户都可能会利用漏洞。
攻击持续多久?
启动后,攻击将继续,直到其中一台计算机停止发送数据包。 这可能是因为系统已重新启动、SQL Server 服务已重启,或者两台服务器之间的连接已丢失。
攻击结束后,服务器是否会自行恢复正常操作?
是的。
通过此类攻击可以垄断多少系统资源?
这取决于攻击的具体内容。 例如,可能会对单个服务器进行攻击。 同样,这取决于系统之间的网络带宽、相应计算机上的处理器速度等。
修补程序如何消除漏洞?
该修补程序消除了当前的保持活动机制,并确定哪些服务器是主动的,哪些服务器是通过不同的机制被动的。 应用修补程序后,SQL Server 2000 系统将不再响应保持连接数据包。
修补程序可用性
下载此修补程序的位置
Microsoft SQL Server 2000 和 MSDE 2000:
有关此修补程序的其他信息
安装平台:
此修补程序可以安装在运行 SQL Server 2000 Service Pack 2 的系统上。
包含在将来的 Service Pack 中:
此问题的修补程序将包含在 SQL Server 2000 Service Pack 3 中。
需要重新启动: 否。 应用修补程序后,只需重启 SQL Server 服务。
可以卸载修补程序: 是的。
取代的修补程序: 无。
验证修补程序安装:
- 若要确保正确安装修补程序,请通过查阅 Microsoft 知识库文章 中文件清单中列出的文件的日期/时间戳来验证各个文件Q323875。
注意:
无
本地化:
此修补程序的本地化版本在“修补程序可用性”中讨论的位置可用。
获取其他安全修补程序:
可从以下位置获取其他安全问题的修补程序:
- 安全修补程序可从 Microsoft 下载中心获取,可通过执行关键字 (keyword)搜索“security_patch”来轻松找到。
- WindowsUpdate 网站提供了使用者平台的修补程序
其他信息:
确认
Microsoft 感谢下一代安全软件有限公司的 David Litchfield 向我们报告这些问题,并与我们合作保护客户。
支持:
- Microsoft 知识库文章Q323875讨论此问题,此公告发布后大约 24 小时可用。 可以在 Microsoft Online 支持网站上找到知识库文章。
- Microsoft 产品支持服务提供技术支持。 与安全修补程序关联的支持调用不收取任何费用。
安全资源:Microsoft TechNet 安全网站提供有关 Microsoft 产品安全性的其他信息。
免责声明:
Microsoft 知识库中提供的信息“按原样”提供,不提供任何形式的担保。 Microsoft 不明确或暗示所有保证,包括适销性和针对特定用途的适用性和适用性的保证。 在任何情况下,Microsoft Corporation 或其供应商都应对任何损害负责,包括直接、间接、附带、后果性、业务利润损失或特殊损害,即使 Microsoft Corporation 或其供应商被告知存在此类损害的可能性。 某些州不允许排除或限制后果性或附带性损害的责任,因此上述限制可能不适用。
修改:
- V1.0(2002 年 7 月 24 日):公告已创建。
- V1.1(2002 年 7 月 25 日):已更新,指出 MSDE 2000 受漏洞影响。
- V1.2(2003 年 1 月 31 日):已更新为 MS02-061 取代建议,并在修补程序317748与此安全修补程序一起应用时阐明安装顺序。
生成于 2014-04-18T13:49:36Z-07:00