ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

横向移动隐匿战术与防守对抗:内网攻防的关键博弈

横向移动隐匿战术与防守对抗:内网攻防的关键博弈 1. 从一次真实的红蓝对抗说起做攻防这些年横向移动永远是最考验功力的环节。前期打点再漂亮如果横向移动做得太粗暴很容易被安全设备盯上前功尽弃。反过来前期打点平平无奇但横向移动阶段稳扎稳打、悄无声息反而能拿下整个域。为什么横向移动这么关键打个比方你费尽心思翻进一栋写字楼的前门这只是一瞬间的事。真正值钱的东西都在楼里的各个房间你要去各个办公室翻找资料就必须在楼道里走动。楼道里全是摄像头、巡逻保安和门禁系统怎么不动声色地走到目标房间门口再悄无声息地打开门这就是横向移动的全部奥义。这篇文章我会从攻击者视角拆解目前主流的隐匿横向移动战术再站在防守者的角度给出对应的检测与反制思路。文中涉及的所有技术点都基于实际攻防场景总结而来不分红蓝只看裉节儿。不管你是刚入门的安全小白、乙方攻防团队的新人还是甲方负责安全运营的蓝队同学这篇文章都能给你一些可落地的思路和参考。2. 横向移动的本质与技术全景2.1 什么是横向移动为什么它决定成败横向移动是指攻击者在获得内网某台主机的初始控制权后利用各种手段在内网中逐步渗透、扩大控制范围的过程。它区别于纵向渗透——纵向是自己往更高权限打横向是在同一信任级别的主机之间跳转。横向移动的核心目标有三个寻找高价值目标比如域控服务器、核心数据库、运维堡垒机、财务系统服务器。收集更多凭证为后续提权和持久化做准备。建立稳定的据点保证在目标网络中可持续存在。很多新手容易忽略的一个事实是横向移动并不是越快越好。在实际攻防中速度和隐蔽性往往是一对矛盾体。跑得快了容易踩雷太慢了又可能错过有效攻击时间窗口。一个成熟的红队队员会根据目标网络的安全建设水平动态调整横向移动的节奏和手法。2.2 横向移动的常见入口与技术分类从技术实现角度来看横向移动的常见方式可以归为以下几类基于凭证复用的移动方式这类方式利用的是Windows网络认证体系中的固有机制。攻击者拿到一组有效凭证后通过远程计划任务、Windows服务管理、WMI、PowerShell远程会话等方式在目标主机上执行命令。典型的工具包括PsExec、WMI、WinRM、Scheduled Tasks等。基于漏洞利用的移动方式利用操作系统或应用服务的已知漏洞在目标主机上直接执行代码。比如永恒之蓝MS17-010、BlueKeepCVE-2019-0708、PrintNightmare等。这类方式的优点是无需提前获取凭证但漏洞利用过程往往会产生明显的网络特征容易被IPS/IDS捕获。基于系统机制滥用的移动方式利用Windows系统本身提供的管理机制进行横向移动比如DCOM协议滥用、RPC远程调用、SMB文件共享配合计划任务等。这类方式的迷惑性较强容易混淆在正常的运维流量中。在实际攻防中攻击者很少只用单一方式进行横向移动更常见的是组合拳先用WMI探路再用SMB计划任务批量执行命令最后用RDP落地。3. 隐匿战术的核心思路与落地细节3.1 隐匿的本质融入而非隐藏很多刚入门的朋友对“隐匿”的理解是“不产生流量”或者“不落地文件”这个理解太浅了。真正的隐匿不是让自己消失而是让自己看起来像正常的业务流量。好比你在写字楼里走动隐匿的最高境界不是隐身而是穿上一件和楼里员工一样的工作服走路带风、眼神坚定保安看到了还以为你是新来的同事。你越是心虚、越是躲躲闪闪反而越容易被盘问。落实到技术层面横向移动的隐匿战术就围绕着三个核心原则展开合法性伪装使用的协议和工具尽量是系统自带的或者是目标网络环境中本来就存在的。流量常态化让网络流量的大小、频率、方向和正常业务流量保持一致避免突发的大流量或非工作时间异常操作。痕迹最小化尽量减少在目标主机上留下文件、注册表项、日志记录等痕迹即便留下了也要让它看起来像是误操作或正常行为。3.2 常用隐匿横向移动手段逐一拆解先说目前攻防演练中最高频的三种隐匿手法。手法一基于WinRM的远程执行WinRM是Windows自带的远程管理服务默认使用5985/5986端口。由于它本身就是微软官方的远程管理工具很多运维人员日常也会用它来批量管理服务器所以它的流量在很多安全设备看来是“合法”的。# 在已控主机上利用WinRM在目标主机上执行命令 $password ConvertTo-SecureString Pssw0rd -AsPlainText -Force $cred New-Object System.Management.Automation.PSCredential(DOMAIN\admin, $password) Invoke-Command -ComputerName 192.168.10.20 -Credential $cred -ScriptBlock { whoami }关键点在于很多安全团队只监看了3389和445端口对5985/5986端口缺乏足够的告警规则。如果目标网络日常确实使用WinRM管理服务器那么这种操作基本不会触发告警。手法二利用SMB协议配合计划任务SMB是内网使用最频繁的协议几乎每台Windows主机之间都有SMB流量。攻击者利用这一点通过SMB共享上传可执行文件或脚本然后通过计划任务远程触发执行。# 在Linux攻击机上通过smbclient连接目标主机的C$共享 smbclient //192.168.10.20/C$ -U DOMAIN/admin --passwordPssw0rd # 上传payload smb: \ put payload.exe C:\Windows\Temp\payload.exe # 通过impacket的psexec.py创建远程计划任务并执行 python3 psexec.py DOMAIN/admin192.168.10.20 -codec gbk这种方式的流量特征与运维人员日常往服务器拷贝文件、创建计划任务几乎没有区别很多只做基础特征匹配的IDS设备很难识别出其中的恶意行为。手法三DCOM协议的隐蔽利用DCOM分布式组件对象模型是Windows组件间通信的协议许多系统组件都支持通过DCOM远程调用功能。近几年比较火的横向移动方式就是利用MMC20.Application或者ShellWindows等DCOM对象在远程主机上执行命令。# 利用DCOM在远程主机上执行命令 $com [activator]::CreateInstance([type]::GetTypeFromProgID(MMC20.Application,192.168.10.20)) $com.Document.ActiveView.ExecuteShellCommand(cmd.exe,$null,/c whoami C:\Windows\Temp\result.txt,7)DCOM横向移动最大的优势在于它不走SMB的IPC$管道也不依赖RPC的Planar端口流量特征非常隐蔽而且很多主机根本不开启DCOM相关的安全日志记录。之前实测过在不做专门配置的域环境下DCOM横向移动几乎不会在目标主机的安全日志中留下任何明显的攻击痕迹。3.3 隐蔽通道的构建让数据“润物细无声”横向移动不只是执行命令还要涉及数据传输和C2通信。如何让这些流量在网络上不显眼也是一门学问。利用DNS协议做隐蔽隧道DNS是内网中极少被封禁的协议之一。攻击者可以将数据编码进DNS查询请求中通过DNS服务器进行外带或者构建DNS隧道作为备用C2通道。由于DNS流量本身量大人杂很多SOC根本看不过来。利用合法云服务或公共平台有些攻击者会利用一些国内的云笔记、网盘、代码托管平台作为C2的中转服务器。因为目标网络出口的ACL策略一般都会放行对这些公共平台的访问这种利用合法服务来承载攻击流量的方式会让防守方非常头疼。利用ICMP协议做数据外带ICMP协议在很多内网中默认放行因为运维排障需要用到ping。攻击者可以把数据隐藏在ICMP Echo报文的数据段中实现低速率的数据外带。之前见过一个案例攻击者从内网数据库服务器上用ICMP隧道慢慢外带数据持续了将近两周都没有被发现因为所有的ICMP流量都被防火墙放行了。4. 防守方的对抗新策略不是“看见”而是“梳理”4.1 传统检测手段的盲区防守方传统的横向移动检测手段主要有三种基于特征的检测比如检测PsExec的服务创建特征、WMI的命令行特征等。基于异常的检测比如同一账户在短时间内登录多台主机、非工作时间的大量认证行为等。基于威胁情报的检测比如关联已知恶意IP、恶意域名、恶意样本等。这三种手段各有局限。基于特征的检测对变种攻击基本无效攻击者只要稍微改一下工具源码的特征字符串就能绕过基于异常的检测误报率高得惊人特别是在大内网环境中正常的批量运维操作和恶意行为之间的边界非常模糊基于威胁情报的检测对于使用0day或者利用合法服务做C2的攻击来说基本形同虚设。所以“看见恶意流量”这条思路在对抗高水平的隐匿横向移动时已经逐渐走到了尽头。4.2 新的对抗思路以身份为中心以行为为线索我的观点是面对隐匿横向移动防守方的工作重心应该从“检测恶意”转向“梳理行为”。第一建立主机间的信任基线。每台主机和哪些主机之间有正常的通信关系什么时间通信使用的端口和协议是什么把这套基线梳理清楚很多异常的横向移动就一目了然了。比如一台财务部的普通办公电脑从来没有连过数据库服务器的1433端口某天突然高频连接这就是非常明显的异常。第二对账号的登录行为做关联分析。横向移动必然涉及账号在多个主机上的登录行为。要重点关注同一个账号在短时间内在大量主机上登录的情况特别是这些主机不属于该账号的日常运维范围。可以使用Windows安全日志的4688事件进程创建和4624事件登录成功结合SIEM平台的关联分析能力设置对应的告警规则。第三关注“非常规操作”而不是“恶意操作”。很多隐匿的横向移动工具操作逻辑本身是合理的但它出现的位置和时间不合理。比如DCOM在凌晨三点被频繁调用、从一台从未有过WinRM操作记录的机器发起WinRM连接这些行为本身并不恶意但出现在不该出现的地方本身就是值得警惕的信号。4.3 实战落地的检测规则示例分享几个在实际项目中验证过有效的检测规则思路。检测规则一短时间内同一用户登录多台主机within 10 minutes 同一用户成功登录(EventID 4624, LogonType 3 或 10) 目标主机数量 5台 排除已知的跳板机、堡垒机IP 则触发告警这条规则能抓到大部分横向移动的批处理行为因为在真实的横向移动场景中攻击者很少只动一台机器。检测规则二非常见的SMB远程连接行为同一源IP在5分钟内与超过10台不同主机建立了SMB连接EventID 5140 且源IP不是已知的文件服务器或运维终端 则触发告警SMB批量连接是横向移动最经典的路径通过这个规则可以覆盖很多基于SMB和计划任务的组合攻击手法。检测规则三DCOM远程调用行为监测监控4624事件中LogonType 3的远程登录 来源进程是dllhost.exe或mmc.exe 且目标进程随后出现了cmd.exe或powershell.exe 则触发告警这类规则可能会导致部分误报需要根据实际环境做白名单调优但它的价值在于能发现很多常规检测手段完全看不到的隐匿横向移动行为。4.4 主动防御让横向移动无处遁形除了被动检测防守方还可以做一些主动防御措施直接提高攻击者横向移动的成本。网络层面微隔离别再指望防火墙ACL这种粗颗粒度的网络边界控制能挡住横向移动了。在虚拟机、容器环境云化的大趋势下微隔离技术能够做到主机级别的访问控制。每一台业务主机只开放必要的端口给必要的主机攻击者拿到一台普通业务服务器后面对的就是一台只能访问同一子网少数端口的“隔离箱”横向移动的空间会被大幅压缩。主机层面加固认证机制横向移动高度依赖凭证。启用Windows Credential Guard可以保护域凭据不被LSASS进程被转储限制NTLM认证可以阻断很多基于哈希传递的攻击手法部署LAPS定期轮换本地管理员密码能够让攻击者拿到的本地密码很快失效。很多人不重视这些基础加固总觉得“防不住”但实际上很多时候就是这些基础手段在关键时刻拉闸。运营层面定期做攻击路径梳理有条件的话建议定期用BloodHound这类工具对域环境做一次攻击路径分析梳理出当前域环境中从普通用户到域管之间存在哪些可利用的攻击路径然后有针对性地进行加固。别等攻击者替你发现了路径你才匆忙去修。BloodHound的查询结果可以导出成图形化报告直观展示每一条通向域管的路径方便向管理层汇报整改优先级。5. 攻防博弈中的典型场景复盘5.1 攻击视角的完整横向移动链这里还原一个相对典型的攻防演练场景展示攻击者如何在一次模拟对抗中利用隐匿战术完成横向移动。第一阶段攻击者通过OA系统的一个RCE漏洞获取了第一台主机权限。按照惯例先查看当前主机的网络位置、当前用户权限、是否在域内。ipconfig /all whoami systeminfo | findstr /B /C:Domain第二阶段发现主机在域内当前用户是普通域用户。直接尝试从当前会话中提取缓存的凭证信息。使用mimikatz抓取LSASS进程中的明文密码和哈希。mimikatz.exe privilege::debug sekurlsa::logonpasswords exit成功拿到了一个服务账号的明文密码。这个账号是某个业务系统的服务账号在域中有一定权限。第三阶段通过BloodHound分析服务账号在域中的权限路径发现这个账号可以RDP登录到一台运维管理机上而运维管理机上又保存着一个具有域管权限的计划任务。路径明确当前主机 → 服务账号 → 运维管理机 → 域管。为了不引起注意没有使用常规的PsExec方式而是选择了WinRM远程执行命令在运维管理机上创建了一个计划任务等待计划任务触发后回连。$remoteCommand schtasks /create /tn WindowsUpdate /tr powershell -ep bypass -enc ... /sc once /st 23:59 /ru SYSTEM /f Invoke-Command -ComputerName 192.168.30.15 -Credential $cred -ScriptBlock { param($cmd) Invoke-Expression $cmd } -ArgumentList $remoteCommand把计划任务命名为“WindowsUpdate”执行时间设置在深夜利用系统权限运行整个过程中没有在目标主机上落地任何文件。第四阶段计划任务执行后攻击者拿到了运维管理机的SYSTEM权限。通过这台机器上的浏览器历史记录和保存的RDP凭据找到了域控管理员的登录习惯。在某个深夜时段利用截获的域管凭据通过RDP登录了域控完成了整个攻击链路。5.2 防守方视角的检测与响应复盘在同样的场景中假设防守方已经部署了上一节提到的检测手段那么攻击链条会在哪些环节被切断基于规范要求此处略去图形展示用文字说明关键环节。第一阶段攻击者利用RCE漏洞进入内网时WEB层的WAF会接收到一个明显的漏洞利用Payload但这个环节的攻击特征通常会被WAF规则覆盖。防守方真正需要关注的不是拦截这一次攻击而是在失陷后能不能尽早发现。第二阶段mimikatz在目标主机上运行产生了明显的进程行为和内存操作行为。如果部署了EDR这一刻就应该告警。但如果目标环境没有EDR或者EDR规则没有覆盖到mimikatz那么攻击者就能轻易跨过这一关。这里有个实用的检测思路通过Sysmon的进程创建事件EventID 1对常见的已知工具特征如mimikatz的进程名、命令行参数设置告警规则。第三阶段这是防守方最容易发现攻击的位置。通过之前提到的“短时间内同一用户登录多台主机”的检测规则服务账号在短时间内从A主机发起对运维管理机的WinRM连接这个行为会产生4624日志。如果关联分析规则覆盖了WinRM登录LogonType 3并且目标主机属于高价值资产就会触发告警。第四阶段攻击者通过计划任务在运维管理机上执行命令Sysmon的进程创建事件会记录下powershell.exe被恶意执行的进程链。这个环节检测的重点从账户行为转向进程行为为什么一个生命周期极短的一次性计划任务会拉起一个来路不明的powershell进程这个过程在Windows事件日志中留下的脉络是清晰可循的。所以一套做得好的检测体系不一定非要能实时阻断攻击链条它更重要的是给防守方争取时间——多争取一分钟就能早一分钟处置压缩攻击者的有效工作时间。5.3 从攻防演练反推出来的防守短板很多甲方团队问我为什么我们对横向移动的检测这么弱回顾参与过的多次攻防演练项目我总结了四个高频短板短板一安全日志质量太差。很多企业的Windows主机默认没有开启审核策略或者开启了但日志保留周期太短。等到事件发生后再去排查日志发现关键位置的日志已经被覆盖了。建议至少将域控和重要服务器的安全日志保留周期设置为180天并同步到SIEM平台存储在独立存储池中。短板二网络流量侧的可见性不足。不少企业只在出口部署了流量检测设备内网东西向流量的可视性几乎为零。攻击者在内部怎么跳、怎么传数据监控体系完全看不到。在条件允许的情况下建议在核心交换层和服务器区部署流量探针。短板三高价值账号的监控缺失。服务账号、运维账号、域管账号这些高价值身份往往没有任何额外的监控和防护。攻击者一旦拿到这些账号就等于拿到了内网的通行证。建议对高价值账号配置强制的时间段限制、登录源限制和双因子认证。短板四安全运营流程脱节。告警产生了但没人看或者看了没人响应响应了没有处置方案有方案了又不能快速执行。这种情况下再好的检测规则也只能是空转。所以防守方建设的目标不应该是“堆产品”而是“疏通流程”——检测规则、告警通知、响应SOP、复盘机制每一个环节都得落地。6. 对抗新策略的进阶方向与个人观点6.1 身份与访问管理会成为新的核心战场随着安全建设的不断深入传统基于网络边界的防护思路会逐渐失去效果。未来的内网安全体系一定会围绕身份来构建。在这个趋势下横向移动的攻防对抗会越来越多地集中在身份与访问管理层面上。对攻击者来说拿到合法凭证比费劲去爆破漏洞更有价值对防守方来说对身份认证风险的分析和治理比对单点流量特征的检测更有意义。我在实际项目中已经看到部分头部企业开始使用身份分析与管理体系结合SOAR自动化响应让身份认证和访问控制变成一种动态的、持续的风险评估闭环。这套体系能够在攻击者使用凭证横向移动时不断增强认证要求从源头提高攻击门槛。6.2 AI与自动化在横向移动攻防中的新应用AI在安全领域的落地之前吹得天花乱坠这两年开始慢慢务实了。具体到横向移动这个场景我认为有几个方向值得关注用户与实体行为分析通过机器学习建模建立每台主机的通信基线对偏离基线的行为进行评分和告警。相比人工设置静态规则它的误报率显著降低而且能识别一些“不可描述”的异常行为模式。攻击路径的自动分析与预测利用知识图谱技术将主机、账号、权限、服务之间的关系建模自动识别潜在的攻击路径并推荐加固方案。这款工具在实际测试中表现不错对防守方梳理攻击面有直接帮助。自动化的攻击模拟通过自动化工具持续模拟攻击者的横向移动行为验证现有的检测规则是否有效、防御体系是否存在漏洞。不过我也要泼一盆冷水AI不是银弹。再先进的算法也需要高质量的基础数据。如果企业连日志采集、资产梳理、账号梳理这些基础工作都没做到位上AI系统只会事倍功半就像给毛坯房装智能家居既费钱又尴尬。6.3 以攻促防把攻击者视角融入日常安全运营说了这么多攻击战术和防守策略我最大的感受是真正的安全建设一定要以攻击者视角定期审视自己的内网。不要等到攻防演练的时候才突击排查不要等出了问题才去复盘。建议每隔一段时间就自查一次自己的内网如果攻击者拿到了一台普通员工的主机他能在内网上走多远有哪些路径能通向域控现有的检测体系能不能在第一时间发现这些行为这些问题很多企业都答不上来。但恰恰是这些问题的答案决定了你的内网在真实对抗中能扛多久。最后分享一个小技巧在做攻击路径自查时用HoneyToken思路在内网布几个蜜标文件比如运维手册、数据库密码表之类的然后观察有没有主机来读取。这一招在攻防演练和真实入侵检测中都很管用成本极低但效果极佳。我在多个项目里布过几乎每次都能看到一个或几个来自不同主机的进程尝试访问这些蜜标文件定位到具体的失陷主机只是时间问题。攻防对抗是一场没有终点的比赛横移与反横移的博弈只会随着技术和业务的发展而不断演化。对从业人员来说保持学习、保持实战是唯一确定正确的路径。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进