Dolambaçlı veya benzer teknikler, SQL Server ile beklenmeyen davranışlara neden olabilir

Bu makalede, SQL Server ile üçüncü taraf detours kullandığınızda Microsoft destek ilkesi ve bunları kullandığınızda oluşabilecek sorunlar açıklanmaktadır.

Özgün ürün sürümü: SQL Server
Özgün KB numarası: 920925

Özet

Microsoft desteği, SQL Server ek işlevler sağlamak için detours kullanan çok sayıda üçüncü taraf ürünle karşılaştı. Bunlar genellikle denetim işlevleridir. Microsoft uygulamaları için üçüncü taraf saptırma işlemleri için bir sertifikasyon işlemi yoktur. Bu nedenle, microsoft genellikle dolambaçlı kullanımları kesinlikle önerilmez.

SQL Server davranışını değiştirmek için detours veya benzer teknikler kullanan özellikler aşağıdaki sorunlara neden olabilir:

  • Performans sorunları.
  • Yanlış sonuçlar.
  • Disk ve bellek bozulması.
  • SQL Server yanıtı kaybı.
  • Beklenmeyen işlem sonlandırma.
  • fn_get_sql işlevi ve komutu gibi standart tanılamaları kullanamama DBCC INPUTBUFFER .
  • SQL Server bellek içi OLTP tablolarını kullandığınızda yüzde 100 CPU kullanımı ve uzun veritabanı kurtarma süreleri.

SQL Server işlemi içinde bağlı sunucular, genişletilmiş yordamlar veya COM nesneleri gibi Microsoft dışı yazılımlar kullanırken de bu sorunlarla karşılaşabilirsiniz. Detours, DBA görünümünden gizlenir. Bir dolambaçlı yolu ortaya çıkarmak için, aşağıdaki Daha Fazla Bilgi bölümünde açıklanan teknikleri kullanmanız gerekir. Bağlı sunucular, COM nesneleri ve genişletilmiş yordamlar açık kayıt ve tanımlı arabirimlere sahiptir.

Not

Microsoft, detours'un gizli doğası ve yayımlanmış arabirimlerin olmaması nedeniyle, dolambaçlı veya benzer teknikler kullanan üçüncü taraf özellikler için destek hizmetleri sağlamaz. Üçüncü taraf, kendi bağlı sunucusundan veya diğer tasdikli dağıtımdan sorumlu olacağı gibi kendi kodunun desteklerinden sorumludur.

Microsoft destek hizmetlerinin her zamanki sorun giderme kursunda, gereksiz işleri devre dışı bırakmanızı ve üçüncü taraf bileşenleri ve diğer benzer teknikleri devre dışı bırakmanızı veya kaldırmanızı istemesi yaygın bir uygulamadır. Microsoft her zaman sorunu tanımlarken sorunun ayak izini azaltmaya çalışır. Sorun, işlerle veya üçüncü taraf ürünlerle ilgisiz olarak belirlendikten sonra, söz konusu işler veya üçüncü taraf ürünler üretime geri alınabilir.

Amacımız bir sapmayı ortaya çıkarmak ve ardından SQL Server örneğinin desteklenmediğini düşünmek değildir. Microsoft, bazı uygulamaların gerekli olduğunu kabul eder. Ancak Microsoft, dolambaçların desteklenebilirliğini doğrulamanızı gerektirir. Saygın ve güvenilir bir şirketten gelen bir dolambaçlı yol, bir virüs tarafından kullanılan beklenmeyen bir dolambaçtan kesinlikle farklıdır. Microsoft, bu üçüncü taraf ürünleri veya üçüncü taraf ürünlerinin Microsoft ürün ve hizmetleriyle nasıl etkileşim kurdığını garanti etmez veya onaylamaz. Bunun yerine, üçüncü taraf satıcılar ürünlerinin ve hizmetlerinin tanımlanmasından ve güvenilirliğinden sorumludur. Üçüncü taraf ürünler ve hizmetler hakkında sorularınız varsa lütfen ilgili üçüncü tarafa ulaşın. Microsoft, SQL Server ile bağlantılı olarak üçüncü taraf ürün veya hizmetleri kullanımınızdan kaynaklanan herhangi bir sorundan sorumlu değildir.

Daha fazla bilgi

Detours gelişmiş özellikler ve bir risk/ödül denge sağlar. Genellikle, SQL Server'da bir dolambaç uygulandığında, işlem alanına üçüncü taraf kodu eklenir. Bu etkinlik SQL Server davranışını değiştirebilir.

