「从昨晚开始某个账户就一直在反复被锁定,请帮忙查一下原因」「想确认是否有人在尝试用离职员工的账户登录」「这台服务器,能查到什么时候谁执行了什么操作吗?」── 这些都是中小企业的信息系统负责人,或是向客户交付系统的开发者,某天突然会接到的请求。而这时能依靠的救命稻草,就是 Windows 的 Security 事件日志。
然而实际打开事件查看器后,等待着我们的往往是两种现实之一:想看的事件根本没有被记录(审核策略没有启用),或者被淹没在海量事件中根本读不下去(噪音充斥、日志臃肿不堪)。安全审核这种东西「只要启用就能记录」,但如果不设计好录什么、录到什么程度,真到关键时刻也派不上用场。
本文将基于截至 2026 年 8 月的第一手资料,整理审核策略的运作机制(基本与高级两大体系)、中小规模环境下至少应启用的子类别、4624/4625/4740/4688 等常见事件 ID 的解读方法、Security 日志的容量设计,直至用 PowerShell 排查的方法。如果说本站此前发布的NTLM 审核、SMB 签名、BitLocker、防火墙等文章讲的是「筑牢防线」,那么本文讲的就是「让事后能够确认发生了什么」,是把这些内容串联起来的续篇。
1. 先说结论
- 审核策略分为「基本」和「高级(Advanced Audit Policy)」两大体系,二者不能混用。微软明确指出,同时使用两者会导致审核结果出现无法预期的状态。请统一使用高级一侧(40 多个子类别)。1
- 确认当前状态用
auditpol /get /category:*。无论来源是 GPO 还是本地设置,都能一览当前实际生效的审核配置。2 - 「全部启用」是绝对不能做的事。启用会产生海量事件的子类别,会让真正重要的事件被淹没在噪音中,还会影响性能。请以微软的基准建议为起点,只追加真正需要的部分。34
- 登录成功是 4624,登录失败是 4625。4624 通过登录类型(Logon Type)(2=交互式、3=网络、10=远程桌面等)来区分「这是一次什么样的登录」。5
- 4625 可以通过 Status/Sub Status 代码判断失败原因。常见的有 0xC0000064(用户名不存在)、0xC000006A(密码错误)、0xC0000072(账户已被禁用)、0xC0000234(账户被锁定中)。6
- 事件「记录在哪台机器上」是确定的。4624/4625 记录在被访问的一侧机器上,而凭据验证(4776)和 Kerberos 预身份验证失败(4771)则记录在域控制器上。看错机器就会误判为「没有日志」。678
- Security 日志的「容器设计」(最大大小与保留方式)占了一半的分量。如果保留方式是覆盖模式,旧事件就会被逐步清除。请用
Get-WinEvent -ListLog Security确认最大大小与记录数,再根据所需的保留天数反推扩容。910 - 进程创建(4688)的命令行记录功能虽然强大,但代价是机密信息会以明文形式留在日志中。启用前请先检查各类脚本。1112
2. 审核策略基础 ── 不要混用「基本」与「高级」
Windows 的审核策略分为两大体系。1
- 基本审核策略:位于「本地策略 > 审核策略(Local Policies > Audit Policy)」下的 9 个类别设置,是早于 Windows Vista 就存在的旧体系。
- 高级审核策略(Advanced Audit Policy Configuration):位于「安全设置 > 高级审核策略配置(Security Settings > Advanced Audit Policy Configuration)」下的 40 多个子类别设置。它把基本策略的 1 个类别拆分成多个子类别,例如基本策略中的「审核账户登录事件」这一项,在高级一侧就对应着 4 个子类别。在基本一侧启用 1 个类别,等同于把对应的全部子类别一次性启用,会连同不感兴趣的事件一起大量记录下来。1
重要的是,这两大体系并不兼容。微软明确指出:「不要同时使用基本与高级两种策略,否则审核结果会出现无法预期的状态」。通过组策略应用高级审核策略后,该计算机原有的审核设置会先被清除,再应用高级一侧的设置,此后就只能可靠地通过高级一侧进行控制。在使用高级审核策略的环境中,应启用安全选项「审核:强制审核策略子类别设置(Windows Vista 或更高版本)以覆盖审核策略类别设置(Audit: Force audit policy subcategory settings to override audit policy category settings)」,防止基本一侧的设置反过来覆盖高级设置(独立计算机默认已启用此设置)。14
确认当前状态只需一条命令,请在管理员命令提示符中执行。2
rem 按子类别列出当前实际生效的审核设置
auditpol /get /category:*
rem 变更前的备份(CSV)与还原
auditpol /backup /file:C:\logs\auditpol-backup.csv
auditpol /restore /file:C:\logs\auditpol-backup.csv
auditpol 的输出,无论来源是 GPO 还是本地设置,反映的都是「最终实际生效的策略」,也可以用来核对「GPO 应该已经下发的设置为什么没有生效」这类问题。此外,审核设置本身一旦被更改就会记录事件 4719,因此「审核不知不觉间被关闭了」这种情况事后也能追溯。12
3. 至少应启用的子类别判断表
「先全部启用再说」是一步坏棋,理由很明确。举例来说,如果连特权使用类子类别的成功事件也一并审核,微软警告称事件量会变得极其庞大,导致难以从中找到其他条目,还会对性能造成影响。4 日志容器(第 5 章)的容量是有限的,录入的噪音越多,真正需要的事件能保留的天数就越少。审核设计的本质,是决定「不录什么」。
微软针对工作站与服务器分别公开了基准建议与强化建议,可以作为出发点。3 在此基础上,从中小规模环境「发生事件时至少要能查到这些」的角度整理出下表。
| 子类别(类别) | 主要事件 ID | 能查到什么 | 中小规模环境的建议 |
|---|---|---|---|
| 登录(Logon)(登录/注销,Logon/Logoff) | 4624 / 4625 | 登录成功・失败、登录类型、来源 | 成功+失败。Windows 10 1809 及以后版本默认也已启用成功与失败3 |
| 特殊登录(Special Logon)(同上) | 4672 / 4964 | 带有管理员特权的登录发生 | 成功 |
| 账户锁定(Account Lockout)(同上) | 4625 | 对锁定中的账户尝试登录失败 | 失败(4625 为失败事件,该子类别不存在成功事件)13 |
| 用户账户管理(User Account Management)(账户管理,Account Management) | 4720 / 4726 / 4738 / 4740 | 账户的创建・删除・变更・锁定 | 成功+失败 |
| 安全组管理(Security Group Management)(同上) | 4728 / 4732 / 4756(添加)、4729 / 4733 / 4757(删除) | 向管理员组等添加・删除成员(全局/本地/通用) | 成功(该子类别不存在失败事件)14 |
| 凭据验证(Credential Validation)(账户登录,Account Logon) | 4776 | NTLM 身份验证的成败。域账户记录在 DC 一侧7 | 成功+失败 |
| Kerberos 身份验证服务(Kerberos Authentication Service)(同上,仅 DC) | 4768 / 4771 | TGT 签发与预身份验证失败(密码错误等)8 | 在 DC 上启用成功+失败 |
| 进程创建(Process Creation)(详细跟踪,Detailed Tracking) | 4688 | 谁・从哪个父进程・启动了什么 | 成功。命令行记录请先阅读第 7 章的注意事项 |
| 其他对象访问事件(Other Object Access Events)(对象访问,Object Access) | 4698 | 计划任务的创建(攻击持久化的常见手法)15 | 可考虑启用成功 |
| 审核策略更改(Audit Policy Change)(策略更改,Policy Change) | 4719 | 审核设置本身的变更 | 成功+失败 |
反过来,文件系统与注册表的对象访问审核、特权使用、包过滤类(如 5152)等,默认情况下不去碰它们才是稳妥的做法。这些子类别只有在配合有针对性的 SACL 设置,或是限定在排查期间内使用时才真正有价值,常年全开只会把日志空间吃光。4
4. 常见事件 ID 的解读方法
4.1. 4624 ── 登录成功事件按登录类型区分解读
4624 是「账户已成功登录(An account was successfully logged on)」,记录在创建登录会话的机器(被访问的一侧)上。5 由于这是一个会被大量记录的事件,解读时首先要按登录类型(Logon Type)进行分类。5
| 登录类型(Logon Type) | 名称 | 实务含义 |
|---|---|---|
| 2 | Interactive | 在该 PC 控制台上进行的登录 |
| 3 | Network | 经由网络的访问(共享文件夹、管理工具等)。按设备数量出现,数量最多 |
| 4 | Batch | 批处理执行(计划任务等) |
| 5 | Service | 服务的启动(服务控制管理器) |
| 7 | Unlock | 解除屏幕锁定 |
| 8 | NetworkCleartext | 密码以明文形式传递给身份验证包的网络登录 |
| 9 | NewCredentials | 复制其他凭据(相当于 runas /netonly) |
| 10 | RemoteInteractive | 远程桌面 |
| 11 | CachedInteractive | 使用缓存凭据进行的登录(无法连接到 DC 的状态) |
同时需要留意的字段有:「新登录(New Logon)」中的账户名、「网络信息(Network Information)」中的源地址、「身份验证包(Authentication Package)」(NTLM 还是 Kerberos)、以及「提升的令牌(Elevated Token)」(是否为管理员特权会话)。如果只想追踪管理员特权登录,也可以使用记录在同一登录 ID 下的 4672(分配了特殊权限)。5
4.2. 4625 ── 用 Status/Sub Status 代码确定失败原因
4625 是「账户登录失败(An account failed to log on)」,记录在被尝试登录的机器上。6 比起「失败原因(Failure Reason)」栏中的文字说明,通过 Status/Sub Status 的十六进制代码来判断更为可靠。常见代码如下。6
- 0xC0000064:用户名不存在。若短时间内连续出现,可能是账户枚举攻击的迹象
- 0xC000006A:密码错误。若针对特定账户连续出现,可能是密码猜测攻击的迹象
- 0xC000006D:用户名或身份验证信息无效
- 0xC000006F:不在允许的登录时间段内
- 0xC0000070:来自不被允许的工作站
- 0xC0000072:账户已被管理员禁用(对离职员工账户的尝试会出现在这里)
- 0xC000015B:该机器上不允许所请求的登录类型
- 0xC0000193:账户已过期
- 0xC0000234:账户锁定中
「谁・从哪里・为什么失败」由「目标账户 + 来源(工作站名称/IP 地址) + 该代码」这三项信息共同确定。第 6 章会给出一次性提取这三项信息的 PowerShell 脚本。
4.3. 4740 ── 锁定的来源看「呼叫方计算机名」
4740 是「用户账户已被锁定(A user account was locked out)」(子类别为用户账户管理)。这个事件中的主角是「呼叫方计算机名(Caller Computer Name)」字段,记录了触发锁定的那次登录尝试来自哪台计算机。16 常规做法是先据此定位来源终端,再排查该终端上残留的旧凭据。原因大多是某种东西在密码更改后仍在继续使用旧凭据(已保存的凭据、断开却未结束的 RDP 会话、使用旧密码配置的服务或任务)。
有一点需要注意:4625 记录在接受登录尝试的一侧计算机上。如果原因是来源终端向文件服务器等发起的网络登录,来源终端自身的 Security 日志中不会留下 4625,痕迹会留在被访问服务器的 4625 中,或者——如果是域账户——留在 DC 一侧的 4776(NTLM)/4771(Kerberos 预身份验证失败)中。78 当「来源终端的日志中什么都没有」时,请去查看接受登录一侧的日志。
4.4. 4720 系列 ── 账户的创建・变更・组添加
账户管理相关的事件 ID 是连号排列的:4720(创建用户账户)17、4726(删除)、4738(变更),以及组一侧的成员添加/删除。需要注意的是,组成员的变更按组的类型使用不同的事件 ID:本地组为 4732/4733,全局组为 4728/4729,通用组为 4756/4757。14 Domain Admins 是全局组,因此向其中添加成员会记录在4728中 —— 如果只把 4732 设为告警条件,就会漏掉最应该关注的那个事件。这类事件在日常中大多是帮助台的常规操作记录,但「标准用户突然被添加进管理员组」「出现了谁都不知道的账户」,哪怕只发生一次也应立即进行调查。微软也把向特权组进行的意外成员添加,列为单次即应告警的事件示例。3
4.5. 4688 ── 进程创建。命令行记录是另一个开关
4688 是「已创建新进程(A new process has been created)」,每次创建进程时都会记录创建者账户、新进程的可执行文件路径、父进程以及令牌提升类型(Token Elevation Type)。11 这是一个能够回答「这台服务器上谁执行了什么」的高调查价值事件。
不过默认情况下不会记录命令行参数。只有另外启用「在进程创建事件中包含命令行(Include command line in process creation events)」这一组策略(管理模板 > 系统 > 审核进程创建)之后,4688 的「进程命令行(Process Command Line)」字段中才会填入参数。1112 要追踪 powershell -EncodedCommand ... 这类可疑启动,这项设置事实上是必需的,但请先理解第 7 章所述的机密泄露风险,再决定是否启用。
4.6. 4698 ── 计划任务的创建
4698 是「已创建计划任务(A scheduled task was created)」,会记录任务名称与任务定义的完整 XML(包含执行命令)。由于注册计划任务是恶意软件在重启后仍能存活的常用手段,微软建议监视任务创建事件。15 即便是业务中大量使用计划任务的环境,任务的创建本身也不是日常频繁发生的操作,因此噪音相对较小。
还有一个值得记住的是1102「审核日志已被清除(The audit log was cleared)」。清空 Security 日志必然会留下这条事件,因此当「日志变空了」时,可以据此区分是意外事故还是人为操作。18
5. 日志容器的设计 ── 最大大小与保留方式
在增加审核策略之前,先确认好接收这些事件的容器。Security 日志有最大大小和保留模式两个属性,在覆盖模式(默认配置)下,一旦达到最大大小,新事件就会覆盖最旧的事件。反过来,在保留模式(不覆盖)下,日志一旦写满,反而是新事件会被丢弃。10 这两种行为都可能导致「不知不觉间日志就没了」,因此第一步是先了解当前的实际状态。
# 确认 Security 日志的容器状态: 保留模式・最大大小・当前记录数
Get-WinEvent -ListLog Security |
Select-Object LogName, LogMode, MaximumSizeInBytes, RecordCount
# 实际能追溯到多少天前(最旧事件的时间)
Get-WinEvent -LogName Security -Oldest -MaxEvents 1 |
Select-Object TimeCreated
Get-WinEvent -ListLog 会一并返回日志的配置与记录数。9 「最旧事件的时间」与当前时间的差值,就是实际的保留天数,如果这个天数不满足本公司的需求(事件调查中想要追溯的天数),就应该扩大最大大小。设置可以通过 wevtutil sl Security /ms:<字节数>,或通过组策略下发。10
另外,安全选项中还有一项名为「审核:如果无法记录安全审核则立即关闭系统(Audit: Shut down system immediately if unable to log security audits)」(即所谓的 CrashOnAuditFail)的设置。启用后一旦无法记录审核信息,系统就会以 STOP 错误 C0000244 停止运行。这是为绝不能遗漏审核证据的合规要求而设计的设置,默认为禁用。微软自身也提醒,攻击者可以通过故意产生大量事件,把它转化为强制关闭服务器的 DoS 手段,因此在一般的中小规模环境中不应轻易启用。19
6. 排查实务 ── 筛选、Get-WinEvent、导出
6.1. 用事件查看器进行筛选
如果只是单次调查,事件查看器就已经足够。打开 Security 日志,用「筛选当前日志(Filter Current Log)」指定事件 ID(例如 4625)和时间段。需要反复查看的条件,可以用「创建自定义视图(Create Custom View)」保存下来,下次一键即可打开。如果不只是想按事件 ID 筛选,还想按特定账户等条件缩小范围,可以在筛选对话框的 XML 选项卡中直接编辑 XPath 查询。
6.2. 用 Get-WinEvent 提取
记录数量多、涉及多个条件、需要定期执行的调查,请切换到 PowerShell 的 Get-WinEvent。要点在于使用能够在日志一侧完成过滤的 -FilterHashtable。9
# 获取最近 24 小时内的登录失败(4625)事件
Get-WinEvent -FilterHashtable @{
LogName = 'Security'
Id = 4625
StartTime = (Get-Date).AddDays(-1)
}
# 整理成「谁・从哪里・为什么」的表格
Get-WinEvent -FilterHashtable @{
LogName = 'Security'
Id = 4625
StartTime = (Get-Date).AddDays(-1)
} | ForEach-Object {
$x = [xml]$_.ToXml()
$d = @{}
$x.Event.EventData.Data | ForEach-Object { $d[$_.Name] = $_.'#text' }
[pscustomobject]@{
Time = $_.TimeCreated
Account = "$($d.TargetDomainName)\$($d.TargetUserName)"
LogonType = $d.LogonType
Source = "$($d.WorkstationName) $($d.IpAddress)"
Status = $d.Status
SubStatus = $d.SubStatus
}
} | Group-Object Account, Status, SubStatus, Source |
Sort-Object Count -Descending |
Format-Table Count, Name -AutoSize
只要掌握这一套从事件的 XML 表示中提取 EventData 的方法,无论是 4624 还是 4688 都能照搬同样的思路。关于 Get-WinEvent 的筛选设计(FilterHashtable 与 XPath 的使用区分、慢查询的修复方法),在「用 Get-WinEvent 实务排查事件日志」中有详细说明。
6.3. 用 wevtutil 导出
对于调查对象机器上的日志,原则是趁被覆盖消失之前先导出保全。10
rem 将 Security 日志整体保全为 evtx
wevtutil epl Security C:\logs\security-20260801.evtx
rem 只用 XPath 筛选出 4625 并导出
wevtutil epl Security C:\logs\security-4625.evtx /q:"*[System[(EventID=4625)]]"
导出的 .evtx 文件,可以在另一台机器上用 Get-WinEvent -Path C:\logs\security-20260801.evtx 以同样的方式解析。9 先保全再解析的习惯,与崩溃调查中「先确保拿到 dump」的思路是一致的(参见「Windows应用的crash dump收集入门」)。
7. 常见陷阱 ── 现场最容易踩中的 4 个
(1)4688 的命令行会带出机密信息。 启用命令行记录后,所有进程的参数都会以明文形式写入 Security 日志。微软明确指出:「拥有安全事件读取权限的所有用户,都能读取任意进程的命令行参数,而参数中可能包含密码等机密信息」。12 只要有一个业务应用或脚本以 myapp.exe /user:admin /password:P@ssw0rd 这样的方式启动,就等于把机密公开给了所有能查看日志的人。启用之前,请先排查并修正以参数方式传递机密的地方。日志的保全与转发目的地,也需要采用同等级别的访问控制。
(2)不清楚日志写满时的行为就直接运维。 覆盖模式下旧证据会悄无声息地消失,不覆盖设置下新事件会被丢弃,CrashOnAuditFail 启用时则会连系统一起停止运行(第 5 章)。1019 正确的做法是先弄清楚自己选择的是哪种行为,再准备好「趁消失之前收集」的机制(定期导出或日志采集平台)。
(3)域控制器与终端上应该查看的日志不同。 4624/4625 记录在被访问的机器上。56 另一方面,域账户的凭据验证(NTLM 的 4776)记录在对该凭据拥有权威的机器上,也就是说域账户会记录在 DC 上7,而 Kerberos 的预身份验证失败(4771)则只会记录在 DC 上。8 「文件服务器上没有 4625」并不等于「没有发生攻击」,只有把 DC 一侧的 4776/4771 也一并比对,才能看到全貌。关于身份验证协议具体是如何流转的,请参见「图解 NTLM 与 Kerberos」。
(4)时钟不同步就无法比对。 把多台机器的日志并排比对,追踪「这条 4740 之前,哪台终端出现了 4625」这类工作,前提是各台机器的时钟是一致的。在域环境中,Kerberos 本身就对时钟偏差设有上限(默认 5 分钟),一旦超过这个范围,身份验证本身就会开始失败。20 从调查的角度看,别说 5 分钟,哪怕只有几秒钟的偏差也会让人误读事件的先后顺序,因此请把确认 w32time 的同步状态放在调查步骤的最前面。另外,事件的记录时间是以 UTC 保存的,显示时会依据查看所用机器的时区进行转换,因此在读取从海外据点或设置为 UTC 的服务器上取回的 evtx 文件时,请不要忘记进行时区换算。
8. 总结
- 审核策略分为「基本」与「高级」两大体系,混用会导致结果无法预期。请统一使用高级一侧,并先用
auditpol /get /category:*确认当前状态,再进行设计。 - 「全部启用」会因噪音与日志膨胀而扼杀调查工作。请以微软的基准建议为起点,从第 3 章中以登录、账户管理、进程创建为核心的判断表开始入手。
- 4624 看登录类型,4625 看 Status/Sub Status 代码,4740 看呼叫方计算机名,4688 看父进程与命令行 ── 每个事件都有各自「应该看哪里」的关键点。
- 日志容器(最大大小、保留模式)占审核设计的一半分量。请确认实际能保留多少天,根据需求反推容量大小,并在消失之前完成导出或集中采集。
- 4688 的命令行记录,请先排查机密泄露的风险再启用。各机器记录位置的差异以及时钟同步,是比对调查的前提条件。
- 调查从事件查看器的筛选功能入手,如果需要反复执行就改用
Get-WinEvent -FilterHashtable,保全则用wevtutil epl。不要打乱「先保全,再解析」的顺序。
相关文章
- 用 Get-WinEvent 实务排查事件日志 ── 筛选速度决定调查时间
- NTLM 停用会导致业务应用停止运行吗 ── 审核日志的获取方法与消除依赖的顺序
- 图解 NTLM 与 Kerberos ── 为什么认证会「回退」到 NTLM
- SMB 签名与 LDAP 通道绑定 ── 用实务收紧 NTLM 对策的「另一半」
- Windows 事件日志・ETW 入门 ── 让业务应用程序的日志接入操作系统标准机制
- Windows应用的crash dump收集入门 - 先搞清楚 WER / ProcDump / WinDbg怎么分工
相关咨询领域
合同会社小村软件(合同会社小村ソフト)提供 Windows 环境审核策略・日志设计方面的咨询,基于事件日志排查「何时・谁・做了什么」,并分析业务应用在身份验证・审核相关环节引发的故障原因。哪怕您现在还处于「被要求查一下日志,却不知道该从哪里下手」的阶段,也欢迎咨询。
参考链接
-
Microsoft Learn,Advanced security auditing FAQ。关于基本审核策略(本地策略下的 9 项设置)与高级审核策略的区别、基本策略中启用 1 个类别等价于启用对应的全部子类别、两者不兼容且同时使用会导致审核结果无法预期因而不能混用、通过组策略应用高级一侧会清除已有审核设置、应启用「审核:强制审核策略子类别设置」、要将事件量降到最低需要先明确重要的资源・活动・用户再进行收窄等内容。 ↩ ↩2 ↩3 ↩4
-
Microsoft Learn,auditpol。关于 auditpol 命令可以对系统审核策略进行显示(/get)・设置(/set)・备份为 CSV(/backup)・还原(/restore)・清除(/clear)等操作的说明。 ↩ ↩2
-
Microsoft Learn,System Audit Policy recommendations。关于按工作站/服务器区分的 Windows 默认值・基准建议・强化建议一览表、这些建议终究只是出发点、各组织应根据自身的威胁与风险承受度进行研究和测试、登录子类别自 Windows 10 1809 起成功与失败均默认启用、不仅是服务器工作站的监视同样重要、向特权组进行意外成员添加等应单次即告警的事件示例、通过与基准值比较来检测登录失败激增的思路等内容。 ↩ ↩2 ↩3 ↩4
-
Microsoft Learn,Audit: Force audit policy subcategory settings (Windows Vista or later) to override audit policy category settings。关于可以用 40 多个审核子类别进行精细管理、将此设置保持启用是最佳实践、客户端・成员服务器・DC 的默认值均为已启用(Enabled)、诸如全部启用特权使用子类别这类会产生海量事件的设置,会使人难以从安全日志中找到其他条目,并可能对性能造成重大影响的警告等内容。 ↩ ↩2 ↩3 ↩4
-
Microsoft Learn,4624(S): An account was successfully logged on。关于 4624 在创建登录会话时记录在被访问一侧的计算机上、登录类型一览(2=Interactive、3=Network、4=Batch、5=Service、7=Unlock、8=NetworkCleartext、9=NewCredentials、10=RemoteInteractive、11=CachedInteractive)、提升的令牌(Elevated Token)标志、身份验证包(NTLM/Kerberos/Negotiate)以及 NTLM 的 Package Name(NTLM V1/V2/LM)、通过登录 ID 与 4672 等事件进行关联等内容。 ↩ ↩2 ↩3 ↩4 ↩5
-
Microsoft Learn,4625(F): An account failed to log on。关于 4625 记录在发起登录尝试的计算机上(如果是用户终端上的尝试,则记录在该终端上)、所属子类别为账户锁定与登录、Status/Sub Status 代码的含义(0xC0000064=用户名无效、0xC000006A=密码错误、0xC000006D=用户名或身份验证信息无效、0xC000006F=不在允许的时间段内、0xC0000070=不被允许的工作站、0xC0000072=账户已被禁用、0xC000015B=登录类型不被允许、0xC0000193=账户已过期、0xC0000234=账户已锁定)、以及连续出现的 0xC0000064 可能是账户枚举攻击迹象等内容。 ↩ ↩2 ↩3 ↩4 ↩5
-
Microsoft Learn,4776(S, F): The computer attempted to validate the credentials for an account。关于 4776 会在每次通过 NTLM 进行凭据验证时记录、只会记录在对该凭据拥有权威的计算机上——域账户记录在域控制器,本地账户记录在本地计算机、成功与失败均会被记录等内容。 ↩ ↩2 ↩3 ↩4
-
Microsoft Learn,4771(F): Kerberos pre-authentication failed。关于 4771 会在 KDC 签发 Kerberos TGT 失败(密码错误・已过期等)时记录、该事件仅在域控制器上生成等内容。 ↩ ↩2 ↩3 ↩4
-
Microsoft Learn,Get-WinEvent (Microsoft.PowerShell.Diagnostics)。关于用 -ListLog 获取日志配置(LogMode・MaximumSizeInBytes・RecordCount)、用 -FilterHashtable 通过 LogName・Id・StartTime 等哈希表条件进行高效筛选、用 -Path 读取已保存的 .evtx 文件、用 -Oldest / -MaxEvents 按由旧到新的顺序及指定件数获取等内容。 ↩ ↩2 ↩3 ↩4
-
Microsoft Learn,wevtutil。关于通过 set-log(sl)设置最大大小(/ms)・保留模式(/rt)、保留模式为 true 时日志写满后会保留已有事件并丢弃新事件、为 false 时新事件会覆盖最旧的事件、通过 export-log(epl)将事件日志导出为文件并可用 /q 选项以 XPath 查询进行筛选、通过 query-events(qe)执行查询等内容。 ↩ ↩2 ↩3 ↩4 ↩5
-
Microsoft Learn,4688(S): A new process has been created。关于 4688 会在每次新进程启动时记录、包含创建者账户・新进程的可执行文件路径・创建者(父)进程名称・令牌提升类型、Process Command Line 字段默认为空,只有启用「在进程创建事件中包含命令行」这一组策略之后才会被记录等内容。 ↩ ↩2 ↩3
-
Microsoft Learn,Command line process auditing。关于命令行记录需要同时具备高级审核策略中的审核进程创建,以及「在进程创建事件中包含命令行」(管理模板 > 系统 > 审核进程创建,默认为未配置)两项设置、启用后所有进程的命令行信息都会以明文形式记录到安全事件日志中、拥有读取权限的所有用户都能读取可能包含密码等机密的参数、高级审核策略被基本设置覆盖时会记录事件 4719,可以通过「强制」设置来防止等内容。 ↩ ↩2 ↩3 ↩4
-
Microsoft Learn,Audit Account Lockout。关于账户锁定子类别用于审核对锁定中账户的登录失败、生成的事件为 4625(F)、该子类别不存在成功事件、启用成功审核没有意义、建议在所有类型的计算机上都启用失败审核等内容。 ↩
-
Microsoft Learn,Audit Security Group Management。关于该子类别用于审核安全组的创建・变更・删除以及成员添加・删除、成员添加/删除的事件 ID 按组类型区分为本地组 4732/4733・全局组 4728/4729・通用组 4756/4757、存在如 4728 等域组专用事件、该子类别不存在失败事件、建议在所有类型的计算机上都启用成功审核等内容。 ↩ ↩2
-
Microsoft Learn,4698(S): A scheduled task was created。关于 4698 会在每次创建计划任务时记录、所属子类别为其他对象访问事件、会记录包含任务名称与执行命令的完整任务定义 XML、由于恶意软件常用计划任务实现重启后的持久化,因此特别建议在重要机器上监视任务创建事件等内容。 ↩ ↩2
-
Microsoft Learn,4740(S): A user account was locked out。关于 4740 会在每次用户账户被锁定时记录、所属子类别为用户账户管理、Caller Computer Name 字段中会记录引发锁定的那次登录尝试的来源计算机名称等内容。 ↩
-
Microsoft Learn,4720(S): A user account was created。关于 4720 会在每次创建新用户对象时,在域控制器・成员服务器・工作站上记录、所属子类别为用户账户管理等内容。 ↩
-
Microsoft Learn,1102(S): The audit log was cleared。关于事件 1102 会在每次清除 Windows 安全审核日志时记录的说明。 ↩
-
Microsoft Learn,Audit: Shut down system immediately if unable to log security audits。关于此设置启用时若无法记录安全审核,系统会以 STOP 消息 C0000244 {Audit Failed} 停止运行、默认值为已禁用(Disabled)、可能被转化为通过产生海量安全事件来故意强制关机的 DoS 手段、突然停止可能导致应用程序数据无法使用等内容。 ↩ ↩2
-
Microsoft Learn,Maximum tolerance for computer clock synchronization。关于 Kerberos v5 为防范重放攻击而使用时间戳,因此客户端与域控制器之间的时钟偏差设有最大容许值(默认与建议值均为 5 分钟),超过该范围时时间戳将不被视为有效等内容。 ↩
相关文章
共享相同标签的最新文章。可以围绕相近的主题进一步加深理解。
Windows LAPS实务指南 ── 告别全部PC通用的本地管理员密码
全部PC通用的本地管理员密码,是「一台被攻破、全部沦陷」的Pass-the-Hash攻击温床。本文讲解已成为OS标准功能的Windows LAPS如何自动轮换密码、如何配置保存到AD/Entra ID,以及运维中的常见陷阱。
Windows证书存储实务指南 ── 应该放入用户存储还是计算机存储
客户端证书究竟应该放入用户存储还是计算机存储?本文从 certmgr.msc 与 certlm.msc 的区别、私钥的权限授予,到 PowerShell 的到期日盘点,系统性地梳理证书相关的常见事故与对策,是一份实务指南。
Windows 防火墙与业务应用 ── 入站规则要通过安装程序注册
「开发机上正常运行,但在客户现场却无法通信」的常见原因就是 Windows 防火墙。本文讲解入站默认阻止与网络配置文件、不能把生产环境交给通知对话框处理的原因,以及通过安装程序注册入站规则的方法与排查步骤。
SMB 签名与 LDAP 通道绑定 ── 用实务收紧 NTLM 对策的「另一半」
在停用 NTLM 之前,用来抑制中继攻击损害的防御手段就是 SMB 签名与 LDAP 签名・通道绑定。本文从实务角度整理各操作系统的默认值、审核事件的解读方法、推进到强制的步骤,直至业务应用与设备的修复方法。
NTLM 停用会导致业务应用停止运行吗 ── 审核日志的获取方法与消除依赖的顺序
围绕 NTLM 停用,本文整理了排查自身 Windows 环境与业务应用在何处依赖 NTLM 的步骤。内容涵盖审核策略、NTLM/Operational 日志中事件 8001~8004 的追踪方法、回退到 NTLM 的典型模式及修复方式,直至 SMB 的 NTLM 拦截功能。
相关主题
与本文相近的主题页面。以本文为起点,可以进一步了解相关服务和其他文章。
Windows 技术主题
汇整 KomuraSoft LLC 关于 Windows 开发、故障调查与既有资产活用文章的主题中心。
故障调查 & 长期运行故障
整理间歇性故障、通信诊断、长期运行崩溃、失败路径测试基础的主题页面。
常见问题
汇总了咨询这一主题时常见的问题。
- 明明没有设置任何审核策略,Security 日志里却已经记录着 4624 和 4625,这是为什么?
- 这是因为 Windows 存在默认就已启用的审核子类别。例如「登录(Logon)」子类别,在 Windows 10 版本 1809 及以后的版本中,成功与失败均默认启用,所以哪怕什么都不设置,4624(成功)和 4625(失败)也会被记录下来。但在默认状态下,凭据验证(4776)或进程创建(4688)等排查时经常需要用到的许多事件,仍然不会被记录。自己的环境中当前启用了哪些审核,可以用 `auditpol /get /category:*` 确认。在此基础上,把不足的子类别在高级审核策略一侧明确启用,是实务中的标准套路。
- 想调查登录失败,却在目标服务器的 Security 日志里找不到 4625,该看哪里?
- 首先请确认一条原则:4625 记录在「登录被尝试的那台计算机」上。如果是用户终端上的登录失败,就看终端一侧;如果是访问文件服务器失败,就看文件服务器一侧。接下来用 `auditpol /get /category:*` 确认「登录」子类别的失败审核是否已启用。如果是域账户,往往会在域控制器一侧的凭据验证(4776)或 Kerberos 预身份验证失败(4771)中留下记录,当无法锁定具体终端时,从 DC 一侧入手反而更快。如果还是找不到,请确认日志是否因为覆盖而丢失了过去的部分(查看日志的最大大小与最旧事件的时间)。
- 进程创建(4688)的命令行记录应该启用吗?
- 这项设置调查价值极高,但必须先理解风险再决定是否启用。启用后,所有进程的命令行参数都会以明文形式记录到 Security 日志中。哪怕只有一个业务应用或脚本会把密码或 API 密钥通过命令行参数传递,这份机密就会暴露给所有能读取 Security 日志的人。微软自身也明确提到了这一注意事项。建议的顺序是:先排查自家的脚本是否存在以命令行参数传递机密的情况,修正之后再启用该设置。
- Security 日志的最大大小应该设成多少?
- 正确的做法是从「希望在本地保留多少天的日志」反推,并不存在一个万能的数值。当前的设置与实际情况可以用 `Get-WinEvent -ListLog Security` 确认,最旧事件的时间与当前时间之差,就是「目前实际能保留的天数」。增加审核子类别会让事件量随之增加,因此每次变更设置后都必须重新确认这个实际保留天数。事件响应工作中经常需要用到几周甚至几个月前的日志,因此建议在日志被覆盖消失之前定期导出,或者通过日志采集机制汇总到其他机器上,以求安心。
- 账户锁定(4740)的原因该怎么查?
- 4740 事件的「呼叫方计算机名(Caller Computer Name)」字段是最初的线索,这里记录着触发锁定的那次登录失败来自哪台计算机。不过要注意,失败记录本身(4625)并不会留在发生源,而是留在接受登录尝试的一侧。如果是网络登录导致的,就按时间顺序追踪访问目标服务器的 4625,如果是域账户,则追踪域控制器上的 4776/4771。锁定定位到发生源终端后,要重点排查该终端上密码更改后仍在被使用的旧凭据,也就是已保存的凭据、断开却未结束的远程桌面会话,以及仍以旧密码配置的服务或计划任务。如果锁定反复发生,也请一并确认是否存在时钟不同步的问题。