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:* 确认前提条件,再对结论负责。