Verfolgen des Netzwerkauthentifizierungsprozesses auf die Datenbank-Engine

Dieser Artikel enthält mehrere Beispiele für eine Netzwerkablaufverfolgung, die verschiedene Handshakes und Authentifizierungssequenzen während des TCP-Verbindungsaufbauprozesses (Transmission Control Protocol) zwischen einer Clientanwendung und dem SQL Server-Datenbank-Engine (dem Server) erfasst.

Informationen zum Schließen von Verbindungen finden Sie unter Nachverfolgen der Verbindungsschließsequenz für die Netzwerkverbindung auf dem Datenbank-Engine.

Authentifizierungstypen

Sie können eine Verbindung mit der Datenbank-Engine mit der Windows-Authentifizierung (mit Kerberos- oder NTLM-Authentifizierung) oder sql-Authentifizierung herstellen.

In diesem Artikel werden auch mehrere Active Result Sets (MARS)-Verbindungen beschrieben. MARS ist ein Feature von SQL Server, das mit SQL Server 2005 (9.x) eingeführt wurde, mit dem mehrere Befehle auf einer Verbindung ausgeführt werden können, ohne die Ergebnisse des ersten Befehls bereinigen zu müssen, bevor der zweite Befehl ausgeführt wird. MARS wird durch Session Multiplexing (SMUX) erreicht.

Dieser Prozess beschreibt einen normalen Anmeldevorgang mithilfe der SQL-Authentifizierung und zeigt jeden Schritt der Unterhaltung zwischen Client und Server über eine detaillierte Netzwerkablaufverfolgungsanalyse an. Im Beispiel für die Netzwerkablaufverfolgung werden die folgenden Schritte beschrieben:

  1. TCP-Drei-Wege-Handshake
  2. Fahrer-Handshake
  3. SSL/TLS Handshake
  4. Anmelden des Paketaustauschs
  5. Anmeldebestätigung
  6. Ausführen eines Befehls und Lesen der Antwort
  7. TCP-Vier-Wege-Schließen von Handshake

Beispiel für die Netzwerkablaufverfolgung

Dieser Austausch wird unabhängig von der Login Timeout Einstellung im Verbindungszeichenfolge 1 Sekunde zugewiesen.

  • Die Client-IP-Adresse ist 10.10.10.10
  • Die Server-IP-Adresse ist 10.10.10.120

Schritt 1. TCP-Drei-Wege-Handshake

Alle TCP-Unterhaltungen beginnen mit einem SYN Paket (S Flagsatz), das vom Client an den Server gesendet wird. In Frame 6127verwendet der Client einen kurzlebigen Port (dynamisch vom Betriebssystem zugewiesen) und stellt in diesem Fall eine Verbindung 1433mit dem Serverport sicher. Der Server antwortet mit seinem eigenen SYN Paket, bei dem auch das ACK Flag festgelegt ist. Schließlich antwortet der Client mit einem ACK Paket, um dem Server mitzuteilen, dass es sein SYN Paket empfangen hat.

In diesem Schritt wird eine grundlegende TCP-Verbindung hergestellt, und zwar auf die gleiche Weise wie ein telnet Befehl. Das Betriebssystem vermittelt diesen Teil der Unterhaltung. An dieser Stelle wissen der Client und der Server nichts übereinander.

Diagramm des Drei-Wege-Handshakes.

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=

In diesem Schritt sind die [Bad CheckSum] Warnungen gutartig und ein Indikator, dass die Prüfsummenabladung aktiviert ist. Das heißt, sie werden auf einer niedrigeren Ebene im Netzwerkstapel hinzugefügt, als die Ablaufverfolgung übernommen wird. Wenn keine anderen Informationen vorhanden sind, gibt diese Warnung an, ob die Netzwerkablaufverfolgung auf dem Client oder auf dem Server ausgeführt wurde. In diesem Fall wird sie im ursprünglichen SYN Paket angezeigt, sodass die Ablaufverfolgung auf dem Client übernommen wurde.

