在 SQL Server 中不支持第三方迂回的方式或类似技术的使用

文章翻译 文章翻译
文章编号: 920925 - 查看本文应用于的产品
展开全部 | 关闭全部

概要

使用迂回的方式或类似的技术更改行为的 Microsoft SQL Server 的功能可能会导致以下问题:
  • 性能问题
  • 不正确的结果
  • 磁盘和内存损坏
  • 丢失的 SQL Server 的响应
  • 进程意外的终止
  • 不能使用标准诊断程序,例如, fn_get_sql函数和 DBCC INPUTBUFFER 命令
  • 安全问题的可能性
注意Microsoft 不提供支持服务的第三方功能的使用迂回的方式或类似的技术更改的 SQL Server 的行为。如果您正在使用 SQL Server 支持服务上一个 SQL Server 的问题,并标识,可能涉及迂回的方式或更改 SQL Server 的行为的类似技术,支持专业人员会要求您禁用或删除这种迂回的方式或类似的功能作为一个故障排除步骤。可能会出现其它故障诊断之前,必须不存在任何 detour 功能的情况下重新生成报告的问题。应该不会再出现问题,Microsoft 可能会建议您与供应商联系的第三方功能并继续使用该供应商的方向进行故障诊断。

更多信息

迂回的方式非常强大。迂回的方式提供了增强的功能和风险/回报有所折衷。通常情况下,当在 SQL Server 中实现 detour 时,相应的代码被注入进程空间。SQL Server 的方法或函数被截获。此活动可能会更改 SQL Server 性能基本行为。

下面是一些示例情况和可能的副作用:
  • 在扫描并更改传入网络流量 (TDS) 数据包。在 net_readdata 网络进程线程的某个关键位置添加 detour。甚至一些 100 的 CPU 周期,在此位置可能会显著减少批处理吞吐率。

    实际的 TDS 数据中的更改可能会导致内存 scribblers。此问题已触发各种 SQL Server 稳定性问题,并在数据损坏。问题可能会导致部分进行更改,并重播到 SQL Server 的垃圾回收的 TDS 数据包。记录在此级别的设备可能会使密码和其他敏感数据跟踪旨在抑制并加强该 SQL Server。
  • SQL Server 分析例程被 detoured 更改行为。以下是可能的副作用:
    • 执行计划与实际查询文本不匹配。
    • 一次只能从客户端提交命令。但是,该命令执行多次。
    • 跟踪输出显示原始命令而不是更改后的查询。
    • DBCC INPUTBUFFER 命令可以显示原件命令而不是更改后的查询。
    • Fn_get_sql函数显示不正确的数据。此外, fn_get_sql函数是容易对异常和不正确的结果。Fn_get_sql函数由许多监控解决方案和监视解决方案可能会造成问题。
    • 整体用户模式计划 (UMS) 和 SQL Server 操作系统 (SQLOS) 计划可能会中断。这就导致 SQL Server 的响应的损失、 性能变化和停机。
  • Win32 Api,提供了增强的安全功能被 detoured。根据实现,在此级别的日志记录功能可能暴露密码和其他敏感数据。整体 UMS 和 SQLOS 计划被中断。这样就可以对 SQL Server 的响应的丢失和停机。
  • 修改函数表和重定向核心 SQL Server 功能或 Windows API 不支持 SQL Server 进程内。在 SQL Server 功能,这可能导致不稳定和意外的行为。
下面的示例演示kernel32!GetQueuedCompletionStatus被 detoured 函数。
MyDLL!MyGetQueuedCompletionStatus
ssnetlib!ConnectionReadAsyncWait
GetQueuedCompletionStatus函数的程序集,在第一个指令已替换为跳转指令。
0:038> u kernel32!GetQueuedCompletionStatus
kernel32!GetQueuedCompletionStatus 
77e660f1 e90a9f00aa      jmp     21e70000   ?  This points to an address that does not appear in the loaded module list (lm). It is injected code.
77e660f6 83ec10          sub     esp,10h
插入的代码的程序集显示 detoured 的活动和对 MyDLL 文件的调用。
0:038> u 21e70000  

21e70000 55              push    ebp
21e70001 8bec            mov     ebp,esp
21e70003 51              push    ecx
21e70004 8b4518          mov     eax,dword ptr [ebp+18h]
21e70007 50              push    eax
21e70008 8b4d14          mov     ecx,dword ptr [ebp+14h]
21e7000b 51              push    ecx
21e7000c 8b5510          mov     edx,dword ptr [ebp+10h]
21e7000f 52              push    edx
21e70010 8b450c          mov     eax,dword ptr [ebp+0Ch]
21e70013 50              push    eax
21e70014 8b4d08          mov     ecx,dword ptr [ebp+8]
21e70017 51              push    ecx
21e70018 e8234d19ee      call   MyDLL+0x4d40 (10004d40)   <- Call to the MyDLL file.
21e7001d 8945fc          mov     dword ptr [ebp-4],eax
21e70020 8b55fc          mov     edx,dword ptr [ebp-4]

可以使用 Windows 调试工具来确定是否正在使用迂回的方式。若要执行此操作,请按照下列步骤。

注意在尝试在生产环境中之前,始终测试此方法。当您使用 Windows 调试工具时,当您运行命令时,进程可能会冻结。这种行为可能会影响生产服务器。
  1. 将 Windows 调试工具附加到 SQL Server 或加载完整用户转储文件。
  2. 发出下面的调试器命令。此命令将检查每个图像相对于磁盘上的图像,以确定是否已插入了迂回的方式。
    !for_each_module "!chkimg -v @#Base -d"
  3. 分离调试程序。
