다음을 통해 공유


데이터베이스 엔진에 대한 네트워크 인증 프로세스 추적

이 문서에서는 클라이언트 애플리케이션과 SQL Server 데이터베이스 엔진(서버) 간의 TCP(Transmission Control Protocol) 연결 설정 프로세스 중에 다양한 핸드셰이크 및 인증 시퀀스를 캡처하는 네트워크 추적의 몇 가지 예를 제공합니다.

연결 닫는 방법에 대한 자세한 내용은 데이터베이스 엔진 네트워크 연결 닫기 시퀀스 추적을 참조하세요.

인증 유형

Windows 인증(Kerberos 또는 NTLM 인증 사용) 또는 SQL 인증을 사용하여 데이터베이스 엔진 연결할 수 있습니다.

이 문서에서는 MARS(다중 활성 결과 집합) 연결에 대해서도 설명합니다. MARS는 SQL Server 2005(9.x)에서 도입된 SQL Server의 기능으로, 두 번째 명령을 실행하기 전에 첫 번째 명령의 결과를 정리하지 않고도 연결에서 여러 명령을 실행할 수 있습니다. MARS는 SMUX(세션 멀티플렉싱)를 통해 달성됩니다.

이 프로세스에서는 SQL 인증을 사용하는 일반적인 로그인 프로세스를 설명하며, 자세한 네트워크 추적 분석을 통해 클라이언트와 서버 간의 대화의 각 단계를 보여 줍니다. 네트워크 추적 예제는 다음 단계를 설명합니다.

  1. TCP 3방향 핸드셰이크
  2. 드라이버 핸드셰이크
  3. SSL/TLS 핸드셰이크
  4. 로그인 패킷 교환
  5. 로그인 확인
  6. 명령을 실행하고 응답을 읽습니다.
  7. TCP 4방향 닫는 핸드셰이크

네트워크 추적 예제

이 교환은 연결 문자열 설정에 Login Timeout 관계없이 1초 동안 할당됩니다.

  • 클라이언트 IP 주소는 10.10.10.10
  • 서버 IP 주소는 10.10.10.120

1단계. TCP 3방향 핸드셰이크

모든 TCP 대화는 클라이언트에서 서버로 SYN 전송된 패킷(S 플래그 집합)으로 시작합니다. Frame 6127에서 클라이언트는 임시 포트(운영 체제에서 동적으로 할당됨)를 사용하고 서버 포트(이 경우 포트 1433)에 연결합니다. 서버는 플래그도 설정된 자체 SYN 패킷으로 ACK 회신합니다. 마지막으로 클라이언트는 패킷을 수신했음을 ACK 서버에 알리기 위해 패킷으로 SYN 응답합니다.

이 단계에서는 명령과 동일한 방식으로 telnet 기본 TCP 연결을 설정합니다. 운영 체제는 대화의 이 부분을 중재합니다. 이 시점에서 클라이언트와 서버는 서로에 대해 아무것도 알지 못합니다.

3방향 핸드셰이크의 다이어그램.

