作者: 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、防御指南

整体的思路如下图

【安全研究】Active Directory 证书服务(一)_Windows

0x01 Active Directory 证书服务安装

在开始讲解证书服务之前,我们先装个证书服务,方便起见,直接在域控上安装就行。

下一步下一步比较简单。

【安全研究】Active Directory 证书服务(一)_AD_02

【安全研究】Active Directory 证书服务(一)_Windows_03

【安全研究】Active Directory 证书服务(一)_***_04

【安全研究】Active Directory 证书服务(一)_***_05

【安全研究】Active Directory 证书服务(一)_AD_06

【安全研究】Active Directory 证书服务(一)_***_07

【安全研究】Active Directory 证书服务(一)_AD_08

【安全研究】Active Directory 证书服务(一)_Windows_09

【安全研究】Active Directory 证书服务(一)_Windows_10

【安全研究】Active Directory 证书服务(一)_***_11

【安全研究】Active Directory 证书服务(一)_AD_12

【安全研究】Active Directory 证书服务(一)_***_13

【安全研究】Active Directory 证书服务(一)_AD_14

【安全研究】Active Directory 证书服务(一)_Windows_15

【安全研究】Active Directory 证书服务(一)_Windows_16

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。

我们也可以自己搭建一个证书颁发机构。

【安全研究】Active Directory 证书服务(一)_Windows_17

但是使用自建的证书发布服务之后,浏览器还是不信任我们证书,我们经常可以看到