发布于10月10日10月10日 背景最近在一次授权内网渗透复测中,客户提出一个典型问题:域内某台运维跳板机曾出现异常登录,EDR 没有明确告警,但 Windows 安全日志里能看到多次 4624 登录成功事件,目标账号具备较高权限。客户想确认这是否属于横向移动痕迹,以及后续如何限制影响面。这类问题放在问答中心更合适,因为它不是单点漏洞利用,也不是单纯工具使用,而是需要结合授权范围、日志证据、权限边界和修复建议一起判断。下面按实际排查思路整理一份可执行流程。问题定位场景假设如下:环境:Windows 域环境,存在域控、文件服务器、运维跳板机、若干业务服务器。异常主机:运维跳板机 10.10.20.15。异常账号:corp\ops-admin。客户已授权检查日志、账号权限、主机登录记录,但不允许进行破坏性测试。目标:确认是否存在横向登录、凭据滥用、权限过宽,并给出可落地修复建议。排查重点不是直接判定“被入侵”,而是先回答三个问题:这个账号从哪里登录过来?登录方式是什么?交互式、远程桌面、网络登录还是服务登录?该账号是否具备不必要的本地管理员或域级权限?技术分析Windows 安全日志中,常用事件 ID 有以下几个:事件 ID含义关注点4624登录成功Logon Type、来源 IP、目标账号4625登录失败是否存在爆破、口令喷洒4672分配特殊权限是否使用高权限账号登录4688进程创建是否执行远程管理命令,需要开启审计7045创建服务常见于远程服务执行链路5140访问共享是否访问 ADMIN$、C$、IPC$其中 Logon Type 很关键:2:本地交互式登录。3:网络登录,常见于 SMB、远程服务、访问共享。7:解锁登录。10:远程桌面 RDP。11:缓存域凭据登录。如果在业务服务器上看到 corp\ops-admin 的 4624 且 Logon Type=3,同时伴随 ADMIN$ 访问、7045 创建服务,就要重点怀疑存在远程执行或运维工具误用。如果是 Logon Type=10,则更偏向 RDP 登录链路。操作步骤建议按以下顺序排查,避免一上来就跑大量工具导致日志噪声过大。第一步:确认异常账号最近登录过哪些主机。第二步:在目标主机上查看 4624、4672、7045、5140 等事件。第三步:核对该账号是否属于 Domain Admins、Enterprise Admins、Administrators 等高权限组。第四步:检查跳板机是否保存过凭据,例如 Windows 凭据管理器、计划任务、服务账号配置。第五步:输出影响范围,按账号、主机、时间线整理证据。代码/命令示例下面命令适用于授权排查场景。建议在管理员 PowerShell 中执行,并保存输出作为复盘材料。# 1. 查询近 3 天指定账号的成功登录事件 4624 $User = "ops-admin" $StartTime = (Get-Date).AddDays(-3) Get-WinEvent -FilterHashtable @{ LogName = 'Security' Id = 4624 StartTime = $StartTime } | Where-Object { $_.Properties[5].Value -like "*$User*" } | Select-Object TimeCreated, @{Name='TargetUser';Expression={$_.Properties[5].Value}}, @{Name='TargetDomain';Expression={$_.Properties[6].Value}}, @{Name='LogonType';Expression={$_.Properties[8].Value}}, @{Name='SourceIP';Expression={$_.Properties[18].Value}} | Sort-Object TimeCreated # 2. 查询是否存在特殊权限登录 4672 Get-WinEvent -FilterHashtable @{ LogName = 'Security' Id = 4672 StartTime = $StartTime } | Where-Object { $_.Properties[1].Value -like "*$User*" } | Select-Object TimeCreated, @{Name='Account';Expression={$_.Properties[1].Value}}, @{Name='Privileges';Expression={$_.Properties[2].Value}} # 3. 查询系统日志中的服务创建事件 7045 Get-WinEvent -FilterHashtable @{ LogName = 'System' Id = 7045 StartTime = $StartTime } | Select-Object TimeCreated, @{Name='ServiceName';Expression={$_.Properties[0].Value}}, @{Name='ServiceFileName';Expression={$_.Properties[1].Value}}, @{Name='ServiceAccount';Expression={$_.Properties[4].Value}} # 4. 查看当前主机本地管理员组成员 net localgroup administrators # 5. 查看域账号所属组,需要域环境和相应权限 net user ops-admin /domain如果环境中部署了 Windows 事件转发或 SIEM,可以把同样逻辑转为查询语句。例如重点筛选:EventID IN (4624, 4672, 7045, 5140) AND AccountName = "ops-admin" AND TimeGenerated > now() - 3d关键判断点实际分析时,我一般会用下面几个条件判断风险等级:同一账号短时间内登录多台服务器,且来源 IP 不符合运维习惯,风险较高。4624 的 Logon Type=3 后紧跟 7045 创建服务,需重点核查远程执行行为。出现 ADMIN$、C$ 访问记录,并且访问源是非跳板机,说明权限边界可能已经被绕过。4672 与 4624 同时出现,说明登录账号被授予特殊权限,不应使用普通业务账号承担此角色。如果账号属于 Domain Admins,但实际只承担某几台服务器运维任务,属于典型权限过宽。风险与修复建议修复不能只改密码。只改密码往往会遗漏横向路径和权限边界问题。收敛高权限账号:将日常运维账号和域管理账号分离,域管账号只允许在域控或专用管理终端使用。限制登录范围:通过 GPO 配置 Deny log on locally、Deny log on through Remote Desktop Services,禁止高权限账号登录普通业务服务器。清理本地管理员组:避免将域用户组大范围加入本地 Administrators,可改用最小权限的分组授权。启用详细审计:开启进程创建审计 4688,并记录命令行参数,便于还原操作链路。关闭不必要的管理共享暴露:重点监控 ADMIN$、C$、IPC$ 的异常访问,不建议简单粗暴禁用全部管理能力,应结合运维需求配置访问控制。检查凭据残留:清理跳板机上的保存凭据、计划任务、服务配置中的明文或弱保护凭据。强制轮换敏感账号密码:确认影响范围后,对相关高权限账号进行密码轮换,并检查是否存在长期有效的服务票据或会话。开启进程命令行审计可以使用组策略,也可以在单机上检查注册表配置:# 开启命令行参数记录,需结合“审核进程创建”策略 reg add "HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\Audit" /v ProcessCreationIncludeCmdLine_Enabled /t REG_DWORD /d 1 /f # 查看当前审计策略 auditpol /get /subcategory:"Process Creation" # 开启进程创建审计 auditpol /set /subcategory:"Process Creation" /success:enable /failure:enable总结授权渗透或应急复核里,判断横向移动不能只看单个告警,要把账号、来源 IP、登录类型、共享访问、服务创建和权限组关系串起来看。问答中心里类似问题很多,建议提问时至少提供:事件 ID、时间范围、账号名、来源 IP、Logon Type、目标主机角色,以及当前授权边界。信息越完整,越容易给出准确判断。注意:以上流程仅适用于授权测试、日志排查和防护加固。不要在未授权环境中进行扫描、登录尝试或远程执行验证。 服务器、云资产与权限边界梳理示意
10月10日10月10日 先别急着“清干净”,建议先把横向移动的证据链固化下来,再做权限收敛。否则后面很难判断是授权测试行为、误报,还是已有凭据被复用。 可以按这几个方向定位: ### 1. 先确认横向入口:谁在用什么凭据访问内网主机 如果是 Windows 域环境,重点看 DC 和被访问主机的日志: - DC:4624 / 4627 / 4768 / 4769 / 4776 - 目标主机:4624 / 4672 / 4688 / 7045 / 4697 - RDP:1149、4624 LogonType 10 - SMB/远程服务:4624 LogonType 3 - WinRM:4688 里出现 `wsmprovhost.exe`,以及 PowerShell 日志 4103/4104 在目标机器上可以先快速筛登录源: Get-WinEvent -FilterHashtable @{ LogName='Security'; Id=4624; StartTime=(Get-Date).AddDays(-3) } | Where-Object { $_.Properties[8].Value -in 3,10 } | Select-Object TimeCreated, @{n='User';e={$_.Properties[5].Value}}, @{n='Domain';e={$_.Properties[6].Value}}, @{n='LogonType';e={$_.Properties[8].Value}}, @{n='SourceIP';e={$_.Properties[18].Value}} | Sort-Object TimeCreated 再看是否出现新服务、计划任务、远程命令执行痕迹: Get-WinEvent -FilterHashtable @{ LogName='System'; Id=7045; StartTime=(Get-Date).AddDays(-3) } | Select TimeCreated, ProviderName, Message Get-ScheduledTask | Where-Object { $_.TaskPath -notlike '\Microsoft*' } | Select TaskName, TaskPath, State 如果有 Sysmon,优先查这些行为: - `psexesvc.exe` - `wmic.exe` - `wmiprvse.exe` 拉起异常进程 - `powershell.exe -enc` - `rundll32/regsvr32/mshta/certutil` - 对 `ADMIN$ / C$ / IPC$` 的访问 ### 2. 查横向移动常见工具痕迹 在被访问主机和跳板机上都查一次: dir \\127.0.0.1\c$\Windows\Temp dir C:\Windows\Temp dir C:\Users\Public dir C:\ProgramData sc query type= service state= all | findstr /i "psexec remote smb wmiexec" SMB 会话和打开文件也可以看: net session net use openfiles /query 如果你们有 EDR/SIEM,把查询条件收窄到: - 同一账号短时间登录多台主机 - 普通用户突然出现 4672 特权登录 - 非管理服务器主动连接大量 445/135/3389/5985 - 账号从非常规来源 IP 登录 - 工作站访问 DC、数据库、文件服务器的管理端口 ### 3. 定位权限边界:不是只看账号权限,还要看可达性 横向移动能发生通常是两类问题叠加: 1. 凭据可用 2. 网络可达 所以建议做一张矩阵: | 账号 | 来源主机 | 目标主机 | 登录方式 | 权限级别 | 是否业务必要 | |---|---|---|---|---|---| 尤其要核查: - 普通域用户是否能 RDP 到服务器 - 本地管理员密码是否复用 - 运维账号是否在过多主机上有本地管理员权限 - 服务账号是否允许交互式登录 - 域管是否曾登录普通终端 - 是否存在过宽的 GPO 本地管理员组下发 域环境可以先看本地管理员组成员: Get-LocalGroupMember Administrators 批量的话可从管理机跑: $servers = Get-Content .\servers.txt foreach ($s in $servers) { try { Invoke-Command -ComputerName $s -ScriptBlock { hostname Get-LocalGroupMember Administrators } -ErrorAction Stop } catch { Write-Host "$s failed: $_" } } ### 4. 权限收敛建议,按优先级来 不要一次性全封,容易影响业务。建议按风险高低分阶段: **第一阶段:立即控制扩散面** - 禁止域管登录普通终端 - 临时禁用或改密疑似被用过的账号 - 对高危账号强制 Kerberos 票据失效 klist purge 域控侧可重置账号密码,必要时清理 TGT 生命周期。 **第二阶段:限制登录范围** 对服务账号设置: - Deny log on locally - Deny log on through Remote Desktop Services - 只允许作为服务登录 - 限制可登录主机 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 **第三阶段:本地管理员治理** - 部署 LAPS / Windows LAPS,避免本地管理员密码复用 - 运维账号分级:普通运维、服务器运维、域管分离 - Domain Admins 只用于 DC 和极少数管理场景 - 清理 GPO 里不必要的 Administrators 组成员 **第四阶段:网络层收敛** 至少把这些管理端口做访问源限制: - 445 SMB - 135/139 RPC/NetBIOS - 3389 RDP - 5985/5986 WinRM - 1433/3306/6379/9200 等数据服务端口 Windows 防火墙可以按管理网段限制,例如 WinRM: New-NetFirewallRule ` -DisplayName "Allow WinRM from Admin Subnet Only" ` -Direction Inbound ` -Protocol TCP ` -LocalPort 5985 ` -RemoteAddress 10.10.10.0/24 ` -Action Allow 然后加默认拒绝策略,避免“允许规则”之外仍可访问。 ### 5. 判断是否已经形成持久化 横向移动痕迹如果伴随持久化,要额外检查: reg query HKLM\Software\Microsoft\Windows\CurrentVersion\Run reg query HKCU\Software\Microsoft\Windows\CurrentVersion\Run schtasks /query /fo LIST /v wmic service get name,displayname,pathname,startmode | findstr /i "temp public programdata powershell cmd wscript mshta" 还要看是否有新增本地用户或异常组成员: net user net localgroup administrators net localgroup "Remote Desktop Users" ### 6. 最后做一个结论闭环 建议输出时不要只写“发现横向移动”,而是拆成: - 首次出现时间 - 初始来源主机 - 使用账号 - 访问目标列表 - 登录类型 - 执行命令或投递文件 - 是否获取管理员权限 - 是否存在持久化 - 当前已收敛措施 - 剩余风险 这样后面无论是给甲方、内部安全团队还是授权测试复盘,都比较清楚。 如果你现在只有“疑似痕迹”,优先从 DC 4624/4769 和目标主机 7045/4688 下手,基本能把账号、来源、目标和执行方式串起来。
创建帐户或登录后发表意见