Active Directory 04 - Bronze Bit Attack (CVE-2020-17049)

news2025/1/11 7:45:29

写在最前

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

https://discord.gg/9XvvuFq9Wb

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


背景

在过去的两篇文章当中:

Active Directory 02 - Windows Kerberos Authentication(Kerberos 协议鉴权)

Active Directory 03 - Delegation(委派),MS-SFU 规范以及 Protocol Transition

我们已经讨论了整个 Kerberos 鉴权的过程,以及 Delegation 涉及的各种概念。

首先,我们稍微回顾一下 Active Directory 02 篇中讲到的 TGS 的内容以及 S4U2Proxy 协议的交互过程,然后展开今天的主题:Bronze Bit Attack (CVE-2020-17049)。

回顾

使用同样的示例图片,我们回顾一下当用户进行 TGS_REQ 请求之后,KDC 返回的 TGS 的特性,以及包含的内容。

TGS

图片来自https://www.netspi.com/blog/technical/network-penetration-testing/cve-2020-17049-kerberos-bronze-bit-theory/

  1. 用户名(这张 TGS 是给谁的);
  2. 用户可解密部分,使用 logon session key(紫色) 加密;
  3. 用户不可解密部分,使用 服务 Key(绿色) 加密;

重要信息

  • Service Ticket 是用 服务 Key(绿色) 加密的;
  • TGS 票据中 Forwardable 这个属性的值,是接下来需要关注的

S4U2Proxy 过程

回顾了 TGS_REQ 的过程,在前进到 Bronze Bit Attack 之前,还必须回顾一下一个服务使用 S4U2Proxy 协议的过程。

图片来自https://www.netspi.com/blog/technical/network-penetration-testing/cve-2020-17049-kerberos-bronze-bit-theory/
上图中,Service 1 被配置成 Constrained Delegation,目标是 Service 2,并且用户已经访问了 Service 1。Service 1 现在持有用户的 Service Ticket。

步骤说明:

  1. Service 1 将用户的 Service Ticket 以及自己的 TGT 发送给 KDC,代表用户申请 Service 2 的 TGS;
  2. KDC 校验 Service 1 发送来的数据,校验通过,发送用户的 Service Ticket(用于访问Service 2) 给 Service 1
  3. Service 1 代表用户向 Service 2 发起 Application Request(AP_REQ),发送刚才获取的 TGS;
  4. Service 1 现在可以访问和使用 Service 2;

关注加粗的第 2 步。

  • 在 Service 1 发送用户的 Service Ticket 给KDC 之后,KDC 会使用 服务 Key(绿色)(记得 KDC 会保存域中任何主体的 Key)解密 Service Ticket,检查 Forwardable 属性是否为 1
  • 如果为 1,则返回用户可以访问 Service 2 的 TGS 给 Service 1;如果为 0,校验失败,KDC 报错,Service 1 无法获得 Service 2 的访问权限。

现在我们来好好看一下 Forwardable 属性。

Forwardable 属性

顾名思义,这个属性确定了当前 TGS 是否可以从一个主体,被发送到另一个主体使用。

这里,不得不再说一下 Constrained Delegation 的保护机制。

Constrained Delegation 保护机制

在继续之前,我们必须了解 Constrained Delegation 中(非 Resource-Based Constrained Delegation)的保护机制,来限制服务对于用户账户的 impersonation。

这个保护机制是这样的:

如果一个服务被设置成 Constrained Delegation without Protocol Transition,这个服务代表用户(非 Kerberos 鉴权)在向 KDC 申请后端服务使用权的时候,KDC 会返回 TGS,但是会将这张 TGS 的 Forwardable 属性设置为 0。那么,之后前端服务在使用 S4U2Proxy 协议申请第二服务的 TGS 时,KDC 将报错,拒绝鉴权。

这就是 without Protocol Transition 选项,是如何限制一个服务 impersonate 任何用户的。

再进一步用例子解释一下。

在我的 E-Corp Lab 中,Web03 服务被设置成 Constrained Delegation without Protocol Transition,目标是 SQL03 服务。域中有一个 apachesvc03 账户,将被设置成 Web03 的本地管理员。

配置如下。

在这里插入图片描述

