Delen via


Omleidingen of vergelijkbare technieken kunnen onverwacht gedrag veroorzaken met SQL Server

In dit artikel wordt het ondersteuningsbeleid van Microsoft beschreven wanneer u externe omleidingen gebruikt met SQL Server en problemen die kunnen optreden wanneer u deze gebruikt.

Originele productversie: SQL Server
Origineel KB-nummer: 920925

Samenvatting

Microsoft-ondersteuning heeft talloze producten van derden aangetroffen die gebruikmaken van omleidingen om extra functies te bieden aan SQL Server. Dit zijn meestal controlefuncties. Er is geen certificeringsproces voor omleidingen van derden voor Microsoft-toepassingen. Daarom raadt Microsoft het gebruik van omleidingen over het algemeen sterk af.

Functies die gebruikmaken van omleidingen of vergelijkbare technieken om het gedrag van SQL Server te wijzigen, kunnen de volgende problemen veroorzaken:

  • Prestatieproblemen.
  • Onjuiste resultaten.
  • Schijf- en geheugenbeschadiging.
  • Verlies van SQL Server-antwoord.
  • Onverwachte procesbeëindiging.
  • Kan geen standaarddiagnose gebruiken, zoals de functie fn_get_sql en de DBCC INPUTBUFFER opdracht.
  • 100 procent CPU-gebruik en lange hersteltijden van databases wanneer u OLTP-tabellen in het geheugen gebruikt in SQL Server.

U kunt dezelfde problemen ondervinden wanneer u niet-Microsoft-software gebruikt, zoals gekoppelde servers, uitgebreide procedures of COM-objecten binnen het SQL Server-proces. Omleidingen zijn verborgen in de DBA-weergave. Als u een omweg wilt ontdekken, moet u de technieken gebruiken die worden beschreven in de sectie Meer informatie die volgt. Gekoppelde servers, COM-objecten en uitgebreide procedures hebben expliciete registratie en gedefinieerde interfaces.

Opmerking

Vanwege de verborgen aard van omleidingen en het ontbreken van gepubliceerde interfaces, biedt Microsoft geen ondersteuningsservices voor functies van derden die gebruikmaken van omleidingen of vergelijkbare technieken. De derde partij is verantwoordelijk voor de ondersteuning van zijn eigen code, net zoals deze verantwoordelijk is voor de eigen gekoppelde server of andere goedgekeurde implementatie.

Het is gebruikelijk dat microsoft-ondersteuningsservices u vragen niet-essentiële taken uit te schakelen en onderdelen van derden en andere, vergelijkbare technieken uit te schakelen of te verwijderen. Microsoft probeert altijd de voetafdruk van het probleem te verminderen terwijl het het probleem identificeert. Nadat het probleem is geïdentificeerd als niet gerelateerd aan de taken of producten van derden, kunnen deze taken of producten van derden weer in productie worden gebracht.

Het is niet onze bedoeling om een omleiding te ontdekken en vervolgens te overwegen dat het exemplaar van SQL Server niet wordt ondersteund. Microsoft erkent dat sommige implementaties nodig zijn. Microsoft vereist echter dat u de ondersteuning van de omleidingen valideert. Een omleiding van een betrouwbaar en vertrouwd bedrijf is zeker anders dan een onverwachte omleiding die wordt gebruikt door een virus. Microsoft garandeert of certificeert deze producten van derden niet of hoe de producten van derden communiceren met Microsoft-producten en -services. In plaats daarvan zijn externe leveranciers verantwoordelijk voor de identificatie en betrouwbaarheid van hun producten en services. Als u vragen hebt over producten en services van derden, neemt u contact op met de betreffende derde partij. Microsoft is niet verantwoordelijk voor problemen die worden veroorzaakt door uw gebruik van producten of services van derden in verband met SQL Server.

Meer informatie

Omleidingen bieden verbeterde mogelijkheden en een afweging tussen risico en beloning. Wanneer een omleiding wordt geïmplementeerd in SQL Server, wordt er doorgaans code van derden in de procesruimte geïnjecteerd. Deze activiteit kan het gedrag van SQL Server wijzigen.

