Active Directory 05 - 初识 AD CS 证书服务

news/2024/4/25 15:18:06/文章来源:https://blog.csdn.net/heisejiuhuche/article/details/129224570

写在最前

如果你是信息安全爱好者,如果你想考一些证书来提升自己的能力,那么欢迎大家来我的 Discord 频道 Northern Bay。邀请链接在这里:

https://discord.gg/9XvvuFq9Wb

我会提供备考过程中尽可能多的帮助,并分享学习和实践过程中的资源和心得,大家一起进步,一起 NB~


背景

Will Schroeder(@harmj0y) and Lee Christensen(@tifkin_)在 2021 年夏发布了 Certified Pre-Owned: Abusing Active Directory 白皮书,内容很多。文中解释了什么是 Active Directory 证书服务(Active Directory Certificate Service - AD CS),指出了 Active Directory 证书体系在企业中已经普遍应用,并列出了他们的研究成果,列举了诸多利用的途径,及防御的方式。

证书相较于现有的 AD 权限维持或者提权的方式,如增加管理员用户,修改用户密码,黄金、白银票据等,有更加隐秘,更加持久的优势。更加隐秘是因为证书利用相对于其他敏感操作,相对难以被探测和发现(不触及 LSASS 等);更加持久是因为证书的默认过期时间是 5 年,而且不会随着主体密码的改变而失效。

本篇是 AD 系列中,证书章节的开篇,先了解以下证书服务的概念和特性。之后,我会在本地 Lab 配置 AD CS 服务器,再进一步深入到证书服务的不当配置利用,以及最后,看是否能写一下证书服务不当配置的检测和规范。

Active Directory 证书服务

首先我们要了解什么是 Active Directory 证书服务(Active Directory Certificate Service - 以下简称 AD CS)。证书服务,用官方的解释说,是微软的 PKI 系统的实现,早些时候,多用于 Active Directory 内智能卡(smart card)的登录鉴权。发展到现在,已经成为了 AD 环境中各个主体的另外一种鉴权方式(如 Windows Hello For Business)。

这里的证书,指的是 X.509 格式的电子文档,可以被用于加密,信息签名,以及鉴权。在域环境中,这张证书就是将一个主体与其 Public/Private 密钥对绑定。那么,域控就可以使用这个主体的密钥,来决定是否给这个主体分发 TGT。

AD CS 概念一览

  • PKI (Public Key Infrastructure) - PKI 是一整套证书签发、管理的系统。主要包括 CA(Certificate Authority),RA(Registration Authority),Certificate Store,and Certificate database
  • Certificate Store - Windows 本地证书存储,请求到的证书将存储在 Certificate Store 中
  • AD CS(Active Directory Certificate Service)- 微软为 AD 环境打造的 PKI 系统,来管理域内的证书签发和鉴权
  • CA(Certificate Authority)- 签发证书的服务
  • Enterprise CA - 与域集成的 CA 系统(通常会被配置在域中单独的服务器上),包含证书签发、证书模板等服务
  • CSR(Certificate Signing Request)- 向 CA 系统发送的证书签发的请求
  • EKU(Extended/Enhanced Key Usage)- Object Identifiers(OIDs),规定了签发证书的用途(是用来加密文件,或者主体鉴权等)
  • SAN(Subject Alternative Name)- 可以为一张证书绑定多个身份信息;比如 HTTPS 证书中就可以绑定多个域名,而不需要为每个域名都单独申请一张证书
  • UPN(User Principal Name)- 域中的证书是与 UPN 绑定的(这张证书是张三的,用于张三同学的鉴权),同时鉴权的主体也是是通过 UPN 来确定的;如果黑客控制了 SAN,在特定情况下,也就能 impersonate 任意用户
  • Principal - 域中的主体,可以是用户,也可以是服务
  • Certificate Template - 证书模板;Enterprise CA 签发的证书都是根据模板来生成;模板包含这张证书的元信息,如签发规则,谁有权限使用这个模板,证书的有效期,证书主体是谁,证书主体如何定义等等;Enterprise CA 会根据这些元信息来决定是否可以签发证书,以及签发什么样的证书

证书鉴权的条件

域中使用证书鉴权,需要两个条件,PKINIT 扩展,以及 Extended Key Usage(EKU)必须规定这个证书是用来做用户鉴权。

Public Key Cryptography for Initial Authentication(PKINIT)扩展

微软为了能在域中使用证书,根据 RFC4556 实现了自己的一套在 Kerberos 初次鉴权当中使用基于非对称加密(Public/Private Key)的协议。

这里所说的初次鉴权(Iniital Authentication),还有点不太明白。证书鉴权是否比普通鉴权多一个步骤,就是要先向 AD CS 请求证书,然后使用该证书,请求 TGT,接下来的流程,就和之前这篇文章 Active Directory 02 - Windows Kerberos Authentication(Kerberos 协议鉴权)一致了。这里也抛出一个问题,继续挖掘,再来解答。