添加 Web Admins 组。

在这里插入图片描述

apachesvc03 账户添加到 Web Admins组

在这里插入图片描述

在这里插入图片描述

到 Web03 机器,将 Web Admins组 添加到本地管理员组。

在这里插入图片描述

在这里插入图片描述

假设我们拿下了 apachesvc03 账户。由于他是 Web03 服务的管理员,我们可以导出 Web03 机器的 服务 Key(绿色)(AES 以及 NTLM)。

在这里插入图片描述

接下来,我们要 impersonate Domain Admin 用户 mecorp 来拿下 SQL03。

由于我们配置 Web03 为 Constrained Delegation without Protocol Transition,也就是说,mecorp 必须以 Kerberos 协议先和 Web03 鉴权,Web03 才能通过 S4U2Proxy 协议向 KDC 申请 SQL03 的使用权。

现在,如果直接使用 getST 来申请 mecorp 对于 SQL03 的使用权,就会报错。

在这里插入图片描述

那么,如果我们将 Web03 配置成 Constrained Delegation with Protocol Transition,也就是说 mecorp 账户无需使用 Kerberos 协议与 Web03 鉴权。

在这里插入图片描述
那么使用 getST 就可以顺利获得 mecorp 对于 SQL03 的 Service Ticket(ccache)。

在这里插入图片描述

看过了 Constrained Delegation 的保护机制,说一下为什么第一次请求 mecorp 账户的 Service Ticket 会报错。就是由于 Constrained Delegation without Protocol Transition 的设置,使 Web03 在使用 S4U2Self 协议向 KDC 请求 mecorp 对于自身的 TGS 时,KDC 将会限制返回的 TGS Forwardable 属性,将其设置为了 0。那么,Web03 拿着这张 Forwardable 属性为 0 的 Service Ticket,再代表 mecorp 用户向 KDC 申请 SQL03 的使用权时,KDC 就会报错。

因此,Forwardable 属性就可以这么简单理解。

该属性值为 1,则可以发送到 KDC 做后方服务的鉴权。如果值是 0,KDC 则会报错,并拒绝鉴权。

Bronze Bit Attack(CVE-2020-17049)

上面的回顾环节,我们可以知道:

  1. Constrained Delegation 在使用 S4U2Self 环节,可能会获取到 Forwardable 属性为 0 的 Service Ticket;这将无法继续使用 S4U2Proxy 协议代表用户向 KDC 申请后方服务的使用权;
  2. S4U2Self 协议返回的 Service Ticket,是用 服务 Key(绿色) 加密的;
  3. KDC 在 S4U2Proxy 协议的交互过程中,会根据 Forwardable 属性,决定是否给前端服务返回后方服务的 Service Ticket;

我们考虑一个场景。如果你拿下了一个 Constrained Delegation 的前端服务,并获得了这个服务的 服务 Key(绿色)。那么,是不是可以:

  1. 前端服务先使用 S4U2Self 协议,向 KDC 拿到一张用户对于自身的 Service Ticket;
  2. 使用获取的 服务 Key(绿色) 解密 Service Ticket,将 Forwardable 属性强制改为 1
  3. 然后使用这张 Service Ticket,代表任意用户,向 KDC 申请后端服务的使用权;
  4. KDC 看到这张 Service Ticket 的 Forwardable 属性为 1,就返回了可用的后端服务 Service Ticket;
  5. 前端服务就可以用这张 Service Ticket,访问后端服务了;

这就是 Bronze Bit Attack 的基本原理。

Bronze Bit Attack 的影响

Bronze Bit Attack 使 Active Directory 的另外两大保护机制失去了作用。

Account is sensitive and cannot be delegated

Active Directory 对于敏感账户,可以勾选这个选项,让委派对于其失效。比如,Domain Admin 一般都会被设置成 Account is sensitive and cannot be delegated

在这里插入图片描述

那么前端服务在使用 S4U2Self 申请 Domain Admin 用户对于自身的 Service Ticket 时(无论 with Protocol Transition 或者 without Protocol Transition),KDC 都会返回 Forwardable0 的 Service Ticket。

Protected Users Group

Active Directory 对于敏感账户,可以将其加入 Protected Users Group,让委派对于其失效。比如,可以将 Domain
Admin 账户加入到该组。

