抓个包看下 kerberos的 pre-authentication是如何工作的 1

简介: 抓个包看下 kerberos的 pre-authentication是如何工作的

通过抓包工具了解下 kerberos的 pre-authentication是如何工作的

1 一个因keytab文件失效导致认证失败的问题

某客户大数据集群中的HIVE开启了kerberos安全认证(hive.server2.authentication=kerberos),某业务应用使用管理员提供的pricipal和keytab创建到 hs2 的JDBC链接时频繁报错,通过命令行验证该prinical和keytab也频繁报错(kinit xx -kt xx.keytab)。 于是果断打开kdc服务端日志(MIT kerberos 默认是 /var/log/krb5kdc.log),发现了类似如下相关日志:

## /var/log/krb5kdc.log相关日志:
May 10 15:20:39 uf30-1 krb5kdc[6377](info): AS_REQ (1 etypes {17}) 192.168.71.70: NEEDED_PREAUTH: dap2@CDH.COM for krbtgt/CDH.COM@CDH.COM, Additional pre-authentication required
May 10 15:20:39 uf30-1 krb5kdc[6377](info): closing down fd 13
May 10 15:20:39 uf30-1 krb5kdc[6377](info): preauth (encrypted_timestamp) verify failure: Preauthentication failed
May 10 15:20:39 uf30-1 krb5kdc[6377](info): AS_REQ (1 etypes {17}) 192.168.71.70: PREAUTH_FAILED: dap2@CDH.COM for krbtgt/CDH.COM@CDH.COM, Preauthentication failed
# 命令行执行kinit相关报错:
kinit: Preauthentication failed while getting initial credentials

日终中很明确地提示了,"Additional pre-authentication required",且“Preauthentication failed”,而该错误的常见原因是,客户端和服务端时钟差异过大(一般默认是5分钟),或者KDC服务端修改了对应principal的密码(可能是有意修改,也可能是无意修改),于是找管理员重新生成了一份该principal的新的 keytab 文件,切换使用该新版本keytab文件后问题解决:

  • This preauthentication failure can happen for several reasons. Mostly we see when either the password for the relevant account in the Active Directory has changed since the keytab file was created;
  • or the system clock is off by about 5 minutes from that of the Active Directory.
  • 通过klist -ekt xxx.keytab 也可以对比发现新旧keytab文件的KVNO不同,所以可以确认旧的KEYTAB文件是失效的:

640.png


问题虽然解决了,但什么是 pre-authentication 呢?其又是如何工作的呢?

2 什么是 pre-authentication

简单来讲,pre-authentication 是 Kerberos V5 版本对V4版本在安全感上的一个增强,可以抵御针对 kerberos协议的 AS-REP Roasting 攻击,该攻击截获 AS-REP 数据包并采用离线手段对用户密钥进行暴力破解:

  • 使用 Kerberos 协议过程中,共涉及到6类请求和响应(AS_REQ/AS-REP,TGS_REQ/TGS_REP,AP-REQ/AP-REP),这些请求和响应底层的 IP PACKET 数据包在网络传输过程中可能会被网络嗅探工具截获;
  • 为了防止网络嗅探安全问题,KERBEROS在任何数据包中都不会明文传输用户密钥,而是采用特定算法对用户密钥的HASH值(附加一些时间戳和SALT数据)进行加密传输,接收端用相同的算法和密钥HASH解密后即可验证数据的有效性;
  • 虽然没有明文传输密钥,但AS_REQ 数据包可以被截获以进行重放攻击(packet replay attack)从而从KDC获取新的AS_REP数据包;
  • 虽然没有明文传输密钥,但AS_REP 数据包可以被截获,由于 AS-REP 数据包中包括了具体的加密算法和使用该加密算法对用户密码的HASH值进行加密处理后的衍生数据,如果加密算法弱且用户密码简单,攻击者完全可以基于获取的多个 AS-REP 数据包,采用离线手段暴力破解获取用户的原始密钥,这种攻击方式被称为 ASREP-Roasting;
  • KDC返回的正常的 AS-REP 数据包格式如下:

640.png


  • KDC开启了某 principal的Pre-authentication后,基于加密时间戳算法 PA-ENC-TIMESTAMP(目前使用最多的 pre-authentication 算法就是该密时间戳算法),可以有效防止基于 AS-REQ的重放攻击和基于 AS-REP的 ASREP-Roasting:因为此时客户端发送的 AS-REQ 数据中的padata(pre-authentication data)部分包含了使用特定算法和用户密钥加密的当前时间戳,KDC 收到 AS-REQ数据包后会基于协商的特定算法(AS-REQ数据包中包含具体算法)和用户密钥(KDC中存储了用户密钥)对收到的数据进行解密已获得原始时间戳,如果解密后的原始时间戳有效且跟KDC的当前时间戳差异不大(默认5分钟),即可判定该 AS-REQ 不是重放攻击,即可正常进行处理并最终返回 AS-REP数据包;如果解密后的原始时间戳无效或跟KDC的当前时间戳差异过大(默认5分钟),则会返回错误 krb-error且具体的错误信息是Preauthentication failed,此时KDC日志如下:
May 11 10:17:03 uf30-1 krb5kdc[6377](info): preauth (encrypted_timestamp) verify failure: Preauthentication failed
May 11 10:17:03 uf30-1 krb5kdc[6377](info): AS_REQ (1 etypes {17}) 192.168.71.70: PREAUTH_FAILED: dap2@CDH.COM for krbtgt/CDH.COM@CDH.COM, Preauthentication failed
  • Preauthentication failed 对应的 AS-REP 数据包格式如下:

