从 SMB 到 RDP:一次横向移动攻击链的深度剖析
字数 4309
更新时间 2026-05-10 17:07:57

内网横向移动攻击链深度分析与取证溯源教学文档

1. 横向移动概述与核心概念

横向移动(Lateral Movement)是攻击者在获取内网中一台主机的访问权限后,以该主机为跳板,继续访问或控制网络内其他主机的过程。在Windows内网环境中,攻击者常利用SMB、WinRM、WMI、RDP、PsExec等协议或工具完成此过程。由于该行为通常发生在内网合法通信之上,其流量在表面上与正常的认证、文件共享或远程管理行为无异,因此深度流量分析对识别攻击痕迹至关重要。

2. 关键协议与攻击技术详解

2.1 SMB协议与NTLM认证机制

SMB(Server Message Block)是Windows系统中用于文件共享和远程管理的常见协议,默认使用445端口。在内网横向移动中,攻击者频繁通过SMB尝试访问远程主机、连接IPC$隐藏共享或调用远程命名管道。

SMB认证过程中常用的NTLM(NT LAN Manager)认证机制包含三个阶段:

  1. 协商(NTLMSSP_NEGOTIATE):客户端发起认证协商。
  2. 挑战(NTLMSSP_CHALLENGE):服务器返回一个随机挑战值(Challenge)。
  3. 认证(NTLMSSP_AUTH):客户端根据用户密码哈希(Hash)计算响应值并提交给服务器验证。

认证成功后,客户端会发起Tree Connect请求连接共享资源(如IPC$)。在NTLM认证过程中产生的NetNTLMv2响应数据,可被提取并用于离线密码破解,这是获取初始凭据的关键切入点。

2.2 WinRM远程管理

WinRM(Windows Remote Management)用于远程命令执行和系统管理。WinRM over HTTP默认使用5985端口,WinRM over HTTPS默认使用5986端口。在流量层面,它表现为HTTP请求,常见路径为/wsman,内部数据采用SOAP XML结构封装。攻击者一旦获得有效凭据,即可通过WinRM在远程主机上执行命令。

2.3 Mimikatz与凭据抓取

Mimikatz是内网攻击中经典的凭据抓取工具,用于从LSASS(Local Security Authority Subsystem Service)进程中提取明文密码、NTLM Hash、Kerberos票据等敏感信息。在攻击链中,攻击者利用它扩大凭据库,为后续的横向移动做准备。典型命令如下:

  • privilege::debug: 开启调试权限。
  • sekurlsa::logonpasswords full: 提取LSASS中的登录凭据。

2.4 SMB3加密流量解密

SMB3协议支持会话级加密,导致Wireshark中流量显示为“Encrypted SMB3”,无法直接查看文件操作、服务调用等内容。解密此类流量的关键在于计算Session Key

解密前提与步骤

  1. 获取凭据材料:需获得用户的明文密码NTLM Hash
  2. 提取关键字段:从SMB/NTLM认证流量中提取NTProofStrEncrypted Session KeyServer Challenge等字段。
  3. 计算会话密钥
    • 若有明文密码,可推导出NTLM Hash,再结合其他字段计算Random Session Key
    • 若直接拥有NTLM Hash,可使用工具(如SMB3-Decryption项目中的randomSessionKeyNTLM.py)进行计算。
    python randomSessionKeyNTLM.py -u <用户名> --domain=<域名> -n <NTLM_Hash> -p <NTProofStr> -k <EncryptedSessionKey>
    
  4. 导入Wireshark解密:将计算得到的Session Key与对应的Session ID(从流量中提取)填入Wireshark的SMB2解密配置(编辑 -> 首选项 -> Protocols -> SMB2),即可解密后续加密流量。

2.5 svcctl与远程服务创建

svcctl是Windows服务控制管理器远程协议,常被攻击者用于远程创建、启动服务以完成命令执行。恶意行为通常涉及以下API调用序列:

  • OpenSCManagerW: 打开服务控制管理器。
  • CreateServiceW: 创建恶意服务(服务路径中常包含cmd.exe /cpowershellnet user等可疑命令)。
  • StartServiceW: 启动创建的服务。

在解密后的SMB3流量中分析这些调用,是发现攻击者进行权限维持(如创建后门账户)的关键。

2.6 RDP流量解密与输入还原

RDP(Remote Desktop Protocol)流量通常被加密。解密需要获取远程桌面证书的私钥(如从流量中导出的.pfx文件)。

解密与还原步骤

  1. 导出证书和私钥:使用OpenSSL从.pfx文件中提取。
    openssl pkcs12 -legacy -in "cert.pfx" -clcerts -nokeys -out certificate.pem
    
  2. 配置Wireshark:将私钥导入Wireshark(编辑 -> 首选项 -> Protocols -> TLS -> RSA keys list),以解密RDP流量。
  3. 提取键盘扫描码:解密后,可过滤出rdp.fastpath.scancode.keycode字段,该字段记录了按键的扫描码。
    tshark -r "rdp.pcapng" -Y "rdp.fastpath.scancode.keycode" -T fields -e rdp.fastpath.scancode.keycode > keycode.txt
    
  4. 还原输入内容:编写脚本,将扫描码映射为实际字符(需区分Shift等修饰键),从而还原攻击者在远程桌面中的键盘输入记录。

