EventLog 侦听器突然解析整个安全日志
EventLog Listener Suddenly Parses ENTIRE Security Log
我有一个简陋的 VB.Net 表单应用程序,带有 Windows 安全日志的侦听器。它的配置使得无论何时网络登录成功或失败(事件 ID 4624/5,登录类型 3),它都会记录用于登录的关联源 IP 和用户名,打印这些(使用程序的 own 时间戳)到我的输出日志表单。
它工作得很好 - 直到我无法清楚地确定,程序突然读取我的 entire Windows 安全日志并将曾经发生的每个 "matching" 事件转储到表单中——这会立即使程序崩溃(实际上是冻结了它,但我先杀了它……发生这种情况需要很长时间才能完成) .
现在,在检查一次此类事件的输出时,时间戳与实际事件日志不匹配。它们从程序 "panics" 开始,从头到尾读取整个日志。所以两天前发生的事件在程序中有今天的时间戳,因为那是程序 "read" 数据的时间。
但是,当 EntryWritten
事件只应在实际添加每个事件时引发时,这到底是怎么发生的呢?就像日志中的每一个条目都突然变成了 "New Entry" 一样。这似乎只发生在我的 Windows 10 PC 上,而不是在我的 Windows Server 2019 机器上。
可能的触发(或至少同步)事件包括:
- 从另一台机器登录到本机的共享文件夹
- 从本机登录到另一台机器上的 RDP
- 在 Microsoft Edge 中打开网站
我完全迷失在这里;我什至不知道这是 Stack Overflow 问题还是超级用户问题……但由于交叉发布不受欢迎,我将从这里开始。同样值得注意的是,发生这种情况时甚至没有添加新事件。它停在洪水开始时原木所在的位置;实际上,洪水开始后发生的新事件似乎并未包含在洪水中。 (我对此可能是错误的,但我没有可靠的检查方法 - 不幸的是,上述方法不可重复。)
更新: 我可以 100% 可靠地诱导 "Event Recall Flood" 通过从有问题的机器到另一台机器的 RDP 登录重复失败。不确定为什么这会导致安全日志中的每个事件都触发 EntryWritten
事件...
Windows10(版本 1909 内部版本 18363.778)中的安全事件日志(可能还有其他日志)将 "reprocess" 整个日志在达到容量并被修剪时,导致所有剩余日志中的事件将自己显示为 "new events" 给任何附加的 EventLog
侦听器,导致大量 EventWritten
触发器,如果日志相当大,这些触发器将挂起应用程序。 (截至撰写本文时,最小大小为 20Mb,大约 31,000 个事件……是的。)
可以通过清空日志暂时减少此效果:(1);或 (2) 更永久,通过将日志配置为“Archive the log when full, do not overwrite events
”。
非常感谢安德鲁·莫顿 (Andrew Morton) 提供了有关查找位置的准确提示!正如他在评论中提到的,此 "seems like a bug." 现在已连同文档一起报告给 Microsoft 反馈中心。
我有一个简陋的 VB.Net 表单应用程序,带有 Windows 安全日志的侦听器。它的配置使得无论何时网络登录成功或失败(事件 ID 4624/5,登录类型 3),它都会记录用于登录的关联源 IP 和用户名,打印这些(使用程序的 own 时间戳)到我的输出日志表单。
它工作得很好 - 直到我无法清楚地确定,程序突然读取我的 entire Windows 安全日志并将曾经发生的每个 "matching" 事件转储到表单中——这会立即使程序崩溃(实际上是冻结了它,但我先杀了它……发生这种情况需要很长时间才能完成) .
现在,在检查一次此类事件的输出时,时间戳与实际事件日志不匹配。它们从程序 "panics" 开始,从头到尾读取整个日志。所以两天前发生的事件在程序中有今天的时间戳,因为那是程序 "read" 数据的时间。
但是,当 EntryWritten
事件只应在实际添加每个事件时引发时,这到底是怎么发生的呢?就像日志中的每一个条目都突然变成了 "New Entry" 一样。这似乎只发生在我的 Windows 10 PC 上,而不是在我的 Windows Server 2019 机器上。
可能的触发(或至少同步)事件包括:
- 从另一台机器登录到本机的共享文件夹
- 从本机登录到另一台机器上的 RDP
- 在 Microsoft Edge 中打开网站
我完全迷失在这里;我什至不知道这是 Stack Overflow 问题还是超级用户问题……但由于交叉发布不受欢迎,我将从这里开始。同样值得注意的是,发生这种情况时甚至没有添加新事件。它停在洪水开始时原木所在的位置;实际上,洪水开始后发生的新事件似乎并未包含在洪水中。 (我对此可能是错误的,但我没有可靠的检查方法 - 不幸的是,上述方法不可重复。)
更新: 我可以 100% 可靠地诱导 "Event Recall Flood" 通过从有问题的机器到另一台机器的 RDP 登录重复失败。不确定为什么这会导致安全日志中的每个事件都触发 EntryWritten
事件...
Windows10(版本 1909 内部版本 18363.778)中的安全事件日志(可能还有其他日志)将 "reprocess" 整个日志在达到容量并被修剪时,导致所有剩余日志中的事件将自己显示为 "new events" 给任何附加的 EventLog
侦听器,导致大量 EventWritten
触发器,如果日志相当大,这些触发器将挂起应用程序。 (截至撰写本文时,最小大小为 20Mb,大约 31,000 个事件……是的。)
可以通过清空日志暂时减少此效果:(1);或 (2) 更永久,通过将日志配置为“Archive the log when full, do not overwrite events
”。
非常感谢安德鲁·莫顿 (Andrew Morton) 提供了有关查找位置的准确提示!正如他在评论中提到的,此 "seems like a bug." 现在已连同文档一起报告给 Microsoft 反馈中心。