Security+ Academy · 课时

横向移动:传递哈希与传递票据

了解攻击者如何重复利用 NTLM 哈希和 Kerberos 票据,在不知道明文密码的情况下横向移动,并了解阻止此类攻击的防御措施。

第 2 / 4 课13 个步骤

横向移动:传递哈希与传递票据 是 CoddyKit 上的免费 Security+ Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Security+ Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Security+ Academy 课程共包含 4 节课。

横向移动:在网络中扩散

横向移动是指攻击者在建立初始立足点后,逐步穿过网络的技术,目的是到达域控制器、数据库和管理工作站等更高价值的目标。与通常针对单个端点的初始访问不同,横向移动会利用系统之间的信任关系,包括身份验证机制、共享凭据、网络连接和管理工具,而合法用户每天都依赖这些关系。有效的横向移动可以让一个遭到入侵的低权限帐户最终访问环境中的每个系统。

Windows 身份验证的工作原理:NTLM

NTLM (NT LAN Manager) 是一种基于质询—响应机制的旧版 Windows 身份验证协议。当客户端向服务器进行身份验证时,服务器会发送一个随机质询;客户端使用用户的 NT 哈希值(由密码派生出的固定哈希值)对该质询进行哈希处理,然后发送响应。其关键设计缺陷在于:NT 哈希值本身就足以完成身份验证,而不需要密码。NT 哈希值存储在工作站的 Security Account Manager (SAM) database 中,以及域控制器上的 NTDS.DIT 中。如果攻击者获取了 NT 哈希值,就能以该用户身份进行身份验证,而完全不需要知道密码。

# NT hash example: MD4 of Unicode password
# Password 'Password123' -> NT hash: 58a478135a93ac3bf058a5ea0e8fdb71
# This hash alone is sufficient for NTLM authentication
# An attacker with the hash can authenticate to any service accepting NTLM

Pass-the-Hash (PtH):无需密码的身份验证

Pass-the-Hash (PtH) 是一种攻击技术,攻击者使用捕获的 NTLM hash 向其他系统进行身份验证,而不需要知道相应的明文密码。攻陷一个系统并从内存(LSASS)或 SAM database 中提取哈希值后,攻击者会在身份验证请求中用窃取的哈希值替换自己的凭据材料。由于共享的本地管理员密码很常见(尤其是在未部署 LAPS 的环境中),这种攻击的破坏性尤其严重:一个哈希值就可能攻陷数百甚至数千台计算机。Mimikatz、Impacket's psexec.py 和 CrackMapExec 等工具可以自动执行 PtH 攻击。

# PtH attack using Impacket's psexec (attacker tool - for understanding defenses)
# psexec.py -hashes :58a478135a93ac3bf058a5ea0e8fdb71 administrator@192.168.1.100

# This grants an interactive shell on 192.168.1.100 WITHOUT knowing the password
# Using only the NTLM hash extracted from a previously compromised system

防御 Pass-the-Hash

以下多种缓解措施可以降低 PtH 攻击的有效性:Local Administrator Password Solution (LAPS)——Microsoft 的工具,为每台计算机分配唯一且定期轮换的本地管理员密码,因此从一台计算机窃取的哈希值只能解锁该计算机;Credential Guard(Windows 10/11)——使用基于虚拟化的安全性,将 LSASS 隔离在安全区域中,使哈希值无法被提取;在可行的情况下禁用 NTLM,改用 Kerberos;通过特权访问工作站(PAW)和分层管理员模型限制管理访问权限;以及在 Active Directory 中使用 Protected Users security group,阻止缓存组成员帐户的哈希值。

# Check if LAPS is deployed on a domain
# Look for the ms-Mcs-AdmPwd attribute on computer objects
Get-ADComputer -Filter * -Properties ms-Mcs-AdmPwd | 
  Where {$_.'ms-Mcs-AdmPwd' -ne $null} | 
  Select-Object Name, 'ms-Mcs-AdmPwd'

