乐于分享
好东西不私藏

【Sysmon社区指南】安装与配置Windows Sysmon

【Sysmon社区指南】安装与配置Windows Sysmon

Windows上,Sysmon的安装与配置都是通过命令行来完成的。

通过命令行使用Sysmon时,Sysmon遇到任何问题都会显示错误信息和基本的帮助信息。

如果只查看Sysmon工具的帮助信息,可以使用 “-?” 开关参数。这些帮助信息将包括:

  • 安装、配置和卸载参数集
  • 常见的命令行参数。
  • 关于该工具的工作原理的一般说明以及获取更多帮助信息的详细信息。

工具的参数和XML配置文件的结构在工具Schema中定义。该模式可以通过 -s “PrintSchema” 参数打印;如果没有提供模式版本,它会打印默认模式。

该工具可运行四种模式;帮助信息中展示了其中3种:

  • 安装——在主机上安装驱动程序、清单和服务。
  • 配置——解析给定的配置文件或命令行参数,生成存储在注册表中的配置。
  • 卸载——从主机上移除驱动程序和服务。

半隐藏且未公开的方法是调试,通过解析指定配置,并在控制台中显示实时事件。

启动 Sysmon 安装模式的关键参数是 -i 开关。安装流程如下:

  • 解压并保存驱动和自身副本到      %systemroot%
  • 注册表事件日志清单
  • 创建服务
  • 如果未传递使用 -c      <配置文件>参数的配置文件,则启用默认配置(ProcessCreation、ProcessTermination、DriverLoad、FileCreationTimeChanged、SHA1 算法)

安装过程允许使用一些模糊手段,防止高级攻击者可以简单地禁用、规避或绕过Sysmon工具:

  • Sysmon驱动名称可以更改
  • Sysmon服务名称可以更改
  • Sysmon 二进制文件名称可以重命名。

这些混淆更改还会影响驱动程序和进程服务密钥的注册表路径。所有混淆方法都包含在安装选项集中。

安装选项包括:

  • 默认——驱动程序已安装,命名为SysmonDrv,服务为Sysmon
sysmon.exe --i --accepteula
  • 重命名驱动——驱动文件和注册表条目被重命名。名字有8个字符限制。
sysmon.exe -i -d <drivername>
  • 重命名服务——可执行文件名定义了服务名称。
<renamedsysmon>.exe -i -d <drivername>

下面展示了一个带有名为 sysmon.exe 的二进制版本的 x64 系统上的安装过程,该系统旨在跨 x64 和 x86 架构运行。这很重要,因为某些操作可能导致混乱或触发监控系统的警报。

在模糊驱动名称和服务名称时,需要记住的一点是某些特征保持不变。

  • 服务描述保持不变。(安装后可以进行修改。)
  • 驱动的高度数(Altitude)保持不变。
  • 事件日志保持不变,以免破坏 SIEM 产品的收集。
x86版本安装流程:
x64版本安装流程:

Sysmon 将创建两个注册表键,用于定义其在 HKLM\SYSTEM\CurrentControlSet\Services 下运行的服务

  • Sysmon -  与驱动通信并执行过滤操作的服务。它与 Sysmon 可执行文件同名。
  • SysmonDrv - 内核驱动服务,该服务以高度数 385201 加载 Sysmon 驱动

每个服务的设置如下:

主要服务:

  • 名称:可执行文件名称(默认 Sysmon 或 Sysmon64)
  • 登录:本地系统
  • 描述:系统监控服务
  • 启动:自动
  • ImagePath: %windir%\<可执行文件名称>

驱动服务:

  • 名称:SysmonDrv, 可以使用 “-d <name>”来模糊驱动名称
  • 登录:本地系统
  • 描述:系统监控驱动
  • 启动:自动
  • ImagePath:<驱动名称>.sys
如果需要设置初始配置,安装时可以传递XML配置文件。这是生产系统的首选方法,因为配置文件可以覆盖所有类型和逻辑。最常用的方法是通过 -c <config file> 参数传递配置文件。
sysmon.exe -i --accepteula -c <config file>

可以通过配置文件中的"<ArchiveDirectory>"元素来指定Sysmon服务在该目录中归档已删除的文件。Sysmon缺省会使用每个卷下的Sysmon文件来做为归档目录。

我们可以控制用于哈希图像事件的哈希算法,也可以控制签名撤销的检查。

哈希算法或它们的组合可以用 -h <sha1|sha2|md5|imphash|*> 这些算法将用于对所有图像进行哈希。

sysmon.exe -i -c -h <sha1|sha2|md5|imphash\|*>

我们可以用 -r 参数指定检查证书是否被撤销。

sysmon.exe -i -c -r

某些基本过滤也可以从命令行完成。通过命令行,NetworkConnect、ImageLoad 和 ProcessAccess 只能通过进程名称进行过滤。

  • NetworkConnect -   跟踪网络连接。
sysmon.exe -i -c -n [<process,...>]
  • ImageLoad - 进程加载DLL的事件。
sysmon.exe -i -c -l [<process,...>]
  • ProcessAccess - 内存被访问的进程。
sysmon.exe -i -c -k [<process,...>]

卸载 Sysmon 时,如果重命名,必须运行与主服务同名的二进制文件,并使用 -u 参数。

sysmon.exe -u

运行后,该命令会执行一系列步骤,卸载服务、驱动程序并删除工具文件。

-u参数可以传递一个未公开的参数值“force”,即使无法停止服务,也可以强制移除这些服务。

sysmon.exe -u force

部署Sysmon工具时,可用以协助并降低风险的最佳安装实践包括:

  • 归档保存Sysmon版本
  • Sysmon      的配置非常依赖于二进制版本。安装/升级脚本应该检查二进制版本是否:
    • 升级
    • 应用初始配置的版本
  • 如果使用 GPO      来计划推送升级或配置,应使用 WMI 过滤器来对特定版本进行测试。示例:
SELECT * FROM CIM_Datafile WHERE (Name="c:\\Windows\\Sysmon64.exe" OR Name="c:\\Windows\\Sysmon.exe"AND version="10.0.4.1"
  • 检查文件版本是否与发布版本不匹配。
  • 最好不要将运行于共享或者磁盘随时抛弃的XML配置进行推送:
    • 对于文件删除的计划任务,遗留的凭证可以通过DPAPI恢复,。
    • 如果控制设置不当,攻击者可以更容易读取该文件
    • 人为错误的可能性更高
    • 更好的做法是通过GPO或其他带有文件版本检查的方法推送数值。