Seguimiento del proceso de autenticación de red al Motor de base de datos

En este artículo se presentan varios ejemplos de un seguimiento de red que captura varios protocolos de enlace y secuencias de autenticación durante el proceso de establecimiento de conexiones del Protocolo de control de transmisión (TCP) entre una aplicación cliente y la Motor de base de datos de SQL Server (el servidor).

Para obtener información sobre cómo cerrar conexiones, consulte Seguimiento de la secuencia de cierre de la conexión de red en el Motor de base de datos.

Tipos de autenticación

Puede conectarse al Motor de base de datos con la autenticación de Windows (mediante la autenticación Kerberos o NTLM) o la autenticación SQL.

En este artículo también se describen varias conexiones de conjuntos de resultados activos (MARS). MARS es una característica de SQL Server, introducida con SQL Server 2005 (9.x), que permite ejecutar varios comandos en una conexión sin tener que limpiar los resultados del primer comando, antes de ejecutar el segundo comando. MARS se logra mediante multiplexación de sesión (SMUX).

Este proceso describe un proceso de inicio de sesión normal mediante la autenticación de SQL, que muestra cada paso de la conversación entre el cliente y el servidor a través de un análisis detallado de seguimiento de red. El seguimiento de red de ejemplo delimita los pasos siguientes:

  1. Protocolo de enlace de tres vías TCP
  2. Protocolo de enlace del controlador
  3. Protocolo de enlace SSL/TLS
  4. Intercambio de paquetes de inicio de sesión
  5. Confirmación de inicio de sesión
  6. Ejecutar un comando y leer la respuesta
  7. Protocolo de enlace de cierre bidireccional tcp

Ejemplo de seguimiento de red

Este intercambio se asigna a 1 segundo independientemente de la Login Timeout configuración del cadena de conexión.

  • La dirección IP del cliente es 10.10.10.10
  • La dirección IP del servidor es 10.10.10.120

Paso 1. Protocolo de enlace de tres vías TCP

Todas las conversaciones TCP comienzan con un SYN paquete (S conjunto de marcas) enviado desde el cliente al servidor. En Frame 6127, el cliente usa un puerto efímero (asignado dinámicamente por el sistema operativo) y se conecta al puerto del servidor, en este caso puerto 1433. El servidor responde con su propio SYN paquete con la ACK marca también establecida. Por último, el cliente responde con un ACK paquete para informar al servidor de que recibió su SYN paquete.

Este paso establece una conexión TCP básica, de la misma manera que lo haría un telnet comando. El sistema operativo media esta parte de la conversación. En este momento, el cliente y el servidor no saben nada sobre sí.

Diagrama de protocolo de enlace triple.

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=

En este paso, las [Bad CheckSum] advertencias son benignas y son un indicador de que la descarga de suma de comprobación está habilitada. Es decir, se agregan en un nivel inferior en la pila de red que se toma el seguimiento. En ausencia de otra información, esta advertencia indica si el seguimiento de red se realizó en el cliente o en el servidor. En este caso, aparece en el paquete inicial SYN , por lo que el seguimiento se realizó en el cliente.

Paso 2. Protocolo de enlace del controlador

Tanto el controlador de cliente como SQL Server deben conocer un poco entre sí. En este protocolo de enlace, el controlador envía información y requisitos al servidor. Esta información incluye si se van a cifrar paquetes de datos, si se deben usar varios conjuntos de resultados activos (MARS), su número de versión, si se va a usar la autenticación federada, el GUID de conexión, etc.

El servidor responde con su información, como si requiere autenticación. Esta secuencia se produce antes de realizar cualquier tipo de negociación de seguridad.

Diagrama del protocolo de enlace del controlador.

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

Paso 3. Protocolo de enlace SSL/TLS

El protocolo de enlace SSL/TLS comienza con el paquete Hello de cliente y, a continuación, el paquete Hello del servidor, además de algunos paquetes adicionales relacionados con el canal seguro. Este paso es donde se negocia la clave de seguridad para cifrar paquetes. Normalmente, solo se cifra el paquete de inicio de sesión, pero el cliente o el servidor podrían requerir que también se cifren los paquetes de datos. La elección de la versión de TLS se produce en esta fase del inicio de sesión. El cliente o el servidor pueden cerrar la conexión en esta fase si las versiones de TLS no se alinean o no tienen ningún conjunto de cifrado en común.

Diagrama del protocolo de enlace 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

Paso 4. Paquete de inicio de sesión

Este paquete está cifrado y puede mostrarse como SSL Application Data o TDS:Data, en función del analizador de red. Si todos los paquetes después de este paso también se muestran como SSL Application Data, la conexión se cifra.

Diagrama del inicio de sesión de 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

Paso 5. Confirmación de inicio de sesión

De lo contrario, verá un paquete de respuesta, que confirma el inicio de sesión (tiene el token de inicio ACK de sesión) o devuelve un Login Failed mensaje de error al cliente.

Este es un ejemplo de lo que puede ver en los datos hexadecimales del paquete para un inicio de sesión correcto:

.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'

Diagrama de confirmación de inicio de sesión de 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

Paso 6. Ejecutar un comando y leer la respuesta

Los comandos se envían como un TDS:SQLBatch TDS:RPCRequest paquete o . El primero ejecuta instrucciones Transact-SQL sin formato y esta última ejecuta procedimientos almacenados. Es posible que vea paquetes de continuación TCP si el comando es largo o en el paquete de respuesta si se devuelven más de unas pocas filas.

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=

Paso 7. Protocolo de enlace de cierre bidireccional tcp

Los controladores de Microsoft usan el protocolo de enlace bidireccional para cerrar las conexiones. Muchos controladores de terceros simplemente restablecen la conexión para cerrarla, lo que dificulta la distinción entre un cierre normal y anómalo.

El protocolo de enlace de cuatro vías consta del cliente que envía un FIN paquete al servidor, al que responde el servidor con un ACK. A continuación, el servidor envía su propio FIN paquete, que el cliente reconoce (ACK).

Si el servidor envía primero un FIN paquete, se trata de un cierre anómalo, que se suele ver en el protocolo de enlace SSL/TLS si el cliente y el servidor no pueden negociar el canal seguro.

Diagrama de protocolo de enlace de cierre bidireccional.

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=