Kerberos

https://www.tarlogic.com/en/blog/how-kerberos-works/ https://www.zhihu.com/question/22177404/answer/492680179

1. 总结

  • 用户 和 服务 的帐号 (用户名/密码)只有 KDC (Key Distribution Center) 和它自己知道
  • KDC 为 用户 和 服务 颁发 ticket.
    • 用户 visit 服务 需要 service ticket
      • 流程
        • 用户 -(master key 加密一段认证信息)-> KDC
        • KDC (知道用户 master key) 解密信息, KDC 认证用户成功
        • KDC -(解密到明文信息)-> 用户, 用户认证 KDC 成功
        • KDC -(出票)-> 用户
          • 用用户密钥加密的 Service session key
            • 其实具体实现还有一步, 用户的 master key 从 KDC 处拿到 session key(有一个 有效期 ),然后再和KDC交互拿到 service session key
              • 相关步骤: TGT (Ticket Granting Ticket, encrypted with the KDC key), 是用来申请 TGS (Ticket Granting Service) 的 ticket
            • 区分 session key 和 service session key, session key 是 KDC 与用户之间的
          • 用 Service 密钥加密的 Service Ticket, (其实就是 TGS 用来访问 service, 用 service key加密) 包含:
            • Service session key
            • 用户的用户名
            • 用户的 Group
              • 如文件的“ read 、write 、modify、full control” 权限
        • 用户 -> 服务
          • Service Ticket
          • Service session key 加密“一段认证信息”
          • Service用自己的密钥解密 ticket, 得到 Service session key, 解密 “一段认证信息”
          • 双向认证
          • 接下来就可以使用 Service session key 通信通信
    • 用户 visit 用户 需要 service ticket
    • 服务 visit 服务 需要 service ticket
  • 一些细节
    • TGT 是为了避免客户端缓存用户的密钥(master key), 而特别向 KDC 申请的 ticket,这个 TGT 用用户的 master key 加密。用户解密完得到里面的 session key,就会将 master key 从内存删除,避免 master key 长期滞留在内存而泄漏,更加安全
      • 我的理解:也有助于 know cipher text attack? 防止密钥多次使用被 side channel
    • 发给 kdc 和 service 中的 req 中都带了加密过后的 timestamp, 防止 replay
    • 发给 kdc 的请求还会带上 user nonce, 并且 kdc 的相应也会附带这个 user nonce,也是为了防止 replay

2. 消息类型

kerberos_message_summary
1.2.2.1 -- kerberos_message_summary
  • KRB_AS_REQ: Used to request the TGT to KDC.
    • A encrypted timestamp with client key, to authenticate user and prevent replay attacks
    • Username of authenticated user
    • The service SPN asociated with krbtgt account
    • A Nonce generated by the user
  • KRB_AS_REP: Used to deliver the TGT by KDC.
    • Username
    • TGT
      • Username
      • Session key
      • Expiration date of TGT
      • PAC with user privileges, signed by KDC
    • Some encrypted data with user key
      • Session key
      • Expiration date of TGT
      • User nonce, to prevent replay attacks (KRB_AS_REQ 中传过来的)
  • KRBTGSREQ: Used to request the TGS to KDC, using the __TGT.
    • Encrypted data with session key
      • Username
      • Timestamp
    • TGT
    • SPN of requested service
    • Nonce generated by user
  • KRB_TGS_REP: Used to deliver the TGS by KDC.
    • Username
    • TGS, which contains
      • Service session key
      • Username
      • Expiration date of TGS
      • PAC with user privileges, signed by KDC
    • Encrypted data with session key
      • Service session key
      • Expiration date of TGS
      • User nonce, to prevent replay attacks
KRB_AS_REQ
1.2.2.2 -- KRB_AS_REQ
  • KRBAPREQ: Used to authenticate a user against a service, using the __TGS.
    • TGS
    • Encrypted data with service session key
      • Username
      • Timestamp, to avoid replay attacks
  • KRB_AP_REP: (Optional) Used by service to identify itself against the user.
  • KRB_ERROR: Message to comunicate error conditions.

3. Attacks

Copyright © ChrisLinn 2017-2018 all right reserved,powered by Gitbook该文件修订时间: 2020-02-15 15:47:54

results matching ""

    No results matching ""