DetailPage-MSS-KB

기술 자료

기술 자료: 920925 - 마지막 검토: 2014년 5월 7일 수요일 - 수정: 3.0

 

요약

자유롭게 또는 유사한 기술을 사용 하 여 Microsoft SQL Server 동작을 변경 하는 기능에 다음과 같은 문제가 발생할 수 있습니다.
  • 성능 문제
  • 잘못 된 결과
  • 디스크 및 메모리 손상
  • SQL Server 응답의 손실
  • 예기치 않은 프로세스 종료
  • Fn_get_sql 함수 및 DBCC inputbuffer가 지워지기 명령 표준 진단 유틸리티를 사용할 수 없음으로
  • 향상 된 가능성을 보안 문제
참고 Microsoft는 자유롭게 또는 유사한 기술을 사용 하 여 SQL Server 동작을 변경할 수 있는 타사 기능에 대 한 지원 서비스를 제공 하지 않습니다. 사용 하는 SQL Server 기술 지원부에서 SQL Server 문제를 자유롭게 또는 SQL Server 동작을 변경 하는 비슷한 기술을 포함 될 수 있는 확인 된 경우 지원 전문가가 사용 하지 않으려면 또는 문제 해결 단계로 자유롭게 또는 유사한 기능을 제거할 수 묻습니다. 추가 문제 해결 발생 하기 전에 모든 detour 기능은 제공 하지 않고 보고 된 문제를 재현해 야 합니다. 문제가 더 이상 발생 해야 제 기능을 공급 업체에 문의 하 고 해당 공급 업체의 방향이 문제 해결을 계속 좋습니다 수 없습니다.

추가 정보

우회는 강력 합니다. 자유롭게 위험/보상 균형을 조절 하 고 향상 된 기능을 제공합니다. 일반적으로 SQL Server 구현 되는 detour 해당 코드 프로세스 공간에 삽입 됩니다. SQL Server 메서드 또는 함수를 가로채 집니다. 이 이때는 SQL Server 기본 성능 동작을 변경할 수 있습니다.

다음은 일부 예제에서는 상황 및 가능한 부작용입니다.
  • 들어오는 네트워크 트래픽 (TDS) 패킷의 검색 되어 변경 됩니다. Detour의 net_readdata 네트워크 프로세스 스레드에서 중요 한 위치에 추가 됩니다. 이 위치에서 일부 100 CPU 주기를 일괄 처리 속도 처리량을 크게 줄일 수 있습니다.

    메모리 scribblers 실제 TDS 데이터가 변경 될 수 있습니다. 이 문제가 여러 SQL Server 안정성 문제가 트리거된 및 데이터 손상에서. 문제는 부분적으로 변경 하 고 재생 하려면 SQL Server 가비지 TDS 패킷을 발생할 수 있습니다. 로깅이 수준에서 기능 노출 될 수 있습니다 암호 및 기타 중요 한 데이터는 SQL Server 추적 억제 하 고 안전 하 게 설계 되었습니다.
  • SQL Server 구문 분석 루틴은 동작을 변경 하려면 detoured. 다음은 가능한 부작용입니다.
    • 실행 계획이 실제 쿼리 텍스트를 일치 하지 않습니다.
    • 명령은 한 번만 클라이언트에서 전송 됩니다. 그러나 명령은 여러 번 실행 합니다.
    • 추적 출력이 변경 된 쿼리 대신 원본 명령을 보여 줍니다.
    • DBCC inputbuffer가 지워지기 명령 변경 된 쿼리 대신 원본 명령을 보여 줍니다.
    • Fn_get_sql 함수는 잘못 된 데이터를 표시합니다. 또한 fn_get_sql 함수는 예외를 잘못 된 결과를 받기 쉽습니다. Fn_get_sql 함수에 의해 많은 모니터링 솔루션이 사용 되 고 모니터링 솔루션에서 문제가 발생할 수 있습니다.
    • 전체 사용자 모드 스케줄러 (UMS) 및 SQL Server 운영 체제 (SQLOS) 예약 중단 될 수 있습니다. 이렇게 하면 SQL Server 응답 손실, 성능 변경 및 중단.
  • 향상 된 보안 기능을 제공 하는 Win32 Api detoured 됩니다. 구현에 따라이 수준에서 로깅 기능 암호 및 기타 중요 한 데이터가 노출 될 수 있습니다. 전체 일정 SQLOS 및 UMS 중단 됩니다. 이 SQL Server 응답 손실 하 고 서비스 중단 안내.
  • 핵심 SQL Server 기능 또는 Windows API 리디렉션 및 함수 테이블 수정 SQL Server 프로세스 내에서 지원 되지 않습니다. SQL Server 기능은 안정성 문제 및 예기치 않은 동작이 발생할 수 있습니다.
