Dela via


Omvägar eller liknande tekniker kan orsaka oväntade beteenden med SQL Server

Den här artikeln beskriver Microsofts supportprincip när du använder omvägar från tredje part med SQL Server och problem som kan uppstå när du använder dem.

Ursprunglig produktversion: SQL Server
Ursprungligt KB-nummer: 920925

Sammanfattning

Microsoft-supporten har stött på många produkter från tredje part som använder omvägar för att tillhandahålla ytterligare funktioner till SQL Server. Det här är vanligtvis granskningsfunktioner. Det finns ingen certifieringsprocess för tredjepartsavstickare för Microsoft-program. Därför avråder Microsoft i allmänhet starkt från att använda omvägar.

Funktioner som använder omvägar eller liknande tekniker för att ändra beteendet för SQL Server kan orsaka följande problem:

  • Prestandaproblem.
  • Felaktiga resultat.
  • Disk- och minnesskada.
  • Förlust av SQL Server-svar.
  • Oväntad processavslutning.
  • Det går inte att använda standarddiagnostik, till exempel funktionen fn_get_sql och DBCC INPUTBUFFER kommandot.
  • 100 procent processoranvändning och långa återställningstider för databaser när du använder minnesinterna OLTP-tabeller i SQL Server.

Du kan stöta på samma problem när du använder programvara som inte kommer från Microsoft, till exempel länkade servrar, utökade procedurer eller COM-objekt i SQL Server-processen. Omvägar är dolda från DBA-vyn. Om du vill upptäcka en omväg måste du använda de tekniker som beskrivs i avsnittet Mer information som följer. Länkade servrar, COM-objekt och utökade procedurer har explicit registrering och definierade gränssnitt.

Kommentar

På grund av den dolda naturen hos omvägar och bristen på publicerade gränssnitt tillhandahåller Microsoft inte supporttjänster för funktioner från tredje part som använder omvägar eller liknande tekniker. Den tredje parten ansvarar för stöd för sin egen kod, precis som den skulle ansvara för sin egen länkade server eller annan sanktionerad distribution.

I den vanliga felsökningen är det vanligt att Microsofts supporttjänster ber dig att inaktivera icke-nödvändiga jobb och att inaktivera eller ta bort komponenter från tredje part och andra liknande tekniker. Microsoft försöker alltid minska problemets fotavtryck medan det identifierar problemet. När problemet har identifierats som orelaterat till jobben eller produkter från tredje part kan dessa jobb eller produkter från tredje part introduceras i produktion igen.

Det är inte vår avsikt att upptäcka en omväg och sedan överväga att instansen av SQL Server inte stöds. Microsoft bekräftar att vissa implementeringar är nödvändiga. Microsoft kräver dock att du verifierar omvägarnas support. En omväg från ett välrenommerat och betrott företag skiljer sig definitivt från en oväntad omväg som används av ett virus. Microsoft garanterar eller certifierar inte dessa produkter från tredje part eller hur tredjepartsprodukter interagerar med Microsofts produkter och tjänster. I stället ansvarar tredjepartsleverantörer för identifiering och tillförlitlighet för sina produkter och tjänster. Om du har frågor om produkter och tjänster från tredje part kontaktar du den tredje parten. Microsoft ansvarar inte för problem som orsakas av din användning av produkter eller tjänster från tredje part i samband med SQL Server.

Mer information

Omvägar ger förbättrade funktioner och en risk-/belöningsavvägning. När en omväg implementeras i SQL Server matas vanligtvis kod från tredje part in i processutrymmet. Den här aktiviteten kan ändra beteendet för SQL Server.

Följande är några exempelsituationer och möjliga biverkningar:

  • Inkommande TDS-paket genomsöks och ändras. Omvägen läggs till på en kritisk plats i net_readdata nätverksprocesstråd. Även 100 CPU-cykler på den här platsen kan avsevärt minska batchhastighetens dataflöde.

    En ändring av faktiska TDS-data kan leda till minnesklotter. Det här problemet har utlöst olika problem med SQL Server-stabilitet och skadade data. Problem kan leda till att ett TDS-paket delvis ändras och att skräp spelas upp till SQL Server. Loggningsanläggningar på den här nivån kan exponera lösenord och andra känsliga data som SQL Server-spårning har utformats för att förhindra och skydda.

  • SQL Server-parsningsrutiner omvägs för att ändra beteende. Följande är möjliga biverkningar:

    • Körningsplaner matchar inte den faktiska frågetexten.
    • Ett kommando skickas bara en gång från klienten. Kommandot körs dock flera gånger.
    • Spårningsutdata visar det ursprungliga kommandot i stället för den ändrade frågan.
    • Kommandot DBCC INPUTBUFFER visar det ursprungliga kommandot i stället för den ändrade frågan.
    • Funktionen fn_get_sql visar felaktiga data. fn_get_sql Dessutom är funktionen känslig för undantag och felaktiga resultat. Funktionen fn_get_sql används av många övervakningslösningar och kan orsaka problem med övervakningslösningarna.
    • Schemaläggning av övergripande schemaläggning av användarläge (UMS) och SQL Server-operativsystem (SQLOS) kan avbrytas. Detta leder till förlust av SQL Server-svar, prestandaändringar och avbrott.
  • Win32-API:er som ger förbättrade säkerhetsfunktioner omdirigeras. Beroende på implementeringen kan loggningsanläggningar på den här nivån exponera lösenord och andra känsliga data. Övergripande UMS- och SQLOS-schemaläggning avbryts. Detta leder till förlust av SQL Server-svar och avbrott.

  • Ändring av funktionstabeller och omdirigering av sql server-kärnfunktioner eller Windows-API:er stöds inte i SQL Server-processen. Detta kan leda till instabilitet och oväntat beteende i SQL Server-funktionerna.

I följande exempel visas att kernel32!GetQueuedCompletionStatus funktionen har omvägts.

MyDLL!MyGetQueuedCompletionStatus
ssnetlib!ConnectionReadAsyncWait

I sammansättningen för GetQueuedCompletionStatus funktionen har den första instruktionen ersatts med en hoppinstruktion.

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

Sammansättningen för den inmatade koden visar den omvägda aktiviteten och ett anrop till MyDLL-filen .

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]

Du kan använda felsökningsverktyg för Windows för att avgöra om omvägar används. Följ stegen nedan.

Kommentar

Testa alltid den här metoden innan du provar den i produktion. När du använder felsökningsverktyg för Windows kan processen frysas när du kör kommandona. Det här beteendet kan påverka en produktionsserver negativt.

  1. Bifoga felsökningsverktyg för Windows till SQL Server eller läs in en fullständig användardumpningsfil.

  2. Utfärda följande felsökningskommando. Det här kommandot inspekterar varje avbildning mot avbildningen på disken för att avgöra om omvägar har injicerats.

    !for_each_module "!chkimg -v @#Base -d"
    
  3. Koppla från felsökningsprogrammet.

Om den minnesinterna bilden har ändrats kan utdata likna följande:

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)

Du kan granska sammansättningen för att titta närmare på problemet på följande sätt:

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

Antivirusprogram som spårar SQL-inmatningsattacker kan omkoppla SQL Server-kod. I det här scenariot kan utdata från !for_each_module "!chkimg -v @#Base -d" tillägget visa att SQL Server-funktionerna yyparse och ex_raise2 ändras:

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

Vi rekommenderar att du kontaktar leverantören av omvägar eller liknande tekniker för detaljerad information om hur den använder omvägarna i SQL Server. Mer information om omvägar och liknande tekniker finns i Omvägar.