ADCS攻击面挖掘与利用(上) | 高级攻防02

VSole2022-01-06 15:25:13

在BlackHat21中,Specterops发布了Active Directory Certificate Services利用白皮书。尽管ADCS并不是默认安装,但在大型企业域中通常被广泛部署。

本文分为上下两篇,结合实战,讲述如何在域环境中利用ADCS手法拿下域控,哪些对象ACL可用于更好的权限维持,并涉及ADCS的基础架构、攻击面、后利用等。

1 技术背景

1.证书服务

首先介绍一下PKI公钥基础结构。

在PKI(公钥基础结构)中,数字证书用于将公密钥对的公钥与其所有者的身份相关联。为了验证数字证书中公开的身份,所有者需要使用私钥来响应质询,只有他才能访问。



Microsoft提供了一个完全集成到Windows生态系统中的公钥基础结构(PKI)解决方案,用于公钥加密、身份管理、证书分发、证书撤销和证书管理。

启用后,会识别注册证书的用户,以便以后进行身份验证或撤销证书,即Active Directory Certificate Services (ADCS)。

再来看一下ADCS关键术语。

  • 根证书颁发机构 (Root Certification Authority)
  • 证书基于信任链,安装的第一个证书颁发机构将是根CA,它是我们信任链中的起始。
  • 从属CA(Subordinate CA)
  • 从属CA是信任链中的子节点,通常比根CA低一级。
  • 颁发CA(Issuing CA)
  • 颁发CA属于从属CA,它向端点(例如用户、服务器和客户端)颁发证书,并非所有从属CA都需要颁发CA。
  • 独立CA(Standalone CA)
  • 通常定义是在未加入域的服务器上运行的CA。
  • 企业CA(Enterprise CA)
  • 通常定义是加入域并与Active Directory域服务集成的CA。
  • 电子证书(Digital Certificate)
  • 用户身份的电子证明,由Certificate Authority发放(通常遵循X.509标准)。
  • AIA(Authority Information Access)
  • 权威信息访问(AIA)应用于CA颁发的证书,用于指向此证书颁发者所在的位置引导检查该证书的吊销情况。
  • CDP(CRL Distribution Point)
  • 包含有关CRL位置的信息,例如URL (Web Server)或 LDAP路径(Active Directory)。
  • CRL(Certificate Revocation List)
  • CRL是已被撤销的证书列表,客户端使用CRL来验证提供的证书是否有效。

接下来介绍ADCS服务架构。

微软官方ADCS服务架构中的两层PKI环境部署结构示例如下:

ORCA1:首先使用本地管理员部署单机离线的根CA,配置AIA及CRL,导出根CA证书和CRL文件。

由于根CA需要嵌入到所有验证证书的设备中,所以出于安全考虑,根CA通常与客户端之间做网络隔离或关机且不在域内,因为一旦根CA遭到管理员误操作或黑客攻击,需要替换所有嵌入设备中的根CA证书,成本极高。

为了验证由根CA颁发的证书,需要使CRL验证可用于所有端点,为此将在从属CA(APP1)上安装一个Web服务器来托管验证内容。根CA机器使用频率很低,仅当需要进行添加另一个从属/颁发CA、更新CA或更改CRL。

APP1:用于端点注册的从属CA,通常完成以下关键配置:

将根CA证书放入Active Directory的配置容器中,这样允许域客户端计算机自动信任根CA证书,不需要在组策略中分发该证书。

在离线ORCA1上申请APP1的CA证书后,利用传输设备将根CA证书和CRL文件放入APP1的本地存储中,使APP1对根CA证书和根CA CRL的迅速直接信任。

部署Web Server以分发证书和CRL,设置CDP及AIA。

再看一下LDAP属性。

ADCS在LDAP容器中进行了相关属性定义:

CN=Public Key Services,CN=Services,CN=Configuration,DC=,DC=,

Certificate templates

ADCS 的大部分利用面集中在证书模板中,存储为:

CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=,DC= ,

