freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

AD CS攻击面剖析
2022-01-11 17:42:23
所属地 北京

背景

LEE CHRISTENSEN和WILL SCHROEDER于今年9月30日在Black Hat会议上进行了主题为“CERTIFIED PRE-OWNED: ABUSING ACTIVE DIRECTORY CERTIFICATE SERVICES”的演讲,首次在公开国际会议中讨论了有关活动目录证书服务(Active Directory Certificate Services,AD CS)的攻击面。AD CS是微软免费的证书管理服务,用于微软的 PKI 实施。企业可以使用AD CS通过将个人、设备或服务的身份绑定到相应的私钥来增强安全性。AD CS为企业提供了一种经济高效、安全的方式来管理证书的分发和使用。同时AD CS与AD域环境高度集成,避免了对第三方证书服务的依赖。证书相比传统静态口令,具有权威性、不可伪造性、不可破解性等优势。证书作为一种可存储的授权材料,与NTLM Hash和Kerberos票据一样在AD域的攻防对抗中有很高的利用价值。如果AD CS的配置不安全,可能被攻击者用于提权和权限维持等操作,危害AD域安全并造成不可估量的后果。

01 基本概念

证书颁发流程

首先客户端生成公私钥对,使用公钥与相关信息生成证书签名请求(CSR)消息。客户端将CSR发送到企业CA服务器。CA需要检查证书模板是否存在;CSR中的设置是否在证书模板的权限范围内;证书模板是否允许该用户注册证书。如果是,CA会按照证书模板预定义的设置(例如EKU、加密设置、颁发要求等)生成证书。然后使用其私钥对证书进行签名将其返回给客户端。

1641893724_61dd4f5c328c8c822ac0d.png!small?1641893724608

图-AD证书申请流程

证书模板

证书模板包含预先定义的策略和规则,在客户端向CA申请证书时,通过指定证书模板CA可以根据模板授予客户端相应的证书。在Windows证书颁发机构中可以查看和设置证书模板。默认自带的证书模板包含:管理员、基本EFS、目录电子邮件复制、域控制器、域控制器身份验证等。不同的证书模板拥有不同的用途和作用对象。如用户证书模板可以用于用户的电子邮件、EFS和客户端认证,且只能由用户账户申请该模板类型的证书。

下面是User模板的信息。从该模板信息中可以看出这个模板存储在主机DC01.MOIN.NET名为MOIN-DC01-CA的CA中,有效期为一年,更新周期为6周。该模板可以用于加密文件系统,安全电子邮件和客户端身份认证。该模板允许域中所有属于Domain Admins、Domain Users和Enterprise Admins组的用户注册,这代表域中绝大部分用户账户都可以使用。最后,该模板只能由Enterprise Admins 和 Domain Admins组的用户修改编辑。

CA Name                         : DC01.MOIN.NET\MOIN-DC01-CA
Template Name                   : User
Schema Version                  : 1
Validity Period                 : 1 year
Renewal Period                  : 6 weeks
msPKI-Certificates-Name-Flag    : SUBJECT_ALT_REQUIRE_UPN, SUBJECT_ALT_REQUIRE_EMAIL, SUBJECT_REQUIRE_EMAIL, SUBJECT_REQUIRE_DIRECTORY_PATH
mspki-enrollment-flag           : INCLUDE_SYMMETRIC_ALGORITHMS, PUBLISH_TO_DS, AUTO_ENROLLMENT
Authorized Signatures Required  : 0
pkiextendedkeyusage             : 加密文件系统, 安全电子邮件, 客户端身份验证
Permissions
Enrollment Permissions
Enrollment Rights           : MOIN\Domain Admins            S-1-5-21-777662953-3081769868-3723776201-512
MOIN\Domain Users             S-1-5-21-777662953-3081769868-3723776201-513
MOIN\Enterprise Admins        S-1-5-21-777662953-3081769868-3723776201-519
Object Control Permissions
Owner                       : MOIN\Enterprise Admins        S-1-5-21-777662953-3081769868-3723776201-519
WriteOwner Principals       : MOIN\Domain Admins            S-1-5-21-777662953-3081769868-3723776201-512
MOIN\Enterprise Admins        S-1-5-21-777662953-3081769868-3723776201-519
WriteDacl Principals        : MOIN\Domain Admins            S-1-5-21-777662953-3081769868-3723776201-512
MOIN\Enterprise Admins        S-1-5-21-777662953-3081769868-3723776201-519
WriteProperty Principals    : MOIN\Domain Admins            S-1-5-21-777662953-3081769868-3723776201-512
MOIN\Enterprise Admins        S-1-5-21-777662953-3081769868-3723776201-519