Kerberos 概览:票据的工作原理

Kerberos 是 Active Directory 环境中的默认身份验证协议。它通过使用加密票据,避免在网络中传输密码或哈希值。其过程如下:(1) 客户端向Key Distribution Center (KDC)进行身份验证——该角色由域控制器承担——并接收使用 KRBTGT 帐户哈希值加密的 Ticket Granting Ticket (TGT);(2) 客户端需要访问某项服务时,会出示 TGT,以接收使用目标服务密钥加密的 Service Ticket (TGS/ST);(3) 客户端将服务票据出示给目标对象,目标对象无需联系 KDC 即可验证票据。票据的默认有效期为 10 小时。

# View current Kerberos tickets on Windows
klist
# Output shows:
# Ticket cache: API:...
# Server: krbtgt/DOMAIN.COM
# Encryption type: AES-256
# Expiration date: <timestamp>

Pass-the-Ticket (PtT):窃取 Kerberos 票据

Pass-the-Ticket (PtT) 是 Pass-the-Hash 在 Kerberos 中的对应技术:攻击者从遭到入侵的系统内存中提取有效的 Kerberos 票据,并将其导入自己的会话,以票据所有者的身份进行身份验证。Kerberos 票据存储在 Windows 内存中,可以使用 Mimikatz's kerberos::list 和 kerberos::ptt 命令提取。窃取的 TGTs 最有价值,因为攻击者可以利用它们请求票据所有者有权访问的任何服务的服务票据。窃取的 Service Tickets (TGS) 受到更多限制,只能授予对签发它们的特定服务的访问权限。

# PtT attack: export and import tickets with Mimikatz
# On compromised system:
# mimikatz# kerberos::list /export   <- dumps all tickets to .kirbi files

# On attacker system:
# mimikatz# kerberos::ptt ticket.kirbi  <- injects stolen ticket
# Now authenticated as the ticket's owner for its service

Over-Pass-the-Hash:将哈希值升级为票据

Over-Pass-the-Hash (oPtH) 也称为 Pass-the-Key,它连接了 NTLM 哈希窃取与 Kerberos 票据获取之间的缺口。攻击者使用窃取的 NT 哈希值或 AES 密钥,向域控制器请求 Kerberos TGT,即使不知道明文密码也可以完成。这样就能将窃取的哈希值转换为完整的 Kerberos TGT,获得 PtT 攻击的全部灵活性。这项技术很有价值,因为许多组织已禁用 NTLM,改用 Kerberos;oPtH 可以让基于哈希值的攻击在仅使用 Kerberos 的环境中成功。Mimikatz 通过 sekurlsa::pth 实现此功能。

横向移动协议:SMB、WMI 和 RDP

攻击者会使用多种协议,凭借窃取的凭据或票据进行横向移动:SMB (Server Message Block) 可通过 PsExec 远程执行命令,并提供远程文件访问和服务创建功能;WMI (Windows Management Instrumentation) 支持远程执行命令,由于普遍存在且日志记录存在缺口,因此管理员和攻击者都广泛使用它;RDP (Remote Desktop Protocol) 提供交互式桌面会话;WinRM/PowerShell Remoting 允许在远程系统上执行 PowerShell 命令。防御人员应建立哪些系统会合法使用这些协议的基线,并针对异常的使用模式发出警报。

# Detection: look for unusual SMB authentication from workstations
# Windows Security Event ID 4624: successful logon
# Windows Security Event ID 4648: explicit credential use
# Splunk query:
# index=windows EventCode=4624 LogonType=3 WorkstationName!='DOMAIN\server*'
#   NOT [whitelist of servers]
# | stats count by Computer, AccountName, IpAddress

BloodHound:可视化攻击路径