3. 完整攻击链案例复盘与实操分析

以下基于提供的流量案例,还原一次完整的横向移动攻击链:

阶段一:初始突破与凭据获取

  1. SMB认证尝试:分析流量发现攻击者(10.10.10.80)向目标主机(10.10.10.201)的445端口发起SMB连接,并以administrator身份进行NTLM认证。首次认证失败,后续认证成功并连接了IPC$共享。
  2. 破解NTLMv2 Hash:从成功的NTLM认证响应中提取NetNTLMv2 Hash,保存为特定格式,并使用Hashcat的5600模式进行离线破解。
    hashcat -m 5600 hash.txt rockyou.txt
    
    成功破解获得administrator用户的明文密码。

阶段二:远程命令执行与凭据窃取

  1. WinRM远程执行:观察到攻击者转向目标主机的5985端口(WinRM)。使用已知的明文密码,通过decrypt-winrm等工具解密WinRM的SOAP流量,发现攻击者执行了dir命令,并确认当前目录存在mimikatz.exe
  2. 执行Mimikatz:在解密的流量中,发现攻击者执行了Mimikatz命令来抓取凭据:
    mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords full" "exit" > 1.log
    
    从服务器返回的结果中,成功提取到administrator用户的NTLM Hash:3d83254b53697355ef7498b535e7ab29

阶段三:穿透加密通道与权限维持

  1. 解密SMB3流量:后续SMB流量变为加密状态。使用上一步获得的NTLM Hash,结合认证流量中的NTProofStrEncrypted Session Key等字段,计算出Session Key。将其与对应的Session ID导入Wireshark,成功解密SMB3加密流量。
  2. 发现后门账户创建:在解密的svcctl流量中,发现攻击者通过CreateServiceW创建了一个服务,该服务执行的命令是创建一个新的本地用户admin,并设置密码kPxQ1GT9zA9E。此行为属于典型的权限维持。
  3. 完全解密剩余SMB3:将新创建的账户密码kPxQ1GT9zA9E作为NTLM凭据添加到Wireshark的NTLMSSP配置中,解密剩余的SMB3流量。

阶段四:RDP登陆与行为还原

  1. 获取RDP解密密钥:从解密后的SMB流量中,导出远程桌面证书文件(.pfx),并使用OpenSSL和密码mimikatz提取私钥。
  2. 解密RDP流量:将私钥导入Wireshark,解密攻击者与另一台主机(10.10.10.12)之间的RDP流量。
  3. 还原键盘输入:从解密的RDP流量中提取键盘扫描码(rdp.fastpath.scancode.keycode),通过编写映射脚本,将扫描码序列还原为攻击者在远程桌面中实际输入的命令或内容。

4. 防护与检测建议

  1. 监控SMB/NTLM认证:监控内网中异常的SMB认证,如短时间内大量失败登录、非管理主机访问多台主机的445端口、高权限账号(如administrator)远程登录、异常连接IPC$共享等行为。
  2. 严格限制WinRM使用:仅允许受信的管理主机通过WinRM进行管理,禁止普通终端间互访5985/5986端口。监控WinRM会话中是否出现cmdpowershellmimikatz等可疑命令。
  3. 加强凭据保护
    • 限制高权限账户在非必要终端上的登录。
    • 在关键服务器上启用Credential Guard、LSA保护等机制,防止Mimikatz等工具直接从LSASS内存中抓取明文密码和Hash。
  4. 审计远程服务创建:重点监控通过svcctl等接口远程创建服务的行为,特别是当服务路径或命令行参数中出现cmd.exe /cpowershellnet usernet localgroup administrators等命令时,应立即告警。
  5. 强化RDP访问控制
    • 对RDP登录实施来源IP限制。
    • 监控异常RDP登录行为,如非工作时间登录、新创建账户登录、从非常用主机登录等。
    • 对敏感服务器,考虑使用网络级别认证(NLA)并避免将RDP端口直接暴露给整个内网。

5. 总结与取证方法论

本教学文档通过一个完整的攻击链案例,阐述了内网横向移动的常见技术手段及相应的流量分析与取证方法。核心取证思路在于跨协议关联凭据接力推导

  • 从明文到Hash:从SMB的NTLMv2响应破解出明文密码,用于解密WinRM流量。
  • 从Hash到会话密钥:利用从WinRM执行的Mimikatz中获取的NTLM Hash,计算密钥以解密SMB3加密流量。
  • 从加密流量到攻击行为:在解密的svcctl流量中发现权限维持操作(创建后门账户)。
  • 从证书到输入还原:利用从SMB流量中获取的证书文件解密RDP流量,还原攻击者操作。

这种深度流量溯源方法强调,不能孤立地看待单个协议告警,而必须将SMB、WinRM、RDP等协议的攻击痕迹与NTLM认证、凭据窃取、远程命令执行、权限维持等攻击阶段的关键证据进行串联,才能构建出完整的攻击者行为画像,实现有效的威胁检测与应急响应。

相似文章
相似文章
 全屏