Extended Key Usage(EKU)设置该证书做鉴权使用

EKU 必须包含证书可以做鉴权的 OID。这也是后面证书利用的条件。

EKU 可以想象成一个规定。他规定了这张证书的用途。这个规定,以 OID 的形式出现,例如:1.3.6.1.5.5.7.3.2。完整的 OID 可以在这里查询。Will Shroeder 的这篇文章 指出,多个 EKU OID 都可以设置证书做鉴权使用,而不只是 Client Authentication OID。

图片来自https://posts.specterops.io/certified-pre-owned-d95910965cd2

满足了这两项条件,域就可以使用 X.509 证书做鉴权。

证书鉴权流程

现在,我们来了解一下证书鉴权的整个流程是什么样子的。

图片来自https://posts.specterops.io/certified-pre-owned-d95910965cd2
步骤拆解:

  1. 主体 生成一对密钥,包含 Public/Private Key
  2. 主体Enterprise CA 发送包含 Public Key申请主体的名字(Subject),申请的 证书模板名称 等数据的证书签发请求(CSR - Certificate Signing Request);
  3. Enterprise CA 会做一系列校验:
    • CSR 中指定过的 主体 是否有权限申请域证书(is allowed to request certificate);
    • CSR 中指定过的 证书模板 是否存在(does template exist);
    • CSR 中指定过的 主体 是否有权限使用该 证书模板(is allowed to enroll in template);
  4. 如果上述校验都通过, Enterprise CA 将以 CSR 中指定的 证书模板 为蓝本,为该 主体 生成证书;Enterprise CA 用自己的 Private Key 为证书做签名,返回给该 主体
  5. 主体 将收到的证书存放在 Certificate Store 中供后续使用;

有了证书,该主体就可以使用证书向 Domain Controller 申请 TGT。剩下的流程,就和之前这篇文章 Active Directory 02 - Windows Kerberos Authentication(Kerberos 协议鉴权)一致。

总结

这篇文章简单讲述了一下域证书服务的基本概念。接下来,我会继续深入,在 Lab 中配置 AD CS 服务,通过实践的方式,带出更多的域证书相关的内容。

这包括自域证书白皮书 Certified Pre-Owned: Abusing Active Directory 发布以来,已经被发现的证书利用的漏洞(CVE-2022–26923),以及证书利用的其他手法(Shadow Credentials)。

参考链接

  • https://datatracker.ietf.org/doc/html/rfc5280#section-4.2.1.6
  • https://www.giac.org/paper/gsec/1448/implementing-pki/102699
  • https://www.tevora.com/blog/3-steps-implementing-public-key-infrastructure-pki-architecture/
  • https://posts.specterops.io/certified-pre-owned-d95910965cd2
  • https://research.ifcr.dk/certifried-active-directory-domain-privilege-escalation-cve-2022-26923-9e098fe298f4
  • https://cpl.thalesgroup.com/faq/public-key-infrastructure-pki/what-public-key-infrastructure-pki#:~:text=The%20Public%20key%20infrastructure%20(PKI,digital%20certificates%20and%20public%2Dkeys.
  • https://www.techtarget.com/searchsecurity/definition/PKI
  • https://posts.specterops.io/certificates-and-pwnage-and-patches-oh-my-8ae0f4304c1d
  • https://www.pkisolutions.com/object-identifiers-oid-in-pki/
  • https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-pkca/d0cf1763-3541-4008-a75f-a577fa5e8c5b

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_74501.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1029 旧键盘 C++中find函数的使用

题目链接: 一、自己的想法:(弱化版双指针) 思路为用两个“指针”i, j分别指向原来字符串和实际输入字符串的第一个字符,然后判断i,j所指字符是否一致,若是则i, j同时,若否则将i所指…

【5G RRC】5G系统消息SIB3介绍

博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。 博客…

Windows下命令执行绕过技巧总结(渗透测试专用)

一、连接符1、双引号不要求双引号闭合举例:"who"a"mi" //闭合的 "who"a"mi //不闭合的2、圆括号必须在两边,不能包括中间的字符。举例:((whoami))3、^符号(转译符号)不可以在结尾&…

Go项目(商品微服务-1)

文章目录简介建表protohandler商品小结简介 商品微服务主要在于表的设计,建哪些表?表之间的关系是怎样的? 主要代码就是 CURD表和字段的设计是一个比较有挑战性的工作,比较难说清楚,也需要经验的积累,这里…

【机器学习笔记】Python基础笔记

目录基础语法加载数据:pd.read_csv查看数据大小:shape浏览数据行字段:columns浏览少量数据:head()浏览数据概要:describe()输出:to_csv基础功能语法缺省值去除缺失值:dropna按行删除&#xff1a…

Paddle配置

目录: 1.激活环境 2.版本选择 突发情况:ModuleNotFoundError: No module named paddle 检验是否安装成功 1.激活环境 Anaconda: conda remove -n paddle --all conda activate paddle 2.版本选择 打开链接:https://www.pa…

