这是又一份关于正确配置和监控 Windows 事件日志的指南,重点强调对 sigma 规则的日志记录。
本文仍在不断完善中,请定期回来查看更新。
Zach Mathis(@yamatosecurity)。随着我进行更多研究和测试,我计划定期更新本指南,因为还有很大的改进空间(无论是在文档方面,还是在创建更多检测规则方面)。欢迎提交 PR,我也会很乐意将你添加为贡献者。如果你发现本指南中的任何错误,请告诉我,我会尽快修复。
如果你觉得这些内容有用,请在 GitHub 上点个星,因为这可能会激励我继续更新。
大部分信息来自微软的 高级安全审核常见问题、sigma 规则、ACSC 事件日志记录指南 以及我自己的研究/测试。我尤其要感谢 sigma 社区 将威胁检测开源并免费提供给所有防御者使用。
默认情况下,Windows 不会记录许多检测恶意活动和执行取证调查所必需的事件。
此外,经典事件日志(Security、System、Application)的默认最大文件大小仅为 20 MB,PowrShell 为 15 MB,而几乎所有其他日志都只有 1 MB,因此证据很有可能随时间被覆盖。
本仓库提供了一个简单的 批处理脚本,让系统管理员可以轻松配置其 Windows 机器,以便在事件发生时拥有所需的日志。对于大型网络,你可能希望以本文档为参考,并通过组策略和/或 InTune 配置终端。
我强烈建议改进默认的 Windows 事件日志记录设置,并且会尽力提供最准确的信息。然而,对于启用过多日志记录所产生的任何不利影响,或本仓库中任何内容的准确性,我概不负责。 你有责任在将更改部署到生产环境之前,在测试机器上理解并测试你对系统所做的任何更改。 我建议在模拟你环境的测试机器上尽可能多地启用日志记录,并持续至少一周,然后确认是否有事件产生过多噪音,或者是否有你想要但没有生成的事件。
你可以使用 Hayabusa 的事件 ID 指标命令查看 evtx 文件中事件 ID 的总数和百分比。
示例:hayabusa.exe eid-metrics -f path/to/Security.evtx
Process Creation(进程创建),它记录系统中运行了哪些进程。
目前,Sigma 的检测规则中约有一半依赖此事件。
这可以通过安装 Sysmon(事件 ID 1)或启用内置安全日志事件 ID 4688 来实现。
Sysmon 1 将提供可执行文件的哈希和元数据等详细信息,因此是理想之选;但如果无法安装 Sysmon,也可以使用内置的 Security 4688 日志。不过,命令行日志记录也必须启用,因为许多检测规则依赖于此。遗憾的是,Security 4688 提供的信息不如 Sysmon 进程创建日志详细,因此并非所有 Process Creation 规则都能与 Security 4688 配合使用。
使用默认的 Windows 审核设置时,只能使用约 10~20% 的 sigma 规则!


