深入解析SQL存储过程漏洞:风险、影响与缓解措施

本文详细分析了SQL Server、MSDE和SQL Express中的堆缓冲区溢出漏洞,探讨了攻击面、利用条件及缓解措施,包括权限配置、服务隔离风险及复制场景影响,并提供了GUI工具操作指南。

关于SQL存储过程漏洞的更多信息

安全公告961040提供了针对SQL Server、MSDE和SQL Express中新公开的身份验证后堆缓冲区溢出漏洞的缓解措施和变通方案。本篇博客文章将更详细地分析每个受影响版本的攻击面以及此漏洞的整体风险。

如公告所列,以下产品包含易受攻击的代码:

  • SQL Server 2000
  • SQL Server 2005 SP2
  • MSDE 2000(Microsoft SQL Server 2000桌面版)
  • SQL Server 2005 Express Edition

以下是各平台的攻击面分析:

产品 需要身份验证? 默认监听网络? 运行身份(默认) 成功利用结果
SQL Server 2000 SYSTEM 任何能够连接并验证到SQL Server的用户都可以以SYSTEM身份运行代码。
SQL Server 2005 SP2 安装时指定的服务账户 任何能够连接并验证到SQL Server的用户都可以以安装时指定的账户身份运行代码。
MSDE 2000 SYSTEM 任何能够从运行MSDE的本地机器发起连接并验证到SQL实例的本地用户都可以以SYSTEM身份运行代码。
SQL Server 2005 Express 是(默认授予Builtin\Users登录权限) Network Service 任何能够从运行SQL Express的本地机器发起连接并验证到SQL实例的本地用户都可以以NetworkService身份运行代码。默认情况下,Builtin\Users组中的所有账户都可以使用集成身份验证。

如上表所示,攻击者必须通过身份验证才能利用此漏洞。此外,默认情况下,MSDE 2000和SQL Server 2005 Express(由Microsoft和第三方应用程序重新分发和使用)无法被远程利用。但出于以下几个原因,您不应忽略此漏洞。

首先,未经身份验证的攻击者无法直接利用此漏洞。然而,如果攻击者在连接到数据库的Web应用程序中发现SQL注入漏洞,他可以将SQL注入漏洞与此漏洞结合,从而“无需身份验证”运行代码。从技术上讲,攻击者确实进行了身份验证——他只是利用您受感染的Web应用程序代为验证。当然,如果攻击者通过SQL注入攻陷了您的Web应用程序,他本就可以采取多种行动。

其次,还记得我们十月份关于服务隔离的公告和博客文章吗?该漏洞允许攻击者从以NetworkService身份运行的代码升级到LocalSystem。不幸的是,此SQL漏洞允许任何登录到运行SQL Express的机器的用户通过利用SQL漏洞升级到NetworkService,然后利用服务隔离漏洞升级到SYSTEM。

因此,我们强烈建议您应用安全公告中列出的变通方案来阻止此攻击,并告知我们是否有任何疑问。

受影响的存储过程对大多数客户没有影响。它作为触发器在具有可更新订阅的事务复制期间用于用户修改。因此,如果您的SQL安装不包括复制,变通方案除了保护您免受此漏洞影响外,不会产生其他影响。如果您使用具有只读订阅、双向或对等设置的事务复制,变通方案也不会对您的数据库安装产生影响。仅具有可更新订阅的事务复制会受到影响。

关于存储过程变通方案的一个注意事项:如果攻击者以sa身份(或sysadmin服务器角色的成员)连接到数据库,拒绝public的执行权限将无法有效阻止他们执行存储过程。当然,如果某人在SQL Server中拥有sysadmin权限,他们可能已经有其他方式获得服务器上的管理员权限。

如果您不想使用公告中的原始SQL,可以通过GUI工具应用更改。以下是SQL Server Enterprise Manager(SQL 2000)和SQL Server Management Studio(SQL 2005)将设置从GRANT更改为DENY的截图。


更新于2008年12月25日:添加了关于变通方案对以sa/sysadmin身份连接的攻击者无效的注意事项。

Jonathan Ness和Bruce Dang,SVRD博客作者
发布内容“按原样”提供,不提供任何担保,也不授予任何权利。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计