Bazı örnek durumlar ve olası yan etkiler aşağıda verilmiştir:

  • Gelen ağ trafiği (TDS) paketleri taranır ve değiştirilir. Detour, net_readdata ağ işlemi iş parçacığında kritik bir konuma eklenir. Bu konumdaki 100 CPU döngüsü bile toplu iş hızı aktarım hızını önemli ölçüde azaltabilir.

    Gerçek TDS verilerinde bir değişiklik bellek scribblers yol açabilir. Bu sorun çeşitli SQL Server kararlılık sorunlarını ve veri bozulmasına neden olmuştur. Sorunlar bir TDS paketinin kısmen değiştirilmesine ve çöpleri SQL Server yeniden yürütmesine neden olabilir. Bu düzeydeki günlüğe kaydetme özellikleri, parolaları ve SQL Server izlemenin gizlenecek ve güvenli bir şekilde korunmasına yardımcı olacak şekilde tasarlanan diğer hassas verileri kullanıma sunabilir.

  • SQL Server ayrıştırma yordamları davranışı değiştirmek için değiştirilir. Olası yan etkiler şunlardır:

    • Yürütme planları gerçek sorgu metniyle eşleşmiyor.
    • İstemciden yalnızca bir kez bir komut gönderilir. Ancak, komut birden çok kez yürütülür.
    • İzleme çıkışı, değiştirilen sorgu yerine özgün komutu gösterir.
    • komutu DBCC INPUTBUFFER , değiştirilen sorgu yerine özgün komutu gösterir.
    • fn_get_sql İşlev yanlış veriler gösteriyor. Ayrıca işlev özel fn_get_sql durumlara ve yanlış sonuçlara duyarlıdır. fn_get_sql İşlev birçok izleme çözümü tarafından kullanılır ve izleme çözümlerinde sorunlara neden olabilir.
    • Genel Kullanıcı Modu Zamanlayıcı (UMS) ve SQL Server İşletim Sistemi (SQLOS) zamanlaması kesintiye uğrayabilir. Bu, SQL Server yanıt kaybına, performans değişikliklerine ve kesintilere yol açar.
  • Gelişmiş güvenlik özellikleri sağlayan Win32 API'leri saptırılır. Uygulamaya bağlı olarak, bu düzeydeki günlüğe kaydetme özellikleri parolaları ve diğer hassas verileri kullanıma açabilir. Genel UMS ve SQLOS zamanlaması kesintiye uğrar. Bu, SQL Server yanıt kaybına ve kesintilere yol açar.

  • İşlev tablolarının değiştirilmesi ve çekirdek SQL Server işlevlerinin veya Windows API'lerinin yeniden yönlendirilmesi SQL Server işlemde desteklenmez. Bu, SQL Server işlevselliğinde dengesizliğe ve beklenmeyen davranışlara yol açabilir.

Aşağıdaki örnekte işlevin kernel32!GetQueuedCompletionStatus saptırıldığı gösterilmektedir.

MyDLL!MyGetQueuedCompletionStatus
ssnetlib!ConnectionReadAsyncWait

İşlevin derlemesinde GetQueuedCompletionStatus , ilk yönerge bir atlama yönergesiyle değiştirilmiştir.

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

Eklenen kodun derlemesi, dolambaçlı etkinliği ve MyDLL dosyasına yapılan çağrıyı gösterir.

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]

Sapmaların kullanılıp kullanılmadığını belirlemek için Windows için Hata Ayıklama Araçları'nı kullanabilirsiniz. Bunu yapmak için şu adımları uygulayın.

Not

Üretimde denemeden önce her zaman bu yöntemi test edin. Windows için Hata Ayıklama Araçları'nı kullandığınızda, komutları çalıştırdığınızda işlem donabilir. Bu davranış bir üretim sunucusunu olumsuz etkileyebilir.

  1. SQL Server veya tam kullanıcı döküm dosyası yüklemek için Windows için Hata Ayıklama Araçları ekleyin.

  2. Aşağıdaki hata ayıklayıcısı komutunu çalıştırın. Bu komut, her görüntüyü disk üzerindeki görüntüde inceler ve detours'un eklenmiş olup olmadığını belirler.

    !for_each_module "!chkimg -v @#Base -d"
    
  3. Hata ayıklayıcısını ayırma.

Bellek içi görüntü değiştirilmişse çıkış aşağıdakine benzer olabilir:

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)

Derlemeyi gözden geçirerek soruna aşağıdaki gibi daha yakından bakabilirsiniz:

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

SQL ekleme saldırılarını izleyen virüsten koruma programları SQL Server kodun saptırılabilir. Bu senaryoda, uzantının !for_each_module "!chkimg -v @#Base -d" çıktısı SQL Server işlev gösterdiğini yyparse ve ex_raise2 değiştirildiğini gösterebilir:

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

SQL Server'da dolambaçları nasıl kullandığı hakkında ayrıntılı bilgi için detours veya benzer tekniklerin sağlayıcısına başvurmanızı öneririz. Dolambaçlı yollar ve benzer teknikler hakkında daha fazla bilgi için bkz. Detours.