Les détourages ou techniques similaires peuvent entraîner des comportements inattendus avec SQL Server

Cet article décrit la stratégie de support Microsoft lorsque vous utilisez des détours tiers avec SQL Server et des problèmes qui peuvent se produire lorsque vous les utilisez.

Version du produit d’origine :   SQL Server
Numéro de la base de connaissances initiale :   920925

Synthèse

Le support Microsoft a rencontré de nombreux produits tiers qui utilisent des détourages pour fournir des fonctionnalités supplémentaires à SQL Server. Il s’agit généralement de fonctionnalités d’audit. Il n’existe pas de processus de certification pour les détourages tiers pour les applications Microsoft. Par conséquent, Microsoft déconseille fortement l’utilisation des détourages.

Les fonctionnalités qui utilisent des détourages ou des techniques similaires pour modifier le comportement de SQL Server peuvent entraîner les problèmes suivants :

  • Problèmes de performances.
  • Résultats incorrects.
  • Corruption du disque et de la mémoire.
  • Perte de la réponse de SQL Server.
  • Fin de processus inattendue.
  • Impossibilité d’utiliser des diagnostics standard, tels que la fonction fn_get_sql et la DBCC INPUTBUFFER commande.
  • utilisation de l’UC de 100 pour cent et temps de récupération des bases de données longues lorsque vous utilisez des tables OLTP en mémoire dans SQL Server.

Vous pouvez rencontrer ces mêmes problèmes lorsque vous utilisez un logiciel non-Microsoft tel que des serveurs liés, des procédures étendues ou des objets COM dans le processus SQL Server. Les détourages sont masqués dans la vue des administrateurs de bases de droits. Pour découvrir un aperçu, vous devez utiliser les techniques décrites dans la section plus d’informations qui suit. Les serveurs liés, les objets COM et les procédures étendues ont des interfaces d’enregistrement et de définition explicites.

Notes

En raison de la nature cachée des détourages et du manque d’interfaces publiées, Microsoft ne fournit pas de services de prise en charge pour les fonctionnalités tierces qui utilisent des profils ou des techniques similaires. Le tiers est responsable de la prise en charge de son propre code, tout comme il est responsable de son propre serveur lié ou de tout autre déploiement sanctionné.

Il est courant, dans le cadre d’un dépannage habituel, que les services de support Microsoft vous demandent de désactiver les travaux non essentiels et de désactiver ou supprimer les composants tiers et autres techniques similaires. Microsoft tente toujours de réduire l’encombrement du problème lors de l’identification du problème. Une fois que le problème est identifié comme non lié aux travaux ou aux produits tiers, ces travaux ou produits tiers peuvent être introduits en production.

Il n’est pas judicieux de découvrir une déprésentation et de considérer l’instance de SQL Server comme non prise en charge. Microsoft reconnaît que certaines implémentations sont nécessaires. Toutefois, Microsoft vous demande de valider la prise en charge des détourages. Un détournement d’une société digne de confiance et fiable est manifestement différent d’un détourage inattendu utilisé par un virus. Microsoft ne garantit pas ou ne certifie pas ces produits tiers ou la manière dont les produits tiers interagissent avec les produits et services Microsoft. Au lieu de cela, les fournisseurs tiers sont responsables de l’identification et de la crédibilité de leurs produits et services. Si vous avez des questions sur les produits et services tiers, veuillez contacter le tiers applicable. Microsoft n’est pas responsable des problèmes causés par l’utilisation de produits ou de services tiers en relation avec SQL Server.

Plus d’informations

Les détourages fournissent des fonctionnalités améliorées et un compromis de risque/récompense. En règle générale, lorsqu’un détourage est implémenté dans SQL Server, le code tiers est injecté dans l’espace de processus. Cette activité peut modifier le comportement de SQL Server.

