发布于10月10日10月10日 背景这个问题在问答区经常见:在一次授权内网渗透测试或红蓝对抗复盘中,发现某台业务服务器存在异常登录记录,例如同一账号在短时间内登录多台主机,或者工作站账号出现在服务器本地管理员组里。此时不建议只凭“看起来像横向移动”下结论,最好按日志链路把证据串起来。下面以一个常见场景说明:域环境中,测试人员拿到一台普通域内主机的授权测试权限后,蓝队在日志里发现 svc_backup 账号登录了多台 Windows Server,并且其中一台服务器上出现了远程服务创建行为。需要判断这是正常运维、授权测试动作,还是确实存在权限边界问题。前提:所有操作应在授权范围内进行。本文重点是问答中心常见排查思路:如何定位、如何取证、如何给出整改建议。问题定位先不要急着查工具特征。建议先确认四个问题:账号:哪个账号发生了异常登录?是否为域账号、服务账号、管理员账号?来源:登录来源 IP 或主机名是什么?是否来自跳板机、运维平台、备份服务器?目标:登录到了哪些服务器?是否涉及域控、文件服务器、数据库服务器?方式:是 RDP、SMB、WinRM、计划任务、服务创建,还是 PsExec 类行为?Windows 域环境里,单看一台机器日志通常不够,需要同时看域控、安全日志、目标主机系统日志,以及相关中间件或堡垒机日志。技术分析重点关注以下 Windows 事件 ID:事件 ID日志位置含义排查价值4624Security登录成功确认账号、来源、登录类型4625Security登录失败判断是否有爆破或凭据尝试4672Security特殊权限登录判断是否获得管理员级权限4688Security进程创建需要开启进程审计,可看命令行4697Security服务安装常见于远程服务执行7045System新服务创建定位 PsExec、远程服务落地4768/4769域控 SecurityKerberos 认证/TGS判断账号访问了哪些服务4776域控 SecurityNTLM 认证判断 NTLM 登录来源登录类型也很关键:LogonType=2:交互式登录,本地控制台。LogonType=3:网络登录,常见于 SMB、远程服务、文件共享访问。LogonType=10:远程交互式登录,常见于 RDP。LogonType=5:服务登录,常见于服务账号启动服务。如果看到 svc_backup 在多台服务器产生 4624 LogonType=3,紧跟着目标服务器出现 7045,就需要重点判断是否存在远程服务执行链路。操作步骤建议按以下顺序排查:1. 在目标服务器上筛选异常账号的登录事件,确认时间线。2. 查看同一时间段是否出现 7045 服务创建、4697 服务安装、4688 可疑进程。3. 到域控上查询对应账号的 4769、4776,确认认证来源。4. 比对堡垒机、运维平台、备份系统任务计划,排除正常任务。5. 检查目标主机本地管理员组、远程桌面组、服务账号权限边界。6. 输出结论时区分“已确认利用”“疑似横向登录”“配置风险”。命令示例以下命令适合在应急排查或授权渗透复盘中使用,注意以只读查询为主。# 查询目标主机最近 24 小时内指定账号的成功登录事件 $User = "svc_backup" $StartTime = (Get-Date).AddHours(-24) Get-WinEvent -FilterHashtable @{ LogName='Security'; Id=4624; StartTime=$StartTime } | Where-Object { $_.Properties[5].Value -eq $User } | Select-Object TimeCreated, @{Name='TargetUser';Expression={$_.Properties[5].Value}}, @{Name='SourceIP';Expression={$_.Properties[18].Value}}, @{Name='LogonType';Expression={$_.Properties[8].Value}}, @{Name='ProcessName';Expression={$_.Properties[17].Value}} # 查询新服务创建事件,常用于定位远程服务执行痕迹 Get-WinEvent -FilterHashtable @{ LogName='System'; Id=7045; StartTime=$StartTime } | Select-Object TimeCreated, @{Name='ServiceName';Expression={$_.Properties[0].Value}}, @{Name='ImagePath';Expression={$_.Properties[1].Value}}, @{Name='ServiceType';Expression={$_.Properties[2].Value}}, @{Name='Account';Expression={$_.Properties[4].Value}} # 查询本地管理员组成员,确认权限边界 net localgroup administrators # 域环境下查询某账号所属组,确认是否被过度授权 whoami /groups net user svc_backup /domain如果已经开启了进程创建命令行审计,可以进一步查 4688。重点看是否有异常命令,例如远程执行、压缩打包、凭据导出、脚本下载等。不要只匹配某个工具名,很多正常工具也可能被滥用。# 查询可疑进程创建事件,依赖已开启 Audit Process Creation Get-WinEvent -FilterHashtable @{ LogName='Security'; Id=4688; StartTime=(Get-Date).AddHours(-24) } | Where-Object { $_.Properties[8].Value -match "cmd.exe|powershell.exe|wmic.exe|sc.exe|schtasks.exe|rundll32.exe" } | Select-Object TimeCreated, @{Name='NewProcess';Expression={$_.Properties[5].Value}}, @{Name='CommandLine';Expression={$_.Properties[8].Value}}, @{Name='ParentProcess';Expression={$_.Properties[13].Value}}关键配置检查如果日志中缺少进程命令行,建议检查以下审计策略。很多现场无法还原攻击链,不是因为没有日志,而是审计项没打开。# 查看当前高级审计策略 auditpol /get /category:* # 开启进程创建审计 auditpol /set /subcategory:"Process Creation" /success:enable /failure:enable # 开启命令行记录,需要配合组策略或注册表 reg add "HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\Audit" /v ProcessCreationIncludeCmdLine_Enabled /t REG_DWORD /d 1 /f生产环境建议通过 GPO 统一配置,而不是逐台手工改。开启前最好评估日志量,尤其是终端数量多的环境。风险判断可以按证据强弱分级:高风险:异常账号在多台服务器出现 4624 LogonType=3,同时存在 7045 新服务创建,服务路径指向临时目录、共享路径或随机文件名。中风险:服务账号频繁访问非业务相关服务器,域控上出现大量 4769,但目标主机暂未发现执行痕迹。低风险:登录来源为已登记运维平台,时间与计划任务一致,但账号权限过大或缺少审计。不要把所有 LogonType=3 都当成攻击。文件共享、备份、补丁分发都会产生网络登录。关键是看来源、目标、时间、后续动作是否一致。修复建议收敛服务账号权限:服务账号不要加入 Domain Admins 或大量服务器本地管理员组。按业务系统拆分账号,禁止跨系统复用。限制横向登录:通过 GPO 配置“拒绝通过远程桌面服务登录”“拒绝从网络访问这台计算机”,对普通账号和服务账号做边界隔离。启用 LAPS 或 Windows LAPS:避免本地管理员密码全网一致,降低单点失陷后的横向扩散风险。加强日志审计:至少开启登录、账号管理、进程创建、服务安装相关审计,并把关键服务器日志转发到集中日志平台。梳理运维通道:服务器管理尽量走堡垒机或集中运维平台,禁止个人终端直接访问核心服务器管理端口。凭据轮换:如果确认账号被异常使用,应轮换对应账号密码、检查 SPN、计划任务、服务登录配置,避免改密后业务中断。一个常用的 GPO 控制点是限制服务账号交互式登录。示例路径如下:Computer Configuration Windows Settings Security Settings Local Policies User Rights Assignment Deny log on locally Deny log on through Remote Desktop Services Deny access to this computer from the network配置时要谨慎,尤其是 Deny access to this computer from the network,可能影响备份、监控、文件共享和补丁系统。建议先在测试 OU 验证,再逐步推广。总结问答区里这类问题的核心不是“某个事件 ID 是否等于攻击”,而是把账号、来源、目标、登录方式、后续动作串成完整时间线。授权渗透测试后的复盘也一样,证据链越清楚,整改建议越容易落地。实际处理时建议记住三点:第一,先确认日志来源和时间线;第二,结合域控与目标主机交叉验证;第三,修复重点放在权限边界、审计完整性和账号隔离上。这样既能回答“发生了什么”,也能回答“以后怎么避免”。 日志证据、时间线与事件还原示意
10月10日10月10日 这种“疑似横向登录”建议先别急着定性,先把时间线和登录类型拉出来。内网横向最容易漏的是:只看 4624 成功登录,不看 4648/4672/4769/4776 这些上下文事件。 可以按下面思路定位: 1. 先确认登录方式:交互、RDP、SMB、WinRM 还是计划任务 在目标主机上重点看 Windows Security 日志: 4624:登录成功 4625:登录失败 4648:使用显式凭据登录,横向时很关键 4672:特殊权限登录,常见于管理员账号 4688:进程创建,需要开启进程命令行审计 4769:Kerberos 服务票据请求,域控上看横向访问目标 4776:NTLM 认证,域控上看来源主机 PowerShell 可以先按时间段筛: $start = "2024-01-01 10:00:00" $end = "2024-01-01 12:00:00" Get-WinEvent -FilterHashtable @{ LogName='Security' Id=4624,4625,4648,4672 StartTime=$start EndTime=$end } | Select-Object TimeCreated, Id, ProviderName, Message | Format-List 看 4624 里的 Logon Type: 2:本地交互登录 3:网络登录,常见 SMB、远程服务、PsExec 7:解锁 10:RDP 9:NewCredentials,常见 runas /netonly 如果看到 Logon Type=3,同时源 IP 是另一台内网机器,且账号是管理员或服务账号,就要重点查 SMB/远程服务链路。 2. 查源主机和目标主机是否存在典型横向痕迹 如果是 PsExec、wmic、远程服务,目标机常见痕迹: System 日志 7045:新服务安装 Security 日志 4697:服务安装,视审计策略而定 Security 日志 5140/5145:访问共享,例如 ADMIN$、C$ PowerShell 日志 4104:脚本块执行 Get-WinEvent -FilterHashtable @{ LogName='System' Id=7045 StartTime=$start EndTime=$end } | Select TimeCreated, Id, Message | Format-List Get-WinEvent -FilterHashtable @{ LogName='Security' Id=5140,5145,4697 StartTime=$start EndTime=$end } | Select TimeCreated, Id, Message | Format-List 如果是 RDP,除了 4624 Logon Type 10,还可以看: Get-WinEvent -LogName "Microsoft-Windows-TerminalServices-LocalSessionManager/Operational" | Where-Object {$_.TimeCreated -ge [datetime]$start -and $_.TimeCreated -le [datetime]$end} | Select TimeCreated, Id, Message | Format-List 重点事件一般是 21 登录成功、24 断开、25 重连。 3. 域环境里建议优先查域控日志 很多横向登录单看目标机不够,域控上的认证日志更完整。建议按账号或源主机筛 4769 和 4776: Get-WinEvent -FilterHashtable @{ LogName='Security' Id=4769,4776 StartTime=$start EndTime=$end } | Where-Object { $_.Message -match "suspect_user|SOURCE-HOST|TARGET-HOST" } | Select TimeCreated, Id, Message | Format-List 如果 4769 里服务名出现 cifs/目标主机、host/目标主机,基本能说明该账号在请求访问对应主机服务。再结合目标机 4624 的 Logon ID 可以把链路串起来。 4. 留痕不足时先补审计策略 很多时候排查困难不是没发生,而是审计没开。建议通过 GPO 开启这些项: 计算机配置 → Windows 设置 → 安全设置 → 高级审核策略配置 → 登录/注销: 审核登录:成功、失败 审核特殊登录:成功 帐户登录: 审核 Kerberos 服务票证操作:成功、失败 审核凭据验证:成功、失败 详细跟踪: 审核进程创建:成功 对象访问: 审核文件共享:成功、失败 审核详细文件共享:成功、失败 同时开启命令行记录: 计算机配置 → 管理模板 → 系统 → 审核进程创建 → 在进程创建事件中加入命令行:已启用 这样后续 4688 才能看到执行的命令,比如 wmic、powershell、sc.exe、psexesvc 之类。 5. 修复建议要按“账号、凭据、通道、主机”分层处理 确认被用于横向的账号,立即改密;如果是域账号,检查是否在多台机器有本地管理员权限。 清理本地管理员组,避免普通域账号批量拥有管理员权限。 启用 LAPS / Windows LAPS,避免多台机器复用同一个本地管理员密码。 限制 RDP、WinRM、SMB 管理入口,只允许堡垒机或管理网段访问。 关闭不必要的管理共享访问,至少在边界服务器上限制 ADMIN$、C$ 的远程访问。 对高权限账号启用“账号只能登录指定主机”或 Authentication Policy。 服务账号禁止交互登录,配置为仅允许作为服务登录。 如果已经确认有横向行为,还要在源主机查凭据暴露点,比如是否有明文密码脚本、浏览器保存密码、计划任务凭据、服务配置里的账号密码,以及内存里是否残留高权限会话。否则只改目标机配置,过一阵子还会复现。 最后建议把这次排查结果整理成一张表:时间、源 IP、源主机、账号、目标主机、事件 ID、登录类型、进程/服务名。横向登录是否成立,基本看这张时间线就能判断。
10月10日10月10日 补一个容易被忽略的点:如果你们已经在目标机上看到“疑似横向登录”,建议不要只盯 Security 日志,最好把“认证来源 + 会话痕迹 + 远程执行痕迹”串起来,否则很容易把正常运维误判成横向。 可以按这个顺序查: 1. 看 4624 里的 LogonType 和来源字段 重点区分: - LogonType 3:网络登录,常见 SMB、远程服务、计划任务访问共享 - LogonType 10:RDP - LogonType 9:NewCredentials,常见 runas /netonly - LogonType 5:服务登录,可能是服务创建或计划任务触发 直接把关键信息拉出来: $start = Get-Date "2024-01-01 10:00:00" $end = Get-Date "2024-01-01 12:00:00" Get-WinEvent -FilterHashtable @{ LogName='Security' Id=4624 StartTime=$start EndTime=$end } | ForEach-Object { $xml = [xml]$_.ToXml() $data = @{} $xml.Event.EventData.Data | ForEach-Object { $data[$_.Name] = $_.'#text' } [PSCustomObject]@{ TimeCreated = $_.TimeCreated TargetUser = "$($data.TargetDomainName)\$($data.TargetUserName)" LogonType = $data.LogonType IpAddress = $data.IpAddress Workstation = $data.WorkstationName LogonProcess = $data.LogonProcessName AuthenticationPkg = $data.AuthenticationPackageName ProcessName = $data.ProcessName } } | Sort-Object TimeCreated | Format-Table -Auto 如果 IpAddress 是 `::1`、`127.0.0.1` 或为空,不一定代表本机登录,可能需要结合域控 4769/4776 反查来源。 2. 查远程执行痕迹,不同横向方式日志不一样 如果是 PsExec / SMB 服务创建,目标机一般会有: - System 7045:新服务安装 - Security 4697:服务安装,前提是审计开启 - Security 5140/5145:访问共享,如 ADMIN$、C$ - Sysmon 1/3/11:进程、网络、文件落地 可以查 System 7045: Get-WinEvent -FilterHashtable @{ LogName='System' Id=7045 StartTime=$start EndTime=$end } | Select-Object TimeCreated, ProviderName, Message 重点看服务名是否随机、路径是否指向: C:\Windows\Temp\ C:\Windows\ C:\Users\Public\ ADMIN$\ 如果是 WinRM / PowerShell Remoting,查这些日志: - Microsoft-Windows-WinRM/Operational - Microsoft-Windows-PowerShell/Operational - PowerShell 4103、4104、400、403、600 示例: Get-WinEvent -FilterHashtable @{ LogName='Microsoft-Windows-PowerShell/Operational' Id=4103,4104 StartTime=$start EndTime=$end } | Select-Object TimeCreated, Id, Message 如果是 RDP,不光看 4624 LogonType 10,还要看: - Security 4778:会话重新连接 - Security 4779:会话断开 - TerminalServices-LocalSessionManager/Operational 21、24、25 - TerminalServices-RemoteConnectionManager/Operational 1149 Get-WinEvent -FilterHashtable @{ LogName='Microsoft-Windows-TerminalServices-LocalSessionManager/Operational' Id=21,24,25 StartTime=$start EndTime=$end } | Select-Object TimeCreated, Id, Message 3. 如果有域控,优先从域控反推来源 目标机日志可能被清理,域控认证日志通常更完整。建议围绕账号、目标主机名、时间段查: - 4768:TGT 请求 - 4769:服务票据请求,重点看 ServiceName,比如 `cifs/host`、`HOST/host`、`TERMSRV/host` - 4771:Kerberos 预认证失败 - 4776:NTLM 认证 4769 里如果看到某账号请求了 `cifs/目标主机` 或 `HOST/目标主机`,再结合 ClientAddress,基本能定位从哪台机器过来的。 4. 修复建议别只改密码,先处理凭据暴露面 如果确认是横向,建议按优先级做: - 立刻停用或重置涉及账号密码,尤其是本地管理员、域管、运维账号 - 检查该账号是否在多台机器复用本地管理员密码,建议启用 Windows LAPS - 清理目标机和来源机上的缓存凭据、计划任务、异常服务 - 检查本地 Administrators 组、Remote Desktop Users 组是否被加了异常账号 - 限制域管登录普通服务器和终端,避免高权限凭据落到低安全级别主机 - 通过 GPO 禁止普通机器到机器的横向管理通道,比如只允许堡垒机访问 WinRM/RDP/SMB 管理端口 - 开启 4688 进程命令行、PowerShell 4104、对象访问 5140/5145,后续才好追 可以先查本地管理员组和计划任务: net localgroup administrators schtasks /query /fo LIST /v | findstr /i "TaskName Author Run As Task To Run" 如果要快速收敛风险,防火墙上先临时限制这些入站端口只允许管理网段或堡垒机访问: 135, 139, 445, 3389, 5985, 5986 最后建议保留原始 evtx,不要只截图。目标机、来源机、域控三边日志都导出来,后面做时间线会省很多事。导出可以用: wevtutil epl Security C:\Temp\Security.evtx wevtutil epl System C:\Temp\System.evtx wevtutil epl Microsoft-Windows-PowerShell/Operational C:\Temp\PowerShell-Operational.evtx wevtutil epl Microsoft-Windows-WinRM/Operational C:\Temp\WinRM-Operational.evtx
创建帐户或登录后发表意见