Sysmon v15.14

通过 Mark Russinovich 和 Thomas Garnier

发布日期:2024 年 2 月 13 日

Download下载 Sysmon(4.6 MB)

下载适用于 Linux 的 Sysmon (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:进程已终止

进程终止事件报告进程的终止时间。 它提供进程的 UtcTimeProcessGuidProcessId

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

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

事件 ID 7:映像已加载

映像已加载事件记录特定进程中加载某个模块的时间。 此事件默认处于禁用状态,需要使用“–l”选项进行配置。 它指示模块在哪个进程中加载、哈希,以及签名信息。 出于性能,签名以异步方式创建,指示加载后文件是否被删除。 应小心配置此事件,因为监视所有映像加载事件会产生大量日志记录。

事件 ID 8:CreateRemoteThread

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

事件 ID 9:RawAccessRead

RawAccessRead”事件检测进程使用“\\.\”本意从驱动器进行读取操作的时间。 恶意软件通常使用这种方法让已锁定不许读取的文件发生数据泄露,以及避开文件访问审计工具。 此事件指示源进程和目标设备。

事件 ID 10:ProcessAccess

已访问进程事件报告一个进程打开另一个进程的时间,一项操作通常后跟信息查询,或读取写入目标进程的地址空间。 这样就可以检测在哈希传递攻击中为了窃取要使用的凭据,读取本地安全机构 (Lsass.exe) 等进程的内存内容的黑客工具。 如果有诊断实用工具反复打开进程来查询其状态,则启用此事件会产生大量日志记录。因此,一般而言应该仅使用移除预计的访问的筛选器来完成此操作。

事件 ID 11:FileCreate

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

Event 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(值设置)

此注册表事件类型识别注册表值修改。 此事件记录为类型 DWORDQWORD 的注册表值写入的值。

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

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

事件 ID 15:FileCreateStreamHash

此事件记录创建已命名文件流的时间,并且会生成事件来记录将流(未命名的流)分配到的文件中的内容的哈希,以及已命名的流的内容。 有的恶意软件变体通过浏览器下载来放置其可执行文件或配置设置,此事件旨在根据浏览器附加 Zone.Identifier“Web 标记”流来捕获此类情况。

事件 ID 16:ServiceConfigurationChange

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

事件 ID 17:PipeEvent(管道已创建)

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

事件 ID 18:PipeEvent(管道已连接)

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

事件 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(文件删除已存档)

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

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

系统剪贴板内容发生变化时会生成此事件。

事件 ID 25:ProcessTampering(进程映像更改)

当检测到“空心”或“herpaderp”等进程隐藏手段时会生成此事件。

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

文件已删除。

事件 ID 27:FileBlockExecutable

当 Sysmon 检测并阻止创建可执行文件(PE 格式)时生成此事件。

事件 ID 28:FileBlockShredding

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

事件 ID 29:FileExecutableDetected

当 Sysmon 检测到新建可执行文件(PE 格式)时生成此事件。

事件 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 标记上的架构版本属性。 此版本独立于 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.exetimeout.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>

Download下载 Sysmon(4.6 MB)

运行软件:

  • 客户端:Windows 10 及更高版本。
  • 服务器:Windows Server 2016 及更高版本。