基于企业微信应用消息的每日早安推送

基于企业微信应用消息的每日早安推送 第一步:注册企业微信 企业微信注册地址:https://work.weixin.qq.com/wework_admin/register_wx 按照正常流程填写信息即可,个人也可以注册企业微信,不需要公司 注册完成后,登录…

Google Guice 4:Bindings(2)

4 Scopes (实例的作用域) 4.1 默认规则:unreuse instance 到目前为止,通过bind().to()和Provides定义的binding,每次需要注入实例对象时,Guice都会创建一个新的实例 // 修改DatabaseTransactionLog,使其打…

Ncvicat 打开sql文件方法

Nacicat打开sql文件时,有比较多的文章介绍可以直接打开,方法介绍的比较多,但是我遇到了一个坑,就是如何配置环境都无法打开。 本机环境: windows10 mysql 5.7.40 Navicat12.1 一、遇到问题情况 1.1、通过navicat…

【python量化】大幅提升预测性能,将NSTransformer用于股价预测

写在前面 NSTransformer模型来自NIPS 2022的一篇paper《Non-stationary Transformers: Exploring the Stationarity in Time Series Forecasting》。NSTransformer的目的主要是为了解决其他方法出现过平稳化处理的问题。其通过提出序列平稳化以及去平稳化注意力机制可以使得模型…

2023年三月份图形化二级打卡试题

活动时间 从2023年3月1日至3月21日,每天一道编程题。 本次打卡的规则如下: 小朋友每天利用10~15分钟做一道编程题,遇到问题就来群内讨论,我来给大家答疑。 小朋友做完题目后,截图到朋友圈打卡并把打卡的截图发到活动群…

【尚硅谷MySQL入门到高级-宋红康】数据库概述

1、为什么要使用数据库 数据的持久化 2、数据库与数据库管理系统 2.1 数据库的相关概念 2.2 数据库与数据库管理系统的关系 3、 MySQL介绍 MySQL从5.7版本直接跳跃发布了8.0版本 ,可见这是一个令人兴奋的里程碑版本。MySQL 8版本在功能上做了显著的改进与增强&a…

CXL技术分析

CXL,全称Compute Express Link,该技术由Intel牵头开发用于高性能计算、数据中心,主要解决处理器、加速器和内存之间的cache一致性问题,可消除CPU、专用加速器的计算密集型工作负载的传输瓶颈,显著提升系统性能。 一、…

python的装饰器与设计模式中的装饰器模式

相信很多人在初次接触python中的装饰器时,会跟我一样有个疑问,这跟设计模式中的装饰器模式有什么区别吗?本质上是一样的,都是对现有对象,包括函数或者类的一种扩展。这篇文档将进行对比分析。 python的装饰器 装饰器…

duboo+zookeeper分布式架构入门

分布式 dubbo Zookeeper 分布式系统就是若干独立计算机的集合(并且这些计算机之间相互有关联,就像是一台计算机中的C盘F盘等),这些计算对于用户来说就是一个独立的系统。 zookeeper安装 下载地址:Index of /dist/z…

【数据库系统概论】基础知识总结

🌹作者:云小逸 📝个人主页:云小逸的主页 📝Github:云小逸的Github 🤟motto:要敢于一个人默默的面对自己,强大自己才是核心。不要等到什么都没有了,才下定决心去做。种一颗树,最好的时间是十年前…

C++10:非类型模板参数以及模板的特化

目录 非类型模板参数 模板的特化 模板类的特化 1.全特化 2.偏特化 模板其实还有其他的玩法&#xff0c;比如非类型模板参数以及模板的特化。 非类型模板参数 在记述非类型模板参数前&#xff0c;我们认识一下C中一个比较鸡肋的类&#xff0c;array #include<iostream&g…

k8s-yaml文件

文章目录一、K8S支持的文件格式1、yaml和json的主要区别2、YAML语言格式二、YAML1、查看 API 资源版本标签2、编写资源配置清单2.1 编写 nginx-test.yaml 资源配置清单2.2 创建资源对象2.3 查看创建的pod资源3、创建service服务对外提供访问并测试3.1 编写nginx-svc-test.yaml文…

数据仓库Hive

HIve介绍 Hive是建立在Hadoop上的数据仓库基础构架。它提供了一系列的工具&#xff0c;可以用来进行数据提取转化加载&#xff0c;可以简称为ETL。 Hive 定义了简单的类SQL查询语言&#xff0c;称为HQL&#xff0c;它允许熟悉SQL的用户直接查询Hadoop中的数据&#xf…

如何从0创建Spring Cloud Alibaba(多模块)

以一个父工程带两个Module&#xff08;test1、test2&#xff09;为例。 一、创建父工程 由于是模块化项目&#xff0c;那么父工程不需要实际的代码逻辑&#xff0c;因此无需创建src&#xff0c;那么可以有几种方式创建&#xff0c;例如&#xff1a; 使用Spring Initializr脚…