Windows における認証には 2 つの代表的な認証方式が存在します。それぞれ
・NTLM 認証
・Kerberos 認証
ActiveDirectory のドメイン環境を構築すると、ログオンやファイルサーバのアクセスに対する認証は基本的に Kerberos 認証が使用されます。
Kerberos 認証の大きな特徴はドメイン環境においてSSO(シングルサインオン)を提供することです。
そのため、ワークグループ環境では、Kerberos認証が使えないというようなイメージをどうしても無意識的に作ってしまいがちです。
かくいう私もWORKGROUP環境ではKerberos認証が使えないと思っておりました。
しかし、WORKGROUP環境でもKerberos認証は使用することができます!
実際にパケットをキャプチャして見てみましょう。
下記の図のアクセスを行います。
net use コマンドを使用した際のパケットを見てみます。
またユーザーの指定の仕方でNTLM認証かKerberos認証か変わってきますので、ユーザーの指定の仕方にも着目していただけたらと思います。
またパケットを貼り付けていますが、見にくいと思いますので、メモ帳などに貼り付けるなどしていただけたらと思います。
検証環境がある場合には、実際にパケットを採取してみるのが一番だと思います。
■実行コマンド①
net use \\LabServer1.contoso.com\share /User:administrator P@ssw0rd
3 192.168.2.1 labserver1.contoso.com DNS DNS:QueryId = 0x8998, QUERY (Standard query), Query for labserver1.contoso.com of type Host Addr on class Internet 4 labserver1.contoso.com 192.168.2.1 DNS DNS:QueryId = 0x8998, QUERY (Standard query), Response - Success, 192.168.1.1 5 192.168.2.1 labserver1.contoso.com TCP TCP:Flags=CE....S., SrcPort=49183, DstPort=Microsoft-DS(445), PayloadLen=0, Seq=3658226447, Ack=0, Win=8192 ( Negotiating scale factor 0x8 ) = 8192 6 labserver1.contoso.com 192.168.2.1 TCP TCP:Flags=.E.A..S., SrcPort=Microsoft-DS(445), DstPort=49183, PayloadLen=0, Seq=3310703929, Ack=3658226448, Win=8192 ( Negotiated scale factor 0x8 ) = 2097152 7 192.168.2.1 labserver1.contoso.com TCP TCP:Flags=...A...., SrcPort=49183, DstPort=Microsoft-DS(445), PayloadLen=0, Seq=3658226448, Ack=3310703930, Win=4106 (scale factor 0x8) = 1051136 8 192.168.2.1 labserver1.contoso.com SMB SMB:C; Negotiate, Dialect = PC NETWORK PROGRAM 1.0, LANMAN1.0, Windows for Workgroups 3.1a, LM1.2X002, LANMAN2.1, NT LM 0.12, SMB 2.002, SMB 2.??? 9 labserver1.contoso.com 192.168.2.1 SMB2 SMB2:R NEGOTIATE (0x0), GUID={0AFB6FC7-A61F-BB94-4D79-D2108D5C036B} 10 192.168.2.1 labserver1.contoso.com SMB2 SMB2:C NEGOTIATE (0x0), GUID={25C8005D-1500-B980-11E4-F1FF367E01C7} 11 labserver1.contoso.com 192.168.2.1 SMB2 SMB2:R NEGOTIATE (0x0), GUID={0AFB6FC7-A61F-BB94-4D79-D2108D5C036B} 12 192.168.2.1 labserver1.contoso.com SMB2 SMB2:C SESSION SETUP (0x1) 13 labserver1.contoso.com 192.168.2.1 SMB2 SMB2:R - NT Status: System - ERROR, Code = (22) STATUS_MORE_PROCESSING_REQUIRED SESSION SETUP (0x1), SessionFlags=0x0 14 192.168.2.1 labserver1.contoso.com SMB2 SMB2:C SESSION SETUP (0x1) 15 labserver1.contoso.com 192.168.2.1 SMB2 SMB2:R SESSION SETUP (0x1), SessionFlags=0x0
3.4はLabServer1.contoso.comの名前解決
5.6.7はTCPのスリーハンドシェイク
8.9.10.11はSMB通信のNegotiateで使用するSMBバージョンの決定などを行っています。
12.13.14.15はSMB通信のSessionを確立するシーケンスとなります。
ここではNTLM認証が使用されています。14番のパケットを細かく見ていくとNTLMのトークンを使用していることがわかります。(ここでは割愛します)
■ 実行コマンド②
net use \\LabServer1.contoso.com\share /User:contoso.com\administrator P@ssw0rd
8 192.168.2.1 labserver1.contoso.com TCP TCP:Flags=CE....S., SrcPort=49159, DstPort=Microsoft-DS(445), PayloadLen=0, Seq=936072081, Ack=0, Win=8192 ( Negotiating scale factor 0x8 ) = 8192 9 labserver1.contoso.com 192.168.2.1 TCP TCP:Flags=.E.A..S., SrcPort=Microsoft-DS(445), DstPort=49159, PayloadLen=0, Seq=1090893484, Ack=936072082, Win=8192 ( Negotiated scale factor 0x8 ) = 2097152 10 192.168.2.1 labserver1.contoso.com TCP TCP:Flags=...A...., SrcPort=49159, DstPort=Microsoft-DS(445), PayloadLen=0, Seq=936072082, Ack=1090893485, Win=4106 (scale factor 0x8) = 1051136 11 192.168.2.1 labserver1.contoso.com SMB SMB:C; Negotiate, Dialect = PC NETWORK PROGRAM 1.0, LANMAN1.0, Windows for Workgroups 3.1a, LM1.2X002, LANMAN2.1, NT LM 0.12, SMB 2.002, SMB 2.??? 12 labserver1.contoso.com 192.168.2.1 SMB2 SMB2:R NEGOTIATE (0x0), GUID={EB6B2615-D913-47A6-48B2-BE8DAA9A06F6} 13 192.168.2.1 labserver1.contoso.com SMB2 SMB2:C NEGOTIATE (0x0), GUID={25C8005D-1500-B980-11E4-F1FF367E012E} 14 labserver1.contoso.com 192.168.2.1 SMB2 SMB2:R NEGOTIATE (0x0), GUID={EB6B2615-D913-47A6-48B2-BE8DAA9A06F6} 15 192.168.2.1 labserver1.contoso.com DNS DNS:QueryId = 0x4E25, QUERY (Standard query), Query for _kerberos._TCP.dc._msdcs.Contoso.com of type SRV on class Internet 16 labserver1.contoso.com 192.168.2.1 DNS DNS:QueryId = 0x4E25, QUERY (Standard query), Response - Success, 192.168.1.1 17 192.168.2.1 labserver1.contoso.com LDAPMessage LDAPMessage:Search Request, MessageID: 1 18 labserver1.contoso.com 192.168.2.1 NetLogon NetLogon:LogonSAMLogonResponseEX (SAM Response to SAM logon request): 23 (0x17) 19 192.168.2.1 labserver1.contoso.com TCP TCP:Flags=...A...., SrcPort=49159, DstPort=Microsoft-DS(445), PayloadLen=0, Seq=936072353, Ack=1090893989, Win=4104 (scale factor 0x8) = 1050624 20 192.168.2.1 labserver1.contoso.com TCP TCP:Flags=CE....S., SrcPort=49160, DstPort=Kerberos(88), PayloadLen=0, Seq=2250718752, Ack=0, Win=8192 ( Negotiating scale factor 0x8 ) = 8192 21 labserver1.contoso.com 192.168.2.1 TCP TCP:Flags=.E.A..S., SrcPort=Kerberos(88), DstPort=49160, PayloadLen=0, Seq=3231919367, Ack=2250718753, Win=8192 ( Negotiated scale factor 0x8 ) = 2097152 22 192.168.2.1 labserver1.contoso.com TCP TCP:Flags=...A...., SrcPort=49160, DstPort=Kerberos(88), PayloadLen=0, Seq=2250718753, Ack=3231919368, Win=4106 (scale factor 0x8) = 1051136 23 192.168.2.1 labserver1.contoso.com KerberosV5 KerberosV5:AS Request Cname: administrator Realm: Contoso.com Sname: krbtgt/Contoso.com 24 192.168.2.1 labserver1.contoso.com TCP TCP:[ReTransmit #23]Flags=...AP..., SrcPort=49160, DstPort=Kerberos(88), PayloadLen=235, Seq=2250718753 - 2250718988, Ack=3231919368, Win=4106 (scale factor 0x8) = 1051136 25 labserver1.contoso.com 192.168.2.1 KerberosV5 KerberosV5:KRB_ERROR - KDC_ERR_PREAUTH_REQUIRED (25) 26 192.168.2.1 labserver1.contoso.com TCP TCP:Flags=...A...F, SrcPort=49160, DstPort=Kerberos(88), PayloadLen=0, Seq=2250718988, Ack=3231919527, Win=4105 (scale factor 0x8) = 1050880 27 192.168.2.1 labserver1.contoso.com TCP TCP:Flags=CE....S., SrcPort=49161, DstPort=Kerberos(88), PayloadLen=0, Seq=1750242782, Ack=0, Win=8192 ( Negotiating scale factor 0x8 ) = 8192 28 labserver1.contoso.com 192.168.2.1 TCP TCP:Flags=...A...., SrcPort=Kerberos(88), DstPort=49160, PayloadLen=0, Seq=3231919527, Ack=2250718988, Win=4106 (scale factor 0x8) = 1051136 29 labserver1.contoso.com 192.168.2.1 TCP TCP:Flags=.E.A..S., SrcPort=Kerberos(88), DstPort=49161, PayloadLen=0, Seq=1834935086, Ack=1750242783, Win=8192 ( Negotiated scale factor 0x8 ) = 2097152 30 labserver1.contoso.com 192.168.2.1 TCP TCP:Flags=...A...., SrcPort=Kerberos(88), DstPort=49160, PayloadLen=0, Seq=3231919527, Ack=2250718989, Win=4106 (scale factor 0x8) = 1051136 31 labserver1.contoso.com 192.168.2.1 TCP TCP:Flags=...A.R.., SrcPort=Kerberos(88), DstPort=49160, PayloadLen=0, Seq=3231919527, Ack=2250718989, Win=0 (scale factor 0x8) = 0 32 192.168.2.1 labserver1.contoso.com TCP TCP:Flags=...A...., SrcPort=49161, DstPort=Kerberos(88), PayloadLen=0, Seq=1750242783, Ack=1834935087, Win=4106 (scale factor 0x8) = 1051136 33 192.168.2.1 labserver1.contoso.com KerberosV5 KerberosV5:AS Request Cname: administrator Realm: Contoso.com Sname: krbtgt/Contoso.com 34 labserver1.contoso.com 192.168.2.1 KerberosV5 KerberosV5:AS Response Ticket[Realm: CONTOSO.COM, Sname: krbtgt/CONTOSO.COM] 35 labserver1.contoso.com 192.168.2.1 TCP TCP:[Continuation to #34]Flags=...AP..., SrcPort=Kerberos(88), DstPort=49161, PayloadLen=71, Seq=1834936547 - 1834936618, Ack=1750243094, Win=4106 (scale factor 0x8) = 1051136 36 192.168.2.1 labserver1.contoso.com TCP TCP:Flags=...A...., SrcPort=49161, DstPort=Kerberos(88), PayloadLen=0, Seq=1750243094, Ack=1834936618, Win=4106 (scale factor 0x8) = 1051136 37 192.168.2.1 labserver1.contoso.com TCP TCP:Flags=...A...F, SrcPort=49161, DstPort=Kerberos(88), PayloadLen=0, Seq=1750243094, Ack=1834936618, Win=4106 (scale factor 0x8) = 1051136 38 192.168.2.1 labserver1.contoso.com TCP TCP:Flags=CE....S., SrcPort=49162, DstPort=Kerberos(88), PayloadLen=0, Seq=492728649, Ack=0, Win=8192 ( Negotiating scale factor 0x8 ) = 8192 39 labserver1.contoso.com 192.168.2.1 TCP TCP:Flags=.E.A..S., SrcPort=Kerberos(88), DstPort=49162, PayloadLen=0, Seq=2185727656, Ack=492728650, Win=8192 ( Negotiated scale factor 0x8 ) = 2097152 40 labserver1.contoso.com 192.168.2.1 TCP TCP:Flags=...A...., SrcPort=Kerberos(88), DstPort=49161, PayloadLen=0, Seq=1834936618, Ack=1750243095, Win=4106 (scale factor 0x8) = 1051136 41 labserver1.contoso.com 192.168.2.1 TCP TCP:Flags=...A.R.., SrcPort=Kerberos(88), DstPort=49161, PayloadLen=0, Seq=1834936618, Ack=1750243095, Win=0 (scale factor 0x8) = 0 42 192.168.2.1 labserver1.contoso.com TCP TCP:Flags=...A...., SrcPort=49162, DstPort=Kerberos(88), PayloadLen=0, Seq=492728650, Ack=2185727657, Win=4106 (scale factor 0x8) = 1051136 43 192.168.2.1 labserver1.contoso.com KerberosV5 KerberosV5:TGS Request Realm: CONTOSO.COM Sname: cifs/labserver1.contoso.com 44 labserver1.contoso.com 192.168.2.1 TCP TCP:Flags=...A...., SrcPort=Kerberos(88), DstPort=49162, PayloadLen=0, Seq=2185727657, Ack=492730267, Win=4106 (scale factor 0x8) = 1051136 45 labserver1.contoso.com 192.168.2.1 KerberosV5 KerberosV5:TGS Response Cname: Administrator 46 labserver1.contoso.com 192.168.2.1 TCP TCP:[Continuation to #45]Flags=...AP..., SrcPort=Kerberos(88), DstPort=49162, PayloadLen=187, Seq=2185729117 - 2185729304, Ack=492730267, Win=4106 (scale factor 0x8) = 1051136 47 192.168.2.1 labserver1.contoso.com TCP TCP:Flags=...A...., SrcPort=49162, DstPort=Kerberos(88), PayloadLen=0, Seq=492730267, Ack=2185729304, Win=4106 (scale factor 0x8) = 1051136 48 192.168.2.1 labserver1.contoso.com TCP TCP:Flags=...A...F, SrcPort=49162, DstPort=Kerberos(88), PayloadLen=0, Seq=492730267, Ack=2185729304, Win=4106 (scale factor 0x8) = 1051136 49 labserver1.contoso.com 192.168.2.1 TCP TCP:Flags=...A...., SrcPort=Kerberos(88), DstPort=49162, PayloadLen=0, Seq=2185729304, Ack=492730268, Win=4106 (scale factor 0x8) = 1051136 50 labserver1.contoso.com 192.168.2.1 TCP TCP:Flags=...A.R.., SrcPort=Kerberos(88), DstPort=49162, PayloadLen=0, Seq=2185729304, Ack=492730268, Win=0 (scale factor 0x8) = 0 51 192.168.2.1 labserver1.contoso.com TCP TCP:Flags=CE....S., SrcPort=49163, DstPort=Kerberos(88), PayloadLen=0, Seq=602902016, Ack=0, Win=8192 ( Negotiating scale factor 0x8 ) = 8192 52 labserver1.contoso.com 192.168.2.1 TCP TCP:Flags=.E.A..S., SrcPort=Kerberos(88), DstPort=49163, PayloadLen=0, Seq=657288898, Ack=602902017, Win=8192 ( Negotiated scale factor 0x8 ) = 2097152 53 192.168.2.1 labserver1.contoso.com TCP TCP:Flags=...A...., SrcPort=49163, DstPort=Kerberos(88), PayloadLen=0, Seq=602902017, Ack=657288899, Win=4106 (scale factor 0x8) = 1051136 54 192.168.2.1 labserver1.contoso.com KerberosV5 KerberosV5:TGS Request Realm: CONTOSO.COM Sname: krbtgt/CONTOSO.COM 55 labserver1.contoso.com 192.168.2.1 KerberosV5 KerberosV5:TGS Response Cname: Administrator 56 labserver1.contoso.com 192.168.2.1 TCP TCP:[Continuation to #55]Flags=...AP..., SrcPort=Kerberos(88), DstPort=49163, PayloadLen=18, Seq=657290359 - 657290377, Ack=602903466, Win=4106 (scale factor 0x8) = 1051136 57 192.168.2.1 labserver1.contoso.com TCP TCP:Flags=...A...., SrcPort=49163, DstPort=Kerberos(88), PayloadLen=0, Seq=602903466, Ack=657290377, Win=4106 (scale factor 0x8) = 1051136 58 192.168.2.1 labserver1.contoso.com TCP TCP:Flags=...A...F, SrcPort=49163, DstPort=Kerberos(88), PayloadLen=0, Seq=602903466, Ack=657290377, Win=4106 (scale factor 0x8) = 1051136 59 labserver1.contoso.com 192.168.2.1 TCP TCP:Flags=...A...., SrcPort=Kerberos(88), DstPort=49163, PayloadLen=0, Seq=657290377, Ack=602903467, Win=4106 (scale factor 0x8) = 1051136 60 labserver1.contoso.com 192.168.2.1 TCP TCP:Flags=...A.R.., SrcPort=Kerberos(88), DstPort=49163, PayloadLen=0, Seq=657290377, Ack=602903467, Win=0 (scale factor 0x8) = 0 61 192.168.2.1 labserver1.contoso.com SMB2 SMB2:C SESSION SETUP (0x1) 62 labserver1.contoso.com 192.168.2.1 TCP TCP:Flags=...A...., SrcPort=Microsoft-DS(445), DstPort=49159, PayloadLen=0, Seq=1090893989, Ack=936075497, Win=4106 (scale factor 0x8) = 1051136 63 labserver1.contoso.com 192.168.2.1 SMB2 SMB2:R SESSION SETUP (0x1), SessionFlags=0x0
8.9.10はTCPのスリーハンドシェイク
11.12.13.14はSMB通信のNegotiateで使用するSMBバージョンの決定などを行っています。
15.16は _kerberos._TCP.dc._msdcs.Contoso.com の名前解決を行っています。KDC(Kerberos Distribution Center)の場所の探索ですね。
17.18は正直どのような意味を持っているのかわかりませんが、LDAPで通信してますね。DCとファイルサーバの役割を別々にしてみてどうなるかを見てみる必要があるかもしれません。今回は流します。
19はNegotiateのAckでしょうか。。ここもどのような意味を持っているかわかりません。
が今は流します。
20.21.22で再びTCPのスリーハンドシェイクを行っていますね。ポート番号は88番なのでKerberos認証が始まるんだということがわかります。
そしてポート番号に着目すれば 60 までKerberos認証の処理が行われていることがわかります。(Kerberos認証の詳しいシーケンスはまた今度記事にしようかなと思います。)
61.62でセッションを確立しようと、Kerberos認証で取得したサービスチケットをファイルサーバに送信しています。
63でそのサービスチケットが正しいことを確認して、セッションを確立しています。
→結果WORKGROUP環境でもKerberos認証が行われていますね。
ちなみにドメイン参加の際のパケットを見てみると、ここでもKerberos認証が行われていることがわかります。
先入観だけで物事を考えてるのはいけませんねという教訓になりました。
Comments