ADCS介绍

1. 介绍

Active Directory Certificate Services (ADCS)可以让组织建立和管理自身的 Public Key Infrastructure (PKI) ,为安全通信、用户身份验证和数据保护奠定基础。它涵盖 Certificate Authority (CA) 、 digital certificates 、 PKI architecture 等多个概念

下面是一些基本概念:

1.1. 公钥基础设施(PKI)

Public Key Infrastructure (PKI) 是一种利用数字证书和公钥加密技术,在不安全的网络(如互联网)上提供安全通信的系统。PKI 能够实现电子文档、电子邮件及其他在线通信形式的数字签名、加密和身份验证。

数字证书是一种将公钥与个人、组织、设备或服务绑定的电子文档。它由受信任的 Certificate Authority (CA) 签发并签名,用于验证证书持有者的身份及公钥的完整性。证书包含公钥、主体名称、签发者名称、有效期及其他属性。

PKI 的优势:

  • 保密性:PKI 允许对存储或传输的数据进行加密。
  • 完整性:数字签名用于识别数据在传输过程中是否被篡改。
  • 真实性:消息摘要使用发送方的私钥进行数字签名。由于摘要只能通过发送方对应的公钥解密,这证明消息只能来自发送方(不可否认性)。

ADCS 相较于 PKI 的优势:

  • 与 AD DS 紧密集成,简化了使用 Active Directory 的企业组织内的证书管理和身份验证
  • 内置支持使用证书吊销列表(CRL)和在线证书状态协议(OCSP)进行证书吊销
  • 支持自定义证书模板,允许管理员定义 AD CS 颁发的证书的属性、扩展和策略
  • 可扩展性和冗余性,允许在层次结构或负载均衡集群中部署多个证书颁发机构。

1.2. 什么是 ADCS?

Active Directory Certificate Services (AD CS) 是一项 Windows 服务器角色,使组织能够建立和管理自己的公钥基础设施(PKI)。

AD CS 与 Active Directory 域服务(AD DS)集成,后者是 Windows 网络中用户、计算机、组和其他对象的集中式数据库。

AD CS 可用于保护各种网络服务,例如安全套接字层/传输层安全协议(SSL/TLS)、虚拟专用网络(VPN)、远程桌面服务(RDS)和无线局域网(WLAN)。它还可以为智能卡和其他物理令牌颁发证书,这些证书可用于对用户进行网络资源身份验证。随后,存储在智能卡或令牌上的私钥将用于对用户进行网络身份验证。

Active Directory 证书服务包括:

  • 数字证书
  • 证书颁发机构
    • 独立 CA 或企业 CA
    • 根 CA 或从属 CA
  • 证书模板
  • 密钥对生成
  • 证书吊销
  • 安全通信
  • 数字签名
  • 加密与解密
  • 增强安全性与身份管理

1.3. 常见ADCS术语

ADCS的核心是 Certificate Authority (CA) 概念,这是一个签发和管理数字证书的守护者。这些证书充当数字护照的角色,为网络内用户、设备或服务的真实性提供担保。

以下是一些关键的术语

1.3.1. Certificate Templates

这些预定义的配置决定了 AD CS 颁发的证书属性和用途。它们包含证书用途、密钥大小、有效期和颁发策略等设置。AD CS 提供标准模板(例如 Web 服务器、代码签名),同时赋予管理员创建满足特定业务需求的自定义模板的能力。

1.3.2. Public Key Infrastructure (PKI)

一个集成了硬件、软件、策略和程序的综合系统,用于创建、管理、分发和撤销数字证书。它包含认证机构(CAs)和注册机构,通过公钥密码学验证参与电子交易的实体。

1.3.3. Certificate Authority (CA)

此组件向用户、计算机和服务颁发证书,同时负责监督证书的有效期管理。

1.3.4. Certificate Enrollment

实体向 CA 请求证书的过程,在颁发证书之前需先验证请求者的身份。

1.3.5. Certificate Manager

负责证书的颁发、管理以及对注册和撤销请求的授权。

1.3.6. Digital Certificate

一种包含身份详细信息(如用户或组织名称)及相应公钥的电子文档。这些证书用于身份验证,证明个人或设备的身份。

1.3.7. Certificate Revocation

ADCS 支持在证书遭到破坏或不再有效时将其撤销。撤销可以通过证书撤销列表 (CRL) 或在线证书状态协议 (OCSP) 进行管理。

1.3.8. Key Management

ADCS 提供了管理私钥的机制,确保其安全性和正确使用。

1.3.9. Backup Operator

备份操作员负责备份和还原文件及目录。备份操作员通过 Active Directory 用户和计算机或计算机管理进行指派。他们可以备份和还原系统状态(包括 CA 信息)、启动和停止 AD CS 服务、拥有系统备份用户权限,并读取 CA 数据库中的记录和配置信息。

1.3.10. Standalone CA & Enterprise CA

独立 CA(Standalone CAs)脱离 Active Directory 独立运行,允许手动或通过 Web 进行证书请求。相比之下,企业 CA(Enterprise CAs)依赖于 Active Directory,为组织内的用户、设备和服务器颁发证书,并使用组策略或证书注册 Web 服务实现流程自动化。

