首页/系统/Windows 运维速查/4648 显式凭据登录

4648 显式凭据登录

用另一套凭据运行(runas/映射盘/凭据切换)会记录 4648:排查“谁用特权账户连了哪里”的关键线索。

Windows 运维速查系统更新于 2026-10-13

4648 记录了什么

4648 表示「使用显式凭据尝试登录」:操作者当前已经登录,但又主动提供了另一套账户口令去做某件事——比如在普通会话里用 runas 启动管理员程序、用 net use 映射共享时指定别的账户、或自动化脚本里带着凭据连接远端。它记录的是「发起方」视角,是追查「谁用特权账户连了哪里」最有价值的线索之一。

基本信息

适用平台Windows 客户端与服务器,记录在安全日志(需审核登录事件为成功)
关键字段Subject(发起者账户与登录会话)、TargetUserName(被使用的账户)、TargetServerName(目标)
补充字段Process Name 与 Process ID 指出是哪个程序在提供凭据
典型来源runas、net use /user、凭据管理器、计划任务、远程管理工具
关联登录类型runas /netonly 对应登录类型 9(NewCredentials)
权限要求读取安全日志需要管理员或事件日志读取权限

典型使用场景

  • 特权账户使用审计:谁在什么时候用管理员账号做了操作
  • 夜间巡检:无人时段出现的凭据使用往往需要逐条解释清楚
  • 横向移动线索:一台机器上出现连向多台目标服务器的凭据尝试
  • 自动化治理:找出脚本与工具里持久化的凭据来源
  • 事件溯源:与目标机的 4624/4625 组合,还原一次访问的完整链路

常用示例

常用示例
# 最近 30 条显式凭据使用记录
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4648} -MaxEvents 30 |
  Select-Object TimeCreated, @{n='From';e={$_.Properties[1].Value}}, @{n='Used';e={$_.Properties[5].Value}}, @{n='Target';e={$_.Properties[8].Value}},
                @{n='Process';e={$_.Properties[11].Value}} | Format-Table -AutoSize
# 只关心特权账户被使用的情形
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4648; StartTime=(Get-Date).AddDays(-1)} |
  Where-Object { $_.Properties[5].Value -match 'admin|Administrator|svc' } |
  Select-Object TimeCreated, @{n='From';e={$_.Properties[1].Value}}, @{n='Used';e={$_.Properties[5].Value}}, @{n='Target';e={$_.Properties[8].Value}}
# 导出留档
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4648; StartTime=(Get-Date).AddDays(-7)} |
  Export-Csv D:\audit\evt4648.csv -Encoding UTF8 -NoTypeInformation

关键字段读法

字段含义排查价值
Subject / 账户名发起操作的人与会话判断是人工操作还是服务/计划任务
TargetUserName被拿来使用的账户特权账户出现即重点核查
TargetServerName凭据用于哪个目标判断是否跨机、是否横向访问
Process Name提供凭据的程序名可识别是运维工具还是可疑程序
LogonGuid / 登录 ID关联同一会话的其它事件把 4648 与后续 4624 串成一条链路
4648 只说明「尝试用这套凭据」,不表示成功或失败。要判断结果,必须在目标机上找对应的 4624(成功)或 4625(失败),并结合时间顺序还原过程;两台机器的时间还需先确认已同步。
合法工具会大量产生 4648:备份软件、配置管理、监控采集、部分远程管理工具都属于此类。先建立「谁在什么时段用哪个账户连哪些目标」的白名单基线,异常才能被凸显出来。

与其它事件配合串链路

与其它事件配合串链路
# 源机器:谁提供了凭据
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4648} -MaxEvents 20 | Select-Object TimeCreated, Message
# 目标机器:凭据是否成功落地(登录类型 3 为网络登录,10 为远程桌面)
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4624} -MaxEvents 20 |
  Select-Object TimeCreated, @{n='Type';e={$_.Properties[8].Value}}, @{n='Account';e={$_.Properties[5].Value}}
# 失败尝试
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4625} -MaxEvents 20 | Select-Object TimeCreated, Message
如果审核策略没有开启登录事件的成功审核,4648 根本不会产生——「日志里没有」不等于「没发生过」。排查前先用 auditpol /get /category:* 确认前提条件,再对结论负责。

易错点

  • 把 4648 直接当成登录成功:它只代表凭据被提供,结果要在目标机上用 4624/4625 验证
  • 只看源机器不看目标机器:缺少目标侧结果,无法判断访问是否成功与后续动作
  • 忽略审核策略:未开启成功审核时事件不产生,误判为「无人使用特权凭据」
  • 不做白名单:大量合法工具的 4648 淹没真实异常,需要按账户与目标建立基线
  • 跨机比对时间线未核对时钟同步:事件先后顺序判断错误,容易冤枉正常操作

数据来源与参考

  • Microsoft Learn:4648 事件

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