Samenvatting
Ondersteuning van Microsoft heeft talrijke producten van andere leveranciers die gebruikmaken van detours te bieden extra functionaliteit van Microsoft SQL Server gevonden. Deze zijn meestal controle functies. Er is geen certificeringsproces voor derden detours voor Microsoft-toepassingen. Dus in het algemeen ontmoedigt Microsoft sterk het gebruik van detours.
Voorzieningen die detours of soortgelijke technieken gebruiken om de werking van SQL Server, kunnen de volgende problemen veroorzaken:
-
Problemen met de prestaties
-
Onjuiste resultaten
-
Beschadiging van de schijf en het geheugen
-
Verlies van de reactie van SQL Server
-
Onverwachte beëindigen
-
Niet kunnen gebruiken van standaard diagnostische gegevens, zoals de fn_get_sql -functie en de opdracht DBCC INPUTBUFFER
-
100 procent CPU-gebruik en lange database recovery-tijden wanneer u in het geheugen OLTP tabellen in SQL Server gebruikt
U ondervinden deze dezelfde problemen wanneer u niet-Microsoft-software zoals gekoppelde servers, uitgebreide procedures of COM-objecten in de SQL Server-proces. Detours zijn van DBA verborgen. Als u wilt een detour aan het licht komen, moet u de technieken die worden beschreven in de volgende sectie 'Meer informatie'. Gekoppelde servers, COM-objecten en uitgebreide procedures hebben expliciete registratie en interfaces wordt gedefinieerd.
Opmerking Door het verborgen karakter van detours en het ontbreken van gepubliceerde interfaces biedt Microsoft geen ondersteuning voor externe functies die gebruikmaken van detours of soortgelijke technieken. De derde partij is verantwoordelijk voor de ondersteuning van zijn eigen code, net als zou zij verantwoordelijk voor zijn eigen gekoppelde server of andere erkende implementatie.
Het is gebruikelijk in het normale verloop van het oplossen van problemen voor Microsoft supportservices vragen u niet-essentiële taken uitschakelen en uitschakelen of verwijderen van onderdelen van andere leveranciers en andere, vergelijkbare technieken. Microsoft probeert altijd te drukken van het oppervlak van het probleem en is het identificeren van het probleem. Nadat het probleem is geïdentificeerd als die niet gerelateerd aan de projecten of producten van derden, die taken of producten van derden kunnen worden ingevoerd in productie.
Het is niet onze bedoeling een detour aan het licht komen en vervolgens kunt u het exemplaar van SQL Server wordt niet ondersteund. Microsoft erkent dat sommige implementaties nodig zijn. Echter, vraagt Microsoft u de ondersteuning van de detours valideren. Een detour van een betrouwbare en vertrouwde bedrijf verschilt wel degelijk een onverwachte detour die wordt gebruikt door een virus. Microsoft niet rechtvaardigen of certificeren die producten van derden of de wisselwerking tussen de producten van andere leveranciers en Microsoft-producten en services. In plaats daarvan zijn leveranciers verantwoordelijk voor de identificatie en de betrouwbaarheid van hun producten en diensten. Hebt u vragen over producten en services, neem bereiken aan de toepasselijke derde partij. Microsoft is niet verantwoordelijk voor eventuele problemen die worden veroorzaakt door het gebruik van derden producten of diensten in verband met SQL Server.
Meer informatie
Detours bieden uitgebreide mogelijkheden en een risico/beloning verhouding. Wanneer een detour in SQL Server is geïmplementeerd, wordt meestal derden code geïnjecteerd in de procesruimte. Deze activiteit kan het gedrag van SQL Server te wijzigen.
Hier volgen enkele voorbeeld situaties en mogelijke neveneffecten:
-
Binnenkomend verkeer (TDS) pakketten worden gescand en gewijzigd. De detour is een belangrijke locatie op het netwerk proces-thread net_readdata toegevoegd. Zelfs 100 CPU-cycli op deze locatie kunnen batch tarief doorvoer aanzienlijk verminderen.
Een wijziging in de werkelijke TDS-gegevens kan leiden tot het geheugen scribblers. Dit probleem heeft verschillende SQL Server stabiliteitsproblemen geactiveerd en beschadiging van gegevens. Kan de oorzaak van een TDS-pakket moet gedeeltelijk worden gewijzigd en opnieuw afspelen garbage naar SQL Server. Logging faciliteiten op dit niveau kan een beveiligingsrisico voor wachtwoorden en andere vertrouwelijke gegevens die SQL Server tracering is ontworpen om te onderdrukken en te beveiligen. -
SQL Server het parseren routines worden detoured als gedrag wilt wijzigen. Mogelijke neveneffecten zijn:
-
Uitvoering plannen komen niet overeen met de werkelijke querytekst.
-
Een opdracht kan slechts één keer van de client wordt verzonden. Echter, dat de opdracht meerdere keren wordt uitgevoerd.
-
Trace-uitvoer bevat de oorspronkelijke opdracht, in plaats van de gewijzigde query.
-
De opdracht DBCC INPUTBUFFER bevat de oorspronkelijke opdracht, in plaats van de gewijzigde query.
-
De functie fn_get_sql bevat onjuiste gegevens. De functie fn_get_sql is ook gevoelig voor uitzonderingen en onjuiste resultaten. De functie fn_get_sql wordt gebruikt door veel bewakingsoplossingen en kan problemen veroorzaken op de monitoring oplossingen.
-
Over het algemeen mag gebruiker modus Scheduler (UMS) en het plannen van SQL Server Operating System (SQLOS) worden onderbroken. Dit leidt tot het verlies van de reactie van SQL Server, prestaties, wijzigingen en storingen.
-
-
Win32 API's die uitgebreide beveiligingsfuncties zijn detoured. Afhankelijk van de uitvoering waarbij registratie faciliteiten op dit niveau wachtwoorden en andere vertrouwelijke gegevens. Over het algemeen wordt UMS en plannen van SQLOS onderbroken. Dit leidt verlies van SQL Server antwoord en storingen.
-
Function-tabellen wijzigen en het omleiden van kernfuncties van SQL Server of een Windows-API worden niet ondersteund in SQL Server-proces. Dit kan leiden tot instabiliteit en onverwacht gedrag in de functionaliteit van SQL Server.
In het volgende voorbeeld laat zien dat de kernel32 ! GetQueuedCompletionStatus functie heeft zijn detoured.
MyDLL!MyGetQueuedCompletionStatusssnetlib!ConnectionReadAsyncWait
In de algemene vergadering voor de functie GetQueuedCompletionStatus , is de eerste instructie die vervangen door een sprong-instructie.
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
De assembly voor deze ingebrachte code ziet u de detoured-activiteit en een aanroep naar het bestand 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]
Foutopsporingsprogramma's voor Windows kunt u bepalen of detours worden gebruikt. Ga hiervoor als volgt te werk.
Opmerking Deze methode altijd testen voordat u deze in de productie. Wanneer u de foutopsporingsprogramma's voor Windows gebruikt, reageert het proces tijdens het uitvoeren van de opdrachten. Dit probleem kan een productieserver nadelig beïnvloeden.
-
Debugging Tools for Windows koppelen aan SQL Server of een volledige dump-bestand laden.
-
Geef de volgende opdracht van de debugger. Met deze opdracht wordt elke afbeelding ten opzichte van de afbeelding op de schijf om te bepalen of detours hebben is geïnjecteerd.
!for_each_module "!chkimg -v @#Base -d"
-
Loskoppelen van de debugger.
Als u de foutopsporingsprogramma's voor Windows, gaat u naar de volgende Microsoft-website:
http://www.microsoft.com/whdc/devtools/debugging/default.mspxAls de afbeelding in het geheugen is gewijzigd, kan de output 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 assemblage om naar te kijken beter het probleem als volgt bekijken:
0:038> u ssnetlib!ConnectionClosessnetlib!ConnectionClose]:
0c263710 6800000000 push 0
0c263715 e9278ada03 jmp MyDLL!MyGetQueuedCompletionStatus <- A detour has been installed.
Antivirusprogramma's SQL injection-aanvallen bijhouden kunnen SQL Server-code detour. In dit scenario wordt de uitvoer van de! for_each_module '! chkimg - v @# baseren -d "extensie kan geven 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
Wij raden aan dat u contact opnemen met de leverancier van de detours of vergelijkbare technieken voor gedetailleerde informatie over de manier waarop de detours in SQL Server wordt gebruikt. Ga naar de volgende website van Microsoft Research Center voor meer informatie over detours en vergelijkbare technieken: