Active Directory 05 - 初识 AD CS 证书服务

写在最前

如果你是信息安全爱好者,如果你想考一些证书来提升自己的能力,那么欢迎大家来我的 Discord 频道 Northern Bay。邀请链接在这里:

https://discord.gg/9XvvuFq9Wb

我会提供备考过程中尽可能多的帮助,并分享学习和实践过程中的资源和心得,大家一起进步,一起 NB~


背景

Will Schroeder(@harmj0y) and Lee Christensen(@tifkin_)在 2021 年夏发布了 Certified Pre-Owned: Abusing Active Directory 白皮书,内容很多。文中解释了什么是 Active Directory 证书服务(Active Directory Certificate Service - AD CS),指出了 Active Directory 证书体系在企业中已经普遍应用,并列出了他们的研究成果,列举了诸多利用的途径,及防御的方式。

证书相较于现有的 AD 权限维持或者提权的方式,如增加管理员用户,修改用户密码,黄金、白银票据等,有更加隐秘,更加持久的优势。更加隐秘是因为证书利用相对于其他敏感操作,相对难以被探测和发现(不触及 LSASS 等);更加持久是因为证书的默认过期时间是 5 年,而且不会随着主体密码的改变而失效。

本篇是 AD 系列中,证书章节的开篇,先了解以下证书服务的概念和特性。之后,我会在本地 Lab 配置 AD CS 服务器,再进一步深入到证书服务的不当配置利用,以及最后,看是否能写一下证书服务不当配置的检测和规范。

Active Directory 证书服务

首先我们要了解什么是 Active Directory 证书服务(Active Directory Certificate Service - 以下简称 AD CS)。证书服务,用官方的解释说,是微软的 PKI 系统的实现,早些时候,多用于 Active Directory 内智能卡(smart card)的登录鉴权。发展到现在,已经成为了 AD 环境中各个主体的另外一种鉴权方式(如 Windows Hello For Business)。

这里的证书,指的是 X.509 格式的电子文档,可以被用于加密,信息签名,以及鉴权。在域环境中,这张证书就是将一个主体与其 Public/Private 密钥对绑定。那么,域控就可以使用这个主体的密钥,来决定是否给这个主体分发 TGT。

AD CS 概念一览

  • PKI (Public Key Infrastructure) - PKI 是一整套证书签发、管理的系统。主要包括 CA(Certificate Authority),RA(Registration Authority),Certificate Store,and Certificate database
  • Certificate Store - Windows 本地证书存储,请求到的证书将存储在 Certificate Store 中
  • AD CS(Active Directory Certificate Service)- 微软为 AD 环境打造的 PKI 系统,来管理域内的证书签发和鉴权
  • CA(Certificate Authority)- 签发证书的服务
  • Enterprise CA - 与域集成的 CA 系统(通常会被配置在域中单独的服务器上),包含证书签发、证书模板等服务
  • CSR(Certificate Signing Request)- 向 CA 系统发送的证书签发的请求
  • EKU(Extended/Enhanced Key Usage)- Object Identifiers(OIDs),规定了签发证书的用途(是用来加密文件,或者主体鉴权等)
  • SAN(Subject Alternative Name)- 可以为一张证书绑定多个身份信息;比如 HTTPS 证书中就可以绑定多个域名,而不需要为每个域名都单独申请一张证书
  • UPN(User Principal Name)- 域中的证书是与 UPN 绑定的(这张证书是张三的,用于张三同学的鉴权),同时鉴权的主体也是是通过 UPN 来确定的;如果黑客控制了 SAN,在特定情况下,也就能 impersonate 任意用户
  • Principal - 域中的主体,可以是用户,也可以是服务
  • Certificate Template - 证书模板;Enterprise CA 签发的证书都是根据模板来生成;模板包含这张证书的元信息,如签发规则,谁有权限使用这个模板,证书的有效期,证书主体是谁,证书主体如何定义等等;Enterprise CA 会根据这些元信息来决定是否可以签发证书,以及签发什么样的证书

证书鉴权的条件

域中使用证书鉴权,需要两个条件,PKINIT 扩展,以及 Extended Key Usage(EKU)必须规定这个证书是用来做用户鉴权。

