AS-REP Roasting(事前認証無効アカウントのオフラインクラック)
概要
通常の Kerberos 認証(AS-REQ/AS-REP)では、クライアントは自分のパスワードハッシュで暗号化したタイムスタンプを事前認証として KDC に送り、それが検証されて初めて TGT(AS-REP)が発行される。これにより、他人のパスワードを知らないと TGT を要求できない仕組みになっている。
ところが、アカウントの設定で「Kerberos の事前認証を要求しない(Do not require Kerberos preauthentication)」が有効になっていると、誰でもそのユーザー名を指定するだけで AS-REP を取得できる。AS-REP の一部はそのユーザーのパスワードハッシュで暗号化されているため、取得した AS-REP をオフラインでクラックすればパスワードが割り出せる。Kerberoasting と違い、事前に有効な資格情報を持っていなくても実行できる点が特徴。
手順
- 事前認証が無効なユーザーを特定する(既知のユーザー名リストで試すか、認証情報がある場合は全ユーザーを自動列挙する)。
- 対象ユーザー宛てに事前認証なしで AS-REQ を送り、AS-REP を取得する。
- 取得した AS-REP のハッシュ部分をオフラインでクラックする。
コマンド
# 認証情報あり(全ユーザーを列挙して対象を自動抽出)
GetNPUsers.py lab.local/user:'Password123' -dc-ip <DC_IP> -request
# 認証情報なし(ユーザー名リストで総当り)
GetNPUsers.py lab.local/ -dc-ip <DC_IP> -usersfile users.txt -no-pass
取得したハッシュは hashcat(モード 18200)などでオフラインクラックする。
注意点
- Kerberoasting と同様、対象アカウントのパスワードが十分に強力であればオフラインクラックは成立しにくい。