内网横向移动攻击链深度分析与取证溯源教学文档
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)认证机制包含三个阶段:
- 协商(NTLMSSP_NEGOTIATE):客户端发起认证协商。
- 挑战(NTLMSSP_CHALLENGE):服务器返回一个随机挑战值(Challenge)。
- 认证(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。
解密前提与步骤:
- 获取凭据材料:需获得用户的明文密码或NTLM Hash。
- 提取关键字段:从SMB/NTLM认证流量中提取
NTProofStr、Encrypted Session Key、Server Challenge等字段。 - 计算会话密钥:
- 若有明文密码,可推导出NTLM Hash,再结合其他字段计算
Random Session Key。 - 若直接拥有NTLM Hash,可使用工具(如
SMB3-Decryption项目中的randomSessionKeyNTLM.py)进行计算。
python randomSessionKeyNTLM.py -u <用户名> --domain=<域名> -n <NTLM_Hash> -p <NTProofStr> -k <EncryptedSessionKey> - 若有明文密码,可推导出NTLM Hash,再结合其他字段计算
- 导入Wireshark解密:将计算得到的
Session Key与对应的Session ID(从流量中提取)填入Wireshark的SMB2解密配置(编辑 -> 首选项 -> Protocols -> SMB2),即可解密后续加密流量。
2.5 svcctl与远程服务创建
svcctl是Windows服务控制管理器远程协议,常被攻击者用于远程创建、启动服务以完成命令执行。恶意行为通常涉及以下API调用序列:
OpenSCManagerW: 打开服务控制管理器。CreateServiceW: 创建恶意服务(服务路径中常包含cmd.exe /c、powershell、net user等可疑命令)。StartServiceW: 启动创建的服务。
在解密后的SMB3流量中分析这些调用,是发现攻击者进行权限维持(如创建后门账户)的关键。
2.6 RDP流量解密与输入还原
RDP(Remote Desktop Protocol)流量通常被加密。解密需要获取远程桌面证书的私钥(如从流量中导出的.pfx文件)。
解密与还原步骤:
- 导出证书和私钥:使用OpenSSL从.pfx文件中提取。
openssl pkcs12 -legacy -in "cert.pfx" -clcerts -nokeys -out certificate.pem - 配置Wireshark:将私钥导入Wireshark(编辑 -> 首选项 -> Protocols -> TLS -> RSA keys list),以解密RDP流量。
- 提取键盘扫描码:解密后,可过滤出
rdp.fastpath.scancode.keycode字段,该字段记录了按键的扫描码。tshark -r "rdp.pcapng" -Y "rdp.fastpath.scancode.keycode" -T fields -e rdp.fastpath.scancode.keycode > keycode.txt - 还原输入内容:编写脚本,将扫描码映射为实际字符(需区分Shift等修饰键),从而还原攻击者在远程桌面中的键盘输入记录。
3. 完整攻击链案例复盘与实操分析
以下基于提供的流量案例,还原一次完整的横向移动攻击链:
阶段一:初始突破与凭据获取
- SMB认证尝试:分析流量发现攻击者(
10.10.10.80)向目标主机(10.10.10.201)的445端口发起SMB连接,并以administrator身份进行NTLM认证。首次认证失败,后续认证成功并连接了IPC$共享。 - 破解NTLMv2 Hash:从成功的NTLM认证响应中提取NetNTLMv2 Hash,保存为特定格式,并使用Hashcat的5600模式进行离线破解。
成功破解获得hashcat -m 5600 hash.txt rockyou.txtadministrator用户的明文密码。
阶段二:远程命令执行与凭据窃取
- WinRM远程执行:观察到攻击者转向目标主机的5985端口(WinRM)。使用已知的明文密码,通过
decrypt-winrm等工具解密WinRM的SOAP流量,发现攻击者执行了dir命令,并确认当前目录存在mimikatz.exe。 - 执行Mimikatz:在解密的流量中,发现攻击者执行了Mimikatz命令来抓取凭据:
从服务器返回的结果中,成功提取到mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords full" "exit" > 1.logadministrator用户的NTLM Hash:3d83254b53697355ef7498b535e7ab29。
阶段三:穿透加密通道与权限维持
- 解密SMB3流量:后续SMB流量变为加密状态。使用上一步获得的NTLM Hash,结合认证流量中的
NTProofStr、Encrypted Session Key等字段,计算出Session Key。将其与对应的Session ID导入Wireshark,成功解密SMB3加密流量。 - 发现后门账户创建:在解密的svcctl流量中,发现攻击者通过
CreateServiceW创建了一个服务,该服务执行的命令是创建一个新的本地用户admin,并设置密码kPxQ1GT9zA9E。此行为属于典型的权限维持。 - 完全解密剩余SMB3:将新创建的账户密码
kPxQ1GT9zA9E作为NTLM凭据添加到Wireshark的NTLMSSP配置中,解密剩余的SMB3流量。
阶段四:RDP登陆与行为还原
- 获取RDP解密密钥:从解密后的SMB流量中,导出远程桌面证书文件(.pfx),并使用OpenSSL和密码
mimikatz提取私钥。 - 解密RDP流量:将私钥导入Wireshark,解密攻击者与另一台主机(
10.10.10.12)之间的RDP流量。 - 还原键盘输入:从解密的RDP流量中提取键盘扫描码(
rdp.fastpath.scancode.keycode),通过编写映射脚本,将扫描码序列还原为攻击者在远程桌面中实际输入的命令或内容。
4. 防护与检测建议
- 监控SMB/NTLM认证:监控内网中异常的SMB认证,如短时间内大量失败登录、非管理主机访问多台主机的445端口、高权限账号(如administrator)远程登录、异常连接IPC$共享等行为。
- 严格限制WinRM使用:仅允许受信的管理主机通过WinRM进行管理,禁止普通终端间互访5985/5986端口。监控WinRM会话中是否出现
cmd、powershell、mimikatz等可疑命令。 - 加强凭据保护:
- 限制高权限账户在非必要终端上的登录。
- 在关键服务器上启用Credential Guard、LSA保护等机制,防止Mimikatz等工具直接从LSASS内存中抓取明文密码和Hash。
- 审计远程服务创建:重点监控通过svcctl等接口远程创建服务的行为,特别是当服务路径或命令行参数中出现
cmd.exe /c、powershell、net user、net localgroup administrators等命令时,应立即告警。 - 强化RDP访问控制:
- 对RDP登录实施来源IP限制。
- 监控异常RDP登录行为,如非工作时间登录、新创建账户登录、从非常用主机登录等。
- 对敏感服务器,考虑使用网络级别认证(NLA)并避免将RDP端口直接暴露给整个内网。
5. 总结与取证方法论
本教学文档通过一个完整的攻击链案例,阐述了内网横向移动的常见技术手段及相应的流量分析与取证方法。核心取证思路在于跨协议关联和凭据接力推导:
- 从明文到Hash:从SMB的NTLMv2响应破解出明文密码,用于解密WinRM流量。
- 从Hash到会话密钥:利用从WinRM执行的Mimikatz中获取的NTLM Hash,计算密钥以解密SMB3加密流量。
- 从加密流量到攻击行为:在解密的svcctl流量中发现权限维持操作(创建后门账户)。
- 从证书到输入还原:利用从SMB流量中获取的证书文件解密RDP流量,还原攻击者操作。
这种深度流量溯源方法强调,不能孤立地看待单个协议告警,而必须将SMB、WinRM、RDP等协议的攻击痕迹与NTLM认证、凭据窃取、远程命令执行、权限维持等攻击阶段的关键证据进行串联,才能构建出完整的攻击者行为画像,实现有效的威胁检测与应急响应。