红队横向移动手法(Lateral Movement)剖析与蓝队日志追踪
2026/9/4 1:13:07 网站建设 项目流程

红队横向移动手法(Lateral Movement)剖析与蓝队日志追踪

撕开内网防御的关键跳板:TA0008 战术

在攻防演练与真实 APT 攻击事件中,攻击者在突破边界建立立足点后,初始主机往往并不具备核心资产(如域控制器、代码仓库、核心数据库、财务系统)。攻击者必须以初始主机为跳板,利用内网信任关系、共享凭据与管理协议,在不同的主机与子网之间进行跨节点渗透——这一过程在 MITRE ATT&CK 框架中被定义为横向移动(Lateral Movement, TA0008)

横向移动是红蓝对抗中博弈最为激烈的阶段。红队力求动作轻量、协议原生化(Living off the Land, LotL)以逃避告警;蓝队则需依托全网统一的日志中枢与 EDR 探针,从海量日常运维操作中精准剥离出恶意的横向行为特征。

主流横向移动手法与利用机理

┌─────────────────────────────────────────────────────────────┐ │ ATT&CK TA0008 常见横向移动手法 │ ├──────────────────────────────┬──────────────────────────────┤ │ SMB 与服务创建 (T1021.002) │ WMI / WinRM 远程执行 (T1047) │ │ - PsExec (ADMIN$ 共享 + SVC) │ - wmic process call create │ │ - SMBExec (利用命名管道) │ - PowerShell Remoting (5985) │ ├──────────────────────────────┼──────────────────────────────┤ │ 凭据传递与票据攻击 (T1550) │ Linux SSH 与密钥劫持 (T1552) │ │ - Pass-the-Hash (PTH / NTLM) │ - 窃取 ~/.ssh/id_rsa 私钥 │ │ - Pass-the-Ticket (Kerberos) │ - SSH Agent Hijacking │ └──────────────────────────────┴──────────────────────────────┘

1. SMB 协议与服务派生(PsExec 原理)

经典工具 PsExec 是红队最常用的横向移动工具之一:

  • 执行流程:攻击者利用获取的管理员凭据,通过 SMB(TCP 445)连接目标主机的ADMIN$共享,将服务二进制文件(如PSEXESVC.exe)上传至%SystemRoot%目录。
  • 服务启动:通过 DCE/RPC 调用目标机器的服务控制管理器(SCM,services.exe),注册并启动一个临时 Windows 服务,该服务派生子进程执行恶意 Payload 并通过命名管道(Named Pipe)将执行结果回传。

2. WMI 与 WinRM 远程指令执行(无文件落地)

相比 PsExec 需要在磁盘上写入服务文件,WMI(Windows Management Instrumentation)与 WinRM(Windows Remote Management)具备更高的隐蔽性:

  • WMI 横向:通过 TCP 135(RPC)与动态高位端口(DCOM),调用Win32_Process.Create方法,直接在目标机器上由WmiPrvSE.exe进程拉起指定的命令行(如powershell.exe -enc ...),全程无额外二进制落地。
  • WinRM 横向:利用 HTTP/HTTPS 端口(TCP 5985/5986)通过 WS-Management 协议启动 PowerShell 远程会话(Enter-PSSession / Invoke-Command)。

3. 哈希传递(Pass-the-Hash, PTH)

在未启用 Kerberos 强认证的环境中,Windows 认证支持 NTLM 协议。攻击者从 LSASS 内存中转储出管理员的 NTLM Hash 后,无需破解出明文密码,即可直接将其注入网络认证请求,在内网任意配置了相同本地管理员口令的主机之间漫游。

蓝队 Windows 安全日志关联追踪引擎实现

要捕获横向移动,蓝队必须建立基于Windows Event ID的时间线关联分析模型:

事件 ID日志源监控意义关键研判字段
4624Security网络登录事件LogonType: 3(网络登录),LogonProcessName: NTLM/Kerberos,IpAddress
7045System新服务安装通知ServiceName,ImagePath(若指向%SystemRoot%\*需警惕)
4688 / Sysmon 1Security / Sysmon进程创建与命令行ParentImage: WmiPrvSE.exeservices.exe派生命令行外壳

以下 Python 代码实现了一个专门针对横向移动特征的日志关联分析器,能够从日志流中精准提取 PsExec 与 WMI 异常调用链:

