使用PSPKIAudit审计和分析AD CS PKI基础设施

本文详细介绍了如何使用PSPKIAudit工具对Active Directory证书服务进行安全审计,包括自动扫描和手动分析方法,帮助识别ESC系列漏洞和错误配置,提升PKI基础设施的安全性。

AD CS:如何使用PSPKIAudit审计和分析您的PKI?

I. 概述

在本文中,我们将探索如何审计Windows Server下的AD CS(Active Directory证书服务)证书颁发机构服务器,以识别潜在风险、漏洞或错误配置。

此审计适用于两个主要场景:

  • 常规安全流程,如年度测试或计划性检查
  • 强化操作的前期准备

了解PKI配置的当前状态有助于更好地理解技术挑战,并制定适合自身环境的安全策略。

II. 关于PKI审计

PKI基础设施的审计可以采取多种形式,常与针对证书颁发机构服务器的渗透测试相混淆。然而,这两种方法是互补但截然不同的。错误配置可能不会立即构成威胁,但在不久的将来可能变得至关重要。

相反,渗透测试未能破坏基础设施并不意味着其已正确加固。

还存在更传统的审计形式,无论是手动还是自动化的。流行工具如PingCastle或Purple Knight可以分析PKI的某些方面,特别是:

  • 发布的证书模板
  • 在Active Directory中与这些模板关联的ACL
  • 引用的撤销信息(CRL/AIA)

然而,出于性能考虑,这些工具仅限于Active Directory中暴露的数据,不会直接查询证书颁发机构(CA)的数据库,特别是在涉及独立CA或与目录集成不良的CA时。

实际上,大多数关键元素都驻留在CA数据库中:颁发的证书、管理角色和权限、安全设置(算法、密钥大小、CSP)或配置的扩展。

III. 自动化审计

存储在Active Directory中的信息不足以正确审计PKI基础设施。许多关键元素——如CA设置、颁发的证书或某些安全选项——并未在目录中暴露。

为了更深入,可以使用多种工具自动化审计:

  • Certutil,Windows原生工具
  • PowerShell模块PSPKI,非常完整但需要一些自定义开发
  • 基于PSPKI的PSPKIAudit模块,定期更新,旨在检测已知漏洞

我们将在本文后续部分使用最后一个工具。

A. PSPKIAudit介绍

PSPKIAudit是一个基于PSPKI的开源PowerShell模块。它旨在自动(或手动)分析ADCS证书颁发机构服务器,以检测已知的配置缺陷。

该模块深度评估配置以检测CA是否易受已知攻击(ESC):

代码 名称/漏洞类型 描述
ESC1 错误配置的证书模板 允许使用任意身份(例如,主题名称=Supply)颁发证书的模板
ESC2 错误配置的证书模板 允许具有扩展特权的非受限用户自动注册的模板
ESC3 错误配置的注册代理模板 用户可以在没有足够控制的情况下为其他帐户请求证书
ESC4 易受攻击的证书模板ACL 证书模板上的ACL允许未经授权的用户修改或使用它
ESC5 易受攻击的PKI AD对象ACL AD中与PKI相关的对象(模板、服务)具有危险的写入权限
ESC6 EDITF_ATTRIBUTESUBJECTALTNAME2 CA允许客户端指定任意SAN(主题替代名称),为冒充打开大门
ESC7 易受攻击的CA ACL CA服务器本身的ACL允许用户成为CA管理员
ESC8 NTLM中继到AD CS HTTP端点 CA暴露Web界面(例如certsrv)易受NTLM中继攻击
Misc 显式映射 可以滥用的Kerberos显式映射帐户和证书

PSPKIAudit模块主要依赖两个主要命令:

  • Invoke-PKIAudit:启动AD CS环境的自动扫描以审计当前设置
  • Get-CertRequest:通过直接查询其数据库来检查证书颁发机构颁发的证书

B. 安装

在使用PSPKIAudit模块之前,需要一些先决条件。不一定要直接在证书服务器上执行。

第三方工作站即可,只要具备:

  • PSPKI模块
  • 用于证书和Active Directory的RSAT套件

还需要一个对CA具有读取权限的帐户。默认情况下将使用管理员帐户,但如果正确定义了权限,完全可以使用服务帐户。

首先在服务器上安装先决条件:

1
Get-WindowsCapability -Online -Name "Rsat.*" | where Name -match "CertificateServices|ActiveDirectory" | Add-WindowsCapability -Online

然后安装PSPKI模块(先决条件):

1
Install-Module -Name PSPKI Scope CurrentUser -Force

然后我们可以下载并使用我们的模块。从项目的GitHub下载ZIP格式的内容,并将其解压缩到文件夹中。

内容显示如下形式。

然后需要使用Unblock-File命令解锁脚本目录的内容:

