Delen via


Leiden tot onverwachte gedragingen met SQL Server of vergelijkbare technieken

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

Oorspronkelijke productversie: SQL Server
Oorspronkelijk KB-nummer: 920925

Samenvatting

Microsoft-ondersteuning heeft talloze producten van derden aangetroffen die gebruikmaken van omleidingen extra functies te bieden aan SQL Server. Dit zijn meestal controlefuncties. Er is geen certificeringsproces voor externe externe toepassingen voor Microsoft-toepassingen. Daarom raadt Microsoft over het algemeen het gebruik van ontmoedigingen 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 procesafbreking.
  • Het is niet mogelijk om standaarddiagnose te 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. De tours 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.

Notitie

Vanwege de verborgen aard van de omleidingen en het ontbreken van gepubliceerde interfaces biedt Microsoft geen ondersteuningsservices voor functies van derden die gebruikmaken van degradaties 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 ingerichte implementatie.

Het is gebruikelijk dat microsoft-ondersteuningsservices u vragen om niet-essentiële taken uit te schakelen en om onderdelen van derden en andere, vergelijkbare technieken uit te schakelen of te verwijderen. Microsoft probeert altijd de footprint van het probleem te verminderen terwijl het probleem wordt geïdentificeerd. 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 om het exemplaar van SQL Server niet te ondersteunen. Microsoft erkent dat sommige implementaties nodig zijn. Microsoft vereist echter dat u de ondersteuning van de ontduldingen valideert. Een omweg van een betrouwbaar en vertrouwd bedrijf is zeker anders dan een onverwachte omweg die door een virus wordt gebruikt. Microsoft garandeert of certificeert deze producten van derden niet of hoe de producten van derden met Microsoft-producten en -services communiceren. In plaats daarvan zijn externe leveranciers verantwoordelijk voor de identificatie en betrouwbaarheid van hun producten en diensten. 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

De tours bieden verbeterde mogelijkheden en een risico-/beloningsruil. Wanneer een omleiding wordt geïmplementeerd in SQL Server, wordt code van derden doorgaans in de procesruimte geïnjecteerd. Deze activiteit kan het gedrag van SQL Server wijzigen.

Hier volgen enkele voorbeelden van situaties en mogelijke bijwerkingen:

  • Pakketten voor binnenkomend netwerkverkeer (TDS) worden gescand en gewijzigd. De omleiding wordt toegevoegd op een kritieke locatie op 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 geheugenkribbels. Dit probleem heeft verschillende stabiliteitsproblemen met SQL Server en beschadigde gegevens veroorzaakt. Problemen kunnen ertoe leiden dat een TDS-pakket gedeeltelijk wordt gewijzigd en dat garbagecollection opnieuw wordt afgespeeld in SQL Server. Logboekregistratiefaciliteiten op dit niveau kunnen wachtwoorden en andere gevoelige gegevens beschikbaar maken die door SQL Server-tracering worden onderdrukt en beveiligd.

  • SQL Server-parseringsroutines worden omkaderd om gedrag te wijzigen. Hier volgen mogelijke bijwerkingen:

    • Uitvoeringsplannen komen niet overeen met de werkelijke querytekst.
    • Een opdracht wordt slechts één keer vanaf de client verzonden. De opdracht wordt echter meerdere keren uitgevoerd.
    • Traceeruitvoer 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. Daarnaast is de fn_get_sql functie vatbaar voor uitzonderingen en onjuiste resultaten. De fn_get_sql functie wordt gebruikt door veel bewakingsoplossingen en kan problemen met de bewakingsoplossingen veroorzaken.
    • De planning van algemene gebruikersmodusplanner (UMS) en SQL Server-besturingssysteem (SQLOS) kan worden onderbroken. Dit leidt tot verlies van SQL Server-respons, prestatiewijzigingen en storingen.
  • Win32-API's die uitgebreide beveiligingsfuncties bieden, worden omleiding geboden. Afhankelijk van de implementatie kunnen logboekregistratiefaciliteiten op dit niveau wachtwoorden en andere gevoelige gegevens beschikbaar maken. De algehele UMS- en SQLOS-planning wordt onderbroken. Dit leidt tot verlies van SQL Server-reacties en storingen.

  • Het wijzigen van functietabellen en het omleiden van sql Server-kernfuncties of Windows-API's wordt niet ondersteund binnen 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 omleiding heeft gekregen.

MyDLL!MyGetQueuedCompletionStatus
ssnetlib!ConnectionReadAsyncWait

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

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 omleidingsactiviteit 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. Daarvoor voert u de volgende stappen uit.

Notitie

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

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

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

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

Als de afbeelding in het geheugen is gewijzigd, kan de uitvoer er ongeveer 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 waarmee SQL-injectieaanvallen worden bijgehouden, kunnen SQL Server-code omslaan. In dit scenario kan de uitvoer van de !for_each_module "!chkimg -v @#Base -d" extensie laten zien dat de SQL Server-functies yyparse en ex_raise2 worden 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 gebruikmaakt van de omleidingen in SQL Server. Zie De tours voor meer informatie over degradaties en vergelijkbare technieken.