作者: daiker@Amulab
0x00 前言
specterops发布了一篇关于Active Directory 证书服务相关漏洞的白皮书
https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf,关于Active Directory 证书服务的GJ第一次系统的进入我们的视野。
我在白皮书的基础上学习了Active Directory 证书服务相关的漏洞,作为学习成果,用两篇文章来介绍Active Directory 证书服务相关的基础以及相关的漏洞利用。截止这篇文章发布为止,有些漏洞利用相关的工具并没有发布出来,在文章里面我会用其他的方式来演示。
白皮书里面,最核心的点在于证书服务发布的部分证书可用于kerberos认证,并且在返回的PAC里面能拿到NTLM hash。这就是可以做很多事了,比如
1、拿到用户的凭据,能不能用用户的凭据来申请一个证书,这个证书用于kerberos认证,后面就算用户的密码改了,只要证书在手,就能用证书随时拿回NTLM。
2、能不能在用户的电脑上找到证书,以后拿着这个证书去做认证。
3、什么样的证书能用于kerberos认证。
4、拿到CA服务器证书之后,能不能给任何用户颁发证书,再用这个证书做认证,跟黄金票据一样。
5、CA服务器上有没有一些配置,能让一个用户申请别人的证书,然后拿到这个证书做认证。
6、CA证书申请有个界面是http的,http默认不开签名,我们能不能通过Ntlm_Relay将请求relay到这里,申请用以进行kerberos认证的证书。
关于这些,都会在这两篇文章里面讨论。在写完之后,由于内容过长,我将文章拆分为两篇,第一篇是介绍一些基础部分,以及三个相关的利用
1、窃取证书
2、通过凭据申请可用以Kerberos认证的证书
3、通过证书窃取用户凭据
在第二篇主要介绍一些其他的利用,包括
1、证书服务中的Ntlm_Relay
2、证书模板配置错误
3、黄金证书
3、PKI 设计缺陷
4、防御指南
整体的思路如下图
0x01 Active Directory 证书服务安装
在开始讲解证书服务之前,我们先装个证书服务,方便起见,直接在域控上安装就行。
下一步下一步比较简单。
0x02 Active Directory 证书服务概述
0x0201 企业 PKI
PKI是一个术语,有些地方会采用中文的表述——公钥基本结构,用来实现证书的产生、管理、存储、分发和撤销等功能。我们可以把他理解成是一套解决方案,这套解决方案里面需要有证书颁发机构,有证书发布,证书撤掉等功能。
微软的Active Directory 证书服务(我们可以简称AD CS)就是对这套解决方案的实现。ADCS能够跟现有的ADDS服务进行结合,可以用以加密文件系统,数字签名,以及身份验证。下面详细介绍下AD CS中比较重要的的证书颁发机构以及证书模板。
0x0202 证书颁发机构
证书颁发机构 (CA) 接受证书申请,根据 CA 的策略验证申请者的信息,然后使用其私钥将其数字签名应用于证书。然后 CA 将证书颁发给证书的使用者。此外,CA 还负责吊销证书和发布证书吊销列表 (CRL)。
ADCS里面的CA分为企业CA和独立CA,最主要的区别在于企业CA与ADDS服务结合,他的信息存储在ADDS数据库里面(就是LDAP上)。企业CA也支持基于证书模板和自动注册证书,这也是我们比较关心的东西,如果没有特指,文章里面提到的CA默认就是企业CA。
举个例子,我们有个有个域名daiker.com
,如果要做https,我们就需要找证书颁发机构申请证书,比如说沃通CA。
我们也可以自己搭建一个证书颁发机构。
但是使用自建的证书发布服务之后,浏览器还是不信任我们证书,我们经常可以看到