1
2
cd c:\Temp\PSPKIAudiit-main
Get-ChildItem -Recurse | Unblock-File

如果没有收到错误,则表示模块已成功导入。

C. 自动分析

我们将首先启动自动扫描。从PS1窗口或ISE编辑器开始,首先导入PSPKI模块以避免任何问题,然后使用以下命令启动分析:

1
Invoke-PKAudit

此命令查找在Active Directory中注册的证书服务器,并依次执行分析。您可以使用-ComputerName-CAName参数指定特定服务器或证书颁发机构。

要探索其他参数和高级选项,可以参考GitHub上的PKIAudit模块页面。

命令启动后,请等待片刻:每个证书颁发机构的信息将显示在屏幕上。

如果没有显示任何结果或者Misconfiguration列为空,则表示在分析过程中未检测到已知漏洞。

在这里,我们发现证书模板存在漏洞和错误配置,这在我们的案例中是故意的:ESC4。

根据文档,ESC4漏洞涉及证书模板上配置错误的权限(ACL)。当未经授权的用户或组对敏感模板具有注册(Enroll)或自动注册(Autoenroll)权限时,就会出现这种情况,从而为通过颁发恶意证书进行权限提升打开了大门。

我们可以在模板级别验证这一点。这里,经过身份验证的用户拥有过多的权限!

如果有其他错误,请花时间分析结果。在我们的实验室中,这是唯一报告的警报。

D. 手动分析

PSPKIAudit模块还允许基于对颁发的证书和CA内部参数的解释进行手动分析。

这种方法对安全架构师和Windows专家特别有用,因为它提供了超越自动检测漏洞的潜在弱点的更精细视图。

通过交叉引用CA数据库(通过Get-CertRequest命令)的信息与PKI安全最佳实践,可以:

  • 检测使用不当用途颁发的证书(例如,特权帐户的客户端身份验证)
  • 识别异常长的有效期
  • 发现通过注册代理(Enrollment Agents)无控制颁发的证书
  • 或检查关键扩展,如主题替代名称

这种手动分析虽然技术性更强,但对于建立适合环境的强大修复计划至关重要。

现在,使用以下命令启动证书扫描:

1
Get-CertRequest

在大型环境中,我建议限制搜索或将其分段。还将结果导出到CSV文件以便更好地解释,或导出到变量,这完全取决于数据库的大小,这里我们讨论的是超过10,000个证书。

通过深入分析CA颁发的证书的SAN扩展,我们识别出一个可疑证书。

具体来说,一个标准用户"mehdi"成功生成了以管理员帐户名称为主题替代名称(SAN)的请求。这种配置极具问题,因为它允许非特权用户通过看似合法的证书冒充管理员身份。

这种情况清楚地表明了与ESC6漏洞相关的缺陷(启用了EDITF_ATTRIBUTESUBJECTALTNAME2),它允许具有任意SAN的请求。

风险和后果:

  • 以管理员身份进行身份验证劫持(Kerberos/LDAPS)
  • 绕过基于身份访问控制
  • 创建"黄金"证书以维持或扩展权限
  • 破坏AD基础设施内的信任

我们应该立即撤销此证书,即使这只是一个受控测试。如果此类配置出现在生产环境中,则代表关键漏洞。

还可以分析证书请求的来源,通过识别提交每个请求的进程。这可以检测异常:例如,根据您公司的实践,通过PowerShell ISE、Certify.exe或Web浏览器(certsrv)发送的请求在某种上下文中可能是合法的,但在另一种上下文中可能可疑。

使用以下命令列出请求来源:

1
2
$var = Get-CertRequest
$var | Group-Object RequesterProcessName | Sort-Object Count Descending

在这里,我们发现大多数请求是从PowerShell ISE生成的,这在我们的实验室中是正常的。

使用PKIReport工具还可以获得关于发出证书请求的前几位用户/帐户和前5位证书名称的视图和清单,以及使用的签名协议和其他信息。此工具即将推出,将在未来的文章中介绍。

E. 观察结果

许多配置将监控工作集中在Active Directory上(通过SOC、日志、访问控制),而完全忽略了信任链,尽管它们同样敏感。

在这种情况下,具有伪造SAN或滥用用途的恶意证书请求很容易被忽视,逃脱经典检测,并允许恶意操作,如权限提升、身份冒充或持久化。

IV. 结论

与PKI基础设施相关的漏洞不断发展,并越来越成为攻击者优先探索的领域。

在我的审计和强化任务中,我注意到许多组织固守历史选择,担心破坏表面上稳定的系统。然而,在PKI领域,停滞通常构成比变更更大的风险。

因此,必须将PKI审计视为身份安全的一个独立组成部分,与Active Directory目录控制同等重要,同时跟踪变更并进行定期清单。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计