import json from typing import List, Dict, Any class LateralMovementHunter: def __init__(self): self.suspicious_service_names = {"psexesvc", "paexec", "winexe", "csexec"} def analyze_event_chain(self, events: List[Dict[str, Any]]) -> List[Dict[str, Any]]: """分析事件序列,重构横向移动攻击链条""" print("[*] 启动内网横向移动 (Lateral Movement) 威胁狩猎分析...") alerts = [] # 缓存网络登录事件,用于上下文关联 recent_network_logons: Dict[str, Dict] = {} for ev in events: event_id = ev.get("EventID") event_data = ev.get("EventData", {}) timestamp = ev.get("TimeCreated", "") target_host = ev.get("Computer", "UNKNOWN") # 1. 监控 Event ID 4624 (网络登录 LogonType = 3) if event_id == 4624: logon_type = str(event_data.get("LogonType")) src_ip = event_data.get("IpAddress", "-") user = event_data.get("TargetUserName", "") if logon_type == "3" and src_ip not in ("127.0.0.1", "-", "::1"): recent_network_logons[target_host] = { "src_ip": src_ip, "user": user, "timestamp": timestamp } # 2. 监控 Event ID 7045 (System 日志: 新服务安装 - 对应 PsExec 行为) elif event_id == 7045: svc_name = event_data.get("ServiceName", "").lower() image_path = event_data.get("ImagePath", "") # 检查是否匹配已知横向移动工具服务名或包含高危命令行 if svc_name in self.suspicious_service_names or "cmd.exe" in image_path.lower() or "powershell" in image_path.lower(): logon_ctx = recent_network_logons.get(target_host, {}) alerts.append({ "tactic": "TA0008 - Lateral Movement", "technique": "T1543.003 - Windows Service Creation (PsExec style)", "severity": "CRITICAL", "target_host": target_host, "source_ip": logon_ctx.get("src_ip", "UNKNOWN"), "compromised_user": logon_ctx.get("user", "UNKNOWN"), "details": f"检测到新服务注册 [{svc_name}] -> 执行路径: {image_path}", "timestamp": timestamp }) # 3. 监控 Event ID 4688 / Sysmon 1 (WmiPrvSE 派生子进程 - 对应 WMI 横向) elif event_id in (4688, 1): parent_proc = event_data.get("ParentImage", "").lower().split("\\")[-1] child_proc = event_data.get("Image", "").lower().split("\\")[-1] cmdline = event_data.get("CommandLine", "") if parent_proc == "wmiprvse.exe" and child_proc in ("cmd.exe", "powershell.exe", "pwsh.exe", "mshta.exe"): logon_ctx = recent_network_logons.get(target_host, {}) alerts.append({ "tactic": "TA0008 - Lateral Movement", "technique": "T1047 - Windows Management Instrumentation (WMI Exec)", "severity": "HIGH", "target_host": target_host, "source_ip": logon_ctx.get("src_ip", "UNKNOWN"), "compromised_user": logon_ctx.get("user", "UNKNOWN"), "details": f"WMI 服务进程 (WmiPrvSE.exe) 异常衍生命令行外壳: {child_proc}", "command_line": cmdline, "timestamp": timestamp }) print(f"[+] 日志审计完成,识别出 {len(alerts)} 起高危横向移动攻击事件:\n") for a in alerts: print(f" -> [{a['severity']}] {a['technique']}") print(f" 受害主机: {a['target_host']} (来源 IP: {a['source_ip']}, 凭据身份: {a['compromised_user']})") print(f" 行为详情: {a['details']}") if "command_line" in a: print(f" 执行命令: {a['command_line']}") print(f" 触发时间: {a['timestamp']}\n") return alerts if __name__ == "__main__": # 模拟 Windows 安全事件日志流 mock_event_stream = [ { "EventID": 4624, "TimeCreated": "2026-09-03 14:10:02", "Computer": "FILE-SERVER-01", "EventData": {"LogonType": "3", "IpAddress": "192.168.1.105", "TargetUserName": "Administrator"} }, { "EventID": 7045, "TimeCreated": "2026-09-03 14:10:05", "Computer": "FILE-SERVER-01", "EventData": {"ServiceName": "PSEXESVC", "ImagePath": "%SystemRoot%\\PSEXESVC.exe"} }, { "EventID": 4688, "TimeCreated": "2026-09-03 14:15:30", "Computer": "DC-PRIMARY", "EventData": { "ParentImage": "C:\\Windows\\System32\\wbem\\WmiPrvSE.exe", "Image": "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe", "CommandLine": "powershell.exe -enc JABzACAAPQAgAE4AZQB3AC0ATwBiAGoAZQBjAHQA..." } } ] hunter = LateralMovementHunter() hunter.analyze_event_chain(mock_event_stream)

企业内网横向移动主动防御收敛体系

横向移动之所以屡屡得手,本质上是企业内网对“本地管理员密码通用”与“过度宽松的内部 RPC 通信”的纵容。构筑坚实的防御体系需推进以下三大工程:

1. 部署 LAPS(Local Administrator Password Solution)

强制在全网所有 Windows 工作站与服务器上启用 LAPS,确保每台机器的内置Administrator账户拥有完全随机且定期轮换的强口令。彻底终结“单台终端失陷导致全网管理员密码被撞库漫延”的死穴。

2. 启用 Credential Guard 与受保护用户组(Protected Users)

  • 在 Windows 10 / 11 与 Windows Server 上开启基于虚拟化的安全(VBS)与Credential Guard,将 LSASS 进程隔离在独立的受信任虚拟环境(Trustlet)中,禁止 Mimikatz 等工具直接读取明文密码或 NTLM Hash。
  • 将特权运维账户加入Protected Users 安全组,强制禁用 NTLM 认证,限制 Kerberos 票据生命周期为 4 小时,杜绝哈希传递与票据缓存窃取。

3. 主机防火墙与东西向访问白名单控制

通过 GPO 组策略强制开启主机防火墙,除受控的集中运维跳板机(Bastion Host)之外,禁止所有办公终端之间相互访问 TCP 445、135、5985 端口,从物理连通性上扼杀任意终端间横向移动的可能。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询