#72 Kerberos
来週は、いよいよネットワークスペシャリスト試験です。コツコツ勉強してきましたが、けっこう不安です!
それはさておき、Active Directoryの勉強も進めています。NTLMの後継として使われているKerberosについてまとめました。
Kerberosとは
Kerberosは、認証プロトコルのひとつでチケットによってアクセスを管理します。
Active Directoryで使われるようなサーバー群に対して、それぞれ認証していては大変です。Kerberosでは、認証用サーバーでチケットを発行し、各サービスはそのチケットの有効性を検証するだけで済むので効率よくアクセス管理ができます。
KDC(Key Distribution Center)
下記のASとTGSの役割を担うサーバー。
AS(Authentication Server)
クライアントの認証を行い、TGTを発行する。
TGT(Ticket Granting Ticket)
各サービスへのアクセス要求をする際に使用するチケット。
TGS(Ticket Granting Service)
各サービスへアクセスするためのサービスチケットを発行する。
Kerberos認証の流れ
クライアントがファイルサーバーにアクセスする場合を例として、認証の流れを見てみましょう。
1. ASで認証を行う(クライアント→KDC)
クライアントはASに対して認証要求をします。認証が成功すると、TGTが発行されます。TGTは、KDCのシークレットキーで暗号化されています。
2. TGSにサービス要求を行う(クライアント→KDC)
TGTを使って、ファイルサーバーに対するアクセスを要求します。TGTが不正であったり、ファイルサーバーへのアクセス権限がなければ拒否されます。成功するとサービスチケットが発行されます。サービスチケットは、ファイルサーバーアカウントのパスワードで暗号化されています。
3. サービスにアクセスする(クライアント→ファイルサーバー)
TGSから発行されたサービスチケットを使って、ファイルサーバーにアクセスできます。
なかなかややこしいですが、使用するときには一度の認証で各サーバーにアクセスできるので、とても便利です。
Kerberosに対する攻撃
便利なものはよく使われ、よく使われるものは攻撃されるのが世の常です。Kerberosに対する攻撃も様々なものが考え出されています。
Kerberoasting
Kerberosで使われるサービスチケットは、端末に保存されます。これらを読み出して、暗号化に使われているパスワードの特定を試みる攻撃はKerberoastingと呼ばれています。チケットの読み出しは、Mimikatzで実現できます。
mimikatz# kerberos::list /export
すると、所持しているチケットが「.kirbi」形式で出力されます。
Kerberoastingのためのツールがあるので、こちらで.kirbiを読み込んで、ブルートフォース攻撃を行います。
$ python tgsrepcrack.py passwords.txt <ticket>.kirbi
うまくいけば、サービスアカウントのパスワードが特定できます。この情報でサーバーににログインできるかもしれませんし、後述のSilver Ticket攻撃にも活用できます。
Pass-the-Ticket
サービスチケットは、対象サービスにおいて盲目的に信用されます。「KDCでちゃんと認証されてるから大丈夫でしょ」ってことです。つまり、サービスチケットをダンプして、他のPCに読み込んだとしても、サービスへアクセスできます。
では、もし自分でサービスチケットを作れるとしたらどうでしょう。サービスチケットは、サービスアカウントのパスワードで暗号化されているだけなので、パスワードさえ特定できればあらゆる特権権限のチケットを自家印刷できます。これはSilver Ticketと呼ばれています。
当然、mimikatzでできます。
mimikatz# kerberos::golden /user:test_user /domain:test.com /sid:S-1-5-21-0000000-00000000-00000000 /target:fs.test.com /service:FTP /rc4:<password hash> /ptt
Golden Ticket
TGTは、KDCのシークレットキーで暗号化されています。シークレットキーが特定できた場合、自分でTGTが製造できます。Silver Ticketは、対象サービスのみへのアクセスが可能でした。一方のGolden Ticketは、その仰々しい名から察せられる通り、あらゆるサービスへアクセスできます!
mimikatz# kerberos::golden /user:test_user /domain:test.com /sid:S-1-5-21-0000000-00000000-00000000 /krbtgt:<secret key> /ptt
やられたほうはたまりませんね。
まとめ
認証は、ゆるすぎて攻撃を許してもいけないし、厳しすぎて不便になってもよくありません。適切に設計や防御ができるよう理解を深めていきます!
EOF
この記事が気に入ったらサポートをしてみませんか?