0

我有一个关于从 TGS-REP 验证 KDC 的问题。

我有一个用 C++ 编写的遗留测试工具,用于验证用户的 AD 凭据。此测试工具调用 krb5 库方法来执行身份验证并在客户端(Linux 机器)上运行。我可以在数据包捕获中看到测试工具正在验证来自 AS-REP 的用户。

客户端上的测试工具 <-------> AD 服务器

---------- AS-REQ------>

<------------- AS-REP------</p>

(用户现在将被验证)

测试工具正在验证来自 AS-REP 的用户。

它不是发送/接收 TGS-REQ/TGS-REP。***我从 TGS-REP 了解到,我们也可以验证 KDC。*** 因此,我扩展了该工具以执行以下操作:

客户端上的测试工具 <-------> AD 服务器

 -———----——— AS-REQ—————&gt;

 <----——— AS-REP —————


      
    —————— TGS-REQ (with sname: host/test.machine.examaple.com@EXAMPLE.COM)—————&gt;

     <——— TGS-REP—————

....... 我的测试工具将通过将 KDC 的密钥与预配置的密钥表进行比较来验证 KDC。我为上述 SPN 创建了一个密钥表。

问:从一些在线阅读材料中,我了解到这可以通过将 KDC 的密钥与预配置的密钥表文件进行比较来完成。我确信我没有完全明白这一点。请帮助我理解这部分。为什么我们不能从 AS-REP 获得此验证?

4

2 回答 2

0

我并没有真正理解验证 KDC 的意思。通常验证传入的 kerberos 票证。验证传入令牌时,无需往返 KDC。
传入的 kerberos 令牌使用 SPN 的密码(密钥)进行加密。此用于解密令牌的密钥仅存在于 keytab 中。

检查此链接以了解其完成方式。

此外,还有两个主要部分需要考虑——Acceptor 和 Initiator。

验证令牌的服务可以是

  • 接受者- 使用配置中提供的密钥表或用户名/密码接受并验证票证
  • 发起者- 应用程序可以为自己/其他服务请求令牌
  • Acceptor + Initiator - 验证传入令牌并基于此向 KDC 请求新令牌 - 这些是委托和模拟等情况。

我使用的 Kerberos 风格具有将应用程序设置为 Initiator 或 Acceptor 的配置。基于该 GSS-API 决定是否与 KDC 通信。

于 2020-08-24T11:53:59.010 回答
0

好的,这是我为满足我的要求所做的。

krb5_context  krb5Context;

 krb5_init_context(&krb5Context);

…

// get initial tkts (AS-REQ/AS-REP) for user userone@my.domain.com

krb5_get_init_creds_password(krb5Context,... )

…

// store the tkt in cache
krb5_cc_default()
krb5_cc_initialize()
krb5_cc_store_cred()
…

krb5_creds in_creds, out_creds;
memset(&in_creds, 0, sizeof(in_creds));

err = krb5_parse_name(krb5ctx, user, &user_princ); // user = “userone@my.domain.com” 

 err = krb5_parse_name(krb5ctx, spn, &server_princ); // spn = “HOST/test-host.my.domain.com@MY.DOMAIN.COM”

 in_creds.client = user_princ; 
 in_creds.server = server_princ; 

…
// send TGS-REQ if srv tkt not there in cache,
// receive a session tkt for above srvc in TGS-REP

krb5_get_credentials()

// decrypt the srvc tkt using the key in keytab file

krb5_decode_ticket()

krb5_kt_default()

krb5_kt_get_entry()
krb5_decrypt_tkt_part()

...
krb5_free...

这对我有用,但在这里面临两个问题。

  1. 我的测试工具在每次替代执行时都因“错误:无法联系任何 KDC 领域 'MY.DOMAIN.COM'”而失败。它交替通过测试。我已经验证了我的 krb5.conf 并且它具有领域所需的条目。

  2. 当测试成功时(解码 tkt、读取 keytab、解密 srvc tkt 时没有 krb5 错误),我在域控制器上捕获的数据包跟踪中没有看到 TGS-REQ/TGS-REP。但与此同时,在我运行测试工具的 linux 机器上存在“TGS-REQ”UDP 数据包。

上述观察的原因可能是什么?

于 2020-09-01T13:08:39.503 回答