ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

内网横向移动实战要点:从凭据复用到路径规划的系统梳理

内网横向移动实战要点:从凭据复用到路径规划的系统梳理 拿到一台主机的Shell之后,很多人的第一反应是“终于进来了”,但在一场内网渗透或红队演练里,拿下主机往往只是整条链路的开始。真正拉开差距的,是从这一台机器出发,如何在目标内网中继续移动、扩大战果、逼近核心数据——这套过程,行业内通常叫横向移动。横向移动不是单点爆破,而是身份、凭据、信任关系的循环利用;它的本质是把“偶然拿到的一台机器”变成“深入内网的跳板”。这篇内容是我对实战中横向移动思路、手法和对抗视角的一次系统梳理,适合刚接触内网渗透的初学者,也适合正在做安全防御、想搞清楚攻击者到底怎么在内网里走的蓝队朋友。1. 横向移动的本质:拿到主机之后,决定成败的是下一步1.1 从单点失陷到域内漫游很多人把横向移动简单理解成“从A机器再连到B机器”,这其实只看到了表面。真正的横向移动,重点不在“移动”这个动作,而在于你手上有没有能在内网里被信任的“身份证”。单点失陷通常靠的是漏洞和Web入口,比如一个RCE、一个文件上传、一个弱口令,攻击者通过某台公网机器进入了内网边界。但内网是个讲究信任的环境:你进了A机器,不等于你能上B机器;你能跑B机器,也不等于你能访问C机器的数据。每一台新主机的访问权,本质上都对应着一组账号、密码哈希或者票据——横向移动做的,就是把已经拿到的身份信息,用到下一个目标上。所以你会发现,真正决定横向移动成本高不高的,不是你的攻击技巧有多花哨,而是你有没有掌握一套“可以复用的身份”。有的团队拿到一台域内机器就停在那里,反复爆破;有的团队只需要一条正确的凭据和一张清晰的域内路径,就能在十几分钟内跳进域控。差别就在这里。1.2 工作组成员还是域成员,打法完全不同动手之前,先判断目标网络是点对点的工作组模式,还是基于Active Directory的域模式,这个判断会直接影响后续所有手法的选择。工作组的网络结构相对扁平,没有统一的身份认证中心,机器之间互相独立。在这种环境里,横向移动主要依赖三样东西:本机管理员密码的重复使用、明文口令、同一网段内易受攻击的共享服务。因为缺少域的集中管理,防御往往也相对薄弱,但问题是攻击者拿到的凭据只能在有限范围内生效,路径比较“碎”。域环境则是另一个玩法的舞台。域里有一台域控统一管理所有账号的认证和策略,攻击者只要能拿到域内某台机器的本地权限,就可以利用Kerberos认证、SPN、GPO、会话记录去寻找通向域控的路。域环境的信息更多、关系更复杂,但可挖掘的路径也更丰富。很多时候,一台普通员工机的会话里,就躺着域管曾经输入的凭据;一个被错误配置的ACL,就足够把一个普通用户变成域管的“近亲”。BloodHound这类工具之所以在红队里如此流行,正是因为域环境的信任关系复杂到只靠人工记忆已经不够用了。1.3 横向移动是“身份复用”,不是“重新爆破”这里我想强调一个容易被人忽略的底层观点:横向移动复用的是目标环境里本来就存在的信任关系,而不是去“创造”新权限。最典型的例子是哈希传递(PtH)。当你从A机器的LSASS进程里抓到了域管账号的NTLM哈希,你不需要知道明文密码是多少,甚至不需要破解它,直接拿着哈希去访问域内其他机器,认证就能通过。原因很简单:Windows的NTLM认证里,哈希本身就是“密码”。再比如票据传递(PtT),你拿到的Kerberos票据本身就是域内身份认证的最终凭证,直接注入当前会话,就能以目标身份访问服务。这个视角很重要,因为它解释了为什么“合法”的动作在攻击者手里也能变成武器。攻击者没有去爆破端口,没有去打高危漏洞,而是拿着系统内置的认证机制在走流程。蓝队如果只盯着“漏洞利用”去看告警,很容易漏掉这种“做事”式的横向移动。2. 横向移动前的信息三板斧:拓扑、凭据、域内关系2.1 网络拓扑与关键主机定位拿到第一台机器之后,别急着扫全C段。先搞清楚自己站在哪、周围是什么。常规动作是先看本机网络配置,判断机器是否在域内、DNS指向哪里、网关在哪:ipconfig /all这一步非常重要,因为DNS服务器和当前网卡的域名后缀,能直接告诉你域的边界和入口。接着用net view /domain看看当前机器能看到哪些域,用arp -a看看最近会话里这台机器跟谁通信过,再用nltest /dclist:域名或者net group Domain Controllers /domain定位域控。定位域控几乎是所有域环境横向移动的必选项。因为不管是Kerberos认证、票据申请,还是后续的DPAPI解密、NTDS.dit抓取,都绕不开域控。找域控时别只看IP,要带上机器名,因为在域环境里,机器名和SPN通常比IP更可靠。2.2 凭据收集:LSASS、SAM、浏览器与DPAPI信息收集的另一半是凭据。这一步做得够不够细,直接决定后面横向移动是“畅通无阻”还是“处处碰壁”。Windows环境下最经典的凭据来源就那几个:LSASS进程内存:当前所有登录会话的明文口令和NTLM哈希,都能从LSASS里尝试提取。工具首推Mimikatz的sekurlsa::logonpasswords,但要注意,现在很多EDR会对LSASS进程访问产生告警,所以落地方式要十分谨慎。如果担心直接读内存被拦,可以先tasklist确认进程ID,再通过dump文件离线分析。SAM注册表文件:C:\Windows\System32\config\SAM里存着本地账号的密码哈希。只有SYSTEM权限能读,拿到完整哈希需要本地管理员或SYSTEM。浏览器与DPAPI:Chrome、Edge、Firefox保存的密码、Cookie,在用户态下能直接解密,低权限用户就能操作。很多内网渗透新手忽略这个点,但实际上浏览器密码的命中率比想象中高。本机文件和脚本:运维人员常常把密码写进桌面的txt、脚本里、配置文件和旧版日志中。别嫌低级,这种凭据在红队实战里救人无数。域控有域控的专属目标,NTDS.dit文件加上SYSTEM哈希,导出后离线破解整个域的用户哈希。只要域控拿下,全域凭据基本就是时间问题。2.3 用BloodHound把域内关系画成一张图凭据有了,拓扑有了,但你还要回答一个关键问题:从当前机器到域控,哪条路最短?哪条路最不容易被盯上?BloodHound就是解决这个问题的。它的采集端SharpHound会把域内的用户、组、机器、会话、ACL关系全部拉出来,生成一张有向图。图形里你能直观看到:哪些用户对哪些机器有管理员权限域管/高权限账号最近在哪几台机器上登录过当前失陷账号与目标权限之间的最短提升路径很多人对BloodHound的使用停留在“跑一下、截个图”,这其实浪费了它最强的部分。分析端一定要去查询“谁登录过域管”、“当前账号能对哪台机器实施ACL控制”、“哪条路径经过的工作量最少”。路径越短,暴露风险越小。3. 常用横向移动手法深度拆解:从IPC与计划任务到哈希与票据3.1 IPC连接、计划任务与SMB共享:最经典的组合拳不算最先进,但绝对是最常用的一套。SMB的admin$、C$共享配合IPC连接,外加计划任务,是内网里最常见的横向移动组合。思路是:用合法的账号口令或哈希,建立到目标机器ipc$的会话,然后把执行载荷拷过去,再通过计划任务远程触发执行。拿一个简单的示例命令流程来说明。假设已知目标机器名FileSrv01和管理员口令:net use \\FileSrv01\ipc$ password /user:corp\admin copy beacon.exe \\FileSrv01\C$\Windows\Temp\ schtasks /create /s FileSrv01 /tn UpdateTask /tr C:\Windows\Temp\beacon.exe /sc once /st 00:00 schtasks /run /s FileSrv01 /tn UpdateTask这套组合拳的门槛在于:目标机器要开放445端口,当前账号必须具备目标机器的管理员权限,否则无法覆盖admin$和C$共享。同时,计划任务的创建事件(4698)和执行事件会在目标机器上留下日志,蓝队经验丰富的话,会从计划任务的名称和路径中发现问题。3.2 PsExec、WMI 与 WinRM:三种远程执行各有脾气接下来是三种常见的远程执行方式,它们的目标一样,但协议和痕迹完全不同。PsExec的原理是往目标机器的admin$共享上传服务二进制,然后通过服务控制管理器启动该服务。它执行速度快、交互体验好,但创建服务的动作会在目标机器的系统日志里留下7045事件,一旦服务名起得可疑,基本属于“明牌”。在红队演练里,使用PsExec时服务名尽量跟目标环境已有的服务风格保持一致。WMI走的是Windows Management Instrumentation,默认通过135端口调用,执行时不需要往目标机器写入文件,直接调用Win32_Process.Create创建远程进程:wmic /node:FileSrv01 /user:corp\admin /password:password process call create cmd.exe /c whoami C:\Windows\Temp\out.txtWMI的好处是无文件落地,不会产生服务创建事件;缺点是很多WMI调用会被EDR的行为检测盯着,而且它拿到的进程是独立的,不会自动回传执行结果到当前Session,通常需要配合输出重定向或者回传通道。WinRM则是走了Windows远程管理协议,默认端口5985/5986,基于HTTP(S)。它能直接创建交互式会话,PowerShell一行就能连过去:Enter-PSSession -ComputerName FileSrv01 -Credential corp\adminWinRM在补丁完善、默认启用的新版本Windows里非常方便,而且由于它走的是系统原生管理协议,很多防守方默认把它当“合法流量”放行。但反过来,蓝队如果启用了WinRM深度日志,所有PowerShell命令都会被记录,执行行为反而是几种方案里最透明的。选哪种方式,取决于你对目标环境的判断:目标机器部署了EDR审计,优先考虑WMI或无文件方案;目标环境管理通道丰富、告警不敏感,PsExec可以省事;想对后续手法留“合理来历”,可以伪装成系统管理员日常操作,用WinRM或计划任务。3.3 哈希传递(PtH)与票据传递(PtT):身份复用才是灵魂前文提到,真正有说服力的横向移动,完全不依赖明文口令。这里把哈希传递和票据传递单独拿出来讲透。NTLM哈希传递,英文写作Pass-the-Hash。Windows在本地认证时,用户输入的密码经过哈希计算后存储,而NTLM认证协议里,验证的是“你知道不知道这个哈希”,而不是“你知道不知道这个密码”。所以攻击者只要拿到了哈希就能直接冒充该用户。Mimikatz里最典型的用法:sekurlsa::pth /user:admin /domain:corp.local /ntlm:NTLM哈希这个命令不是破解哈希,而是把哈希注入到当前会话里,打开一个以该用户身份运行的cmd。要注意的是,2014年微软发布KB2871997后,本地管理员账号和SID为500的内置Administrator账户在UAC远程限制下,不能直接用来做远程哈希传递,除非目标机器关闭了该策略。所以实战中,如果拿到的是SID 500的哈希,先确认目标机器是否开启LocalAccountTokenFilterPolicy。票据传递(Pass-the-Ticket)走Kerberos协议。当攻击者已经拿到域内用户的TGT或者服务票据,就可以把票据注入到当前会话中,冒充该用户访问对应的服务资源。Mimikatz对应操作是:kerberos::ptt ticket.kirbi比PtH更进一步的是黄金票据和白银票据。黄金票据是用krbtgt账号的哈希伪造TGT,可以签发任意用户的票据;白银票据则是用服务账号的哈希伪造某个特定服务的票据。伪造票据本身不依赖当前会话身份,但需要先从域控拿到相应哈希,通常是域控已经被渗透之后才能做。所以黄金票据的定位不是“横向移动”,而是拿下域控之后维持权限。3.4 RDP、DCOM 与 SSH 的高频姿势除了上面几套,还有几个姿势在内网渗透里出现频率不低,值得单独提。RDP是很多人的第一反应,但直接开mstsc输密码只能覆盖“既有明文口令”的场景。如果只有NTLM哈希,需要目标机器开启了受限管理员模式(Restricted Admin Mode),才能用哈希直接远程登录:mstsc /restrictedAdmin注意,使用mstsc会在事件日志中留下RDP连接记录,并且对端可能留下RDP缓存。多跳RDP时,尽量使用会话代理工具或中转,避免在多个跳板机上都留下直接连接痕迹。DCOM横向移动属于比较“低调”的路子。DCOM(分布式组件对象模型)通常复用135端口,利用目标机器上的某些公开COM对象远程执行代码。常用的有人人熟知的MMC20.Application,通过其ExecuteShellCommand方法执行命令。具体来说,可以用PowerShell调用: 远程调用的好处是无需写入文件,且接口相对冷门,蓝队的常规日志审计不太容易覆盖。缺点是DCOM的前提同样是目标机器上有可用的COM对象,且当前用户必须有对应权限。SSH的横向移动在Linux之间很常见,但在Windows内网里也不能忽视。Windows 10以上版本默认带OpenSSH服务,如果运维把安全Shell密钥下发到了用户目录,拿到id_rsa就等于拿到对应机器的登录权。尤其是在混合环境(Windows Linux)的内网里,一套SSH密钥可以串起好几台机器。下面把这几种主要手法做个汇总对照,方便你根据场景做选择:手法关键技术点前置条件典型检测点IPC 计划任务SMB连接 文件复制 计划任务管理员权限,445开放4698计划任务事件、文件传输告警PsExec服务创建 远程启动管理员权限,admin$共享7045服务创建事件WMICOM对象远程调用管理员权限,135开放事件ID 4624登录类型3、WMI查询日志WinRM基于HTTP(S)的远程管理管理员权限,WINRM服务开启PowerShell深度日志、5985异常连接哈希传递NTLM哈希注入本地或域账号哈希4624登录类型3、同一账号多目标登录票据传递Kerberos票据注入域内TGT/服务票据TGT请求频率异常、票据异常增多DCOMCOM接口远程命令执行管理员权限,135开放135端口流量、COM调用的日志RDP受限模式哈希远程登录启用Restricted Admin ModeRDP连接日志、缓存文件SSH密钥复用密钥认证拿到私钥文件SSH登录审计、密钥时间戳异常4. 路径规划的实战思路:让每一次移动都有收益4.1 横向移动不是炫技,而是路径设计的艺术在实战里,经常看到新人拿到一台机器后,立刻对所有C段做全端口扫描、对每个IP跑一轮弱口令,这种做法的本质是“拿时间换概率”,但很容易被蓝队的EDR和SIEM收进告警池。更高效的思路是:先利用已采集的域内数据和凭据确定目标集。没有明确目标之前,别乱动;明确了目标之后,合理设计移动链。举个例子,在一次攻防演练里,我拿到一台普通的业务服务器。按常规会先去收集本机会话、查域管是否登录过这台机器,同时用BloodHound找“谁能到域控”。如果当前机器上有域管会话,那路径就简单得多:抓凭据、哈希传递、直接横向。如果没有,就要看谁能控制当前机器,以及哪台机器是域管登录过的,再决定先跳到哪一台。路径越短,日志越少,越不容易被截断。4.2 无文件落地与内存加载:应对EDR的现实选择横向移动要想走得远,载荷的落地方式非常关键。传统Web渗透的思维是“把马传上去、运行”,但内网环境里每个动作都会被记录,落地文件越多,被发现的概率越大。现实中最常用的有几种:无文件执行:通过计划任务或WMI直接执行内存脚本或远程下载的Payload,本地不落盘。反射加载:使用C2框架的反射加载特性,把权限维持的Beacon塞进已有进程内存,例如不落地执行.NET程序。这里要注意,.NET程序落地经常会被杀软的行为检测盯上,要考虑用原生活动或混淆。原生命令横向:直接用系统自带的sc,wmic,schtasks,reg等命令尝试目标操作,不使用第三方工具,能显著降低特征暴露。我个人的习惯是:能改目标系统原生命令完成的事情,绝不额外放工具。拿sc举例,目标机器上可以通过sc \\FileSrv01 config serviceName binPath 你的载荷把现有服务指向一个可执行文件,再配合计划任务触发。这样整套动作里,没有上传额外可执行文件,只是改了已有服务的配置项,蓝队不看注册表和配置变更记录的话很难定位。4.3 日志清理与时间窗口:别让前面所有的努力白费横向移动做得再好,如果日志把整个链路完整还原,那闭环的防守方一样能在事后复盘出你的人、路径和意图。内网里经常被记录的日志有Windows事件日志(安全、系统、PowerShell)、各业务系统自己的审计日志、RDP连接记录、浏览器历史和数据库连接记录。其中最容易暴露的包括:登录事件(4624/4625),特别是同一账号短时间内从多个IP登录;服务创建事件(7045);计划任务创建和运行事件;PowerShell执行时间和脚本内容。清理日志这块,核心原则是“能不做的大动作不做,非清不可时只清与当前操作相关的事件或最短时间窗口”。大面积清除安全日志反而会引起蓝队警觉,因为正常运维人员不会闲着去清4624。时间窗口的选择也很实际:夜间和业务低峰期横向移动,会显著降低被实时值守人员看到的概率,同时Alarm阈值在低峰期更敏感,所以需要结合目标单位的值班节奏做取舍。5. 从蓝队视角看横向移动:检测点与拦截手段5.1 登录事件审计:4624、4625、4672里藏着密码横向移动的每一次成功,几乎都对应一次成功的远程登录。Windows安全审计日志里的登录事件,是蓝队最容易入手、也是攻击者最头疼的一层。先看4624(登录成功)和4625(登录失败)。登录类型是个关键点:类型3对应网络登录,典型的SMB、哈希传递都会触发;类型8是明文凭据的网络登录,常见于某些服务;类型10是远程交互登录,RDP常见。哈希传递和票据传递的典型特征是同一个账号在短时间内从多台不同的源IP登录同一目标,或者一个低频使用的账号突然出现在高频登录序列里。再看4672(给特殊权限的登录),管理员登录时通常会有这个事件。如果一个平时不登录服务器的账号突然以特殊权限登录,蓝队的SIEM应该对这个事件做额外打分。很多蓝队方案到头来发现,真正能支撑检测的不是某一列单独的事件,而是把“4624来源IP”、“登录类型”、“账号历史行为”、“本机进程链”四者关联起来。攻击者能伪造IP和账号,但伪造不了一个账号已经存在的历史行为模式。5.2 端点侧检测:EDR、蜜罐与行为基线EDR的检测能力不在“特征库”,而在行为分析。横向移动常见的几个行为锚点:LSASS进程被读取:攻击者抓取凭据必经之路,很多EDR会检测到lsass.exe被非预期进程打开了句柄。创建远程进程:WMI、PsExec都逃不过进程创建链的监控,父子进程关系一目了然。计划任务和服务创建:高频出现在横向移动链路中。异常的SMB连接:从源机器到多台目标机器的admin$/C$连接,是很明显的Hash传递预动作。蜜罐是另一层感知。蓝队可以故意在域内放置一台“疑似文件服务器”,开放SMB共享并在共享里放置“诱饵文档”,一旦有人大量读取,就能提前锁定攻击者位置。无文件手段对付EDR还有点效果,但对付蜜罐,只有在攻击者主动避开目标时才有效,这本身就是高成本。5.3 域控侧防御:DC Logging、LAPS、Credential Guard与Protected Users域控是整个内网横向移动的终点。守住了域控,攻击者前面所有努力都只是“漫游”。微软针对哈希和票据滥用做了四类比较有效的缓解层:开启DC Logging和Kerberos审计,及时发现异常TGT请求或票据滥用。部署LAPS(Local Administrator Password Solution),让每台机器的本地管理员密码独立且定期轮换。哈希传递里最经典的“一台机器的本地管理员哈希打整个网段”就此失效。启用Credential Guard,把NTLM哈希和Kerberos票据隔离在VBS安全容器里,LSASS内存中不能直接读取,大幅度压低凭据抓取的成功率。把高权限账号加入Protected Users组,组成员不能做委派、不能使用NTLM等弱认证方式,且Kerberos加密套件强制升级,这对票据类攻击有直接阻断效果。如果目标企业把这些配置都做到位,横向移动的难度会呈几何级数上升。反过来,作为红队,拿到一台机器时先看一眼Credential Guard是否启用、域内有没有LAPS,就已经能大致判断这个内网的“肥瘦”。6. 最后聊聊实战中的几条体会6.1 授权测试的边界:先看清楚规则再动手内网渗透和横向移动从来都不只是技术问题。在真实的攻防演练、红蓝对抗或企业授权的渗透测试中,边界和规则是放在技术前面的。动手之前,我会先确认三件事:测试范围里明确包含了哪些网段、哪些资产;是否允许使用特权维持手段;测试时间段内是否允许在业务高峰期执行命令。边界内怎么打都行,边界外动一下都可能变成事故。红队不是穿黑帽子的黑客,拿到权限后先看规则再思考下一步,这才是专业。6.2 能少踩坑的几条实战经验第一,能用系统原生能力完成的任务,尽量少放第三方工具。第三方工具体积大、特征多、吃杀软拦截的概率高,还可能被抓包。很多时候,一条PowerShell命令、一个sc配置修改,效果远比上传一整套工具好。第二,采集到的凭据先做分类再使用。域管哈希和本地管理员哈希要分开管理,不同层级的凭据使用的工具和路径也要分开。不要用域管哈希去横向到不必要的主机,因为高权限账号每登录一台机器,暴露风险就增加一分。第三,注意横向移动过程中工具进程的名字。PsExec、Mimikatz这一类工具默认进程名就是本来的名字,蓝队可能直接写死告警规则。落地前用copy把工具改名,或者用内存加载方式运行,是压低日志特征最直接的动作。第四,测试前记录环境基线,结束时复查影响。拿到的凭据、新建的账号、计划任务、服务改动,逐项核对并归零,是红队该有的职业素养。就算演练方允许留权限,也要写清楚留了什么、在哪里。横向移动的真正门槛,不是某一个工具用得有多熟练,而是你能不能把“信息收集-凭据利用-路径选择-痕迹管理”这条链串成一条完整且流畅的线。这篇文章算是把我个人在域环境里做横向移动的方法论和踩坑记录做了一个汇总,写得比较口语化,优点是能直接照着排查思路用,缺点是不同行业、不同网络规模的环境差异很大,最终局势还得结合你们自己的目标网络来判断。希望读到这里的人,无论站在攻击还是防守的位置,都能比昨天多想一层。
返回列表