Sysmon v14.14

由 Mark Russinovich 和 Thomas Garnier

发布日期:2023 年 1 月 25 日

下载下载 Sysmon (4.6 MB)

下载 Sysmon for Linux (GitHub)

简介

系统监视器 (Sysmon) 是一种 Windows 系统服务和设备驱动程序,一旦安装在系统上,就会在系统重启后保持驻留状态,以监视系统活动并将其记录到 Windows 事件日志。 它提供有关进程创建、网络连接和文件创建时间更改的详细信息。 通过使用 Windows 事件收集SIEM 代理收集它生成的事件并随后对其进行分析,可以识别恶意或异常活动,并了解入侵者和恶意软件如何在网络上运行。

请注意, Sysmon 不提供其生成的事件的分析,也不会尝试保护或隐藏自身免受攻击者的攻击。

Sysmon 功能概述

Sysmon 包括以下功能:

  • 使用当前进程和父进程的完整命令行记录进程创建。
  • 使用 SHA1 (默认) 、MD5、SHA256 或 IMPHASH 记录进程图像文件的哈希。
  • 可以同时使用多个哈希。
  • 在进程创建事件中包含进程 GUID,以允许事件关联,即使 Windows 重用进程 ID 也是如此。
  • 在每个事件中包含会话 GUID,以允许关联同一登录会话上的事件。
  • 使用其签名和哈希记录驱动程序或 DLL 的加载。
  • 此时会打开日志,以便对磁盘和卷进行原始读取访问。
  • (可选)记录网络连接,包括每个连接的源进程、IP 地址、端口号、主机名和端口名称。
  • 检测文件创建时间的变化,以了解文件真正创建的时间。 修改文件创建时间戳是恶意软件通常用于掩盖其轨迹的技术。
  • 如果注册表中发生更改,则自动重新加载配置。
  • 规则筛选以动态包含或排除某些事件。
  • 在启动过程的早期生成事件,以捕获由复杂的内核模式恶意软件所创建的活动。

屏幕截图

EventViewer

使用情况

常见用法包括用于安装和卸载 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 生成的每种事件类型的示例。

事件 ID 1:进程创建

进程创建事件提供有关新创建进程的扩展信息。 完整的命令行提供有关进程执行的上下文。 字段 ProcessGUID 是跨域的此过程的唯一值,可简化事件关联。 哈希是字段中具有算法 HashType 的文件的完整哈希。

事件 ID 2:进程更改了文件创建时间

当进程显式修改文件创建时间时,将注册更改文件创建时间事件。 此事件有助于跟踪文件的实际创建时间。 攻击者可能会更改后门的文件创建时间,使其看起来像是随操作系统一起安装的。 请注意,许多进程会合法地更改文件的创建时间;它不一定表示恶意活动。

事件 ID 3:网络连接

网络连接事件日志在计算机上记录 TCP/UDP 连接。 此项默认禁用。 每个连接都通过 ProcessIdProcessGuid 字段链接到一个进程。 该事件还包含源和目标主机名 IP 地址、端口号和 IPv6 状态。

事件 ID 4:Sysmon 服务状态已更改

服务状态更改事件报告 Sysmon 服务 (启动或停止) 的状态。

事件 ID 5:进程已终止

进程终止事件在进程终止时报告。 它提供 UtcTime进程的 、 ProcessGuidProcessId

事件 ID 6:已加载驱动程序

驱动程序加载事件提供有关在系统上加载的驱动程序的信息。 将提供配置的哈希以及签名信息。 签名是出于性能原因异步创建的,并指示文件是否在加载后被删除。

事件 ID 7:已加载图像

在特定进程中加载模块时,映像会加载事件日志。 此事件默认处于禁用状态,需要使用“”–l选项进行配置。 它指示模块的加载过程、哈希和签名信息。 签名是出于性能原因异步创建的,并指示文件是否在加载后被删除。 应仔细配置此事件,因为监视所有映像加载事件将生成大量日志记录。

事件 ID 8:CreateRemoteThread

当一个进程在另一个进程中创建线程时,该 CreateRemoteThread 事件将检测。 恶意软件使用此方法注入代码并隐藏在其他进程中。 事件指示源进程和目标进程。 它提供有关将在新线程中运行的代码的信息: StartAddressStartModuleStartFunction。 请注意, StartModuleStartFunction 字段是推断出的,如果起始地址在加载的模块或已知导出的函数之外,它们可能为空。

事件 ID 9:RawAccessRead

事件 RawAccessRead 检测进程何时使用 \\.\ 指示从驱动器执行读取操作。 此技术通常由恶意软件用于对锁定以供读取的文件进行数据外泄,以及避免文件访问审核工具。 事件指示源进程和目标设备。

事件 ID 10:ProcessAccess

进程访问事件报告进程打开另一个进程时,该进程通常会在随后执行信息查询或读取和写入目标进程的地址空间的操作。 这样就可以检测读取本地安全机构 (Lsass.exe) 等进程的内存内容的黑客工具,以便窃取凭据以用于哈希传递攻击。 如果存在可重复打开进程来查询其状态的诊断实用工具,则启用它可以生成大量日志记录,因此通常只应使用删除预期访问的筛选器来执行此操作。

事件 ID 11:FileCreate

创建或覆盖文件时,将记录文件创建操作。 此事件可用于监视自动启动位置(如 Startup 文件夹)以及临时目录和下载目录,这些目录是恶意软件在初始感染期间丢弃的常见位置。

事件 ID 12:RegistryEvent (对象创建和删除)