Frame Time Offset Source IP    Dest IP      Description
----- ----------- ------------ ------------ ---------------------------------------------------------------------------------------------------
6127  116.5776698 10.10.10.10  10.10.10.120 TCP:Flags=......S., SrcPort=60123, DstPort=1433, PayloadLen=0, Seq=4050702293, Ack=0, Win=8192 ( Ne
6128  116.5776698 10.10.10.120 10.10.10.10  TCP:Flags=...A..S., SrcPort=1433, DstPort=60123, PayloadLen=0, Seq=4095166896, Ack=4050702294, Win=
6129  116.5786458 10.10.10.10  10.10.10.120 TCP:Flags=...A...., SrcPort=60123, DstPort=1433, PayloadLen=0, Seq=4050702294, Ack=4095166897, Win=

이 단계에서 경고는 [Bad CheckSum] 무해하며 체크섬 오프로드사용하도록 설정된 표시기입니다. 즉, 추적이 수행되는 것보다 네트워크 스택의 하위 수준에서 추가됩니다. 다른 정보가 없는 경우 이 경고는 네트워크 추적이 클라이언트 또는 서버에서 수행되었는지 여부를 나타냅니다. 이 경우 초기 SYN 패킷에 표시되므로 클라이언트에서 추적이 수행되었습니다.

2단계. 드라이버 핸드셰이크

클라이언트 드라이버와 SQL Server 모두 서로에 대해 조금 알고 있어야 합니다. 이 핸드셰이크에서 드라이버는 서버에 몇 가지 정보와 요구 사항을 보냅니다. 이 정보에는 데이터 패킷 암호화 여부, MARS(다중 활성 결과 집합) 사용 여부, 해당 버전 번호, 페더레이션 인증 사용 여부, 연결 GUID 등이 포함됩니다.

서버는 인증이 필요한지 여부와 같은 정보로 응답합니다. 이 시퀀스는 모든 종류의 보안 협상이 수행되기 전에 발생합니다.

드라이버 핸드셰이크의 다이어그램.

Frame Time Offset Source IP    Dest IP      Description
----- ----------- ------------ ------------ ---------------------------------------------------------------------------------------------------
6130  116.5786458 10.10.10.10  10.10.10.120 TDS:Prelogin, Version = 7.1 (0x71000001), SPID = 0, PacketID = 0, Flags=...AP..., SrcPort=60123, Ds
6131  116.5805998 10.10.10.120 10.10.10.10  TDS:Response, Version = 7.1 (0x71000001), SPID = 0, PacketID = 1, Flags=...AP..., SrcPort=1433, Dst

3단계 SSL/TLS 핸드셰이크

SSL/TLS 핸드셰이크는 클라이언트 Hello 패킷과 서버 Hello 패킷 및 보안 채널과 관련된 몇 가지 추가 패킷으로 시작됩니다. 이 단계에서는 패킷 암호화를 위해 보안 키를 협상합니다. 일반적으로 로그인 패킷만 암호화되지만 클라이언트 또는 서버에서도 데이터 패킷을 암호화해야 할 수 있습니다. TLS 버전을 선택하는 작업은 로그인의 이 단계에서 수행됩니다. TLS 버전이 정렬되지 않거나 공통된 암호화 도구 모음이 없는 경우 클라이언트 또는 서버는 이 단계에서 연결을 닫을 수 있습니다.

SSL/TLS 핸드셰이크의 다이어그램.

Frame Time Offset Source IP    Dest IP      Description
----- ----------- ------------ ------------ ---------------------------------------------------------------------------------------------------
6132  116.5835288 10.10.10.10  10.10.10.120 TLS:TLS Rec Layer-1 HandShake: Client Hello. {TLS:328, SSLVersionSelector:327, TDS:326, TCP:325, IP
6133  116.5845058 10.10.10.120 10.10.10.10  TLS:TLS Rec Layer-1 HandShake: Server Hello. Certificate. Server Hello Done. {TLS:328, SSLVersionSe
6134  116.5864588 10.10.10.10  10.10.10.120 TLS:TLS Rec Layer-1 HandShake: Client Key Exchange.; TLS Rec Layer-2 Cipher Change Spec; TLS Rec La
6135  116.5923178 10.10.10.120 10.10.10.10  TLS:TLS Rec Layer-1 Cipher Change Spec; TLS Rec Layer-2 HandShake: Encrypted Handshake Message. {TL

4단계 로그인 패킷

이 패킷은 암호화되며 네트워크 파서에 따라 그대로 SSL Application Data 표시되거나 TDS:Data표시될 수 있습니다. 이 단계 이후의 모든 패킷이 다른 것으로 SSL Application Data표시되면 연결이 암호화됩니다.

SQL 로그인 다이어그램

Frame Time Offset Source IP    Dest IP      Description
----- ----------- ------------ ------------ ---------------------------------------------------------------------------------------------------
6136  116.5932948 10.10.10.10  10.10.10.120 TLS:TLS Rec Layer-1 SSL Application Data {TLS:328, SSLVersionSelector:327, TDS:326, TCP:325, IPv4:3

5단계 로그인 확인

그렇지 않으면 로그인을 확인하거나(로그인 토큰이 있음) ACK 클라이언트에 오류 메시지를 반환 Login Failed 하는 응답 패킷이 표시됩니다.

다음은 성공적인 로그인을 위해 패킷 16진수 데이터에 표시되는 내용의 예입니다.

.C.h.a.n.g.e.d. .d.a.t.a.b.a.s.e. .c.o.n.t.e.x.t. .t.o. .'.A.d.v.e.n.t.u.r.e.W.o.r.ks'

SQL 로그인 확인 다이어그램

Frame Time Offset Source IP    Dest IP      Description
----- ----------- ------------ ------------ ---------------------------------------------------------------------------------------------------
6137  116.5962248 10.10.10.120 10.10.10.10  TDS:Response, Version = 7.1 (0x71000001), SPID = 96, PacketID = 1, Flags=...AP..., SrcPort=1433, Ds

6단계 명령을 실행하고 응답을 읽습니다.

명령은 패킷 TDS:SQLBatch 으로 TDS:RPCRequest 전송됩니다. 전자는 일반 Transact-SQL 문을 실행하고 후자는 저장 프로시저를 실행합니다. 명령이 긴 경우 TCP 연속 패킷이 표시되거나, 몇 개 이상의 행이 반환되는 경우 응답 패킷에 표시될 수 있습니다.

Frame Time Offset Source IP    Dest IP      Description
----- ----------- ------------ ------------ ---------------------------------------------------------------------------------------------------
6138  116.5991538 10.10.10.10  10.10.10.120 TDS:SQLBatch, Version = 7.1 (0x71000001), SPID = 0, PacketID = 1, Flags=...AP..., SrcPort=60123, Ds
6139  116.5991538 10.10.10.120 10.10.10.10  TDS:Response, Version = 7.1 (0x71000001), SPID = 96, PacketID = 1, Flags=...AP..., SrcPort=1433, Ds
6266  116.8032558 10.10.10.10  10.10.10.120 TCP:Flags=...A...., SrcPort=60123, DstPort=1433, PayloadLen=0, Seq=4050702956, Ack=4095168204, Win=

7단계 TCP 4방향 닫는 핸드셰이크

Microsoft 드라이버는 4방향 핸드셰이크를 사용하여 연결을 닫습니다. 많은 타사 드라이버가 연결을 다시 설정하여 연결을 닫기만 하면 정상 및 비정상적인 닫기를 구별하기가 더 어려워집니다.

4방향 핸드셰이크는 서버가 응답하는 서버에 패킷을 보내는 FIN 클라이언트로 ACK구성됩니다. 그런 다음, 서버는 클라이언트가 승인하는 자체 FIN 패킷을 보냅니다(ACK).

서버가 패킷을 FIN 먼저 보내는 경우 클라이언트와 서버가 보안 채널을 협상할 수 없는 경우 SSL/TLS 핸드셰이크에서 가장 일반적으로 볼 수 있는 비정상적인 닫기입니다.

4방향 닫는 핸드셰이크의 다이어그램.

Frame Time Offset Source IP    Dest IP      Description
----- ----------- ------------ ------------ ---------------------------------------------------------------------------------------------------
6362  116.9097008 10.10.10.10  10.10.10.120 TCP:Flags=...A...F, SrcPort=60123, DstPort=1433, PayloadLen=0, Seq=4050702956, Ack=4095168204, Win=
6363  116.9097008 10.10.10.120 10.10.10.10  TCP:Flags=...A...., SrcPort=1433, DstPort=60123, PayloadLen=0, Seq=4095168204, Ack=4050702957, Win=
6364  116.9097008 10.10.10.120 10.10.10.10  TCP:Flags=...A...F, SrcPort=1433, DstPort=60123, PayloadLen=0, Seq=4095168204, Ack=4050702957, Win=
6366  116.9106778 10.10.10.10  10.10.10.120 TCP:Flags=...A...., SrcPort=60123, DstPort=1433, PayloadLen=0, Seq=4050702957, Ack=4095168205, Win=