Desvíos o técnicas similares pueden causar comportamientos inesperados con SQL Server

Se aplica: Microsoft SQL Server 2005 Express EditionMicrosoft SQL Server 2005 Express Edition with Advanced ServicesMicrosoft SQL Server 2005 Express Edition with Advanced Services

Resumen


Soporte técnico de Microsoft ha detectado numerosos productos de terceros que utilizan desvíos para proporcionar funcionalidades adicionales para Microsoft SQL Server. Éstos son normalmente funciones de auditoría. No hay ningún proceso de certificación para desvíos de terceros para aplicaciones de Microsoft. Por lo tanto, en general, Microsoft recomienda no la utilización de desvíos.

Funciones que utilizan desvíos o técnicas similares para cambiar el comportamiento de SQL Server pueden causar los problemas siguientes:
  • Problemas de rendimiento
  • Resultados incorrectos
  • Daños en la memoria y de disco
  • Pérdida de respuesta de SQL Server
  • Finalización de proceso inesperada
  • Incapacidad para utilizar los diagnósticos del estándares, por ejemplo, la función fn_get_sql y el comando DBCC INPUTBUFFER
  • uso de CPU del 100 por ciento y largos tiempos recuperación base de datos al utilizar tablas OLTP que en la memoria en SQL Server
Puede encontrar estos mismos problemas cuando se utiliza software ajeno a Microsoft como servidores vinculados, procedimientos extendidos u objetos COM dentro del proceso de SQL Server. Desvíos se ocultan de DBA. Para descubrir un desvío, debe utilizar las técnicas que se describen en la sección "Más información" que sigue. Los servidores vinculados, objetos COM y procedimientos extendidos tienen registro explícito y definido de interfaces.

Nota: Debido a la naturaleza oculta de desvíos y la falta de interfaces publicadas, Microsoft no proporciona servicios de soporte para las características de otros fabricantes que utilizan desvíos o técnicas similares. El tercero es responsable de soporte técnico de su propio código, igual que sería responsable de su propio servidor vinculado o sancionada por otra implementación.

Es muy común, en el curso habitual de solución de problemas, para que los servicios de soporte de Microsoft le pida que deshabilitar trabajos que no sean esenciales y deshabilitar o quitar componentes de otros fabricantes y demás técnicas similares. Microsoft siempre intenta reducir la huella del problema mientras está identificando el problema. Una vez identificado el problema como no relacionados con los trabajos o productos de otros fabricantes, los trabajos o productos de otros fabricantes podrán introducirse en la producción.

No es nuestra intención descubrir un rodeo y tener en cuenta la instancia de SQL Server que no es compatible. Microsoft reconoce que algunas implementaciones son necesarios. Sin embargo, Microsoft requiere validar la compatibilidad de los desvíos. Un desvío de una empresa de reputación y de confianza es definitivamente diferente de un desvío inesperado que es utilizado por un virus. Microsoft no garantiza ni certifica estos productos de terceros o cómo interactúan los productos de terceros con productos y servicios Microsoft. En su lugar, los proveedores son responsables de la identificación y la fiabilidad de sus productos y servicios. Si tiene cualquier duda sobre los servicios y productos de terceros, por favor llegue al tercero aplicable. Microsoft no es responsable de todos los problemas que son causados por el uso de productos de terceros o servicios relacionados con SQL Server.

Más información


Desvíos proporcionan capacidades mejoradas y un equilibrio de riesgos/recompensa. Normalmente, cuando se implementa un desvío en SQL Server, se inyecta código de terceros en el espacio de proceso. Esta actividad puede cambiar el comportamiento de SQL Server.

