培训
认证
Microsoft Certified: Security Operations Analyst Associate - Certifications
使用 Microsoft Sentinel、Microsoft Defender for Cloud 和 Microsoft 365 Defender 调查、搜索和缓解威胁。
通过 Mark Russinovich 和 Thomas Garnier
发布时间:2024 年 7 月 23 日
下载 Sysmon (4.6 MB)
系统监视器 (Sysmon) 是一项 Windows 系统服务,也是一个设备驱动程序,一旦安装在系统上,就会在系统重新启动后一直驻留,以监视系统活动并将其记录到 Windows 事件日志中。 它提供有关进程创建、网络连接和文件创建时间更改的详细信息。 通过使用 Windows 事件收集或 SIEM 代理收集生成的事件,然后对事件进行分析,你可识别恶意或异常活动,并了解入侵者和恶意软件如何在网络上运行。 该服务作为受保护的进程运行,从而禁止广泛的用户模式交互。
请注意,“Sysmon”不会提供对其生成的事件的分析,也不会尝试隐藏自己以免受攻击者的攻击。
Sysmon 包括以下功能:
使用简单命令行选项来安装和卸载 Sysmon,以及检查和修改其配置的常见用法:
安装:sysmon64 -i [<configfile>]
更新配置:sysmon64 -c [<configfile>]
安装事件清单:sysmon64 -m
打印架构:sysmon64 -s
卸载:sysmon64 -u [force]
参数 | 说明 |
---|---|
-i | 安装服务和驱动程序。 (可选)采用配置文件。 |
-c | 如果未提供其他参数,则更新已安装的 Sysmon 驱动程序的配置或转储当前配置。 (可选)采用配置文件。 |
-m | 安装事件清单(以及在服务安装时隐式完成)。 |
-s | 打印配置架构定义。 |
-u | 卸载服务和驱动程序。 使用“-u force ”会导致卸载继续进行,即使未安装一些组件。 |
服务会立即记录事件,驱动程序会安装为引导启动驱动程序,从引导早期开始就捕获活动,服务会将启动时间写入活动日志。
在 Vista 以及更新的系统上,事件存储在 Applications and Services Logs/Microsoft/Windows/Sysmon/Operational
中。
在较旧的系统中,事件写入到“System
”事件日志。
如果需要与配置文件有关的更多信息,请使用“-? config
”命令。
指定 -accepteula
在安装时自动接受 EULA,否则系统会以交互方式提示你接受。
安装或卸载都不需要重启。
使用默认设置进行安装(进程映像已经过 SHA1 哈希处理,且没有网络监视)
sysmon -accepteula -i
使用配置文件安装 Sysmon(如下所述)
sysmon -accepteula -i c:\windows\config.xml
卸载
sysmon -u
转储当前配置
sysmon -c
使用配置文件重新配置活动的 Sysmon(如下所述)
sysmon -c c:\windows\config.xml
将配置更改为默认设置
sysmon -c --
显示配置架构
sysmon -s
在 Vista 以及更新的系统上,事件存储在 Applications and Services Logs/Microsoft/Windows/Sysmon/Operational
中;在较旧的系统上,事件写入“System
”事件日志。
事件时间戳采用 UTC 标准时间。
下面是 Sysmon 生成的每种事件类型的示例。
进程创建事件提供有关新创建的进程的扩展信息。 完整命令行提供进程执行的相关上下文。 “ProcessGUID
”字段是此进程在整个域中的唯一值,能够简化事件关联。 哈希是文件的完整哈希,其中包含“HashType
”字段中的算法。
当进程明确修改了文件创建时间时,将注册更改文件创建时间事件。 此事件可帮助跟踪文件的实际创建时间。 攻击者可能会更改后门的文件创建时间,使其看起来像是随操作系统一起安装的。 请注意,许多进程会合法地更改文件的创建时间,这种行为不一定表示恶意活动。
网络连接事件记录计算机上的 TCP/UDP 连接。 此项默认禁用。 每个连接都通过 ProcessId
和 ProcessGuid
字段链接到一个进程。 该事件还包含源和目标主机名 IP 地址、端口号和 IPv6 状态。
服务状态更改事件报告 Sysmon 服务的状态(已启动或已停止)。
进程终止事件报告进程的终止时间。 它提供进程的 UtcTime
、ProcessGuid
和 ProcessId
。
驱动程序已加载事件提供系统上正在加载的驱动程序的相关信息。 会提供已配置的哈希以及签名信息。 出于性能,签名以异步方式创建,指示加载后文件是否被删除。
映像已加载事件记录特定进程中加载某个模块的时间。 此事件默认处于禁用状态,需要使用“–l
”选项进行配置。 它指示模块在哪个进程中加载、哈希,以及签名信息。 出于性能,签名以异步方式创建,指示加载后文件是否被删除。 应小心配置此事件,因为监视所有映像加载事件会产生大量日志记录。
“CreateRemoteThread
”事件检测一个进程在另一个进程中创建线程的时间。 恶意软件使用这种方法注入代码并隐藏在另一个进程中。 此事件指示源进程和目标进程。 它提供将会在新线程中运行的代码的相关信息:StartAddress
、StartModule
和 StartFunction
。 请注意,StartModule
和 StartFunction
字段是推断出来的。如果起始地址在加载的模块或已知导出的函数之外,则这两个字段可能为空。
“RawAccessRead
”事件检测进程使用“\\.\
”本意从驱动器进行读取操作的时间。 恶意软件通常使用这种方法让已锁定不许读取的文件发生数据泄露,以及避开文件访问审计工具。 此事件指示源进程和目标设备。
已访问进程事件报告一个进程打开另一个进程的时间,一项操作通常后跟信息查询,或读取写入目标进程的地址空间。 这样就可以检测在哈希传递攻击中为了窃取要使用的凭据,读取本地安全机构 (Lsass.exe) 等进程的内存内容的黑客工具。 如果有诊断实用工具反复打开进程来查询其状态,则启用此事件会产生大量日志记录。因此,一般而言应该仅使用移除预计的访问的筛选器来完成此操作。
当创建或覆盖文件时,记录文件创建操作。 此事件可用于监视自动启动位置,例如启动文件夹,以及临时和下载目录,这些是初始感染期间恶意软件会前往的常见位置。
注册表项和值创建和删除操作映射到此事件类型,此事件可用于监视对注册表自动启动位置的更改,或特定恶意软件注册表修改。
Sysmon 使用以下映射的注册表根键名称的缩写版本:
项名 | 缩写 |
---|---|
HKEY_LOCAL_MACHINE |
HKLM |
HKEY_USERS |
HKU |
HKEY_LOCAL_MACHINE\System\ControlSet00x |
HKLM\System\CurrentControlSet |
HKEY_LOCAL_MACHINE\Classes |
HKCR |
此注册表事件类型识别注册表值修改。 此事件记录为类型 DWORD
和 QWORD
的注册表值写入的值。
注册表项和值重命名操作映射到此事件类型,记录重命名后的项或值的新名称。
此事件记录创建已命名文件流的时间,并且会生成事件来记录将流(未命名的流)分配到的文件中的内容的哈希,以及已命名的流的内容。 有的恶意软件变体通过浏览器下载来放置其可执行文件或配置设置,此事件旨在根据浏览器附加 Zone.Identifier
“Web 标记”流来捕获此类情况。
此事件记录 Sysmon 配置中的更改,例如,更新筛选规则的时间。
当创建已命名的管道时生成此事件。 恶意软件通常使用已命名管道进行进程间通信。
此事件记录客户端和服务器之间建立已命名管道连接的时间。
注册 WMI 事件筛选器时,恶意软件使用此方法来执行攻击,此事件记录 WMI 命名空间、筛选器名称和筛选器表达式。
此事件记录 WMI 使用者的注册,具体会记录使用者姓名、日志和目的地。
当使用者绑定到某个筛选器时,此事件记录下该使用者的姓名和筛选器路径。
无论结果是成功还是失败、是否会缓存,当进程执行 DNS 查询时都会生成此事件。 已为 Windows 8.1 添加了此事件的遥测,因此它在 Windows 7 及更早版本上不可用。
文件已删除。 除了记录此事件,被删除的文件还保存在 ArchiveDirectory
中(C:\Sysmon
是默认)。 正常运行的情况下,此目录可能会增长到不合理的大小,请参阅事件 ID 26:FileDeleteDetected
,其行为虽然类似,但是不保存被删除的文件。
系统剪贴板内容发生变化时会生成此事件。
当检测到“空心”或“herpaderp”等进程隐藏手段时会生成此事件。
文件已删除。
当 Sysmon 检测并阻止创建可执行文件(PE 格式)时生成此事件。
当 Sysmon 检测并阻止 SDelete 等工具粉碎文件时生成此事件。
当 Sysmon 检测到新建可执行文件(PE 格式)时生成此事件。
当 Sysmon 中发生错误时生成此事件。 如果系统负载过重且无法执行某些任务或 Sysmon 服务中存在 bug,或者即使不满足某些安全和完整性条件,也可能发生这些错误。 可以在 Sysinternals 论坛上或通过 Twitter (@markrussinovich) 报告任何 bug。
可以在 -i(安装)或 -c(安装)配置开关之后指定配置文件。 这些开关让部署预设置配置和筛选捕获的事件变得更容易。
简单的配置 xml 文件如下所示:
<Sysmon schemaversion="4.82">
<!-- Capture all hashes -->
<HashAlgorithms>*</HashAlgorithms>
<EventFiltering>
<!-- Log all drivers except if the signature -->
<!-- contains Microsoft or Windows -->
<DriverLoad onmatch="exclude">
<Signature condition="contains">microsoft</Signature>
<Signature condition="contains">windows</Signature>
</DriverLoad>
<!-- Do not log process termination -->
<ProcessTerminate onmatch="include" />
<!-- Log network connection if the destination port equal 443 -->
<!-- or 80, and process isn't InternetExplorer -->
<NetworkConnect onmatch="include">
<DestinationPort>443</DestinationPort>
<DestinationPort>80</DestinationPort>
</NetworkConnect>
<NetworkConnect onmatch="exclude">
<Image condition="end with">iexplore.exe</Image>
</NetworkConnect>
</EventFiltering>
</Sysmon>
配置文件中包含 Sysmon 标记上的架构版本属性。 此版本独立于 Sysmon 二进制版本,允许解析较旧的配置文件。 可以使用“-? config
”命令行来获取当前的架构版本。 配置条目直接在“Sysmon
”标记下,筛选器在“EventFiltering
”标记下。
配置条目类似于命令行开关,包括以下内容
配置条目包括以下内容:
条目 | 值 | 说明 |
---|---|---|
ArchiveDirectory | 字符串 | 卷根上的目录的名称,删除时复制文件将移动到其中。 目录受系统 ACL 保护(可使用 Sysinternals 提供的 PsExec 来访问使用“psexec -sid cmd ”的目录)。 默认:Sysmon |
CheckRevocation | 布尔 | 控制签名吊销检查。 默认:True |
CopyOnDeletePE | 布尔 | 保留已删除的可执行映像文件。 默认:False |
CopyOnDeleteSIDs | 字符串 | 将为其保留文件删除的帐户 SID 的逗号分隔列表。 |
CopyOnDeleteExtensions | 字符串 | 删除时保留的文件的扩展名。 |
CopyOnDeleteProcesses | 字符串 | 将为其保留文件删除的进程名称。 |
DnsLookup | 布尔 | 控制反向 DNS 查找。 默认:True |
DriverName | 字符串 | 使用驱动程序和服务映像的指定名称。 |
HashAlgorithms | 字符串 | 要应用于执行哈希加密的哈希算法。 支持的算法包括 MD5、SHA1、SHA256、IMPHASH 和 *(全部)。 默认:None |
命令行开关拥有其在 Sysmon 使用输出中所述的配置条目。 参数是基于标记的可选参数。 如果命令行开关还启用事件,则需要通过其筛选器标记对其进行配置。 可以指定 -s
开关,让 Sysmon 打印完整的配置架构,包括事件标记以及每个事件的字段名称和类型。 例如,以下是“RawAccessRead
”事件类型的架构:
<event name="SYSMON_RAWACCESS_READ" value="9" level="Informational "template="RawAccessRead detected" rulename="RawAccessRead" version="2">
<data name="UtcTime" inType="win:UnicodeString" outType="xs:string"/>
<data name="ProcessGuid" inType="win:GUID"/>
<data name="ProcessId" inType="win:UInt32" outType="win:PID"/>
<data name="Image" inType="win:UnicodeString" outType="xs:string"/>
<data name="Device" inType="win:UnicodeString" outType="xs:string"/>
</event>
事件筛选允许筛选生成的事件。 许多情况下,事件中的噪声太大,无法收集到所有信息。 例如,你可能只对某一个进程而非所有进程的网络连接感兴趣。 这种情况下,可以筛选主机上的输出,减少要收集的数据。
每个事件在配置文件中的 EventFiltering 节点下都有自己的筛选器标记:
ID | 标记 | 事件 |
---|---|---|
1 | ProcessCreate | 进程创建 |
2 | FileCreateTime | 文件创建时间 |
3 | NetworkConnect | 检测到网络连接 |
4 | 不适用 | Sysmon 服务状态更改(无法筛选) |
5 | ProcessTerminate | 进程已终止 |
6 | DriverLoad | 驱动程序已加载 |
7 | ImageLoad | 映像已加载 |
8 | CreateRemoteThread | 检测到 CreateRemoteThread |
9 | RawAccessRead | 检测到 RawAccessRead |
10 | ProcessAccess | 进程被访问 |
11 | FileCreate | 文件已创建 |
12 | RegistryEvent | 已添加或删除注册表对象 |
13 | RegistryEvent | 注册表值已设置 |
14 | RegistryEvent | 注册表对象已重命名 |
15 | FileCreateStreamHash | 文件流已创建 |
16 | 不适用 | Sysmon 配置更改(无法筛选) |
17 | PipeEvent | 已命名管道已创建 |
18 | PipeEvent | 已命名管道已连接 |
19 | WmiEvent | WMI 筛选器 |
20 | WmiEvent | WMI 使用者 |
21 | WmiEvent | WMI 使用者筛选器 |
22 | DNSQuery | DNS 查询 |
23 | FileDelete | 文件删除已存档 |
24 | ClipboardChange | 剪贴板中的新内容 |
25 | ProcessTampering | 进程映像更改 |
26 | FileDeleteDetected | 文件删除已记录 |
27 | FileBlockExecutable | 文件阻止可执行 |
28 | FileBlockShredding | 文件阻止粉碎 |
29 | FileExecutableDetected | 可执行文件已删除 |
还可以在任务名称上的事件查看器中找到这些标记。
如果有事件匹配,则应用“onmatch
”筛选器。 可以使用筛选器标记的“onmatch
”属性对其进行更改。 如果值为“"include"
”,则表示仅包含匹配的事件。 如果设置为“"exclude"
”,则将包含事件,但规则匹配时除外。 可以为每个事件 ID 同时指定一个包含筛选器集和一个不包含筛选器集,其中不包含匹配项优先。
每个筛选器可包含零个或多个规则。 筛选器标记下的每个标记都是事件的字段名称。 将相同字段名称行为的条件指定为 OR 条件的规则,以及将不同字段名称行为指定为 AND 条件。 字段规则还可以使用条件来匹配值。 条件如下所示(所有条件均不区分大小写):
条件 | 说明 |
---|---|
is | 所有值默认都相等 |
是任意 | 字段是 ; 分隔的其中一个值 |
不是 | 值不同 |
contains | 字段包含此值 |
包含任意 | 字段包含 ; 分隔的任意值 |
包含全部 | 字段包含 ; 分隔的全部值 |
不包含 | 字段不包含此值 |
不包含任意 | 字段不包含 ; 分隔的一个或多个值 |
不包含全部 | 字段不包含 ; 分隔的任意值 |
开头为 | 字段以此值开头 |
结尾为 | 字段以此值结尾 |
开头不为 | 字段不以此值开头 |
结尾不为 | 字段不以此值结尾 |
小于 | 按字典序比较小于零 |
大于 | 按字典序比较大于零 |
图像 | 匹配某映射路径(完整路径或仅映像名称)。 例如:lsass.exe 将与 c:\windows\system32\lsass.exe 匹配 |
可以通过将其指定为属性来使用不同的条件。 其中不包含路径中有 iexplore.exe 的进程的网络活动:
<NetworkConnect onmatch="exclude">
<Image condition="contains">iexplore.exe</Image>
</NetworkConnect>
若要让 Sysmon 报告哪个规则匹配导致记录事件,请将名称添加到规则中:
<NetworkConnect onmatch="exclude">
<Image name="network iexplore" condition="contains">iexplore.exe</Image>
</NetworkConnect>
可以对同一标记同时使用包含和不包含规则,其中不包含规则优先级高于包含规则。 在规则中,筛选条件具有 OR 行为。
在前面介绍的示例配置中,网络筛选器使用包含规则和不包含规则来捕获除名称中包含 iexplore.exe
以外的所有进程到端口 80 和 443 的活动。
还可以通过使用规则组替代规则组合方式,该规则组允许将一个或多个事件的规则组合类型显式设置为 AND 或 OR。
下面的示例演示此用法。 在第一个规则组中,当仅使用 100
的命令行属性执行 timeout.exe
时将会生成进程创建事件,但 ping.exe
和 timeout.exe
的终止会生成进程终止事件。
<EventFiltering>
<RuleGroup name="group 1" groupRelation="and">
<ProcessCreate onmatch="include">
<Image condition="contains">timeout.exe</Image>
<CommandLine condition="contains">100</CommandLine>
</ProcessCreate>
</RuleGroup>
<RuleGroup groupRelation="or">
<ProcessTerminate onmatch="include">
<Image condition="contains">timeout.exe</Image>
<Image condition="contains">ping.exe</Image>
</ProcessTerminate>
</RuleGroup>
<ImageLoad onmatch="include"/>
</EventFiltering>
下载 Sysmon (4.6 MB)
运行软件:
培训
认证
Microsoft Certified: Security Operations Analyst Associate - Certifications
使用 Microsoft Sentinel、Microsoft Defender for Cloud 和 Microsoft 365 Defender 调查、搜索和缓解威胁。