Voici quelques exemples de situations et d’effets secondaires possibles :

  • Les paquets de trafic réseau entrant (TDS) sont analysés et modifiés. Le détourage est ajouté à un emplacement critique au niveau du net_readdata thread de processus réseau. Même 100 cycles processeur à cet emplacement peuvent réduire considérablement le débit du débit par lot.

    Une modification des données TDS peut entraîner des griffonnages de mémoire. Ce problème a déclenché plusieurs problèmes de stabilité SQL Server et d’endommagement des données. Les problèmes peuvent entraîner la modification partielle d’un paquet TDS et la relecture du garbage collector à SQL Server. Les fonctionnalités de journalisation de ce niveau peuvent exposer des mots de passe et d’autres données sensibles que le suivi SQL Server est destiné à supprimer et à sécuriser.

  • Les routines d’analyse SQL Server sont détournées pour modifier le comportement. Les effets secondaires possibles sont les suivants :

    • Les plans d’exécution ne correspondent pas au texte de requête réel.
    • Une commande n’est envoyée qu’une seule fois à partir du client. Toutefois, la commande est exécutée plusieurs fois.
    • La sortie de suivi affiche la commande d’origine au lieu de la requête modifiée.
    • La DBCC INPUTBUFFER commande affiche la commande d’origine au lieu de la requête modifiée.
    • La fn_get_sql fonction affiche des données incorrectes. En outre, la fn_get_sql fonction est sensible aux exceptions et aux résultats incorrects. La fn_get_sql fonction est utilisée par de nombreuses solutions de surveillance et peut entraîner des problèmes au niveau des solutions de surveillance.
    • La planification de l’analyseur de mode utilisateur (UMS) et du système d’exploitation SQL Server (SQLOS) global peut être interrompue. Cela entraîne la perte de réponse de SQL Server, les changements de performances et les pannes.
  • Les API Win32 qui fournissent des fonctionnalités de sécurité améliorées sont détournées. En fonction de l’implémentation, les fonctionnalités de journalisation de ce niveau peuvent exposer des mots de passe et d’autres données sensibles. L’ensemble de la planification UMS et SQLOS est interrompu. Cela entraîne la perte de la réponse de SQL Server et des pannes.

  • La modification des tables de fonctions et la redirection des fonctions SQL Server principales ou des API Windows ne sont pas prises en charge dans le processus SQL Server. Cela peut entraîner une instabilité et des comportements inattendus dans la fonctionnalité SQL Server.

L’exemple suivant montre que la kernel32!GetQueuedCompletionStatus fonction a été détournée.

MyDLL!MyGetQueuedCompletionStatus
ssnetlib!ConnectionReadAsyncWait

Dans l’assembly de la GetQueuedCompletionStatus fonction, la première instruction a été remplacée par une instruction de saut.

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

L’assembly pour le code injecté affiche l’activité détourée et un appel au fichier 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]

Vous pouvez utiliser les outils de débogage pour Windows pour déterminer si les détourages sont utilisés. Pour cela, procédez comme suit.

Notes

Testez toujours cette méthode avant de l’essayer en production. Lorsque vous utilisez les outils de débogage pour Windows, le processus peut se bloquer lorsque vous exécutez les commandes. Ce comportement peut avoir un impact négatif sur un serveur de production.

  1. Attachez des outils de débogage pour Windows à SQL Server ou chargez un fichier d’image mémoire utilisateur complet.

  2. Émettez la commande Debugger suivante. Cette commande inspecte chaque image par rapport à l’image sur disque pour déterminer si les détourages ont été injectés.

    !for_each_module "!chkimg -v @#Base -d"
    
  3. Détacher le débogueur.

Si l’image en mémoire a été modifiée, la sortie peut ressembler à ce qui suit :

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)

Vous pouvez examiner l’assembly pour examiner plus en détail le problème comme suit :

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

Les programmes antivirus qui effectuent le suivi des attaques par injection SQL peuvent détourer le code SQL Server. Dans ce scénario, le résultat de l' !for_each_module "!chkimg -v @#Base -d" extension peut indiquer que les fonctions SQL Server yyparse et ex_raise2 sont modifiées :

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

Nous vous recommandons de contacter le fournisseur des détourages ou des techniques similaires pour obtenir des informations détaillées sur la façon dont il utilise les détourages dans SQL Server. Pour plus d’informations sur les détourages et les techniques similaires, voir Detours.