Las siguientes son algunas situaciones de ejemplo y los efectos secundarios posibles:
  • Paquetes de tráfico (TDS) de red entrantes se analizan y se cambió. Se agrega el desvío en una ubicación crítica en el subproceso de proceso de red net_readdata. Incluso 100 ciclos de CPU en esta ubicación pueden reducir significativamente el rendimiento de velocidad de lote.

    Puede provocar un cambio en los datos reales de TDS plumillas de memoria. Este problema ha desencadenado varios problemas de estabilidad de SQL Server y daños en los datos. Problemas puede causar un paquete TDS parcialmente cambiarse y reproducir basura a SQL Server. Servicios en este nivel de registro pueden exponer las contraseñas y otros datos confidenciales que SQL Server seguimiento está diseñado para suprimir y para ayudar a proteger.
  • Rutinas de análisis de SQL Server se ha desviado para cambiar el comportamiento. Las siguientes son posibles efectos secundarios:
    • Planes de ejecución no coinciden con el texto de la consulta real.
    • Se envía un comando sólo una vez desde el cliente. Sin embargo, el comando se ejecuta varias veces.
    • Resultados de seguimiento muestran el comando original en lugar de la consulta modificada.
    • El comando DBCC INPUTBUFFER muestra el comando original en lugar de la consulta modificada.
    • La función fn_get_sql muestra datos incorrectos. Además, la función fn_get_sql es susceptible a las excepciones y resultados incorrectos. La función fn_get_sql es utilizada por muchas soluciones de supervisión y puede provocar problemas en las soluciones de supervisión.
    • En general pueden interrumpirse programador de modo usuario (UMS) y programar el sistema operativo de SQL Server (SQLOS). Esto lleva a la pérdida de respuesta de SQL Server, los cambios de rendimiento y las interrupciones.
  • Las API de Win32 que proporcionan características de seguridad mejoradas son desviadas. Dependiendo de la implementación, servicios de registro en este nivel podrían exponer contraseñas y otros datos confidenciales. General UMS y SQLOS programación se interrumpe. Esto lleva a la pérdida de respuesta de SQL Server y a las interrupciones.
  • Modificar tablas de función y redireccionando las funciones de SQL Server core o la API de Windows no son compatibles con el proceso de SQL Server. Esto puede conducir a la inestabilidad y un comportamiento inesperado en la funcionalidad de SQL Server.
¡En el ejemplo siguiente se muestra el kernel32 ! GetQueuedCompletionStatus ha sido desviado hacia la función.
MyDLL!MyGetQueuedCompletionStatusssnetlib!ConnectionReadAsyncWait

En el ensamblado de la función GetQueuedCompletionStatus , la primera instrucción se ha reemplazado con una instrucción de salto.
0:038> u kernel32!GetQueuedCompletionStatuskernel32!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
El ensamblado para el código insertado muestra la actividad detoured y una llamada al archivo 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]


Puede utilizar herramientas de depuración para Windows para determinar si se utilizan desvíos. Para ello, siga estos pasos:

Nota: Pruebe siempre este método antes de intentar en producción. Cuando utilice herramientas de depuración para Windows, el proceso puede inmovilizar al ejecutar los comandos. Este comportamiento puede afectar negativamente a un servidor de producción.
  1. Adjuntar Debugging Tools for Windows a SQL Server, o cargar un archivo de volcado de usuario completo.
  2. Emita el siguiente comando de depurador. Este comando examina cada imagen con la imagen de disco para determinar si han sido insertados desvíos.
    !for_each_module "!chkimg -v @#Base -d"
  3. Desconectar al depurador.
Para obtener herramientas de depuración para Windows, visite el siguiente sitio Web de Microsoft:Si se ha modificado la imagen en la memoria, el resultado sería similar al siguiente:
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)
Puede revisar el ensamblado se examinan más detalladamente el problema como sigue:
0:038> u ssnetlib!ConnectionClosessnetlib!ConnectionClose]:
0c263710 6800000000 push 0
0c263715 e9278ada03 jmp MyDLL!MyGetQueuedCompletionStatus <- A detour has been installed.


Los programas antivirus que realizan el seguimiento de los ataques de inyección de SQL pueden desvío código de SQL Server. En este escenario, el resultado de la! for_each_module "! chkimg - v @# Base -d" extensión puede mostrar que el SQL Server funciona yyparse y ex_raise2 se modifican:

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 

Se recomienda que en contacto con el proveedor de los desvíos o técnicas similares para obtener información detallada acerca de cómo utiliza los desvíos en SQL Server. Para obtener más información acerca de desvíos y técnicas similares, visite el siguiente sitio Web de Microsoft Research Center: