内网横向移动攻击演示,运维如何检测阻断
内网横向移动是指攻击者拿下第一台机器后,利用弱口令、漏洞或窃取的凭证进一步控制内网其他主机的过程。
对运维来说,最需要关心的是如何尽早发现异常登录和端口扫描,并通过策略阻断攻击链。
本文将在隔离实验环境里演示一次典型的横向移动,并给出检测命令和阻断配置,你跟着做完就能掌握排查和加固的基本方法。
实验环境与前置准备
要复现横向移动,至少需要三台机器:一台攻击机(Kali Linux)、一台已攻陷的跳板机(Windows 10,假设已获取权限)、一台目标机(Windows Server 2019)。
三台机器在同一个 VMnet 或 Host-Only 网络里,IP 规划如下:
- 攻击机:
192.168.56.10 - 跳板机:
192.168.56.20 - 目标机:
192.168.56.30
在跳板机上关闭 Windows Defender 实时防护(实验环境,生产不要关闭),并创建一个普通用户 testuser。
目标机开启远程桌面和 SMB 共享,并设置一个弱口令账号 admin / Admin123,用来模拟常见弱口令场景。
注意:所有操作仅在你自己拥有或授权的隔离网络中进行,未经授权的测试属于违法行为。
横向移动攻击演示:从跳板机到目标机
攻击者进入跳板机后,通常会先收集内网信息,再尝试用已有凭证或抓取的哈希去连接其他机器。
这里演示两种常见手法。
1. 使用 net 命令探测内网存活主机
在跳板机的 CMD 中执行:
net view /domain
如果返回了目标机的主机名,说明 SMB 可达。
继续用 ping 确认:
ping 192.168.56.30
2. 利用弱口令进行 IPC$ 连接
攻击者常用 net use 建立 IPC$ 连接,为后续拷贝文件或执行命令做准备:
net use \\192.168.56.30\IPC$ /user:admin Admin123
如果返回“命令成功完成”,说明弱口令可用。
接着就可以把木马或脚本复制到目标机:
copy payload.exe \\192.168.56.30\C$\Windows\Temp\
3. 使用 PsExec 远程执行命令
在攻击机上用 PsExec 通过已建立的连接执行命令:
PsExec.exe \\192.168.56.30 -u admin -p Admin123 cmd.exe
此时攻击者已经获得目标机的命令行权限。
整个过程在目标机日志中会留下大量登录事件和进程创建记录,这正是运维检测的关键。
运维如何检测横向移动痕迹
防守方不需要抓包也能从日志里发现异常。
重点检查三类记录。
检查 Windows 安全日志中的登录事件
在目标机上打开“事件查看器” -> “Windows 日志” -> “安全”,筛选事件 ID:
- 4624:登录成功。如果出现大量来自同一源 IP 的 4624,且登录类型为 3(网络登录),需要警惕。
- 4625:登录失败。短时间内多次 4625 说明有人在暴力破解。
- 4672:授予特殊权限。攻击者登录后常会触发此事件。
也可以用 PowerShell 快速统计:
Get-WinEvent -FilterHashtable @{LogName='Security'; ID=4624} | Group-Object -Property {$_.Properties[18].Value} | Sort-Object Count -Descending
如果某个 IP 的登录次数异常偏高,就应该进一步排查。
查看 SMB 共享和会话
在目标机上执行:
net session
如果看到陌生 IP 的会话,说明有远程连接。
再用 net share 检查是否有异常共享。
检查计划任务和服务
攻击者常通过创建计划任务维持权限:
schtasks /query /fo LIST /v | findstr /i "taskname author"
如果发现任务作者为 admin 或路径指向 Temp 目录,很可能是攻击者留下的。
阻断策略:从边界到主机加固
检测到异常后要立即阻断,并加固环境避免再次被横向。
防火墙限制高危端口
在目标机的 Windows Defender 防火墙中,只允许跳板机访问必要端口。
例如,只允许 3389 远程桌面来自管理网段,禁止其他内网机器访问 SMB 445 端口:
New-NetFirewallRule -DisplayName "Block SMB from subnet" -Direction Inbound -Protocol TCP -LocalPort 445 -RemoteAddress 192.168.56.0/24 -Action Block
执行后,攻击机再次尝试 net use 会返回“系统发生 53 错误”,说明阻断生效。
强制使用强密码和账户锁定
在目标机本地安全策略中设置:
- 密码长度最小值:12 个字符
- 密码必须符合复杂性要求:已启用
- 账户锁定阈值:5 次无效登录
- 账户锁定时间:15 分钟
路径:secpol.msc -> 账户策略 -> 密码策略 / 账户锁定策略。
开启 Windows Defender 凭据保护
在目标机上启用 Credential Guard 可以防止哈希传递。
对于 Windows 10/11 专业版,可在“Windows 安全中心” -> “设备安全性” -> “内核隔离”中开启内存完整性,并确认 Credential Guard 状态为“正在运行”。
部署网络分段和跳板机审计
生产环境建议把服务器放在独立 VLAN,只允许运维跳板机访问。
跳板机开启会话录制,所有命令可追溯。
如果条件允许,使用堡垒机统一管理,并定期导出登录日志做异常分析。
验证检测与阻断是否生效
完成配置后,重新在跳板机上执行 net use \\192.168.56.30\IPC$ /user:admin Admin123,应该看到“系统发生 53 错误”或“拒绝访问”。
同时在目标机安全日志中能看到 4625 失败事件,说明检测和阻断都在工作。
再检查防火墙规则是否生效:
Get-NetFirewallRule -DisplayName "Block SMB from subnet" | Select-Object DisplayName, Enabled, Action
返回 Enabled : True 和 Action : Block 即为正常。
常见问题与避坑提醒
问:为什么我按步骤做了,但日志里找不到 4624 事件?
可能是审核策略没有开启。
在目标机运行 auditpol /set /subcategory:"登录" /success:enable /failure:enable,然后重新触发一次登录。
问:防火墙规则加了,但攻击机还是能访问共享?
检查规则的优先级和配置文件。
默认情况下,阻止规则优先级高于允许规则,但如果之前有允许规则且作用域更具体,仍然可能放行。
用 Get-NetFirewallRule | Where-Object DisplayName -like "*SMB*" 列出所有相关规则,确认没有冲突。
避坑:不要在生产环境直接关闭防火墙或 Defender 来做测试。 所有演示应在隔离网络或虚拟机快照中进行。
另外,修改账户锁定策略前要确认不会锁死正常服务账号,建议先对普通用户启用,观察一周再推广。
避坑:弱口令检测不能只靠人工。 建议用 hydra 或 crackmapexec 在授权范围内定期扫描,但务必控制扫描频率,避免触发业务告警。
结尾
内网横向移动攻击演示的目的不是教攻击,而是让运维理解攻击路径,从而在检测和阻断上有的放矢。
从日志排查到防火墙策略,再到账户加固,每一步都能直接落地。
建议你先在实验环境完整走一遍,然后根据自己内网的实际情况调整检测规则和阻断策略。
如果遇到日志缺失或规则不生效,优先回看“常见问题与避坑提醒”部分。