若要获取有关 Windows 调试工具,请访问下面的 Microsoft 网站:
http://www.microsoft.com/whdc/devtools/debugging/default.mspx
如果在内存中的映像已进行了更改,则输出可能如下所示:
Comparison image path: c:\program files\microsoft sql server\mssql\binn\ssnetlib.dll\ssnetlib.dll
Scanning section:    .text
Size: 56488
Range to scan: 0c261000-0c26eca8
0c263710-0c26371a  11 bytes - ssnetlib!ConnectionClose
           
	[ 8b ff 55 8b ec 83 ec 10:68 00 00 00 00 e9 27 8a ]
0c2641e0-0c2641ea  11 bytes - ssnetlib!ConnectionReadAsync (+0xad0)

	[ 8b ff 55 8b ec 83 ec 38:68 00 00 00 00 e9 00 7e ]
0c265160-0c26516a  11 bytes - ssnetlib!ConnectionWriteAsync (+0xf80)

	[ 8b ff 55 8b ec 83 ec 28:68 00 00 00 00 e9 ba 70 ]
Total bytes compared: 56488(100%)
Number of errors: 33
33 errors : 0c260000 (0c263710-0c26516a)
您可以查看程序集来仔细看此问题,请按如下所述:
0:038> u ssnetlib!ConnectionClose
ssnetlib!ConnectionClose]:
0c263710 6800000000      push    0
0c263715 e9278ada03      jmp     MyDLL!MyGetQueuedCompletionStatus  <- A detour has been installed.

跟踪 SQL 注入攻击的防病毒程序可以绕 SQL Server 代码。在这种情况下,输出的! for_each_module"! chkimg-v @# Base-d"扩展可能会显示 SQL Server 功能的 yyparse 和 ex_raise2 进行修改:

Comparison image path: <symbol file path>\sqlservr.exeRange to scan: c81000-3de7d48??? ed71a8-ed71ad? 6 bytes - sqlservr!yyparse?[ ff f5 41 54 41 55:e9 c7 95 5c 76 90 ]1202820-1202824  5 bytes - sqlservr!ex_raise2 (+0x32b678)?[ ff f3 57 41 54:e9 20 e0 29 76 ]Total bytes compared: 51801416(17%)Number of errors: 11

我们建议您与提供程序或类似技术的迂回的方式联系有关如何在 SQL Server 中使用迂回的方式或类似的技术信息。有关迂回的方式和类似技术的详细信息,请访问下面的 Microsoft 信息检索中心 Web 站点:
http://research.microsoft.com/sn/detours

属性

文章编号: 920925 - 最后修改: 2014年5月7日 - 修订: 3.0
这篇文章中的信息适用于:
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL Server 2005 Express Edition with Advanced Services
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL 2005 Server Workgroup
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL 2005 Server Enterprise
  • Microsoft SQL Server 2005 Standard X64 Edition
  • Microsoft SQL Server 2005 Enterprise X64 Edition
  • Microsoft SQL Server 2005 Standard Edition for Itanium Based Systems
  • Microsoft SQL Server 2005 Enterprise Edition for Itanium Based Systems
  • Microsoft SQL Server 2000 Personal Edition
  • Microsoft SQL Server 2000 标准版
  • Microsoft SQL Server 2000 Workgroup Edition
  • Microsoft SQL Server 2000 Developer Edition
  • Microsoft SQL Server 2000 Enterprise Edition
  • Microsoft SQL Server 2008 Developer
  • Microsoft SQL Server 2008 Enterprise
  • Microsoft SQL Server 2008 Express
  • Microsoft SQL Server 2008 R2 Datacenter
  • Microsoft SQL Server 2008 R2 Developer
  • Microsoft SQL Server 2008 R2 Enterprise
  • Microsoft SQL Server 2008 R2 Express
  • Microsoft SQL Server 2008 R2 Standard
  • Microsoft SQL Server 2008 R2 Web
  • Microsoft SQL Server 2008 R2 Workgroup
  • Microsoft SQL Server 2008 Web
  • Microsoft SQL Server 2008 Workgroup
  • Microsoft SQL Server 2012 Developer
  • Microsoft SQL Server 2012 Enterprise
  • Microsoft SQL Server 2012 Express
  • Microsoft SQL Server 2012 Standard
  • Microsoft SQL Server 2012 Web
  • SQL Server 2012 Enterprise Core
  • Microsoft SQL Server 2014 Developer
  • Microsoft SQL Server 2014 Enterprise
  • Microsoft SQL Server 2014 Express
  • Microsoft SQL Server 2014 Standard
  • Microsoft SQL Server 2014 Web
关键字:?
kbtshoot kbexpertiseadvanced kbinfo kbmt KB920925 KbMtzh
机器翻译
重要说明:本文是由 Microsoft 机器翻译软件进行的翻译并可能由 Microsoft 社区通过社区翻译机构(CTF)技术进行后期编辑,或可能是由人工进行的翻译。Microsoft 同时向您提供机器翻译、人工翻译及社区后期编辑的文章,以便对我们知识库中的所有文章以多种语言提供访问。翻译的文章可能存在词汇、句法和/或语法方面的错误。Microsoft 对由于内容的误译或客户对内容的使用所导致的任何不准确、错误或损失不承担责任。
点击这里察看该文章的英文版: 920925
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com