Kerberoasting(SPN 付きサービスアカウントのオフラインクラック)
概要
Kerberoasting は、SPN(Service Principal Name)が設定されたサービスアカウントに対して TGS(サービスチケット)を要求し、そのチケットの暗号化部分(サービスアカウントのパスワードハッシュで暗号化されている)をオフラインでクラックしてパスワードを割り出す手法。
Kerberos 認証では、クライアントが特定のサービスにアクセスする際、DC(KDC)からそのサービスの SPN 宛ての TGS を発行してもらう。TGS の一部はサービスアカウントのパスワードハッシュで暗号化されているため、ドメイン内の任意の認証済みユーザーが TGS を要求できる=オフラインクラック用の材料を誰でも集められる、という構造的な弱点になっている。
手順
- ドメイン内の SPN 付きアカウント(サービスアカウント)を列挙する。
- それらのアカウント宛ての TGS を要求する。
- 取得した TGS のハッシュ部分をオフラインでクラックする(
hashcatなど)。 - 弱いパスワードのサービスアカウントであれば、平文パスワードが得られる。
コマンド
# 認証情報あり(全ユーザーを列挙して対象を自動抽出)
GetUserSPNs.py lab.local/user:'Password123' -dc-ip <DC_IP> -request
得られたハッシュは hashcat(モード 13100)などでオフラインクラックする。
注意点
- サービスアカウントのパスワードが十分に強力(長い・ランダム)であれば、ハッシュを取得できてもクラックは現実的でない。