注册表项和值创建和删除操作映射到此事件类型,这对于监视注册表自动启动位置的更改或特定的恶意软件注册表修改非常有用。

Sysmon 使用以下映射的注册表根键名称的缩写版本:

项名 缩写
HKEY_LOCAL_MACHINE HKLM
HKEY_USERS HKU
HKEY_LOCAL_MACHINE\System\ControlSet00x HKLM\System\CurrentControlSet
HKEY_LOCAL_MACHINE\Classes HKCR

事件 ID 13:RegistryEvent (值设置)

此注册表事件类型标识注册表值修改。 事件记录为 和 QWORD类型的DWORD注册表值写入的值。

事件 ID 14:RegistryEvent (键和值重命名)

注册表项和值重命名操作映射到此事件类型,记录已重命名的项或值的新名称。

事件 ID 15:FileCreateStreamHash

此事件在创建命名文件流时进行记录,并生成事件,这些事件记录流 (未命名流) 分配给的文件内容的哈希,以及命名流的内容。 存在通过浏览器下载删除其可执行文件或配置设置的恶意软件变体,此事件旨在捕获基于浏览器附加 Zone.Identifier “Web 标记”流的恶意软件。

事件 ID 16:ServiceConfigurationChange

此事件记录 Sysmon 配置中的更改 - 例如,更新筛选规则时。

事件 ID 17:PipeEvent (Pipe Created)

此事件在创建命名管道时生成。 恶意软件通常使用命名管道进行进程间通信。

事件 ID 18:PipeEvent (Pipe Connected)

在客户端和服务器之间建立命名管道连接时,此事件将记录。

事件 ID 19:检测到 WmiEvent (WmiEventFilter 活动)

注册 WMI 事件筛选器(恶意软件用来执行的方法)时,此事件会记录 WMI 命名空间、筛选器名称和筛选器表达式。

事件 ID 20:检测到 WmiEvent (WmiEventConsumer 活动)

此事件记录 WMI 使用者的注册,记录使用者名称、日志和目标。

事件 ID 21:检测到 WmiEvent (WmiEventConsumerToFilter 活动)

当使用者绑定到筛选器时,此事件会记录使用者名称和筛选器路径。

事件 ID 22:DNSEvent (DNS 查询)

无论结果成功还是失败、缓存与否,进程执行 DNS 查询时都会生成此事件。 已为 Windows 8.1 添加了此事件的遥测,因此它在 Windows 7 及更早版本上不可用。

事件 ID 23:FileDelete (File Delete 存档)

文件已删除。 除了记录事件,已删除的文件还会保存在 ArchiveDirectory 默认 C:\Sysmon) (中。 在正常运行的情况下,此目录可能会增长到不合理的大小 - 有关类似行为,请参阅事件 ID 26: FileDeleteDetected 但不保存已删除的文件。

事件 ID 24:剪贴板更改 (剪贴板中的新内容)

当系统剪贴板内容发生更改时,将生成此事件。

事件 ID 25:ProcessTampering (Process 图像更改)

当检测到“空心”或“herpaderp”等进程隐藏技术时,将生成此事件。

事件 ID 26:FileDeleteDetected (文件删除记录)

文件已删除。

事件 ID 27:FileBlockExecutable

当 Sysmon 检测到并阻止创建可执行文件时,将生成此事件。

事件 ID 28:FileBlockShredding

当 Sysmon 检测到并阻止 SDelete 等工具的文件粉碎时,将生成此事件。

事件 ID 255:错误

当 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 标记上的 schemaversion 属性。 此版本独立于 Sysmon 二进制版本,并允许分析较旧的配置文件。 可以使用“”-? config命令行获取当前架构版本。 配置条目直接位于 标记下, Sysmon 筛选器位于 标记下 EventFiltering

配置条目

配置条目类似于命令行开关,包括以下项

配置条目包括:

条目 说明
ArchiveDirectory 字符串 卷根上的目录的名称,删除时复制文件将移动到其中。 目录受系统 ACL (你可以使用 Sysinternals 中的 PsExec 通过) 访问目录 psexec -sid cmd 。 默认:Sysmon
CheckRevocation Boolean 控制签名吊销检查。 默认:True
CopyOnDeletePE Boolean 保留已删除的可执行映像文件。 默认:False
CopyOnDeleteSDs 字符串 将为其保留文件删除的帐户 SID 的逗号分隔列表。
CopyOnDeleteExtensions 字符串 删除时保留的文件的扩展名。
CopyOnDeleteProcesses 字符串 将保留文件删除的进程名称 () 。
DnsLookup Boolean 控制反向 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 文件块粉碎

还可以在任务名称上的事件查看器中找到这些标记。

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>

可以对同一标记同时使用 include 和 exclude 规则,其中排除规则会替代 include 规则。 在规则中,筛选条件具有 OR 行为。

在前面显示的示例配置中,网络筛选器使用包含规则和排除规则来捕获除名称中包含进程以外的 iexplore.exe 所有进程到端口 80 和 443 的活动。

还可以通过使用规则组替代规则组合方式,该规则组允许将一个或多个事件的规则组合类型显式设置为 AND 或 OR。

下面的示例演示此用法。 在第一个规则组中,当 仅使用命令行参数 执行 时timeout.exe,将生成进程创建事件,但将为 终止 和 timeout.exe生成进程终止ping.exe100事件。

  <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)

运行时间:

  • 客户端:Windows 8.1 及更高。
  • 服务器:Windows Server 2012及更高。