Отмена или аналогичные методы могут привести к непредвиденным поведению с SQL Server
В этой статье описывается политика поддержки Майкрософт при использовании сторонних обходов с SQL Server и проблем, которые могут возникнуть при их использовании.
Исходная версия продукта: SQL Server
Исходный номер базы знаний: 920925
Итоги
Поддержка Майкрософт столкнулась с многочисленными сторонними продуктами, которые используют обходы для предоставления дополнительных функций SQL Server. Обычно это функции аудита. Для сторонних приложений нет процесса сертификации. Поэтому, как правило, корпорация Майкрософт настоятельно не рекомендует использовать обходы.
Функции, использующие обходы или аналогичные методы для изменения поведения SQL Server, могут вызвать следующие проблемы:
- Проблемы с производительностью.
- Неверные результаты.
- Повреждение диска и памяти.
- Потеря ответа SQL Server.
- Непредвиденное завершение процесса.
- Неспособность использовать стандартную диагностика, например функцию fn_get_sql и
DBCC INPUTBUFFER
команду. - 100 процентов загрузки ЦП и длительное время восстановления базы данных при использовании таблиц OLTP в памяти в SQL Server.
Эти же проблемы могут возникнуть при использовании программного обеспечения, отличного от Майкрософт, таких как связанные серверы, расширенные процедуры или com-объекты в процессе SQL Server. Обходы скрыты из представления DBA. Чтобы выявить обход, необходимо использовать методы, описанные в разделе "Дополнительные сведения ", которое описано ниже. Связанные серверы, com-объекты и расширенные процедуры имеют явную регистрацию и определенные интерфейсы.
Примечание.
Из-за скрытого характера обхода и отсутствия опубликованных интерфейсов корпорация Майкрософт не предоставляет службы поддержки сторонних функций, использующих обходы или аналогичные методы. Третья сторона несет ответственность за поддержку собственного кода, так же как и за собственное связанное сервер или другое санкционированное развертывание.
В обычном процессе устранения неполадок службам поддержки Майкрософт рекомендуется отключить никакие задания и отключить или удалить сторонние компоненты и другие аналогичные методы. Корпорация Майкрософт всегда пытается сократить объем проблемы при выявлении проблемы. После того как проблема будет определена как не связанная с рабочими местами или сторонними продуктами, эти рабочие места или сторонние продукты могут быть введены обратно в рабочую среду.
Это не наше намерение выявить обход, а затем рассмотреть экземпляр SQL Server, который будет неподдерживаем. Корпорация Майкрософт признает, что некоторые реализации необходимы. Тем не менее, корпорация Майкрософт требует проверить поддержку обходов. Обход от авторитетной и доверенной компании, безусловно, отличается от неожиданного обхода, который используется вирусом. Корпорация Майкрософт не гарантирует или сертифицировать эти сторонние продукты или как сторонние продукты взаимодействуют с продуктами и службами Майкрософт. Вместо этого сторонние поставщики отвечают за идентификацию и надежность своих продуктов и услуг. Если у вас есть вопросы о сторонних продуктах и услугах, обратитесь к применимой стороне. Корпорация Майкрософт не несет ответственности за какие-либо проблемы, вызванные использованием сторонних продуктов или служб в связи с SQL Server.
Дополнительная информация
Детуры обеспечивают расширенные возможности и компромисс между рисками и вознаграждениями. Как правило, при выполнении обхода в SQL Server сторонний код внедряется в пространство процесса. Это действие может изменить поведение SQL Server.
Ниже приведены некоторые примеры ситуаций и возможные побочные эффекты:
Входящие пакеты сетевого трафика (TDS) сканируются и изменяются. Переход добавляется в критическое расположение в потоке сетевого процесса net_readdata. Даже 100 циклов ЦП в этом расположении может значительно сократить пропускную способность пакетной частоты.
Изменение фактических данных TDS может привести к scribblers памяти. Эта проблема вызвала различные проблемы стабильности SQL Server и повреждение данных. Проблемы могут привести к частичному изменению пакета TDS и повторному воспроизведению мусора в SQL Server. Средства ведения журнала на этом уровне могут предоставлять пароли и другие конфиденциальные данные, которые трассировка SQL Server предназначена для подавления и защиты.
Процедуры синтаксического анализа SQL Server отклоняются для изменения поведения. Ниже приведены возможны побочные эффекты:
- Планы выполнения не соответствуют фактическому тексту запроса.
- Команда отправляется только один раз от клиента. Однако команда выполняется несколько раз.
- Выходные данные трассировки показывают исходную команду вместо измененного запроса.
- Эта
DBCC INPUTBUFFER
команда отображает исходную команду вместо измененного запроса. - Функция отображает неверные
fn_get_sql
данные. Кроме того,fn_get_sql
функция подвержена исключениям и неверным результатам. Функцияfn_get_sql
используется многими решениями мониторинга и может привести к проблемам в решениях мониторинга. - Общий планировщик пользовательского режима (UMS) и планирование операционной системы SQL Server (SQLOS) могут быть прерваны. Это приводит к потере ответа SQL Server, изменениям производительности и сбоям.
Интерфейсы API Win32, обеспечивающие расширенные функции безопасности, удаляются. В зависимости от реализации средства ведения журнала на этом уровне могут предоставлять пароли и другие конфиденциальные данные. Общее планирование UMS и SQLOS прерывается. Это приводит к потере ответа SQL Server и сбоям.
Изменение таблиц функций и перенаправление основных функций SQL Server или API Windows не поддерживаются в процессе SQL Server. Это может привести к нестабильности и неожиданному поведению в функциональных возможностях SQL Server.
В следующем примере показано, что kernel32!GetQueuedCompletionStatus
функция была удалена.
MyDLL!MyGetQueuedCompletionStatus
ssnetlib!ConnectionReadAsyncWait
В сборке для GetQueuedCompletionStatus
функции первая инструкция была заменена инструкцией перехода.
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
Сборка для внедренного кода показывает отложенное действие и вызов файла 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]
Средства отладки для Windows можно использовать для определения того, используются ли обходы. Для этого требуется выполнить следующие шаги.
Примечание.
Всегда тестируйте этот метод, прежде чем попробовать его в рабочей среде. При использовании средств отладки для Windows процесс может заморозить при выполнении команд. Это поведение может негативно повлиять на рабочий сервер.
Подключите средства отладки для Windows к SQL Server или загрузите полный файл дампа пользователя.
Выполните следующую команду отладчика. Эта команда проверяет каждый образ на диске, чтобы определить, были ли введены обходы.
!for_each_module "!chkimg -v @#Base -d"
Отсоедините отладчик.
Если изображение в памяти было изменено, выходные данные могут выглядеть следующим образом:
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)
Вы можете ознакомиться с сборкой, чтобы более подробно рассмотреть проблему следующим образом:
0:038> u ssnetlib!ConnectionClose
ssnetlib!ConnectionClose]:
0c263710 6800000000 push 0
0c263715 e9278ada03 jmp MyDLL!MyGetQueuedCompletionStatus <- A detour has been installed.
Антивирусная программа, отслеживающая атаки на внедрение SQL, может отсутить код SQL Server. В этом сценарии выходные данные !for_each_module "!chkimg -v @#Base -d"
расширения могут показать, что функции yyparse
SQL Server и ex_raise2
изменяются:
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. Дополнительные сведения о обходах и аналогичных методах см. в разделе Detours.