其objectClass为pKICertificateTemplate,以下为证书的字段:

  • 常规设置:证书的有效期;
  • 请求处理:证书的目的和导出私钥要求;
  • 加密:要使用的加密服务提供程序 (CSP) 和最小密钥大小;
  • Extensions:要包含在证书中的X509v3扩展列表;
  • 主题名称:来自请求中用户提供的值,或来自请求证书的域主体身份;
  • 发布要求:是否需要“CA证书管理员”批准才能通过证书申请;
  • 安全描述符:证书模板的ACL,包括拥有注册模板所需的扩展权限。

证书模板颁发首先需要在CA的certtmpl.msc进行模板配置,随后在certsrv.msc进行证书模板的发布。在Extensions中证书模板对象的EKU(pKIExtendedKeyUsage)属性包含一个数组,其内容为模板中已启用的OID (Object Identifiers)。

这些自定义应用程序策略(EKU oid)会影响证书的用途,以下 oid的添加才可以让证书用于Kerberos身份认证。

描述

OID

Client Authentication

1.3.6.1.5.5.7.3.2

PKINIT Client Authentication

1.3.6.1.5.2.3.4

Smart Card Logon

1.3.6.1.4.1.311.20.2.2

Any Purpose

2.5.29.37.0

SubCA

(no EKUs)

Enterprise NTAuth store

NtAuthCertificates包含所有CA的证书列表,不在内的CA无法处理用户身份验证证书的申请。

向NTAuth发布/添加证书:certutil –dspublish –f IssuingCaFileName.cer NTAuthCA;

要查看NTAuth中的所有证书:certutil –viewstore –enterprise NTAuth;

要删除 NTAuth中的证书:certutil –viewdelstore –enterprise NTAuth。

域内机器在注册表中有一份缓存:

HKLM\SOFTWARE\Microsoft\EnterpriseCertificates\NTAuth\Certificates

当组策略开启“自动注册证书”,等组策略更新时才会更新本地缓存。

Certification Authorities & AIA

Certification Authorities容器对应根CA的证书存储。当有新的颁发CA安装时,它的证书则会自动放到AIA容器中。


来自他们容器的所有证书同样会作为组策略处理的一部分传播到每个网络连通的客户端,当同步出现问题的话,KDC认证会抛KDC_ERR_PADATA_TYPE_NOSUPP报错。

Certificate Revocation List

前面在PKI服务架构中提到了,证书吊销列表(CRL)是由颁发相应证书的CA发布的已吊销证书列表,将证书与CRL进行比较是确定证书是否有效的一种方法。

CN=<CA name>,CN=<ADCS server>,CN=CDP,CN=Public Key Services,CN=Services,CN=Configuration,DC=,DC=

通常证书由序列号标识,CRL除了吊销证书的序列号之外,还包含每个证书的吊销原因和证书被吊销的时间。

2. 证书注册

先来看看证书注册流程。

ADCS 认证体系中的证书注册流程大致如下:


  • 客户端创建公钥/私钥对;
  • 将公钥与其他信息 (如证书的主题和证书模板名称) 一起放在证书签名请求 (CSR) 消息中,并使用私钥签署;
  • CA首先判断用户是否允许进行证书申请,证书模板是否存在以及判断请求内容是否符合证书模板;
  • 通过审核后,CA生成含有客户端公钥的证书并使用自己的私钥来签署;
  • 签署完的证书可以进行查看并使用。

再来看看证书注册方式。首先,证书颁发机构Web注册。

在部署CA时勾选证书颁发机构Web注册,即可在"http://CA-Computer/certsrv"身份认证后进行证书申请。

然后是客户端GUI注册。

域内机器可以使用certmgr.msc (用户证书)、certlm.msc (计算机证书) 、GUI请求证书。

接下来是命令行注册。

域内机器可以通过certreq.exe或Powershell:Get-Certificate申请证书,后面有使用示例。

最后是DCOM调用。

基于DCOM的证书注册遵循MS-WCCE协议进行证书请求,目前大多数C#、python、Powershell的ADCS利用工具都按照 WCCE进行证书请求。