这不适合大规模操作,但启用/禁用日志以及检查和/或配置日志最大文件大小的最简单方法,是在事件查看器中右键单击日志并打开 Properties。
你可以使用内置的 wevtutil 命令。
示例:wevtutil sl Security /ms:1073741824 用于将安全日志的最大文件大小增加到 1 GB。
示例:```powershell $sysmon = Get-WinEvent -ListLog Microsoft-Windows-Sysmon/Operational $sysmon.MaximumSizeInBytes = 2048000000 #2GB $sysmon.SaveChanges()
## 选项 4:组策略
增加经典事件日志(如 `Security`、`System` 和 `Application`)的最大文件大小很简单,但遗憾的是,你需要安装管理模板和/或直接修改注册表,才能更改其他日志的最大文件大小。也许在启动时通过批处理或 PowerShell 脚本增大文件大小会更简单。
# 配置脚本
以下提供了一个脚本,用于增大最大文件大小并启用正确的日志:[YamatoSecurityConfigureWinEventLogs.bat](https://github.com/yamato-security/enablewindowslogsettings/blob/HEAD/YamatoSecurityConfigureWinEventLogs.bat)
# 配置日志设置
## Sysmon 日志(1382 条 sigma 规则)
文件:`Microsoft-Windows-Sysmon%4Operational.evtx`
默认设置:`Not installed`
安装并配置 sysmon 是提高 Windows 终端可见性的最佳选择,但它需要规划、测试和维护。
这本身就是一个大话题,因此目前不在本文档的讨论范围内。
请查看以下资源:
* [TrustedSec Sysmon Community Guide](https://github.com/trustedsec/SysmonCommunityGuide)
* [Sysmon Modular](https://github.com/olafhartong/sysmon-modular)
* [Florian Roth 对 Swift On Security 的 sysmon 配置文件的更新分支](https://github.com/Neo23x0/sysmon-config)
* [Ion-storm 对 Swift On Security 的 sysmon 配置文件的更新分支](https://github.com/ion-storm/sysmon-config)
* [Cyb3rWard0g 的 sysmon 配置文件](https://github.com/OTRF/Blacksmith/blob/master/resources/configs/sysmon/sysmon.xml)
## Security 日志(1045 条 sigma 规则(903 条进程创建规则 + 142 条其他规则))
文件:`Security.evtx`
默认设置:`Partially enabled`
Security 日志是配置最复杂的,因此我为其创建了一份单独的文档:[ConfiguringSecurityLogAuditPolicies.md](https://github.com/yamato-security/enablewindowslogsettings/blob/HEAD/ConfiguringSecurityLogAuditPolicies.md)
## PowerShell 日志(175 条 sigma 规则)
文件:`Microsoft-Windows-PowerShell%4Operational.evtx`
### 模块日志记录(30 条 sigma 规则)
启用模块日志记录将启用事件 ID `4103`。
模块日志记录的优点在于它可以运行在较旧的操作系统和 PowerShell 版本上:PowerShell 3.0(Win 7 及以上)。
另一个好处是,它既会记录执行的 PowerShell 命令,也会记录结果。
缺点是它会生成极其大量的日志事件。
例如,如果攻击者运行 Mimikatz,将产生 7 MB 的日志,包含超过 2000 个事件!
#### 启用模块日志记录
默认设置:`No Auditing`
##### 选项 1:通过组策略启用
在组策略编辑器(`gpedit.msc`)中,打开 `Computer Configuration > Administrative Templates > Windows Components > Windows PowerShell`,然后启用 `Turn on Module Logging`。
在 `Options` 窗格中,单击 `Show...` 按钮,配置要记录哪些模块。
在 `Value` 文本框中输入 `*`,以记录所有模块。
##### 选项 2:通过注册表启用```
HKLM\SOFTWARE\Wow6432Node\Policies\Microsoft\Windows\PowerShell\ModuleLogging → EnableModuleLogging = 1
HKLM\SOFTWARE\Wow6432Node\Policies\Microsoft\Windows\PowerShell\ModuleLogging\ModuleNames → * = *
默认设置:在 Win 10/2016+ 上,如果 PowerShell 脚本被 AMSI 标记为可疑,则会以“警告”级别记录。
开启脚本块日志记录将启用事件 ID 4104。如果启用 Log script block invocation start / stop events,还会启用 EID 4105 和 4106,但不建议这样做,因为它只会产生噪音。
脚本块日志记录在 PowerShell 5.0+(Win 10+)中默认受支持,但如果你安装 .NET 4.5 和 WMF 4.0+,也可以在较旧的系统(Win 7+)上启用它。
遗憾的是,单个 Windows 事件日志的最大大小为 32 KB,因此任何大于此大小的 PowerShell 脚本都会以 32 KB 大小的块进行分段。
如果你有原始的 PowerShell Operational.evtx 文件,可以使用 block-parser 工具将这些日志去分段,合并为一个易于阅读的文本文件。
脚本块日志记录的一个优点是,即使恶意脚本使用 XOR、Base 64、ROT13 等进行混淆,解码后的脚本也会被记录,从而大大简化分析。
与模块日志记录相比,这些日志更易于处理:例如,如果攻击者运行 Mimikatz,只会生成 5 MB 和 100 个事件,而模块日志记录会生成 7 MB 和超过 2000 个事件。
但是,脚本块日志记录不会记录命令的输出。
在组策略编辑器中,打开 Computer Configuration > Administrative Templates > Windows Components > Windows PowerShell,然后启用 Turn on PowerShell Script Block Logging。
HKLM\SOFTWARE\Wow6432Node\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging → EnableScriptBlockLogging = 1
默认设置:No Auditing
通过转录日志,还可以将 PowerShell 日志保存到本地计算机上的文本文件中。
虽然攻击者通常可以轻松删除转录日志以进行反取证,但在某些场景下,攻击者可能清除了所有事件日志,却没有搜索并删除转录日志。
因此,如果可能,也建议启用转录日志。
默认情况下,它们会保存到用户的“文档”文件夹中。
理想情况下,转录日志应保存到只写网络文件共享中,但这在实践中可能难以实现。
转录日志的一个优点是,它们包含每个命令的时间戳和元数据,并且存储效率极高,Mimikatz 执行时不到 6 KB。
缺点是转录日志仅记录 PowerShell 终端中显示的内容。
在组策略编辑器中,打开 Computer Configuration > Administrative Templates > Windows Components > Windows PowerShell,然后启用 Turn on PowerShell Transcription。
然后,指定输出目录。
HKLM\SOFTWARE\Wow6432Node\Policies\Microsoft\Windows\PowerShell\Transcription → EnableTranscripting = 1 HKLM\SOFTWARE\Wow6432Node\Policies\Microsoft\Windows\PowerShell\Transcription → EnableInvocationHeader = 1 HKLM\SOFTWARE\Wow6432Node\Policies\Microsoft\Windows\PowerShell\Transcription → OutputDirectory = “” (Enter path. Empty = default)
### 参考文献
* [Mandiant 博客:通过 PowerShell 日志提高可见性](https://www.mandiant.com/resources/blog/greater-visibilityt)
## 系统日志(55 条 Sigma 规则)
文件:`System.evtx`
默认设置:`Enabled. 20 MB`
推荐设置:`Enabled. 128 MB+`
恶意软件通常会安装服务以实现持久化、本地权限提升等,这些操作都可以在此日志中找到。
也可以在此检测到各种被利用的漏洞。
> **注意:对于系统日志,需要特别留意的一点是,字段中的参数有时会被翻译成本地语言,因此仅使用英文的签名可能无法在非英文系统上检测到。例如,在英文系统中,EID 7045 的参数会记录 `Enabled`,而在日文系统中可能会记录 `有効`。**
> **注意:与 `Application` 日志一样,多个提供程序会写入相同的事件 ID,因此除了通道之外,您可能还需要按提供程序名称进行筛选。例如,事件 ID `1` 会被多个提供程序用于不同的事件。**
重要事件 ID:
| 事件 ID | 描述 | Sigma 规则 | Hayabusa 规则 | 级别 | 备注 |
| :---: | :---: | :---: | :---: | :---: | :---: |
| 1 | 系统睡眠/休眠 | 0 | 暂无 | 信息 | 提供程序:`Power-Troubleshooter` |
| 1 | 系统时间已更改 | 0 | 暂无 | 信息 | 提供程序:`Kernel-General` |
| 12 | 操作系统启动 | 0 | 暂无 | 信息 | |
| 13 | 操作系统关闭 | 0 | 暂无 | 信息 | |
| 16 | 注册表配置单元访问历史已清除 | 2 | 暂无 | 高~严重 | 密码转储程序在从 SAM 注册表项转储密码哈希后,可能会清除访问历史。不过这种情况也可能正常发生,因此需要过滤掉误报。 |
| 55 | NTFS 文件系统损坏 | 1 | 无 | 高 | 可以检测针对 NTFS 漏洞的攻击。 |
| 104 | 系统事件日志已清除 | 1 | 有 | 中 | |
| 6005 | 事件日志服务已启动 | 0 | 有 | 信息 | |
| 6006 | 事件日志服务已停止 | 0 | 有 | 信息 | |
| 6008 | 意外关机 | 0 | 有 | 信息 | |
| 6038 | 使用了 NTLMv1 | 1 | 无 | 低 | |
| 7031 | 服务崩溃 | 0 | 有 | 低 | |
| 7034 | 服务崩溃 | 0 | 有 | 低 | |
| 7036 | 服务已启动/停止 | 2 | 有 | 信息~高 | 可用于检测有人停止 Defender 等操作。 |
| 7040 | 服务启动类型已更改 | 0 | 有 | 信息 | 可能表明攻击者禁用了某个服务。 |
| 7045 | 服务安装 | 37 | 有 | 信息~严重 | 这是最重要的系统事件 ID,因为恶意软件经常将自己安装为服务或滥用服务。 |
| 20001 | 新 PNP 设备 | 0 | 有 | 信息~? | 级别取决于是否允许使用 USB 设备。仅记录设备第一次插入的时间。非 USB PNP 设备事件非常嘈杂,可能应该被过滤掉。 |
## 应用程序日志(16 条 Sigma 规则)
此日志大多是噪声,但您可能会在这里找到一些重要的证据。
某些第三方防病毒软件会记录到此日志。
使用 Application 日志时需要注意的一点是,不同厂商会对不同事件使用相同的事件 ID,因此您不仅应按事件 ID 筛选,还应按提供程序名称筛选。
文件:`Application.evtx`
默认设置:`Enabled. 20 MB`
推荐设置:`Enabled. 128 MB+`
重要事件 ID:
| 事件 ID | 提供程序 | 描述 | Sigma 规则 | Hayabusa 规则 | 级别 | 备注 |
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
| 1 | `Audit-CVE`, `Microsoft-Windows-Audit-CVE` | 已知漏洞(CVE)利用尝试 | 1 | 无 | 严重 | 检测用户模式应用程序在尝试利用已知漏洞时调用 CveEventWrite API 所生成的事件。微软于 2020 年 1 月针对 CVE-2020-0601(一个 Windows CryptoAPI 漏洞)开始使用此日志。遗憾的是,这几乎是写入此日志的唯一 CVE 实例。 |
| 325 | `ESENT` | ESE 数据库已创建 | 2 | 无 | 信息~严重 | 检测进程何时创建 ESE 数据库。此数据库用于多种用途,例如 Exchange、AD、证书服务、SRUM 等。对安全而言最重要的 ESE 数据库是 NTDS.dit,即位于域控制器上包含所有域用户密码哈希的文件。有两条 Sigma 规则用于检测 NTDS.dit 的转储,但如果管理员使用 ntdsutil 进行备份或创建卷影副本,则可能产生误报。 |
| 326 | `ESENT` | ESE 数据库已附加 | 1 | 无 | 信息~严重 | 可能能够检测对 NTDS.dit 的访问。 |
| 1000, 1001 | `Application Error`, `Windows Error Reporting` | 应用程序错误 | 1 | 无 | 信息~高 | |
| 1034, 11724 | `MsiInstaller` | 应用程序已卸载 | 1 | 无 | 信息~低 | |
| 1040 | `MsiInstaller` | 应用程序安装 | 1 | 无 | 信息~中 | |
| 33205 | `MSSQLSERVER` | SQL 审核事件 | 6 | 无 | 信息~高 | 可以检测 MSSQL 后门、SQL/命令注入等。 |
## Windows Defender 操作日志(10 条 Sigma 规则)
文件:`Microsoft-Windows-Windows Defender%4Operational.evtx`
默认设置:`Enabled. 1 MB`
推荐设置:`Enabled. 128 MB+`
您可以检测到的不只是 Windows Defender 警报(这些警报需要重点监控),还包括添加排除项、禁用篡改保护、删除历史记录等操作。
## Bits-Client 操作日志(6 条 Sigma 规则)
文件:`Microsoft-Windows-Bits-Client%4Operational.evtx`
默认设置:`Enabled. 1 MB`
推荐设置:`Enabled. 128 MB+`
Bitsadmin.exe 是一个流行的 [lolbin](https://lolbas-project.github.io/lolbas/Binaries/Bitsadmin/),攻击者会滥用它来下载和执行恶意软件。
您可能会在此日志中找到相关证据,不过需要注意会有大量误报。
## 防火墙日志(6 条 Sigma 规则)
文件:`Microsoft-Windows-Windows Firewall With Advanced Security%4Firewall.evtx`
默认设置:`Enabled? 1 MB`
推荐设置:`Enabled. 256 MB+`
您可以在这里找到防火墙规则被添加/修改/删除的证据。
恶意软件通常会添加防火墙规则以确保能够与其 C2 服务器通信,添加用于横向移动的代理规则等。
## NTLM 操作日志(3 条 Sigma 规则)
文件:`Microsoft-Windows-NTLM%4Operational.evtx`
默认设置:`Enabled but Auditing is disabled. 1 MB`
如果您想要禁用 NTLM 身份验证,建议启用此日志。
禁用 NTLM 很可能会破坏某些通信,因此您可以在 DC 和其他服务器上监控此日志,以查看谁仍在使用 NTLM,并在全局禁用之前,从这些用户开始逐步禁用 NTLM。
可以在登录事件(如 4624)中检测到 NTLM 用于传入连接的情况,但如果您想监控谁在进行传出 NTLM 连接,则需要启用此日志。
要启用审核,请在组策略中打开 `Computer Configuration > Policies > Windows Settings > Security Settings > Local Policies > Security Options`,并配置相应的各种 `Network security: Restrict NTLM:` 设置。
参考:[告别 NTLM](https://www.scip.ch/en/?labs.20210909)
## Security-Mitigations KernelMode 和 UserMode 日志(2 条 Sigma 规则)
文件:`Microsoft-Windows-Security-Mitigations%4KernelMode.evtx`, `Microsoft-Windows-Security-Mitigations%4UserMode.evtx`
默认设置:`Enabled. 1 MB`
推荐设置:`Enabled. 128 MB+`
目前这些日志只有 2 条 Sigma 规则,但您可能应该收集和监控所有的 Exploit Protection、Network Protection、Controlled Folder Access 和 Attack Surface Reduction 日志(大约 40+ 个事件 ID)。
遗憾的是,Attack Surface Reduction 日志(以前是 WDEG(Windows Defender Exploit Guard)和 EMET)分布在多个日志中,需要使用复杂的 XML 查询才能搜索它们。
详细信息:[了解并使用攻击面缩减功能](https://learn.microsoft.com/en-us/microsoft-365/security/defender-endpoint/overview-attack-surface-reduction?view=o365-worldwide)
## PrintService 日志(2 条 Sigma 规则)
建议同时启用 Operational 日志,以检测 Print Spooler 攻击者。(例如:PrintNightmare 等。)
### Admin(1 条 Sigma 规则)
文件:`Microsoft-Windows-PrintService%4Admin.evtx`
默认设置:`Enabled. 1 MB`
推荐设置:`Enabled. 128 MB+`
### Operational(1 条 Sigma 规则)
文件:`Microsoft-Windows-PrintService%4Operational.evtx`
默认设置:`Disabled. 1 MB`
推荐设置:`Enabled. 128 MB+`
## SMBClient 安全日志(2 条 Sigma 规则)
文件:`Microsoft-Windows-SmbClient%4Security.evtx`
默认设置:`Enabled. 8 MB`
推荐设置:`Enabled. 128 MB+`
用于尝试检测 PrintNightmare(来自 IP 的可疑 SMB 来宾登录被拒绝)以及用户挂载隐藏共享的行为。
## AppLocker 日志(1 条 Sigma 规则)
文件:`Microsoft-Windows-AppLocker%4MSI and Script.evtx`, `Microsoft-Windows-AppLocker%4EXE and DLL.evtx`, `Microsoft-Windows-AppLocker%4Packaged app-Deployment.evtx`, `Microsoft-Windows-AppLocker%4Packaged app-Execution.evtx`
默认设置:`Enabled if AppLocker is enabled? 1 MB`
推荐设置:`Enabled. 256 MB+`
如果您正在使用 AppLocker,确保其已启用并受到监控非常重要。
## CodeIntegrity 操作日志(1 条 Sigma 规则)
文件:`Microsoft-Windows-CodeIntegrity%4Operational.evtx`
默认设置:`Enabled. 1 MB`
推荐设置:`Enabled. 128 MB+`
检查此日志以检测被 Windows 代码完整性检查阻止的驱动程序加载事件,这可能表明存在一个加载失败的恶意驱动程序。
## Diagnosis-Scripted 操作日志(1 条 Sigma 规则)
文件:`Microsoft-Windows-Diagnosis-Scripted%4Operational.evtx`
默认设置:`Enabled. 1 MB`
推荐设置:`Enabled. 128 MB+`
可以在这里找到 diagcab 软件包被用于攻击利用的证据。
## DriverFrameworks-UserMode 操作日志(1 条 Sigma 规则)
文件:`Microsoft-Windows-DriverFrameworks-UserMode%4Operational.evtx`
默认设置:`No Auditing. 1 MB`
推荐设置:`Enabled. 128 MB+`
检测已插入的 USB 设备。
## WMI-Activity 操作日志(1 条 Sigma 规则)
文件:`Microsoft-Windows-WMI-Activity%4Operational.evtx`
默认设置:`Enabled on Win10/2016+. 1 MB`
推荐设置:`Enabled. 128 MB+`
这一点值得重点监控,因为攻击者经常利用 WMI 进行持久化和横向移动。
## TerminalServices-LocalSessionManager 操作日志(1 条 Sigma 规则)
文件:`Microsoft-Windows-TerminalServices-LocalSessionManager%4Operational.evtx`
默认设置:`Enabled. 1 MB`
推荐设置:`Enabled. 128 MB+`
检测反向代理工具 ngrok 将流量转发到本地 RDP 端口以绕过防火墙的情况。
链接:[通过 RDP 隧道绕过网络限制](https://www.mandiant.com/resources/blog/bypassing-network-restrictions-through-rdp-tunneling)
## TaskScheduler 操作日志(1 条 Sigma 规则)
文件:`Microsoft-Windows-TaskScheduler%4Operational.evtx`
默认设置:`Disabled. 1 MB`
推荐设置:`Enabled. 128 MB+`
攻击者经常滥用任务来实现持久化和横向移动,因此应启用此日志。