BloodHound 是一款开源工具,红队人员和防御人员都可以使用它来可视化 Active Directory 权限提升和横向移动路径。它会收集关系数据(谁属于哪个组、谁对哪台计算机拥有管理员权限、哪些帐户启用了委派),并将其显示为图,其中节点代表用户/计算机/组,边代表权限。BloodHound 的 'Find Shortest Paths to Domain Admins' 查询可以准确显示哪些入侵步骤序列可能导致攻击者(以及防御人员)获得整个域的控制权。防御人员使用 BloodHound 在攻击者利用不必要的权限路径之前将其消除。

# Run BloodHound collector (SharpHound) on domain
# SharpHound.exe -c All --outputdirectory C:\Temp
# Outputs JSON files imported into BloodHound Neo4j database

# Key queries for defenders:
# - Find all Domain Admins
# - Find Shortest Paths to Domain Admins
# - Find Principals with DCSync Rights

检测横向移动

检测横向移动需要关联多个系统中的事件。关键检测信号包括:Windows Event ID 4648(使用显式凭据登录,在 PtH/PtT 中很常见);Event ID 4769(请求 Kerberos 服务票据,如果请求很少访问的服务的票据,则属于异常);Event ID 7045/4697(安装新服务,在基于 PsExec 的横向移动中很常见);来自非管理员工作站的异常管理工具使用行为(wmic.exe、psexec.exe);以及 SMB 身份验证异常,即工作站向其他工作站进行身份验证(正常流量应从工作站流向服务器,而不是在对等工作站之间流动)。具备行为检测能力的 EDR platforms 可以在整个网络中捕获这些模式。

分层管理模型

分层管理模型(Microsoft 推荐的 Active Directory 设计)可以防止从一个层级窃取的凭据危及更高层级:Tier 0(身份控制平面——域控制器、Azure AD)——只有 Tier 0 管理员帐户可以管理这些系统,并且这些帐户绝不会登录 Tier 1 或 Tier 2 系统;Tier 1(服务器和云服务)——使用专用的 Tier 1 管理员帐户;Tier 2(工作站和设备)——使用帮助台帐户和标准管理员帐户。通过将凭据隔离到不同层级,遭到入侵的工作站管理员帐户就无法被用于攻击域控制器。这可以直接抵御 PtH 和 PtT 横向移动。

快速检查

测试您对本课 CompTIA Security+ (SY0-701) 概念的理解。

课程回顾

在本课中,您学到了:哈希传递利用了 NTLM 将哈希值作为凭据的设计——仅凭 NT hash 即可完成身份验证而无需密码,主要通过 LAPS 和 Credential Guard 加以防御;票据传递会从内存中窃取有效的 Kerberos 票据,从而冒充其他用户进行身份验证,其中被窃取的 TGT 尤其强大,因为它们可以为任何服务生成服务票据;此外,分层管理模型可以防止某一层的凭据被窃取后用于横向移动到权限更高的层。接下来,我们将探讨针对 Active Directory Kerberos 实现的 Kerberoasting 和 Golden Ticket 攻击。

免费开始

用 AI 导师学习 Security+ Academy — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
30
课程
120

常见问题解答

「横向移动:传递哈希与传递票据」课时是免费的吗?

是的 — 「横向移动:传递哈希与传递票据」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Security+ Academy 课程的其余内容,请升级到 CoddyKit PRO。 Security+ Academy 课程共包含 4 节课。

「横向移动:传递哈希与传递票据」这节课中我会学到什么?

了解攻击者如何重复利用 NTLM 哈希和 Kerberos 票据,在不知道明文密码的情况下横向移动,并了解阻止此类攻击的防御措施。 你通过在浏览器中直接运行的动手代码来练习 Security+ Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Security+ Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Security+ Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「横向移动:传递哈希与传递票据」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Security+ Academy 课中编写并运行代码吗?

能。每节 Security+ Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. APT 生命周期:从初始访问到持久化
  2. 横向移动:传递哈希与传递票据
  3. Kerberoasting 与黄金票据攻击
  4. 用于检测与响应的 MITRE ATT&CK 框架
← 返回 Security+ Academy