1.3.11. Certificate Signing Requests (CSRs)

证书签名请求是用户或设备提交给 ADCS CA 以获取证书的请求。CSR 包含用户或设备的公钥和其他标识信息,例如证书的主体名称和预期用途。当 CSR 提交给 CA 时,CA 会验证请求者的身份并执行各项检查以确保 CSR 的完整性和有效性。如果 CSR 获得批准,CA 将颁发一份数字证书,将请求者的公钥与其身份和预期用途绑定。

1.3.12. Certificate Revocation List (CRL)

由 CA 颁发的经过数字签名的清单,列出了已撤销的证书。CRL 包含被 CA 作废的证书详细信息,确保实体可以验证特定证书的撤销状态。

1.3.13. Extended/Enhanced Key Usages (EKUs)

描述证书授权用途的证书扩展。EKU 允许管理员将证书用途限制在特定的应用程序或场景中,例如代码签名、电子邮件加密或智能卡登录。AD CS 提供了预构建的 EKU(如服务器身份验证、客户端身份验证和代码签名),同时也赋予管理员创建符合特定业务需求的自定义 EKU 的能力。

1.4. 常见ADCS的攻击场景

  • 场景一:证书窃取与恶意注册
  • 场景二:通过配置错误的模板实现权限提升
  • 场景三:未授权 CA 遭入侵
  • 场景四:恶意 CA 服务器引入
  • 场景五:CA 管理员密码强度不足
  • 场景六:CA 服务器被攻陷

ADCS 配置不当的探索始于 SpecterOps 的开创性白皮书《Certified Pre-Owned - Abusing Active Directory Certificate Services》,该白皮书深入探讨了从 ESC1 到 ESC8 的配置不当问题。在此基础上,其他研究人员进一步扩展了漏洞探索的范围。certipy 的开发者 Oliver Lyak 发现了两种配置不当,分别称为 ESC9 和 ESC10 。随后,Sylvain Heiniger@compasssecurity 团队识别出另一种标记为 ESC11 的配置不当。

  • 滥用证书模板 (Abusing Certificate Templates):此类攻击包含 ESC1、ESC2、ESC3、ESC9 和 ESC10,重点关注证书模板内的错误配置。
  • 滥用 CA 配置 (Abusing CA Configuration - ESC6):利用证书颁发机构(CA)配置中的弱点属于此类攻击。
  • 滥用访问控制 (Abusing Access Control - ESC4, ESC5, ESC7):了解与访问控制相关的错误配置至关重要,这些配置突显了 ADCS 内部潜在的脆弱性。
  • NTLM 重放 (NTLM Relay - ESC8, ESC11):利用 NTLM 重放错误配置非常关键,ESC8 和 ESC11 深入探讨了 ADCS 在这方面的漏洞。
  • 其他 ADCS 攻击 (Miscellaneous ADCS Attacks):此类别涵盖了其他重大漏洞,包括 Certifried 和“不支持 PKINIT”(PKINIT not Supported),提供了对 ADCS 各种攻击向量的广泛概述。

1.5. 证书

证书是一种 X.509-formatted digitally signed document ,用于加密、消息签名和身份验证等多种目的。它包含多个关键字段:

  • Subject :证书所有者的身份
  • Public Key :将主体与独立的私钥关联起来
  • NotBefore 和 NotAfter 日期:定义证书的有效期
  • Serial Number :由颁发 CA 分配的唯一标识符
  • Issuer :标识证书颁发者,通常为证书颁发机构(CA)
  • SubjectAlternativeName :指定与主体关联的替代名称
  • Basic Constraints :界定证书是证书颁发机构还是终端实体,以及任何使用限制
  • Extended Key Usages (EKUs) :描述证书特定使用场景的对象标识符。常见的扩展密钥用途包括代码签名、加密文件系统、安全电子邮件、客户端和服务器身份验证以及智能卡登录等功能
  • Signature Algorithm 和 Signature :指示用于签署证书的算法以及使用颁发者私钥生成的签名

1.6. Certificate Authorities  证书颁发机构

Certificate Authorities (CAs) 是负责颁发证书的关键实体

根 CA 证书是由 CA 自身通过使用其私钥对新证书进行签名而创建的,这意味着根 CA 证书是自签名的。AD CS 负责将证书的主体和颁发者字段设置为该 CA 的名称,并将基本约束设置为Subject Type=CA。此外,生效日期/截止日期字段默认设置为五年。完成这些操作后,主机可以将根 CA 证书添加到其信任存储中,从而与该 CA 建立信任关系。