다음 예제는 kernel32!GetQueuedCompletionStatus 함수 detoured 되었습니다.
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
삽입된 된 코드에 대 한 어셈블리 detoured 활동과 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 용 디버깅 도구를 사용 하면 명령을 실행할 때 프로세스가 중지 될 수 있습니다. 이 동작은 프로덕션 서버에 저하 될 수 있습니다.
  1. Windows 용 디버깅 도구를 SQL Server 연결 하거나 전체 사용자 덤프 파일을 로드 합니다.
  2. 다음 디버거 명령을 실행 합니다. 이 명령은 각 이미지는 자유롭게 삽입 되었는지 여부를 확인 하려면 디스크 이미지에 대해 검사 합니다.
    !for_each_module "!chkimg -v @#Base -d"
  3. 디버거를 분리 합니다.
Windows 용 디버깅 도구를 구하려면 다음 Microsoft 웹 사이트를 방문.
http://www.microsoft.com/whdc/devtools/debugging/default.mspx (http://www.microsoft.com/whdc/devtools/debugging/default.mspx)
메모리에 이미지 변경 되었다면, 출력 다음과 유사할 수 있습니다.
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 코드를 detour 수 있습니다. 이 시나리오에서는 출력의! for_each_module "! chkimg-v @# Base-d" 확장 SQL Server 함수 yyparse 및 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 자유롭게 또는 유사한 기술을 사용 하는 방법에 대 한 정보를 문의 하는 것이 좋습니다. 우회와 유사한 기술에 대 한 자세한 내용은 다음 Microsoft 연구 센터 웹 사이트를 방문 하십시오.
http://research.microsoft.com/sn/detours (http://research.microsoft.com/sn/detours/)

본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL Server 2005 Express Edition with Advanced Services
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Workgroup Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Standard X64 Edition
  • Microsoft SQL Server 2005 Enterprise X64 Edition
  • Microsoft SQL Server 2005 Standard Edition for Itanium Based Systems
  • Microsoft SQL Server 2005 Enterprise Edition for Itanium Based Systems
  • Microsoft SQL Server 2000 Personal Edition
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 2000 Workgroup Edition
  • Microsoft SQL Server 2000 Developer Edition
  • Microsoft SQL Server 2000 Enterprise Edition
  • Microsoft SQL Server 2008 Developer
  • Microsoft SQL Server 2008 Enterprise
  • Microsoft SQL Server 2008 Express
  • Microsoft SQL Server 2008 R2 Datacenter
  • Microsoft SQL Server 2008 R2 Developer
  • Microsoft SQL Server 2008 R2 Enterprise
  • Microsoft SQL Server 2008 R2 Express
  • Microsoft SQL Server 2008 R2 Standard
  • Microsoft SQL Server 2008 R2 Web
  • Microsoft SQL Server 2008 R2 Workgroup
  • Microsoft SQL Server 2008 Web
  • Microsoft SQL Server 2008 Workgroup
  • Microsoft SQL Server 2012 Developer
  • Microsoft SQL Server 2012 Enterprise
  • Microsoft SQL Server 2012 Express
  • Microsoft SQL Server 2012 Standard
  • Microsoft SQL Server 2012 Web
  • SQL Server 2012 Enterprise Core
  • Microsoft SQL Server 2014 Developer
  • Microsoft SQL Server 2014 Enterprise
  • Microsoft SQL Server 2014 Express
  • Microsoft SQL Server 2014 Standard
  • Microsoft SQL Server 2014 Web
키워드: 
kbtshoot kbexpertiseadvanced kbinfo kbmt KB920925 KbMtko
기계 번역된 문서기계 번역된 문서
이 문서는 Microsoft 기계 번역 소프트웨어를 이용하여 번역되었으며 Microsoft Community에 의한 Community Translation Framework(CTF) 기술 혹은 사람이 번역한 내용에 의하여 사후 편집될 수 있습니다. Microsoft는 Knowledge Base에 있는 모든 문서에 다양한 언어로 접근할 수 있도록 하기 위하여 기계 번역, 사람에 의한 번역 및 커뮤니티가 편집한 내용을 모두 제공합니다. 번역된 문서는 어휘, 구문 및/혹은 문법에 오류가 있을 수 있습니다. Microsoft는 번역 오류로 인한 부정확성, 오류 및/또는 손해와 이를 고객이 사용하는 데에 대하여 책임을 지지 않습니다.
이 문서의 영문 버전 보기:920925  (http://support.microsoft.com/kb/920925/en-us/ )
공유
추가 지원 옵션
Microsoft Community 지원 포럼
직접 문의하기
Microsoft Certified Partner 찾기
Microsoft Store
소기업이 아닙니까?
다음에서 팔로우하십시오.