聊聊证书注册权限。在Active Directory中权限控制是基于访问控制模型的,其包含两个基本部分:

  • 访问令牌,其中包含有关登录用户的信息;
  • 安全描述符,其中包含保护安全对象的安全信息。

在ADCS中使用两种安全性定义注册权限 (主体可以请求证书) ,一个在证书模板AD对象上,另一个在企业CA本身上。在颁发CA机器上使用certtmpl.msc可查看所有证书模板,通过安全扩展可以对证书模板的用户访问权限查看。

可以在颁发CA机器上使用certsrv.msc,查看CA对于用户的访问权限设置。

2 证书使用

1. 证书认证

Kerberos认证:

Kerberos是域环境中主要的认证协议,其认证流程大致如下:

AS_REQ:client用client_hash、时间戳向KDC进行身份验证;

AS_REP:KDC检查client_hash与时间戳,如果正确则返回client由krbtgt哈希加密的TGT票据和PAC等相关信息;

TGS_REQ:client向KDC请求TGS票据,出示其TGT 票据和请求的SPN;

TGS_REP:KDC如果识别出SPN ,则将该服务账户的 NTLM哈希加密生成的ST票据返回给client;

AP_REQ:client使用ST请求对应服务,将PAC传递给服务进行检查。服务通过PAC查看用户的SID和用户组等并与自身的ACL进行对比,如果不满足则作为适当的RPC状态代码返回;

AP_REP:服务器验证AP-REQ,如果验证成功则发送 AP-REP,客户端和服务端通过中途生成的Session key等信息通过加解密转换验证对方身份。

PKINIT认证:

在RFC 4556中定义了PKINIT为Kerberos的扩展协议,可通过X.509证书用来获取Kerberos票据(TGT)。

PKINIT与Kerberos差别主要在AS阶段:

PKINIT AS_REQ:发d送内容包含证书,私钥进行签名。KDC使用公钥对数字签名进行校验,确认后返回使用证书公钥加密的TGT并且消息是使用KDC私钥签名;

PKINIT AS_REP:客户端使用KDC公钥进行签名校验,随后使用证书私钥解密成功拿到TGT。

详细的协议流程规范

"http://pike.lysator.liu.se/docs/ietf/rfc/45/rfc4556.xml"

NTLM凭据:

在2016年,通过证书获取NTLM的功能就被集成在kekeo和mimikatz中,核心在于当使用证书进行PKCA扩展协议认证的时候,返回的PAC中包含了NTLM票据

即使用户密码改了,通过证书随时可以拿到NTLM。获取能用来进行Kerberos身份认证的证书需要满足以下几个条件。

首先是证书模板OID:

前面我们提到了,目前已知应用程序策略(oid)只有包含了Client Authentication、PKINIT Client Authentication、Smart Card Logon、Any Purpose、SubCA时,对应的证书才能充当PKINIT身份认证凭据。

然后是证书请求权限:

  • 用户拥有向CA申请证书的权限;
  • 用户拥有证书模板申请证书的权限。

2. 证书获取

导出机器证书:

通过certlm.msc图形化或certutil.exe进行证书导出。

当私钥设置为不允许导出的时候,利用Mimikatz的crypto::capi命令可以patch当前进程中的capi,从而利用Crypto APIs导出含有私钥的证书。

导出用户证书:

通过certmgr.msc图形化或certutil.exe进行用户证书导出。

遇到私钥限制同样可尝试crypto::capi导出证书。

本地检索证书:

在实战中会遇到证书、私钥文件就在文件夹内并不需要导出的情况,其后缀文件主要有以下几种:

后缀

描述

.pfx\ .p12\ .pkcs12

含公私钥,通常有密码保护

.pem

含有base64证书及私钥,可利用openssl格式转化

.key

只包含私钥

.crt\ .cer

只包含证书

.csr

证书签名请求文件,不含有公私钥

.jks\ .keystore\ .keys

可能含有java应用程序使用的证书和私钥

可结合自身需求通过开源工具或自研武器,来满足检索文件后缀的需求。