在这里插入图片描述

那么前端服务在使用 S4U2Self 申请 Domain Admin 用户对于自身的 Service Ticket 时(无论 with Protocol Transition 或者 without Protocol Transition),KDC 都会返回 Forwardable0 的 Service Ticket。

总结

这篇文章我们讲了 Bronze Bit Attack 的基本原理。在未打上补丁 November 10, 2020—KB4586793 (OS Build 17763.1577)的域环境中,S4U2Self 及 S4U2Proxy 协议成了被利用的对象。

下一篇文章,将进入实践环节。了解一下整个 Bronze Bit Attack 的链路。

参考链接

  • https://www.netspi.com/blog/technical/network-penetration-testing/cve-2020-17049-kerberos-bronze-bit-theory/
  • https://docs.oracle.com/cd/E19253-01/816-4557/refer-123456/index.html
  • https://support.microsoft.com/en-us/topic/november-10-2020-kb4586793-os-build-17763-1577-expired-e6a24f90-5659-8b80-5a50-8752de3d90b7

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

buuctf Basic

buuctf Basic 1.Linux Labs 根据提示我们可以知道需要远程连接linux服务器,这里使用xshell进行如下配置 输入ssh的用户名root,密码123456 连接成功 构造命令 ls …/ 查看文件 查看flag cat …/flag.txt 为flag{8fee8783-1ed5-4b67-90eb-a1d603a0208…

1信号的描述

信号的描述 1.1 连续时间与离散时间信号 一 信号 信号可以描述范围极其广泛的物理现象。信号可以分为确知信号与随机信号,也可以分为连续时间信号与离散时间信号。 确知信号可以表示成一个或几个自变量的函数。 信号的描述 连续时间信号 x(t), x(t1, t2)… 离散时间…

[TPAMI‘21] Heatmap Regression via Randomized Rounding

paper: https://arxiv.org/pdf/2009.00225.pdf code: https://github.com/baoshengyu/H3R 总结:本文提出一套编解码方法: 编码:random-round整数化 激活点响应值表征小数部分,使得GT可以通过编码后的heatmap解码得到&#xff1b…

flowable的变量实操及排坑

主要理解一下知识点 一、名字解释 详情解释传送门 setVariables 和 setVariablesLocal区别? 1.流程变量 在流程执行或者任务执行的过程中,用于设置和获取变量,使用流程变量在流程传递的过程中传递业务参数。 对应的表: act_ru_variable&…

操作系统——4.操作系统的运行机制和体系结构

这篇文章,我们一起来学习一下操作系统的运行机制和体系结构 目录 1.概述 2.运行机制 2.1两种指令 2.2两种处理器状态 ​编辑2.3两种程序 ​编辑2.4 操作系统运行机制小结 3.操作系统内核 ​4.操作系统的体系结构 5.小结 1.概述 首先,我们来看一下…

OpenResty | nginx内部发送请求

文章目录一. http请求的API二. 封装http工具函数三. CJSON工具类四. hash均衡(1) 原理(2) 实现一. http请求的API 关于OpenResty如何安装和编写业务逻辑可以参考这篇文章:点击跳转 nginx提供了内部API用以发送http请求: local resp ngx.location.capt…

听说2年以上的自动化测试都有16k+,4年10k的你还要等待奇迹吗?

个人简介学渣一枚,2017年6月某xx学校毕业。从事自动化测试已经4年,。2018年的时候,由于项目的原因,开始使用Robot Framework测试框架,正因为有Python的基础所以很快就理解了Robot Framework框架的工作原理,…

【Vue】浅谈vue2、vue3响应式原理,vue中数组的响应式,响应式常见问题分析

前言:此处响应式指的是数据响应式变化,而不是页面的响应式布局,页面的响应式布局在我的其他文章中有提到。 一、什么是vue响应式 Vue 最标志性的功能就是其低侵入性的响应式系统。组件状态都是由响应式的 JavaScript 对象组成的。当更改它们…

以太网基础

1.系统概述网卡(Network Interface Card,简称NIC),也称网络适配器,一个网卡主要包括OSI的最下面的两层,物理层和数据链路层。物理层定义了数据传送与接收所需要的电与光信号、线路状态、时钟基准、数据编码和电路等,并…

Ambire 最新消息——2023 年 1 月

大家好,这里是我们在过去几周所做的一切的快速回顾。 发展 整个钱包的交易模拟和余额预测 我们推出了一项真正改变加密钱包 UX 游戏规则的功能:Ambire 现在向用户显示他们的钱包余额将如何更新,甚至在签署交易之前。 这项新功能可以分解为 Am…

PMP证书在哪个行业比较有用?

PMP 各个行业都能用,PMP 的知识体系是通用的,管理层的考试也有借鉴PMP知识的地方。历年考生考的最多的是IT 行业,其他行业也都有分布。PMP认证从国外引进大陆这么多年了,其火热程度依然不减,我个人认为是取决于市场的运…

34、基于51单片机锂电池电压电流容量检测仪表LCD液晶显示 原理图PCB程序设计

方案选择 单片机的选择 方案一:AT89C52是美国ATMEL公司生产的低电压,高性能CMOS型8位单片机,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元…

水泥|物流行业停车场电动发卡机读卡器K720的维护及使用注意事项

水泥|物流行业停车场电动发卡机读卡器K720采用工业级设计,表面烤漆处理,具有良好的耐磨耐腐蚀性。适应各种高、低温, 多灰尘等恶劣 环境。其发卡原理为拟人型摩擦式发卡,对各类变形卡有非常好的适应性。预留了活动式票箱安装位&am…

MyBatis 插件 + 注解轻松实现数据脱敏

问题在项目中需要对用户敏感数据进行脱敏处理,例如身份号、手机号等信息进行加密再入库。解决思路就是:一种最简单直接的方式,在所有涉及数据敏感的查询到对插入时进行密码加解密方法二:有方法一到出现对所有重大问题的影响&#…

C++如何实现系统语言切换功能,MessageBox的确认/取消按钮语言显示如何跟程序一致

文章目录前言 一、新建工程二、添加多国语言的资源三、程序语言设置四、语言切换五、字符串处理六、MessageBox的问题七、相关函数和类型参考文章前言 目前很多软件都是要出口到多个国家,多个地区,因此,为软件提供多国语言支持就成为了一个基…

20230215使用X99主板的电脑的性能测试(intel E5-2696V3 )

20230215使用X99主板的电脑的性能测试 2023/2/15 22:59 1850¥ 套餐七 模拟器参考20开 18核心36线程单路 适用 设计渲染 模拟器虚拟机工作室游戏多开 处理器 intel E5-2696V3 主频2.3G 18核心36线程 散热器 定制12CM大六铜管温控静音 主板 intel芯片X99-D3全固态大…

[项目篇] 音乐播放器开发报告

文章目录1. 项目描述:2. 项目上线展现:3. 项目具体实现:1. 登录2. 注册3.退出系统4.添加音乐4.1前后端交互约定4.2上传文件业务逻辑:4.3创建model包中的music类4.4在MusicMapper接口中,声明insertMusic抽象方法4.5在mybatis包中添…

既然有HTTP协议,为什么还要有RPC

既然有HTTP协议,为什么还要有RPC? 从TCP聊起 作为一个程序员,假设我们需要在A电脑的进程发一段数据到B电脑的进程,我们一般会在代码里使用socket进行编程。 这时候,我们可选项一般也就TCP和UDP二选一。TCP可靠&…

第六章 - 数据过滤where(where与and和or的组合用法)

第六章 - 数据过滤&#xff08;where的用法&#xff09;基本用法where的条件限制符等于号不等号! 或者<>小于<大于>小于等于<大于等于>between 的用法空值和非空值组合条件 and组合条件 orand 和 or 的计算次序in 和 not in基本用法 在查询语句中&#xff0…

JAVA面试八股文一(并发与线程)

并发的三大特性原子性&#xff1a;cpu在执行过程不可以暂停然后再调度&#xff0c;不可以中断&#xff0c;要不全部执行完&#xff0c;要不全部不执行。可见性&#xff1a;当多个线程访问同一个变量时&#xff0c;一个线程改变了这个变量的值&#xff0c;其他线程能够立即看到修…