ADCS 将受信任的根 CA 证书存储在容器 CN=Public Key Services,CN=Services,CN=Configuration,DC=,DC= 下的四个位置:

  1. Certification Authorities container :此部分定义了顶级根 CA 证书,构成 AD CS 环境中信任的基础。每个 CA 的证书数据以 certificationAuthority 对象类的 AD 对象形式表示,并存储在此容器中。Windows 计算机普遍将这些根 CA 证书纳入其受信任的根证书颁发机构存储中,作为证书信任验证的基础。
  2. Enrollment Services container :此空间专用于 AD CS 中启用的企业 CA,为每个企业 CA 承载 AD 对象。这些对象封装了关键属性,如 pKIEnrollmentService 对象类、cACertificate 数据、定义 CA DNS 的 dNSHostName,以及概述证书配置的 certificateTemplates。AD 内的客户端通过这些企业 CA 请求证书,并遵循证书模板中指定的设置。企业 CA 颁发的证书将部署到 Windows 计算机的中间证书颁发机构存储中。
  3. NTAuthCertificates AD object :此元素定义了用于向 AD 进行身份验证的关键 CA 证书。通过 certificationAuthority 对象类标识,它包含 cACertificate 属性,定义了一系列受信任的 CA 证书。AD 网络中的 Windows 设备将这些 CA 集成到其"中间证书颁发机构"存储中。使用证书向 AD 进行身份验证时,要求客户端证书必须由 NTAuthCertificates 中列出的某个 CA 签名。
  4. AIA (Authority Information Access) container :该存储库托管代表中间和交叉证书颁发机构(CA)的 AD 对象,有助于验证证书链。每个 CA(由 certificationAuthority 对象类表示)包含代表其证书的 cACertificate 数据。这些中间 CA 被部署到 Windows 计算机的"中间证书颁发机构"存储中,对于 PKI 层次结构内无缝的证书链验证至关重要。

1.7. Certificate Templates 证书模板

AD CS 企业 CAs 使用 certificate templates 来建立证书设置,包括注册策略、有效期、预期用途、主题规范和请求者资格。这些模板通过证书模板功能进行管理,并作为对象类为 pKICertificateTemplate 的活动目录对象存储。这些证书模板的设置通过属性定义,而其注册权限和模板编辑则通过其安全描述符进行控制。

活动目录证书模板对象中的 pKIExtendedKeyUsage 属性包含一组启用的 OIDs (Object Identifier) ,这些属性影响证书的允许用途。这些 EKU OIDs 涵盖了诸如加密文件系统、代码签名、智能卡登录和客户端身份验证等功能,这些功能在 PKI Solutions 对 EKU OIDs 的详细分类中有所说明。

以下EKUs可以向AD进行身份验证

描述 (EKU) 唯一标识符 (OID)
客户端身份验证 1.3.6.1.5.5.7.3.2
PKINIT 客户端身份验证* 1.3.6.1.5.2.3.4
智能卡登录 1.3.6.1.4.1.311.20.2.2
任意用途 2.5.29.37.0
SubCA (no EKUs)

在ADCS的部署中, 1.3.6.1.5.2.3.4 OID 需要手动添加,可用于客户端身份验证。

更多内容,看这里

1.8. 证书注册流程

要从 ADCS 获取证书,客户端需要完成注册流程。

  1. 查找企业CA :客户端的首要步骤是找到企业 CA,该 CA 基于注册服务容器中的对象。
  2. 生成公私钥对创建CSR:客户端生成公私钥对,并创建证书签名请求(CSR)消息。该消息包含公钥以及其他各种详细信息,如证书模板名称和证书主题。
  3. 私钥签名CSR并发送给企业CA:客户端使用其私钥对 CSR 进行签名,并将其发送至企业 CA 服务器。
  4. CA 检查客户端是否有权请求证书:CA 服务器检查客户端是否获得授权以请求证书。如果获得授权,它将查找 CSR 中指定的证书模板 AD 对象,以决定是否颁发证书。CA 会检查该证书模板 AD 对象的权限,以确认当前进行身份验证的账户是否允许获取证书。
  5. CA 生成并签名证书,并在允许的情况下发送给客户端:如果权限允许,CA 将根据证书模板定义的“蓝图”设置(如 EKU、密码学设置和颁发要求)生成证书。如果证书模板设置允许,CA 还会使用 CSR 中提供的其他信息,并使用其私钥对证书进行签名,最后将其返回给客户端。
  6. 客户端接收证书:收到证书后,它会被存储在 Windows 证书存储区中。随后,该证书即可根据其内部包含的扩展密钥用法 (EKU) 对象标识符 (OID) 所定义的特定用途进行使用。

1.9. 颁发要求

除了证书模板固有的限制和企业 CA 的访问控制外,还有两种常用设置来管理证书注册。这些被称为颁发要求,包括经理批准以及授权签名数量和应用策略的设置
运行certsrv.msc,右键单击证书模板并选择管理,右键单击任意模板并选择属性,选择安全选项卡
Pasted image 20260310152713.png
CA 证书管理器批准限制会触发对 AD 对象中 msPKI-EnrollmentFlag 属性的 CT_FLAG_PEND_ALL_REQUESTS (0x2) 位进行配置。其结果是,所有基于该模板的证书请求都会被置于“挂起”状态,并显示在 certsrv.msc待处理请求 栏目中。在证书正式颁发之前,需要证书管理员手动执行批准或拒绝操作。

第二组限制包括授权签名数量和应用策略设置。前者规定了 CA 接受证书签名请求(CSR)所必需的签名数量;而后者则定义了签署该 CSR 的证书必须具备的特定 EKU OID。