640.png


  • 事实上,客户端并不知道服务端是否开启了针对某 principal 的 Pre-authentication也不知道具体的Pre-authentication加密算法,所以同一客户端的首个 AS-REQ 请求并不会包含 padata(pre-authentication data),其接受的首个 AS-REP 数据包也肯定是krb-error且具体错误信息是 ERR_PREAUTH_REQUIRED,同时该数据包会告诉客户端可以使用的加密算法,后续客户端就可以使用协商的加密算法计算 padata 进而生成并发送第二个 AS-REQ 请求,服务端KDC验证通过后就会正常响应 AS-REP 了,该流程完整示意图如下:

640.png


  • 该流程完整服务端KDC日志如下:
May 11 11:07:09 uf30-1 krb5kdc[6377](info): AS_REQ (1 etypes {17}) 192.168.71.70: NEEDED_PREAUTH: dap2@CDH.COM for krbtgt/CDH.COM@CDH.COM, Additional pre-authentication required
May 11 11:07:09 uf30-1 krb5kdc[6377](info): closing down fd 13
May 11 11:07:09 uf30-1 krb5kdc[6377](info): AS_REQ (1 etypes {17}) 192.168.71.70: ISSUE: authtime 1683774429, etypes {rep=17 tkt=17 ses=17}, dap2@CDH.COM for krbtgt/CDH.COM@CDH.COM
May 11 11:07:09 uf30-1 krb5kdc[6377](info): closing down fd 13
  • 首个不包含 padata的 AS-REQ数据包如下:

640.png


  • 首个 ERR_PREAUTH_REQUIRED 对应的 AS-REP数据包如下:

640.png


  • 第二个包含 padata的 AS-REQ数据包如下:

640.png


  • 第二个正常的AS-REP 数据包格式如下:

640.png


  • AS-REP roasting is an attack against Kerberos for user accounts that do not require pre-authentication, which means that if the target user has pre-authentication disabled, an attacker can request authentication data for it and get a TGT that can be brute-forced offline, similarly to Kerberoasting;
  • Kerberos pre-authentication is an account protection against offline password cracking. When enabled, a user requesting access to a resource initiates communication with the Domain Controller (DC) by sending an Authentication Server Request (AS-REQ) message with a timestamp that is encrypted with the hash of their password. If and only if the DC is able to successfully decrypt the timestamp with the hash of the user’s password, it will then send an Authentication Server Response (AS-REP) message that contains the Ticket Granting Ticket (TGT) to the user. Part of the AS-REP message is signed with the user’s password
相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
监控 安全 数据可视化
情报搜集神器:Spiderfoot 保姆级教程
情报搜集神器:Spiderfoot 保姆级教程
|
Ubuntu Linux 虚拟化
Linux下的IMX6ULL——构建bootloader、内核、文件系统(四)
Linux下的IMX6ULL——构建bootloader、内核、文件系统(四)
1362 0
Linux下的IMX6ULL——构建bootloader、内核、文件系统(四)
|
人工智能 测试技术 数据库
企业数字化如何避免智能体设计陷入‘技术堆砌’的陷阱,真正做到以业务为导向?
本文AI产品专家三桥君探讨了如何以业务为导向设计智能体系统,避免陷入技术堆砌陷阱。通过电信运营商套餐推荐场景,提出从需求分析、多智能体协同设计到开发落地的完整方法论。三桥君强调技术需服务于业务本质,为AI智能体落地提供系统性实践路径。
482 0
|
缓存 NoSQL Java
SpringBoot中RedisCluster的scan命令实践
线上环境redis key过期一直很头疼,自动过期用户可能会给用户展示过期数据无法忍受,可是又无法掌握固定的key,redis给我们提供了高性能的scan操作,可千万不能用keys * 了! SpringBoot2.0升级使用lettuce替换了jedis为默认的reids连接工具。
3526 0
|
机器学习/深度学习 人工智能 自然语言处理
15_批量处理文本:LLM在数据集上的应用
在大语言模型(LLM)的实际应用中,我们很少只处理单条文本。无论是数据分析、内容生成还是模型训练,都需要面对海量文本数据的处理需求。批量处理技术是连接LLM与实际应用场景的关键桥梁,它能够显著提升处理效率、降低计算成本,并实现更复杂的数据流水线设计。
458 0
|
机器学习/深度学习 人工智能 监控
AI在交通管理系统中的应用
AI在交通管理系统中的应用
1016 23
|
XML 移动开发 开发者
京东商品详情数据接口(H5、APP 端)
京东商品详情数据接口是为H5和APP开发者提供的工具,支持获取商品名称、价格、库存、销量、评价、图片等详细信息,优化应用功能。接口返回JSON或XML格式数据,方便解析处理。适用于电商导购、社交媒体分享、活动推广、价格监控等场景,提升用户体验和购物决策效率。示例代码展示了使用Python发送GET请求的方法。
|
自动驾驶 安全 物联网
|
Ubuntu 安全 网络协议
Ubuntu设置smb功能
通过以上步骤,您已经在Ubuntu系统上成功设置了SMB共享服务,实现了与不同操作系统间的文件共享。记住,根据实际需求调整配置文件,特别是在安全性方面,比如限制访问权限、使用加密传输等,以确保共享环境既便利又安全。
1790 1
|
分布式计算 Hadoop 大数据
大数据技术:Hadoop与Spark的对比
【6月更文挑战第15天】**Hadoop与Spark对比摘要** Hadoop是分布式系统基础架构,擅长处理大规模批处理任务,依赖HDFS和MapReduce,具有高可靠性和生态多样性。Spark是快速数据处理引擎,侧重内存计算,提供多语言接口,支持机器学习和流处理,处理速度远超Hadoop,适合实时分析和交互式查询。两者在资源占用和生态系统上有差异,适用于不同应用场景。选择时需依据具体需求。
1018 1

热门文章

最新文章