02 AD CS攻击面

1.证书权限维持

证书作为一种身份认证材料,相比AD域账户的密码和Hash有明显的优势。因为证书在能完成身份认证的同时,不会因为用户密码的修改而失效。pfx格式的证书可以使用密码进行加密,相比AD域账户密码更高的安全性。因此如果AD域环境中存在AD CS,攻击者可通过使用证书作为有效的权限维持手段。

因为CA服务器名称在进行注册证书时是必要的字段,所有在进行证书请求前,首先需要定位CA服务器的地址和名称。

1641893748_61dd4f742fe56656805e9.png!small?1641893748405

图-定位CA服务器

在确定CA服务器地址后,通过指定CA地址和证书模板,则可以为当前账户申请注册证书。

1641893762_61dd4f825a4d0f363e980.png!small?1641893763928

图-请求CA证书

使用Certify证书获得的证书为pem格式,需要转换为pfx格式才能导入Windows主机。Openssl提供了证书的格式转换,下图为使用openssl进行证书格式转换的实例。

1641893772_61dd4f8c6330648cd4355.png!small?1641893773150

图-openssl转换证书格式

如果攻击者拥有本地管理员权限或域管理员权限,可以从注册表或磁盘中转储证书文件。注册表中的证书保存在如下的位置。

1.HKLM\Software\Microsoft\Systemcertificate

2.HKLM\Software\WOW6432Node\Microsoft\Systemcertificate

3.HKU\\Software\Microsoft\Systemcertificate

同时在磁盘中也保存了证书文件及其私钥,磁盘中证书的默认保存位置如下:

1.C:\ProgramData\Microsoft\Crypto\Keys

2.C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys

3.C:\Users\admin\AppData\Roaming\Microsoft\Crypto\Keys\

4.C:\Users\\AppData\Roaming\Microsoft\Crypto\RSA\

证书作为重要的身份认证凭据,与NTLM Hash等凭据一样都是被DPAPI加密保护的。因此转储证书时,需要通过获取证书所属对象的Masterkey对证书解密。Mimikatz和SharpDPAPI等工具早就已经支持DPAPI的解密。

1641893788_61dd4f9cf1ebc48812917.png!small?1641893790869

图-利用DPAPI转储证书

除了使用DPAPI之外,微软的Cryptographic API(CryptoAPI)提供了证书管理的支持。因此调用该API也可以获取证书信息,下图为使用Mimikatz调用CryptoAPI转储证书的效果。

1641893795_61dd4fa3f28146b99424e.png!small?1641893797295

图-利用CryptoAPI转储证书

在获取证书后,由于Kerberos V5 协议后提供了PKINIT扩展,可使用证书进行Kerberos身份认证。使用证书的Kerberos认证使用公私钥对AS-REQ和AS-REP进行加解密,相比使用客户端密钥加密更安全,借助此特型可使用证书申请TGT实现权限维持。下图为使用证书文件请求TGT的实例。

1641893840_61dd4fd00f6d9ab47caa2.png!small?1641893840759

图-使用证书请求TGT