Hier volgen enkele voorbeelden van situaties en mogelijke bijwerkingen:

  • TDS-pakketten (binnenkomend netwerkverkeer) worden gescand en gewijzigd. De omleiding wordt toegevoegd op een kritieke locatie in de net_readdata netwerkprocesthread. Zelfs 100 CPU-cycli op deze locatie kunnen de doorvoer van batchsnelheid aanzienlijk verminderen.

    Een wijziging in de werkelijke TDS-gegevens kan leiden tot geheugenkrabbels. Dit probleem heeft verschillende sql Server-stabiliteitsproblemen en beschadigde gegevens veroorzaakt. Problemen kunnen ertoe leiden dat een TDS-pakket gedeeltelijk wordt gewijzigd en dat er opnieuw garbage wordt afgespeeld naar SQL Server. Logboekregistratiefaciliteiten op dit niveau kunnen wachtwoorden en andere gevoelige gegevens beschikbaar maken die SQL Server-tracering is ontworpen om te onderdrukken en te helpen beveiligen.

  • SQL Server-parseerroutines worden omgeleid om het gedrag te wijzigen. De volgende zijn mogelijke bijwerkingen:

    • Uitvoeringsplannen komen niet overeen met de werkelijke querytekst.
    • Een opdracht wordt slechts één keer verzonden vanuit de client. De opdracht wordt echter meerdere keren uitgevoerd.
    • Traceringsuitvoer toont de oorspronkelijke opdracht in plaats van de gewijzigde query.
    • De DBCC INPUTBUFFER opdracht toont de oorspronkelijke opdracht in plaats van de gewijzigde query.
    • De fn_get_sql functie geeft onjuiste gegevens weer. Bovendien is de fn_get_sql functie vatbaar voor uitzonderingen en voor onjuiste resultaten. De fn_get_sql functie wordt gebruikt door veel bewakingsoplossingen en kan problemen veroorzaken op de bewakingsoplossingen.
    • De planning van de algemene gebruikersmodusplanner (UMS) en SQL Server-besturingssysteem (SQLOS) kan worden onderbroken. Dit leidt tot verlies van SQL Server-respons, tot prestatiewijzigingen en tot storingen.
  • Win32-API's die verbeterde beveiligingsfuncties bieden, worden omgeleid. Afhankelijk van de implementatie kunnen logboekregistratiefaciliteiten op dit niveau wachtwoorden en andere gevoelige gegevens beschikbaar maken. De algehele planning van UMS en SQLOS wordt onderbroken. Dit leidt tot verlies van SQL Server-reactie en tot storingen.

  • Het wijzigen van functietabellen en het omleiden van kernfuncties van SQL Server of Windows-API's wordt niet ondersteund in het SQL Server-proces. Dit kan leiden tot instabiliteit en onverwacht gedrag in de SQL Server-functionaliteit.

In het volgende voorbeeld ziet u dat de kernel32!GetQueuedCompletionStatus functie is omgeleid.

MyDLL!MyGetQueuedCompletionStatus
ssnetlib!ConnectionReadAsyncWait

In de assembly voor de GetQueuedCompletionStatus functie is de eerste instructie vervangen door een spronginstructie.

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

De assembly voor de geïnjecteerde code toont de omgeleide activiteit en een aanroep naar het MyDLL-bestand .

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]

U kunt Hulpprogramma's voor foutopsporing voor Windows gebruiken om te bepalen of er omleidingen worden gebruikt. Volg hiertoe de volgende stappen.

Opmerking

Test deze methode altijd voordat u deze in productie probeert. Wanneer u Hulpprogramma's voor foutopsporing voor Windows gebruikt, kan het proces vastlopen wanneer u de opdrachten uitvoert. Dit gedrag kan een negatieve invloed hebben op een productieserver.

  1. Koppel Hulpprogramma's voor foutopsporing voor Windows aan SQL Server of laad een volledig gebruikersdumpbestand.

  2. Geef de volgende foutopsporingsopdracht op. Met deze opdracht wordt elke installatiekopie gecontroleerd op basis van de installatiekopie op de schijf om te bepalen of er omleidingen zijn geïnjecteerd.

    !for_each_module "!chkimg -v @#Base -d"
    
  3. Koppel het foutopsporingsprogramma los.

Als de afbeelding in het geheugen is gewijzigd, kan de uitvoer er als volgt uitzien:

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)

U kunt de assembly als volgt bekijken om het probleem nader te bekijken:

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

Antivirusprogramma's die SQL-injectieaanvallen bijhouden, kunnen SQL Server-code omleiding. In dit scenario kan in de uitvoer van de !for_each_module "!chkimg -v @#Base -d" extensie worden weergegeven dat de SQL Server-functies yyparse en ex_raise2 zijn gewijzigd:

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

We raden u aan contact op te nemen met de provider van de omleidingen of vergelijkbare technieken voor gedetailleerde informatie over hoe deze de omleidingen in SQL Server gebruikt. Zie Omleidingen voor meer informatie over omleidingen en vergelijkbare technieken.