
这些年做安全运营和攻防对抗我最常被问到的问题不是“边界怎么防得更死”而是“攻击者已经进了内网是怎么一台接一台打下去的我们又该怎么抓住他”。这个问题背后正是内网横向移动的核心命题。横向移动阶段的手段五花八门但你会发现绕来绕去基本离不开几个老熟人SMB、WMI、PsExec。这篇文章不打算教你怎么复现攻击而是希望站在防守者的视角把这三类协议的原理、攻击者为什么盯上它们、以及对应的检测与加固思路掰开揉碎讲清楚。适合刚接触安全运营的蓝队朋友、负责内网加固的运维同学以及所有想在攻防演练里少踩坑的人。横向移动最棘手的地方在于它往往不是一次性的“打穿”而是通过合法或半合法的管理协议在多个主机之间反复跳板最终逼近核心目标。理解这个逻辑比单纯记住几个告警规则重要得多。1. 横向移动的本质为什么SMB、WMI、PsExec会成为首选1.1 别被“攻击”两个字吓到它其实是一种“合法使用”横向移动简单来说就是攻击者已经拿下一台主机后利用内网中其他主机之间的信任关系从这台机器跳到下一台机器。那为什么SMB、WMI、PsExec这三个名词会高频出现在安全告警里因为它们本身就是Windows系统里再正常不过的管理通道。用一个生活场景来类比物业人员手里有一把万能钥匙能合法打开楼里所有房间的门。SMB就是这把钥匙的开锁方式WMI是物业通过广播喊话的方式PsExec则是物业直接派一个临时工进去帮你干活。攻击者只是把物业人员的工作流程换成了自己不可告人的目的。也正因为这是“合法使用”传统的边界防火墙几乎无法识别主机上的杀毒软件也常常默认放行。攻击者只需要拿到一组内网凭据哪怕是普通域用户就有可能在多台机器之间穿行。理解这个前提你才能明白为什么横向移动这么难防不是协议有漏洞而是协议本身设计出来就是给人远程管理用的。1.2 攻击流程中的位置拿下一台横向遍布一片标准攻击链大致是这样的初始入侵、权限提升、凭据窃取、横向移动、目标访问。SMB、WMI、PsExec主要承担“横向移动”这一步但前提是攻击者已经拥有一台主机的控制权并且拿到了能远程连接其他主机的账号口令或票据。这也是为什么安全运营里有一个基本认知横向移动不是攻击的开始而是攻击的深化。防御的价值在于如果能在这一阶段发现异常往往可以在数据被批量拖走之前及时止损。如果只在边界防得死死的内网一旦出现弱口令、未分区、共享权限过宽横向移动的风险就永远悬在头上。换句话说边界防线的意义是降低入口被突破的概率而横向移动检测的意义是避免一台失陷变成一片失陷。1.3 攻击面为何难以收敛有人会问既然SMB、WMI、PsExec这么危险干脆全部禁掉不就行了答案没那么简单。现代企业的日常运维严重依赖这些协议系统补丁分发要走SMB共享资产管理工具要调WMI接口IT人员远程维护服务器也经常用PsExec类工具。一刀切禁止业务先瘫了。所以真正的安全思路是“收敛”而不是“封死”。端口可以限制在管理VLAN内账户权限可以收紧日志可以提前打开行为基线可以慢慢建立。你得在业务连续性和安全防护之间找到一个平衡点这是所有内网加固工作绕不开的第一课。2. SMB协议内网文件共享背后的“运输主干”2.1 SMB到底在电脑里承担什么角色SMB的全称是Server Message Block翻译过来就是“服务器消息块”它是Windows环境下用于文件共享、打印机共享、命名管道通信的协议族。从Windows 2000时代开始SMB几乎成了每一台Windows机器的默认开门方式。你访问网络邻居的共享文件夹或者用UNC路径映射一个盘符比如在资源管理器里输入\\192.168.1.10\share底层走的就是SMB。普通用户如果想看看自己电脑的SMB配置最直接的办法是打开“服务”管理器找到LanmanServer和LanmanWorkstation这两个服务。前者负责对外提供共享后者负责访问别人的共享两者分工不同却是一对离不开的组合。日常查看SMB共享地址最简单的方式是在命令行执行net share系统会列出当前机器开放的所有共享名和路径包括默认的C$、ADMIN$管理共享。SMB服务监听的默认端口是445/TCP老版本还会用到139/TCP防火墙规则里通常能看到这两条。2.2 攻击者的几种滥用方式攻击者盯上SMB主要看中了它的三个能力远程文件读写、协议认证过程、以及系统本身对这个协议的高度信任。这里不展开具体工具的复现流程而是把攻击逻辑拆开来看。第一类是共享目录探测与利用。攻击者拿到内网凭据后会用工具扫描内网开放SMB服务的机器尝试访问默认管理共享比如C$、ADMIN$。如果管理共享没有被额外限制加上存在弱口令攻击者就能直接读写目标机器的磁盘文件。很多数据泄露事件里攻击者就是在这一步把敏感文件拖回自己的跳板机再慢慢传出去。第二类是SMB会话重放与中间人攻击。SMB协议的历史版本尤其是SMBv1在设计上存在一些先天不足容易被重放或者被降级攻击。这也是为什么现在Windows安全基线普遍要求禁用SMBv1核心原因就是它的认证机制太脆一旦被利用攻击者可能在不掌握口令的情况下冒充合法客户端。第三类是作为其他攻击载荷的传输通道。很多攻击工具本身不直接去“攻破”SMB而是把SMB当作出货通道把后续要执行的程序、脚本或者恶意DLL送进目标机器。PsExec这类工具看起来很独立底层仍然是通过SMB先建立连接再创建远程服务完成命令执行。也就是说SMB不光是攻击目标也可能是攻击链路里的运输主干。2.3 为什么禁掉SMBv1还不够很多人觉得关掉SMBv1就万事大吉其实这远远不够。SMBv2和SMBv3协议的安全性确实上了一个台阶有了加密和签名机制但如果账号口令本身已经泄露攻击者照样可以走正常SMB会话完成横向移动。协议再安全也防不住凭据失守。所以对SMB的关注应该分两条线并行第一条是协议版本的加固包括禁用SMBv1、开启SMB签名、有条件时开启加密第二条是凭据和访问权限的收敛包括密码复杂度、管理共享限制、VLAN隔离。只做任何一条都像只锁门不关窗攻击者换个路径照样能进来。实际加固时我还建议把SMB相关的防火墙策略改成“默认拒绝、按需放行”而不是图省事直接放行大批网段。3. WMI打着“系统管理”旗号的远程执行利器3.1 WMI的本来面貌WMI的全称是Windows Management Instrumentation是微软基于WBEM标准实现的一套系统管理框架。它允许管理员查询和修改Windows系统的各种信息包括进程、服务、注册表、事件日志、网络配置等。你平时用的很多运维自动化脚本底层其实都在和WMI打交道。WMI的工作机制可以理解成一套“通用的管理语言”无论你想知道CPU使用率、远程启动服务、读取某台机器的启动项还是修改防火墙规则都能通过WMI的查询或调用实现。它的通信通道默认走RPC固定端口是135/TCP动态端口则落在49152到65535之间。Windows防火墙在默认域配置里通常会对WMI相关流量放行因为如果不放行很多企业管理软件就没法正常工作。3.2 攻击者为什么偏爱WMIWMI在攻击者眼里有一个极其诱人的优势无文件。使用WMI执行远程命令时不需要往目标磁盘写入任何脚本或可执行文件指令可以直接在内存中运行。这直接导致传统基于文件扫描的杀毒软件很难发现它一批EDR规则对纯内存执行的行为也不是特别敏感。更隐蔽的细节在于进程视角。通过WMI远程触发命令时命令进程通常会挂在WmiPrvSE.exe这个宿主进程下面。从任务管理器看这只是一个正常的系统进程在做系统管理的事情不像木马那样弹出全新的可疑进程名。如果安全运营人员不仔细追进程父子关系和命令行参数很容易漏掉。攻击者为什么对WMI情有独钟这大概是最核心的原因它和正常运维的“模样”太像了。还有一个现实因素值得注意WMI调用要求用户对目标机器具备管理员权限或者至少具备远程管理权限。听起来提高了门槛但攻击者在内网里往往已经通过提权、哈希传递或票据伪造拿到了管理员权限这一步根本不构成阻碍。3.3 从防御角度如何理解WMI调用既然正常运维也在用WMI那防御的关键就不是封堵协议而是识别“调用方式是否有问题”。我通常会从三个维度去判断一次WMI调用是否值得警惕。第一个维度是调用范围。正常管理员会明确知道要管理哪几台机器不会有管理员一瞬间去查询整个网段的全部机器。攻击者为了侦察和批量执行经常在短时间内连接大量主机。第二个维度是调用频率。同一来源IP在几分钟内发起几十次WMI连接明显不是人肉运维能做出的节奏。第三个维度是执行动作。只查一下系统信息还能解释为资产管理但如果紧接着调用远程进程创建、修改计划任务、关闭杀毒软件那基本就要按恶意行为处理。换句话说WMI协议本身不分善恶关键看协议背后的人做了什么。防御方如果只关注协议告警而忽略行为链的串联很容易被淹没在一堆“WMI连接成功”的低危告警里。4. PsExecSysinternals“官方工具”与攻击者的爱4.1 PsExec的设计初衷PsExec是微软Sysinternals工具集里非常经典的一款远程管理工具它的定位是让管理员在被管理的远程系统上执行进程。核心流程是通过SMB连接目标机器的ADMIN$共享把一个临时服务程序拷贝上去再通过服务控制管理器启动这个服务由服务代为执行管理员指定的命令最后把标准输出结果返回给本地控制台。这套设计在一开始确实是为了方便运维。试想一下你管理着一百台Windows服务器要给每台机器打补丁或者改配置如果一台台远程桌面登录过去效率低得可怕。PsExec允许你在本地写好一条命令批量推送到多台机器上执行省时省力。这也是Sysinternals工具包这么流行的原因。4.2 攻击者为何拿它当“神兵”PsExec被攻击者盯上不是因为存在漏洞而是因为它太好用了。它几步操作就完成了远程命令执行先建立SMB连接再创建远程服务然后在目标系统上执行命令。整个过程完全走系统的合法管理链路不需要在目标机器上安装额外的客户端也不容易出现兼容性问题。更麻烦的是开源社区里有一批基于同样原理实现的项目思路都是“SMB连接加服务创建加命令执行”但名字不叫PsExec。这意味着安全运营团队哪怕把PsExec这个程序名加进黑名单攻击者换个名字甚至直接自写一个小工具照样能完成同样的事情。这也是为什么我一直强调检测不能只盯工具名字要盯行为模式。如果你只封杀某一个工具的特征那只是拆东墙补西墙攻击者换一批变种或者干脆自己写脚本防线就成摆设了。还有一点容易被忽略PsExec类技术的使用过程中会涉及往目标机器临时目录里写文件。但很多改造版工具会把文件藏在更深的目录或者执行完就删除让文件系统层面的检测窗口非常短。等到应急响应时再去磁盘里翻残留文件往往已经晚了。4.3 什么样才算异常检测PsExec类行为核心要看几个行为特征而不是程序名。第一Windows事件日志中短时间内大量出现服务创建记录也就是Event ID 7045而且服务名、服务路径看起来和业务完全无关。第二目标机器的SMB连接日志里出现一个来源IP在短时间内连接了多台主机的445端口并伴随后续服务创建动作。第三进程树中出现由同一个父进程衍生的多个远程连接行为尤其当父进程是PowerShell、CMD或者一个可疑脚本宿主时需要立刻提高警惕。把这些特征组合起来看比单独查“有没有人运行过PsExec”要靠谱得多。真实攻击者可能在午夜用一条命令横向扫了整个网段也可能在一个小时内在几十台机器上建立了服务。这些行为放到日志里都会露出或多或少的马脚关键是你知不知道去看哪里。5. 从协议到检测日志、流量与行为规则的组合拳5.1 三条检测思路不是靠单一工具在真实的安全运营里检测横向移动从来没有银弹。更靠谱的路线是三线并行。第一条是Windows事件日志。系统安全日志会记录远程登录的来源IP、登录账户、登录类型服务创建、计划任务创建、进程创建也都有对应事件。你需要做的是先确保这些日志被收集到统一平台再针对特定事件ID建立告警规则。很多单位日志采集不全等到攻击发生之后才发现什么都看不到这种基建问题比攻击本身还可怕。第二条是网络流量分析。445、135以及动态RPC端口的访问关系、连接频率、访问目标数量能清晰地勾勒出哪些IP在做横向探测。基于NetFlow或者全流量抓包你能看到SMB的建立连接、WMI的RPC交互等具体行为。网络侧数据的优势是攻击者很难抹掉哪怕他清掉了主机日志流量里的会话记录还在。第三条是主机行为监控。这一步最关键也最需要投入精力。关注进程是否创建了不常见的远程连接、是否在远程主机上创建了服务、是否通过计划任务启动了异常程序。现代EDR大部分能力都集中在这一层但前提是规则配置合理且运维团队能看懂告警。5.2 关键日志与事件ID速查关注点事件ID说明网络登录成功4624Logon Type 3记录远程连接使用的账户、来源IP和登录类型是横向移动的基础线索登录失败4625Logon Type 3大量网络登录失败说明可能存在口令猜测或喷洒攻击服务安装7045新服务被安装到系统PsExec类工具会在目标机器上留下此记录计划任务创建4698攻击者常用计划任务实现远程命令执行或持久化进程创建4688开启命令行进程审计后可以看到攻击者在目标机器上执行了什么命令Kerberos预认证失败4771域环境内非常常见和口令爆破、密码喷洒直接相关这里想专门提醒一句光有4624/4625这类登录事件远远不够。如果你没有开启4688和PowerShell日志一旦攻击者在目标机器上执行的是无文件命令你事后能看到的就只剩一个进程启动记录具体执行了什么内容完全看不到。这也是“日志先行”的核心价值。任何安全项目都应该先把日志基线打好再谈检测规则。5.3 流量里的“低频高位”现象横向移动的流量特征往往不是大流量而是低频高位次数不多但访问的目标特别多。一个内网IP在五分钟内连接了二十台机器的445端口即便每个连接只传输几百个字节也已经是非常明显的危险信号。正常情况下没有哪个管理员会以这样的频率去访问整个网段的SMB服务。我在一线处置中见过很多类似案例告警平台丢出一条“来源IP访问445端口次数过多”的日志结果被当成普通扫描行为忽略等到后面做复盘时才发现这正是横向移动的第一步足迹。所以提醒各位运营同学看到批量访问SMB或者WMI端口的告警不要下意识归为扫描流量先翻一下来源账户、目标范围和后续行为再决定关不关这条告警。6. 加固方案从根源降低横向移动风险6.1 网络层面的分区和隔离防止横向移动的第一道防线是网络分区。把不同业务网段隔离开严格控制网段间的访问策略。比如财务网段、研发网段、办公网段彼此之间只放行业务需要的端口而不是图省事全放通。大量内网之所以出现“一台失陷、全网裸奔”根子就在于网络架构没有做细粒度隔离。VLAN和防火墙策略的落地思路很简单默认拒绝按需放行。先梳理业务之间的实际通信需求再制定白名单规则尤其是445、135这类高危端口更应该在防火墙层面做收敛。如果因为历史原因没法一步到位也可以先对核心资产网段做隔离再逐步推广。6.2 账号与凭据管理横向移动极度依赖凭据那防御的重点自然就是让凭据不容易被拿到、也不容易被滥用。这里有几个建议。一是本地管理员密码要统一随机化避免全网所有机器同一个密码否则一组凭据泄露等于全部管理员密码暴露。二是域管账户平时禁用只在需要提权时启用用完立刻改密码。三是定期审查服务账户权限确保没有过度授权。四是开启Windows Credential Guard减少明文凭据被窃取的风险。很多攻击者拿到明文密码之后的第一反应就是去试其他机器如果每台机器密码都不一样横向移动的链条自然会被打断。6.3 主机安全基线针对Windows主机本身建议至少检查以下几点。禁用SMBv1协议保留SMBv2或更高版本。SMBv1已经不只一次被曝出严重漏洞能关就关。开启SMB签名防止中间人篡改和重放攻击。这个设置对性能影响很小但安全收益明显。限制管理共享的访问尤其是面向互联网或跨部门网段的机器建议关闭C$、ADMIN$。打开进程命令行审计4688、PowerShell脚本块日志和PowerShell操作日志并保证日志保留周期足够长。配置主机防火墙仅允许管理VLAN的IP访问135、445等管理端口。6.4 监控与事件响应预案加固完成之后安全建设并没有结束。监控策略必须随着业务变化持续调整定期用红队工具做模拟验证确保检测规则不是一张废纸。这里建议把几种横向移动常见行为分别写成检测规则模板覆盖批量SMB连接、WMI外部调用、服务创建异常、计划任务创建异常等场景并给规则设置合理的告警级别。同时每半年或每季度做一次应急演练把账户失陷、横向移动、数据外传等典型攻击路径串成一个完整剧本。很多团队平时规则配置看着很完善一旦真正面对告警风暴时才发现处置流程跑不通哪条线推给谁都不清晰。演练的目的就是让流程先于事故跑通而不是等到攻击来了再手忙脚乱。7. 实操心得我在实际处置中踩过的坑这里分享几个我自己踩过的坑给同行们提个醒。第一只盯攻击工具名称不盯行为。我曾经见过有同事在告警平台里把PsExec字符串拉黑结果攻击者换了一个完全不同名字的变种工具照样完成横向移动黑名单形同虚设。安全运营不能靠枚举黑名单而要靠行为模式的拉通分析。第二不关注来源账户。很多横向移动告警里来源账户看起来是正常的用户账号可能是一个域用户平时不引人注意。但如果这个账户平时只在一台机器上登录突然在一分钟内登录了十几台机器那就非常异常。务必立刻排查该账户是否被攻击者窃取并检查相关机器的登录会话和历史命令。第三日志不全遇到事件再补就晚了。Windows安全日志默认不开进程命令行审计也没有PowerShell日志很多时候等你要追溯问题时发现系统里的命令连一个都看不到。日志采集和合规基线的动作一定要在项目上线时就做好事后再补的成本和精力都大得多。第四迷信EDR。EDR确实能发现大量恶意行为但当攻击者用系统自带的合法工具做无文件操作时EDR的盲区依然存在。拿WMI来说命令完全在内存里跑没有文件落地EDR如果只是做文件扫描那基本等于看不见。真正靠谱的思路是EDR加网络流量分析加日志审计三管齐下互相弥补盲区。要说这些年做安全运营我最大的体会是横向移动本身没有正邪之分它就是Windows系统管理能力的另一面。真正决定安全与否的不是协议本身而是使用协议的人和当时的上下文。对防守方来说与其头疼怎么禁用一切风险协议不如把功夫花在最基础的三件事上网络分区分好、凭据管好、日志记好。这三条做扎实了攻击者并不是隐形了只是越来越难藏身。最后再分享一个小技巧如果你是刚开始接触这块的新人可以先从“把所有Logon Type为3的4624事件捞出来按来源IP聚合并按目标机器数量排序”这个练习入手很快就能建立起对横向移动的直观感觉再往后排查就不会一头雾水了。