Dela via


Spåra processen för nätverksautentisering till databasmotorn

Den här artikeln innehåller flera exempel på en nätverksspårning som samlar in olika handskakningar och autentiseringssekvenser under TCP-anslutningsprocessen (Transmission Control Protocol) mellan ett klientprogram och SQL Server Database Engine (servern).

Information om hur du stänger anslutningar finns i Spåra nätverksanslutningens stängningssekvens på databasmotorn.

Autentiseringstyper

Du kan ansluta till databasmotorn med Windows-autentisering (med hjälp av Kerberos- eller NTLM-autentisering) eller SQL-autentisering.

I den här artikeln beskrivs även flera MARS-anslutningar (Active Result Sets). MARS är en funktion i SQL Server, som introducerades med SQL Server 2005 (9.x), som gör att flera kommandon kan köras på en anslutning utan att behöva rensa resultatet från det första kommandot innan du kör det andra kommandot. MARS uppnås med session-multiplexering (SMUX).

Den här processen beskriver en normal inloggningsprocess med SQL-autentisering, som visar varje steg i konversationen mellan klienten och servern via en detaljerad nätverksspårningsanalys. Nätverksspårningsexemplet beskriver följande steg:

  1. TCP-trevägshandskakning
  2. Drivrutinskommunikation
  3. SSL/TLS-handskakning
  4. Utbyte av inloggningspaket
  5. Inloggningsbekräftelse
  6. Kör ett kommando och läs svaret
  7. TCP fyrvägs avslutande handskakning

Exempel på nätverksspårning

Det här utbytet allokeras 1 sekund oavsett inställningen Login Timeout i anslutningssträngen.

  • Klientens IP-adress är 10.10.10.10
  • Serverns IP-adress är 10.10.10.120

Steg 1. TCP-trevägshandskakning

Alla TCP-konversationer börjar med ett SYN paket (S flagguppsättning) som skickas från klienten till servern. I Frame 6127använder klienten en tillfällig port (dynamiskt tilldelad av operativsystemet) och ansluter till serverporten, i det här fallet port 1433. Servern svarar med sitt eget SYN-paket med flaggan ACK också inställd. Slutligen svarar klienten med ett ACK paket för att låta servern veta att den tog emot sitt SYN paket.

Det här steget upprättar en grundläggande TCP-anslutning, på samma sätt som ett telnet kommando skulle göra. Operativsystemet förmedlar den här delen av konversationen. I det här läget vet klienten och servern ingenting om varandra.

Diagram över trevägshandskakning.

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=

I det här steget är [Bad CheckSum]-varningarna godartade och indikerar att checksummoffload är aktiverat. Det innebär att de läggs till på en lägre nivå i nätverksstacken än spårningen tas. I avsaknad av annan information anger den här varningen om nätverksspårningen har tagits på klienten eller servern. I det här fallet visas det på det första SYN-paketet, så spårningen utfördes på klienten.

Steg 2. Drivrutinhandskakning

Både klientdrivrutinen och SQL Server behöver veta lite om varandra. I den här handskakningen skickar föraren viss information och krav till servern. Den här informationen omfattar om du vill kryptera datapaket, om du vill använda flera aktiva resultatuppsättningar (MARS), dess versionsnummer, om du vill använda federerad autentisering, anslutnings-GUID och så vidare.

Servern svarar med sin information, till exempel om den kräver autentisering. Den här sekvensen inträffar innan någon form av säkerhetsförhandling utförs.

Diagram över drivrutinshandtryckning.

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

Steg 3. SSL/TLS-handskakning

SSL/TLS-handskakningen börjar med Client Hello-paketet och sedan Server Hello-paketet, plus några extra paket som är relaterade till Säker kanal. I det här steget förhandlas säkerhetsnyckeln för kryptering av paket. Normalt krypteras bara inloggningspaketet, men klienten eller servern kan kräva att även datapaket krypteras. Valet av TLS-version sker i det här skedet av inloggningen. Klienten eller servern kan stänga anslutningen i det här skedet om TLS-versionerna inte stämmer överens eller om de inte har några krypteringssviter gemensamma.

diagram över SSL/TLS-handskakning.

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

Steg 4. Inloggningspaket

Det här paketet är krypterat och kan visas som SSL Application Data eller TDS:Data, beroende på nätverksparsern. Om alla paket efter det här steget också visas som SSL Application Datakrypteras anslutningen.

diagram över SQL-inloggning.

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

Steg 5. Inloggningsbekräftelse

Annars visas ett svarspaket som antingen bekräftar inloggningen (har inloggningen ACK token) eller returnerar ett Login Failed felmeddelande till klienten.

Här är ett exempel på vad du kan se i de hexadecimala data för paketet vid en lyckad inloggning.

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

diagram över bekräftelse av SQL-inloggning.

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

Steg 6. Kör ett kommando och läs svaret

Kommandon skickas som antingen ett TDS:SQLBatch eller ett TDS:RPCRequest paket. Den förra kör vanliga Transact-SQL-instruktioner och den senare kör lagrade procedurer. Du kan se TCP-fortsättningspaket om kommandot är långt eller i svarspaketet om fler än några rader returneras.

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=

Steg 7. TCP fyrvägs stängningshandslag

Microsoft-drivrutiner använder fyrvägshandskakningen för att stänga anslutningar. Många drivrutiner från tredje part återställer bara anslutningen för att stänga den, vilket gör det svårare att skilja mellan en normal och onormal stängning.

Fyrvägshandskakningen består av att klienten skickar ett FIN paket till servern, som servern svarar på med en ACK. Servern skickar sedan ett eget FIN paket, som klienten bekräftar (ACK).

Om servern skickar ett FIN paket först är det en onormal stängning, som oftast visas i SSL/TLS-handskakningen om klienten och servern inte kan förhandla om den säkra kanalen.

Diagram över fyrvägsslutande handskakning.

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=