Public Key Cryptography for Initial Authentication(PKINIT)扩展

微软为了能在域中使用证书,根据 RFC4556 实现了自己的一套在 Kerberos 初次鉴权当中使用基于非对称加密(Public/Private Key)的协议。

这里所说的初次鉴权(Iniital Authentication),还有点不太明白。证书鉴权是否比普通鉴权多一个步骤,就是要先向 AD CS 请求证书,然后使用该证书,请求 TGT,接下来的流程,就和之前这篇文章 Active Directory 02 - Windows Kerberos Authentication(Kerberos 协议鉴权)一致了。这里也抛出一个问题,继续挖掘,再来解答。

Extended Key Usage(EKU)设置该证书做鉴权使用

EKU 必须包含证书可以做鉴权的 OID。这也是后面证书利用的条件。

EKU 可以想象成一个规定。他规定了这张证书的用途。这个规定,以 OID 的形式出现,例如:1.3.6.1.5.5.7.3.2。完整的 OID 可以在这里查询。Will Shroeder 的这篇文章 指出,多个 EKU OID 都可以设置证书做鉴权使用,而不只是 Client Authentication OID

图片来自https://posts.specterops.io/certified-pre-owned-d95910965cd2

满足了这两项条件,域就可以使用 X.509 证书做鉴权。

证书鉴权流程

现在,我们来了解一下证书鉴权的整个流程是什么样子的。

图片来自https://posts.specterops.io/certified-pre-owned-d95910965cd2
步骤拆解:

  1. 主体 生成一对密钥,包含 Public/Private Key
  2. 主体Enterprise CA 发送包含 Public Key申请主体的名字(Subject),申请的 证书模板名称 等数据的证书签发请求(CSR - Certificate Signing Request);
  3. Enterprise CA 会做一系列校验:
    • CSR 中指定过的 主体 是否有权限申请域证书(is allowed to request certificate);
    • CSR 中指定过的 证书模板 是否存在(does template exist);
    • CSR 中指定过的 主体 是否有权限使用该 证书模板(is allowed to enroll in template);
  4. 如果上述校验都通过, Enterprise CA 将以 CSR 中指定的 证书模板 为蓝本,为该 主体 生成证书;Enterprise CA 用自己的 Private Key 为证书做签名,返回给该 主体
  5. 主体 将收到的证书存放在 Certificate Store 中供后续使用;

有了证书,该主体就可以使用证书向 Domain Controller 申请 TGT。剩下的流程,就和之前这篇文章 Active Directory 02 - Windows Kerberos Authentication(Kerberos 协议鉴权)一致。

总结

这篇文章简单讲述了一下域证书服务的基本概念。接下来,我会继续深入,在 Lab 中配置 AD CS 服务,通过实践的方式,带出更多的域证书相关的内容。

这包括自域证书白皮书 Certified Pre-Owned: Abusing Active Directory 发布以来,已经被发现的证书利用的漏洞(CVE-2022–26923),以及证书利用的其他手法(Shadow Credentials)。

参考链接

  • https://datatracker.ietf.org/doc/html/rfc5280#section-4.2.1.6
  • https://www.giac.org/paper/gsec/1448/implementing-pki/102699
  • https://www.tevora.com/blog/3-steps-implementing-public-key-infrastructure-pki-architecture/
  • https://posts.specterops.io/certified-pre-owned-d95910965cd2
  • https://research.ifcr.dk/certifried-active-directory-domain-privilege-escalation-cve-2022-26923-9e098fe298f4
  • https://cpl.thalesgroup.com/faq/public-key-infrastructure-pki/what-public-key-infrastructure-pki#:~:text=The%20Public%20key%20infrastructure%20(PKI,digital%20certificates%20and%20public%2Dkeys.
  • https://www.techtarget.com/searchsecurity/definition/PKI
  • https://posts.specterops.io/certificates-and-pwnage-and-patches-oh-my-8ae0f4304c1d
  • https://www.pkisolutions.com/object-identifiers-oid-in-pki/
  • https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-pkca/d0cf1763-3541-4008-a75f-a577fa5e8c5b
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值