除转储证书外,也可直接伪造证书。如果获得了CA证书和私钥,使用BouncyCastle API可以伪造任意活动目录账户的证书,该类证书也被称为黄金证书。黄金证书类似黄金票据可拥有AD域内不受限的权限。但与黄金票据不同的是,黄金证书指定的账户必须是真实存在于活动目录数据库的账户。下图使用Mimikatz伪造的黄金证书。

1641893850_61dd4fda3275143184c7d.png!small?1641893851231

图-使用Mimikatz伪造黄金证书

CA服务器中包含大量的证书,需要根据CA证书的特征定位CA服务。CA证书通过CA服务器账户DPAPI保护,Issuer和Subject字段都包含CA服务器名称的CN,EKU(pKIExtendedKeyUsage)字段为空。而且只有CA证书包含CA版本扩展。下图为CA证书的信息。

1641893863_61dd4fe7768456da7fedd.png!small?1641893864015

图-CA证书信息

需要注意的是并非所有的证书都可以用于权限维持。证书必须具有以下EKU之一,才允许进行域身份验证:

智能卡登录(1.3.6.1.4.1.311.20.2.2)

客户端身份认证(1.3.6.1.5.5.7.3.2)

PKINIT客户端身份认证(1.3.6.1.5.2.3.4)

任意EKU(2.5.29.37.0)

空EKU

如果不是通过转储证书,而是需要通过注册证书进行权限维持,在注册时选择的证书模板还应该满足如下条件:

已经发布允许注册

允许当前用户注册

无需证书管理程序批准允许或授权签名

2.NTLM中继到ADCS

AD CS服务角色中包含一个名为证书颁发机构Web注册的可选功能组件,该组件允许域内账户通过IIS服务申请证书。安装该组件后,通过访问地址"http:///certsrv"可以进行证书注册。如果该页面的认证方式为Windows 账户,那么就有了NTLM中继的可能,因为HTTP中的NTLM请求默认不进行签名。

1641893889_61dd5001addfd28f6aee0.png!small?1641893890308

图-启用Windows身份认证的CertSrv

用户在进行申请证书后,通过查看HTTP数据包,发现实际上证书申请是通过在HTTP请求数据包中插入Base64编码的证书请求并发送到certfnsh.asp页面,请求成功后该页面返回一个证书可以用于安装。

1641893920_61dd502010058b498ac27.png!small?1641893920309

图 证书申请时的请求

利用NTLM中继攻击,将NTLM认证请求中继到CA服务器的HTTP服务,并在认证成功后将CSR证书请求发送给“http:///certsrv/certfnsh.asp”,如果所中继的证书在所中继账户的权限范围内,则会成功返回一个证书。因此这一步的关键是NTLM账户,账户权限越高申请的证书权限越高。利用PrinterDebug或PetitPotam漏洞等方法,将高权限账户(DC账户或域管理员账户)的NTLM认证中继到CA申请的Web地址,就可以利用该账户的身份申请证书。证书的权限取决于被中继账户与所允许申请的模板范围,如使用域管理员账户申请的管理员模板证书就是高权限的证书。

1641893932_61dd502c7f23f02c19ada.png!small?1641893933512

图 中继获取证书

3.证书模板弱配置

一些弱配置的证书模板能够导致攻击者以低权限账户身份获取高权限账户证书。这些证书模板的特点如下:

EKU拥有允许进行域身份验证的任意OID:

智能卡登录(1.3.6.1.4.1.311.20.2.2)

客户端身份认证(1.3.6.1.5.5.7.3.2)

PKINIT客户端身份认证(1.3.6.1.5.2.3.4)

允许注册证书:

已经发布允许注册

允许如Domain Users组成员的低权限账户注册

对证书绑定账户不限制的弱配置之一

允许客户端指定subjectAltName

无EKU或任意EKU(2.5.29.37.0)

CA设置EDITF_ATTRIBUTESUBJECTALTNAME2 Flag

模板架构版本1或大于2,并指定需要证书请求代理EKU的应用程序策略颁发要求,且CA上未实施注册代理限制

