kerbeos Enumeration
1. 原理
- 用户发起登录请求时,客户端会向认证服务器(AS)发送一个包含用户名和密码的认证请求、根据用户首次请求(AS-REQ)后,域控制器会因所提交用户名是否存在而作出不同响应,若用户名存在,则进一步判断密码是否正确
- 认证服务器的任务是验证用户名和密码,若验证通过,则返回一个 TGT(票据授予票据)
- 即使密码错误也会提示用户名是否正确(可以帮助我们爆破出域内的用户)
2. 作用
- 在无域内账户时,爆破可以帮助我们获取到有效的域内用户
3. 优点
- 执行攻击不需要用到域帐户,只需连接到 KDC 。
- Kerberos 预身份验证的错误不会在 Active Directory 中记录为正常登录失败事件(4625),而是记录在 Kerberos 预身份验证失败的特定日志里(4771)。
- Kerberos 在输入账号时就算密码错误,也会提示用户名是否正确,这样的话我们就不必再去枚举用户名了。
- 在 Kerberos 暴力破解中,还可以在不需要预身份验证的情况下发现用户帐户,这对于执行 AS-REPRoasting攻击非常有用。
速度快:使用 Kerberos 暴力破解 Windows 用户名和密码的速度非常快,并且可能比其他方法更为隐蔽,因为预身份验证失败不会触发传统的 An account failed to log on 事件 4625 。通过 Kerberos,您只需向 KDC(域控制器)发送一个 UDP 帧即可验证用户名或测试登录。
由于没有域用户的口令,所以无法通过LDAP协议枚举出所有域用户,而且使用LDAP协议进行暴力破解时会产生日志(4625 - An account failed to log on)
4. 攻击流程
4.1. 用户枚举
为枚举用户名, Kerbrute 会发送无需预认证的 TGT 请求。若 KDC 返回 PRINCIPAL UNKNOWN 错误,则用户名不存在。若 KDC 要求预认证,则确认用户名存在并继续枚举。此操作不会触发登录失败事件,因此不会锁定任何账户。
若启用 Kerberos 日志记录,该操作将生成 Windows 事件 ID 4768
kerbrute userenum --dc 192.168.52.138 -d god.org user.txt
- -userenum:用户枚举模式
- --dc:指定域控ip
- -d:指定域名
- -user.txt:用户名字典文件,用户名可不加域名后缀
4.2. 密码枚举
使用 passwordspray(密码喷洒)模式时,Kerbrute 会针对域用户列表执行“横向暴力破解”攻击
注意: 这种操作会增加登录失败的计数,并可能导致账户被锁定。同时,这会在系统中生成以下两种事件 ID:
- 4768:已请求 Kerberos 身份验证票据 (TGT);
- 4771:Kerberos 预身份验证失败。
kerbrute.exe passwordspray --dc 192.168.52.138 -d god.org user.txt P@ss1234
kerbrute.exe bruteuser --dc 192.168.52.138 -d god.org pass.txt administrator
- -passwordspray:密码枚举模式
- --dc:指定域控ip
- -d:指定域名
- -user.txt:用户名字典文件,用户名可不加域名后缀
5. 防御
- 启用 Kerberos 预认证(Pre-authentication)
- 限制失败认证尝试次数
- 设置强密码
- 启用多因素认证(MFA)