ca数字证书
本作品采用《CC 协议》,转载必须注明作者和本文链接
在互联网中,作为信息安全的基石,PKI无处不在,比如网上金融、网上银行、网上证券、电子商务、电子政务等行业的信息安全保护都离不开PKI。那么你知道PKI是什么意思?PKI主要组成包括什么吗?本文将为您详细解答。 PKI是什么意思?PKI英文全称Public Key Infrastructure,即公钥基础设施,是由软硬件系统、策略规程、权威机构及应用组成的系统,旨在提供安全的身份认证、数
今日,上海锐成对外宣布全新升级DNS查询工具,升级后的DNS查询工具能在线检测DNS记录在全球不同节点的解析值,该工具极大方便了SSL证书申请的DNS解析验证,以及让网站管理员能够查看DNS解析在全球广播速度。目前,这款DNS工具支持检测的常见资源记录类型有A、CNAME、MX、NS、AAAA、CAA、TXT记录等。
口令只是一种验证机制,并不具备密码的机密性要求。在电子票据开具过程中,开票单位需通过安全可信的方式向财政部提交开票信息。
当前,信息化管理广泛应用到生活中的各个场景,线上投保已成为保险行业的一大主流趋势。由于线上投保系统常常涉及用户的账户信息、交易信息等敏感数据,因此在系统设计阶段就应考虑如何保障用户信息安全,而密码技术正是保护系统信息安全的重要手段。针对保险投保系统的密码应用方案进行研究,结合投保系统的特点,从投保系统的密码应用需求出发,分析现行系统的密码应用现状,并根据相关法规和标准对信息系统的密码应用技术要求提
1、中国网络安全产品与厂商大全 物理安全 存储介质信息消除/粉碎机:北信源、和升达、科密、30所、利谱、交大捷普、兰天致信、中超伟业、博智安全、方德信安、深圳汇...
张百川(网路游侠)更新时间:2020年8月21日游侠安全网: 1、中国网络安全产品与厂商大全 物理安全 存储介质信息消除/粉碎机:北信源、和升达、科密、30所、利谱、交大捷普、兰天致信、中超伟业、博智安全、方德信安、...
在数字安全领域中,X.509、X.509数字证书CA是三个常见的术语,他们经常一起出现,那么你知道X.509是什么?X.509数字证书是什么?CA是什么?X.509、X.509数字证书CA的关系是什么?下面我们将详细介绍。 什么是X.509?X.509是公钥基础设施(PKI)的标准格式。X.509 最初于1988 年与用于电子目录服务的X.500 标准一起推出,后被IETF的公钥基础
1月12日,由上海锐成集合全球多家知名数字证书CA机构打造的统一数字证书管理系统正式上线。新上线的锐成UCM系统是一个数字证书自动化管理系统,能提供多年期数字证书自动化交付功能和自动证书监控、回收、重更新等操作,避免因遗忘证书到期时间而未及时更新证书导致企业业务系统中断。这项功能在SSL证书有效期缩短为1年的策略中显得尤为实用。
当你访问一个网站时,浏览器会查看它的SSL证书,并快速的验证证书的真实性。什么是根证书根证书,通常称为可信根,是属于证书颁发机构的数字证书。在给定时间内,该CA通过由已受信任的CA颁发的交叉签名中间证书开展业务。一旦CA的应用程序被接受并证明自己值得信赖,它就会将其根添加到根存储中。然后根CA使用中间证书的私钥签署和颁发终端用户SSL证书。如果您还想了解到更多SSL证书的知识,可搜索锐成信息官网获得。
第九届中国(上海)国际技术进出口交易会即将于2023年6月15日至17日在上海世博展览馆举办。此次锐成将携带UCM证书管理系统亮相上交会商密展,展位号为:2C188。目前锐成是Sectigo证书在国内的核心战略合作伙伴,也是其他国际主流CA机构的顶级代理商,包括知名的Digicert、GeoTrust、Globalsign、Entrust、PositiveSSL等品牌。到目前为止,锐成信息年签发证书量达到20+万张,自有品牌锐安信以高性价比和高性能深受市场欢迎。
VSole
网络安全专家