Compartir a través de


Los desvíos o técnicas similares pueden provocar comportamientos inesperados con SQL Server

En este artículo se describe la directiva de soporte técnico de Microsoft cuando se usan desvíos de terceros con SQL Server y problemas que pueden producirse cuando se usan.

Versión del producto original: SQL Server
Número de KB original: 920925

Resumen

El soporte técnico de Microsoft ha encontrado numerosos productos de terceros que usan desvíos para proporcionar funcionalidades adicionales a SQL Server. Suelen ser funcionalidades de auditoría. No hay ningún proceso de certificación para desvíos de terceros para aplicaciones de Microsoft. Por lo tanto, por lo general, Microsoft desaconseja encarecidamente el uso de desvíos.

Las características que usan desvíos o técnicas similares para cambiar el comportamiento de SQL Server pueden causar los siguientes problemas:

  • Problemas de rendimiento.
  • Resultados incorrectos.
  • Daños en el disco y la memoria.
  • Pérdida de la respuesta de SQL Server.
  • Terminación de proceso inesperada.
  • Incapacidad para usar diagnósticos estándar, como la función fn_get_sql y el DBCC INPUTBUFFER comando .
  • Uso de CPU al 100 % y tiempos largos de recuperación de la base de datos cuando se usan tablas OLTP en memoria en SQL Server.

Puede encontrar estos mismos problemas cuando se usa software que no es de Microsoft, como servidores vinculados, procedimientos extendidos u objetos COM dentro del proceso de SQL Server. Los desvíos están ocultos en la vista DBA. Para descubrir un desvío, debe usar las técnicas que se describen en la sección Más información que sigue. Los servidores vinculados, los objetos COM y los procedimientos extendidos tienen un registro explícito e interfaces definidas.

Nota:

Debido a la naturaleza oculta de los desvíos y a la falta de interfaces publicadas, Microsoft no proporciona servicios de soporte técnico para las características de terceros que usan desvíos o técnicas similares. El tercero es responsable de la compatibilidad con su propio código, del mismo modo que sería responsable de su propio servidor vinculado u otra implementación autorizada.

Es habitual, en el curso habitual de la solución de problemas, que los servicios de soporte técnico de Microsoft le pidan que deshabilite trabajos no esenciales y que deshabilite o quite componentes de terceros y otras técnicas similares. Microsoft siempre intenta reducir la superficie del problema mientras identifica el problema. Una vez identificado el problema como no relacionado con los trabajos o los productos de terceros, esos trabajos o productos de terceros pueden volver a introducirse en producción.

No es nuestra intención descubrir un desvío y, a continuación, considerar que la instancia de SQL Server no es compatible. Microsoft reconoce que algunas implementaciones son necesarias. Sin embargo, Microsoft requiere que valide la compatibilidad de los desvíos. Un desvío de una empresa confiable 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 ni cómo los productos de terceros interactúan con los productos y servicios de Microsoft. En su lugar, los proveedores de terceros son responsables de la identificación y confiabilidad de sus productos y servicios. Si tiene alguna pregunta sobre productos y servicios de terceros, póngase en contacto con el tercero correspondiente. Microsoft no es responsable de los problemas causados por el uso de productos o servicios de terceros en relación con SQL Server.

Más información

Los desvíos proporcionan capacidades mejoradas y una compensación de riesgo/recompensa. Normalmente, cuando se implementa un desvío en SQL Server, se inserta código de terceros en el espacio de proceso. Esta actividad puede cambiar el comportamiento de SQL Server.

