次の方法で共有


ネットワーク認証プロセスをデータベース エンジンまでトレースする

この記事では、クライアント アプリケーションと SQL Server データベース エンジン (サーバー) 間の伝送制御プロトコル (TCP) 接続確立プロセス中のさまざまなハンドシェイクと認証シーケンスをキャプチャするネットワーク トレースの例をいくつか示します。

接続を閉じる方法については、「データベース エンジンでネットワーク接続のクローズ シーケンスをトレースする」を参照してください

認証のタイプ

Windows 認証 (Kerberos または NTLM 認証を使用) または SQL 認証を使用してデータベース エンジンに接続できます。

この記事では、複数のアクティブな結果セット (MARS) 接続についても説明します。 MARS は、SQL Server 2005 (9.x) で導入された SQL Server の機能です。これにより、2 番目のコマンドを実行する前に、最初のコマンドの結果をクリーンアップしなくても、接続で複数のコマンドを実行できます。 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) に接続します。 サーバーは、フラグも設定された独自 SYNACK パケットで応答します。 最後に、クライアントはパケットで ACK 応答し、パケットを受信したことをサーバーに SYN 知らせます。

この手順では、コマンドと同じ方法で基本的な TCP 接続を telnet 確立します。 オペレーティング システムは、会話のこの部分を仲介します。 この時点で、クライアントとサーバーは互いについて何も認識しません。

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 パケットに加えて、Secure Channel に関連するいくつかの追加パケットで始まります。 この手順では、パケットを暗号化するためにセキュリティ キーがネゴシエートされます。 通常、ログイン パケットだけが暗号化されますが、クライアントまたはサーバーでもデータ パケットを暗号化する必要があります。 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: ログイン パケット

このパケットは暗号化され、ネットワーク パーサーに応じて"またはTDS:Data" とSSL Application 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. コマンドを実行して応答を読み取る

コマンドは、a 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=