达到以上要求的CA证书模板可允许以低权限账户申请高权限账户证书,如使用Domain Users组账户申请Domain Admins组账户证书。下图为使用普通用户申请管理员权限证书的例子,其中User模板的mspki-certificate-name-flag包含ENROLLEE_SUPPLIES_SUBJECT字段,允许客户端指定subjectAltName申请证书,CA会为subjectAltName中指定的账户颁发证书。

1641893953_61dd50412715ec66f8504.png!small?1641893953742

图 使用普通用户申请管理员权限证书

4.DACL弱配置

DACL的弱配置问题一直是Windows操作系统中亘古不变的话题。DACL作为Windows系统对安全对象权限设置的核心,一旦授予本不该配置的允许权限,则会给攻击者进行权限提升的机会。拥有AD CS服务的域环境中的CA、PKI对象和证书模板作为Windows安全对象也无例外,一旦DACL配置错误,攻击者可创造如上一节中提到弱配置证书模板甚至其他可利用条件。

此处以低Domain Users组账户对证书模板拥有DACL的写权限为例,攻击者可以通过修改证书模板DACL和配置,以Domain Users组用户身份申请高权限用户证书。

1641893975_61dd50579e77a93fa1c18.png!small?1641893975939

图 DACL配置错误的证书模板

在确定证书模板的DACL能够被普通域用户更改后,则可以对证书模板进行配置实现提权:

1.添加模板的Domain Users组注册权限,如在Enrollment Rights添加Domain Users组。

1641893984_61dd50609756764e0ad1a.png!small?1641893984962

图 添加模板证书注册权限

2.禁用证书管理程序批准要求,以允许被动注册证书。这一步需要将证书模板属性中的PEND_ALL_REQUESTS标志位设置mspki-enrollment-flag为空。

1641893993_61dd5069089eac9d4a85e.png!small?1641893993392

图 禁用Manager Approval要求

3.禁用授权签名要求,这一步需要将mspki-ra-signature属性值设置为0。

1641894003_61dd50730a299072ea95f.png!small?1641894003291

图 禁用授权签名要求

4.启用SAN规范,将mspki-certificate-name-flag属性中ENROLLEE_SUPPLIES_SUBJECT开启,启用后可指定任意账户名申请证书。

1641894011_61dd507b4ddecda02075e.png!small?1641894011681

图 启用SAN规范的证书模板

5.在EKU中配置客户端身份认证(OID:1.3.6.1.5.5.7.3.2)

1641894017_61dd5081b1b0ee3dbd8b9.png!small?1641894018051

图 启用模版的身份认证扩展

在成功修改后,就可以通过修改后的证书模板申请属于任意用户的证书,如域中的administrator。然后使用证书申请证书对应账户的TGT票据。

1641894033_61dd50910c7a010d2565e.png!small?1641894033735

图 使用普通用户申请管理员权限证书

该攻击能够利用普通用户拥有写DACL权限的证书模板从Domain Users组权限提升到到域管理员权限,其本质是利用了DACL配置不合理的问题实现证书模板的滥用。该类攻击再次印证了一个事实,任何敏感的安全对象的DACL配置问题都是十分重要的,AD CS作为证书管理角色更应严格检查DACL配置。

03 总结

AD域作为企业的重要资产,是攻击者进入内网后的首要目标。但是一直以来AD域攻防技术的发展不温不火,很难有大的突破。此次AD CS攻击面的暴露为AD域攻击技术打开一扇新的大门。AD CS作为免费且高度集成于AD域环境的服务,为证书的管理带来方便。AD CS颁发的数字能够减少用户登陆操作,且相比其他凭据有更高的安全性。但AD CS的使用也为AD域的整体安全带来了新的隐患。总览全文,几乎所有AD CS相关的攻击技术都离不开高权限证书这个因素。因此,AD CS攻击技术的关键是如何获取和利用高权限证书,突破AD域的安全边界。

# 网络安全技术
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录