A continuación se muestran algunas situaciones de ejemplo y posibles efectos secundarios:

  • Los paquetes de tráfico de red entrante (TDS) se examinan y cambian. El desvío se agrega 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 la velocidad de procesamiento por lotes.

    Un cambio en los datos de TDS reales puede dar lugar a scribblers de memoria. Este problema ha desencadenado varios problemas de estabilidad de SQL Server y daños en los datos. Los problemas pueden hacer que un paquete TDS se cambie parcialmente y reproduzca elementos no utilizados en SQL Server. Las instalaciones de registro en este nivel pueden exponer contraseñas y otros datos confidenciales que el seguimiento de SQL Server está diseñado para suprimir y ayudar a proteger.

  • Las rutinas de análisis de SQL Server se desvian para cambiar el comportamiento. Los siguientes son posibles efectos secundarios:

    • Los planes de ejecución no coinciden con el texto real de la consulta.
    • Un comando solo se envía una vez desde el cliente. Sin embargo, el comando se ejecuta varias veces.
    • La salida de seguimiento muestra el comando original en lugar de la consulta modificada.
    • El DBCC INPUTBUFFER comando muestra el comando original en lugar de la consulta modificada.
    • La fn_get_sql función muestra datos incorrectos. Además, la fn_get_sql función es susceptible a excepciones y a resultados incorrectos. Muchas fn_get_sql soluciones de supervisión usan la función y pueden causar problemas en las soluciones de supervisión.
    • Es posible que se interrumpan la programación general del Programador de modo de usuario (UMS) y del sistema operativo SQL Server (SQLOS). Esto provoca la pérdida de la respuesta de SQL Server, los cambios de rendimiento y las interrupciones.
  • Las API de Win32 que proporcionan características de seguridad mejoradas se desvió. En función de la implementación, las instalaciones de registro de este nivel podrían exponer contraseñas y otros datos confidenciales. La programación general de UMS y SQLOS se interrumpe. Esto provoca la pérdida de la respuesta de SQL Server y las interrupciones.

  • La modificación de tablas de funciones y el redireccionamiento de funciones principales de SQL Server o API de Windows no se admiten en el proceso de SQL Server. Esto puede provocar inestabilidad y un comportamiento inesperado en la funcionalidad de SQL Server.

En el ejemplo siguiente se muestra que la kernel32!GetQueuedCompletionStatus función se ha desviado.

MyDLL!MyGetQueuedCompletionStatus
ssnetlib!ConnectionReadAsyncWait

En el ensamblado de la GetQueuedCompletionStatus función, la primera instrucción se ha reemplazado por una instrucción de salto.

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

El ensamblado del código insertado muestra la actividad desviada 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 usar herramientas de depuración para Windows para determinar si se usan desvíos. Para ello, siga estos pasos.

Nota:

Pruebe siempre este método antes de probarlo en producción. Cuando se usan herramientas de depuración para Windows, el proceso puede inmovilizarse al ejecutar los comandos. Este comportamiento puede afectar negativamente a un servidor de producción.

  1. Asocie herramientas de depuración para Windows a SQL Server o cargue un archivo de volcado de usuario completo.

  2. Emita el siguiente comando del depurador. Este comando inspecciona cada imagen en la imagen en disco para determinar si se han insertado desvíos.

    !for_each_module "!chkimg -v @#Base -d"
    
  3. Desasocie el depurador.

Si se modificó la imagen en memoria, la salida puede ser similar a la 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 para examinar más detenidamente el problema de la siguiente manera:

0:038> u ssnetlib!ConnectionClose
ssnetlib!ConnectionClose]:
0c263710 6800000000 push 0
0c263715 e9278ada03 jmp MyDLL!MyGetQueuedCompletionStatus <- A detour has been installed.

Los programas antivirus que realizan un seguimiento de los ataques por inyección de SQL pueden desviar el código de SQL Server. En este escenario, la salida de la !for_each_module "!chkimg -v @#Base -d" extensión puede mostrar que las funciones yyparse de SQL Server 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 ponerse en contacto con el proveedor de los desvíos o técnicas similares para obtener información detallada sobre cómo se usan los desvíos en SQL Server. Para obtener más información sobre los desvíos y técnicas similares, consulte Desvíos.