Schritt 2. Fahrer-Handshake

Sowohl der Clienttreiber als auch sql Server müssen sich ein wenig übereinander informieren. In diesem Handshake sendet der Treiber einige Informationen und Anforderungen an den Server. Diese Informationen umfassen, ob Datenpakete verschlüsselt werden sollen, ob mehrere aktive Resultsets (MARS), dessen Versionsnummer verwendet werden sollen, ob Verbundauthentifizierung, Verbindungs-GUID usw. verwendet werden soll.

Der Server antwortet mit seinen Informationen, z. B. ob er eine Authentifizierung erfordert. Diese Sequenz geschieht, bevor eine Art von Sicherheitsverhandlung ausgeführt wird.

Diagramm des Treibers handshake.

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

Schritt 3. SSL/TLS Handshake

Der SSL/TLS-Handshake beginnt mit dem Client Hello-Paket und dann mit dem Server Hello-Paket sowie einigen zusätzlichen Paketen im Zusammenhang mit Secure Channel. In diesem Schritt wird der Sicherheitsschlüssel für die Verschlüsselung von Paketen ausgehandelt. Normalerweise ist nur das Anmeldepaket verschlüsselt, aber der Client oder der Server kann auch Datenpakete verschlüsselt werden. Die Auswahl der TLS-Version erfolgt in dieser Phase der Anmeldung. Der Client oder Server kann die Verbindung in dieser Phase schließen, wenn die TLS-Versionen nicht aneinander ausgerichtet sind oder keine Verschlüsselungssammlungen gemeinsam haben.

Diagramm des SSL/TLS-Handshakes.

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

Schritt 4. Anmeldepaket

Dieses Paket ist verschlüsselt und kann je nach Netzwerkparser als SSL Application Data oder TDS:Data, je nach Netzwerkparser, angezeigt werden. Wenn alle Pakete nach diesem Schritt auch als SSL Application Dataangezeigt werden, wird die Verbindung verschlüsselt.

Diagramm der SQL-Anmeldung.

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

Schritt 5. Anmeldebestätigung

Andernfalls wird ein Antwortpaket angezeigt, das entweder die Anmeldung bestätigt (das Anmeldetoken ACK hat) oder eine Login Failed Fehlermeldung an den Client zurückgibt.

Nachfolgend finden Sie ein Beispiel dafür, was Sie in den Paket hexadezimalen Daten für eine erfolgreiche Anmeldung sehen können:

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

Diagramm der SQL-Anmeldebestätigung.

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

Schritt 6. Ausführen eines Befehls und Lesen der Antwort

Befehle werden entweder als Paket TDS:SQLBatch oder als TDS:RPCRequest Paket gesendet. Der frühere Führt einfache Transact-SQL-Anweisungen aus, und letztere führt gespeicherte Prozeduren aus. Möglicherweise werden TCP-Fortsetzungspakete angezeigt, wenn der Befehl lang ist, oder im Antwortpaket, wenn mehr als einige Zeilen zurückgegeben werden.

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=

Schritt 7. TCP-Vier-Wege-Schließen von Handshake

Microsoft-Treiber verwenden den vierwegigen Handshake zum Schließen von Verbindungen. Viele Drittanbietertreiber setzen die Verbindung einfach zurück, um sie zu schließen, wodurch es schwieriger ist, zwischen einer normalen und einer ungewöhnlichen Schließung zu unterscheiden.

Der vierwegige Handshake besteht aus dem Client, der ein FIN Paket an den Server sendet, auf den der Server mit einem ACKantwortet. Der Server sendet dann sein eigenes FIN Paket, das der Client bestätigt (ACK).

Wenn der Server zuerst ein Paket sendet, handelt es sich um ein FIN abnormales Schließen, das am häufigsten im SSL/TLS-Handshake zu sehen ist, wenn der Client und der Server den sicheren Kanal nicht aushandeln können.

Diagramm des vierwegigen schließenden Handshakes.

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=